假设我定义了两个命令,例如
\newcommand{\commandA}{\alpha}
\newcommand{\commandAB}{\alpha^2}
我想定义一个命令,\commandA
通过\commandAB
简单地将字母 B 添加到此命令中,以便输出为
\endswithB{\commandA}=\commandAB
我天真地尝试定义
\endswithB{\desiredcommand}[1]{#1B}
仅生产\endswithB{\commandA}={\commandA}B
。
为了提供背景信息,我有一组大约三十个命令用于某些数学符号。这些命令都是这样的形式\commandA
。我有一组相关的命令用于一组相关的符号,因此所有这些命令都与前面的命令完全相同,但末尾多了一个字母 B,即\commandAB
(但它们产生的符号完全不同)。目前有些情况下我不确定我到底想使用哪个符号,所以我更希望现在只使用一个命令来处理这些情况
\newcommand{\unsure}[1]{#1}
我稍后可以简单地改为
\newcommand{\unsure}[1]{\endswithB{#1}}
如果我决定那样更好。
答案1
不确定这是否是您想要的,但它可以正常工作。
\documentclass{article}
\makeatletter
\newcommand{\withB}[1]{\csname\expandafter\@gobble\string#1B\endcsname}
\makeatother
\newcommand{\fooA}{A}
\newcommand{\fooAB}{B}
\begin{document}
\withB{\fooA}
\end{document}
答案2
\documentclass{article}
\newcommand{\commandA}{\alpha}
\newcommand{\commandAB}{\alpha^2}
%\newcommand{\unsure}[1]{#1}% this is easy
\newcommand{\unsure}[1]{\EndsWithB{#1}}
\ExplSyntaxOn
\NewDocumentCommand{\EndsWithB}{m}
{
\use:c { \cs_to_str:N #1 B }
}
\ExplSyntaxOff
\begin{document}
$\commandA$
$\commandAB$
$\unsure{\commandA}$
\end{document}
你\use:c
告诉 LaTeX 从它的参数中形成一个命令名,该参数去掉\EndsWithB
反斜杠并在B
其后附加一个。