我想声明一系列命令,\SA...\SZ
如下图所示这里-- 我想避免\loopS
使用附加命令。但是,将两行(L1 和 L2)合并为一行(L3)并不奏效:当我调用时,例如,\SA
它输出$\mathcal{Z}$
为,我猜,这是最后存储在循环变量中的值\X
。有解决办法吗?
\documentclass{article}
% \def\loopS#1{\expandafter\def\csname S#1\endcsname{\mathcal{#1}}} (L1)
\newcounter{ctr}
\loop
\stepcounter{ctr}
\edef\X{\Alph{ctr}}
%\expandafter\loopS\X (L2)
\expandafter\def\csname S\X\endcsname{\mathcal{\X}} %(L3)
\ifnum\thectr<26
\repeat
\begin{document}
$\SA$
\end{document}
答案1
您需要\edef
;\edef\X{\Alph{ctr}}
不需要该步骤。
\documentclass{article}
\newcounter{ctr}
\loop
\stepcounter{ctr}
\expandafter\edef\csname S\Alph{ctr}\endcsname{\noexpand\mathcal{\Alph{ctr}}}
\ifnum\thectr<26
\repeat
\begin{document}
$\SA$
\end{document}
免费解决方案\edef
:
\documentclass{article}
\count255=`A \advance\count255 -1
\loop
\advance\count255 1
\begingroup\uccode`A=\count255
\uppercase{\endgroup
\expandafter\def\csname SA\endcsname{\mathcal{A}}%
}
\ifnum\count255<`Z
\repeat
\begin{document}
$\SA$
\end{document}
解决方案expl3
:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\int_step_inline:nnnn { 1 } { 1 } { 26 }
{
\cs_new:cpx { S\int_to_Alph:n {#1} } { \exp_not:N \mathcal{ \int_to_Alph:n { #1 } } }
}
\ExplSyntaxOff
\begin{document}
$\SA$ $\SZ$
\end{document}