声明多个命令

声明多个命令

我想声明一系列命令,\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}

相关内容