定义一个向另一个命令添加字母的命令

定义一个向另一个命令添加字母的命令

假设我定义了两个命令,例如

\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其后附加一个。

相关内容