希望将模板文件exam-zh-symbols.sty
中使用expl3
实现重新定义\vec
命令的代码抽取出来,但在MWE
中无法正确显示.
下面是MWE,我不太确定是否是变量作用域的问题还是和\AtBeginDocument
这一hook
有点关系
这是原始exam-zh-symbols.sty
片段
% 向量 vec
\int_new:N \l__examzh_symbols_vec_input_count_int
\AtBeginDocument
{
\RenewDocumentCommand { \vec } { m }
{ \__examzh_symbols_vec:n {#1} }
}
\cs_new:Npn \__examzh_symbols_vec:n #1
{
% 先检测 #1 有多少个字符
\__examzh_symbols_vec_detect_number_of_input_str:n {#1}
% 只有 1 个的:加粗,多于两个的加箭头
\int_compare:nNnTF { \l__examzh_symbols_vec_input_count_int } = {1}
{ \symbfit {#1} }
{ \overrightarrow {#1} }
}
\cs_new:Npn \__examzh_symbols_vec_detect_number_of_input_str:n #1
{
\int_set:Nn \l__examzh_symbols_vec_input_count_int
{ \str_count:n { #1 } }
}
这是我测试的MWE
\documentclass{minimal}
\usepackage{ctex}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{unicode-math}
\ExplSyntaxOn
% 向量 vec
\int_new:N \l__examzh_symbols_vec_input_count_int
\RenewDocumentCommand { \vec } { m }
{ \__examzh_symbols_vec:n {#1} }
\cs_new:Npn \__examzh_symbols_vec:n #1
{
% 先检测 #1 有多少个字符
\__examzh_symbols_vec_detect_number_of_input_str:n {#1}
% 只有 1 个的:加粗,多于两个的加箭头
\int_compare:nNnTF { \l__examzh_symbols_vec_input_count_int } = {1}
{ \symbfit {#1} }
{ \overrightarrow {#1} }
}
\cs_new:Npn \__examzh_symbols_vec_detect_number_of_input_str:n #1
{
\int_set:Nn \l__examzh_symbols_vec_input_count_int
{ \str_count:n { #1 } }
检测到的字符数为~:~\int_use:N \l__examzh_symbols_vec_input_count_int.\par
}
\ExplSyntaxOff
\begin{document}
Inline Formula: the first vector:$\vec{a}$,the second vector:$\vec{AB}$ and the final vector:$\vec{abc}$.
Displaystyle Formula:
\[
\vec{A} \quad \vec{AB} \quad \vec{abc} \quad \symbfit{x} \quad \overrightarrow {1234}
\]
%测试 \__examzh_symbols_vec_detect_number_of_input_str:n 命令
\ExplSyntaxOn
\__examzh_symbols_vec_detect_number_of_input_str:n {1234eee}
\ExplSyntaxOff
\end{document}
附件压缩包如下
new-vec.zip