新命令内的 & 符号,对齐环境

新命令内的 & 符号,对齐环境

我正在尝试缩短使用变量编写数学公式的时间,因此所需的步骤之一是在第一个=符号处拆分方程字符串,并&在其前面放置一个符号以进行对齐。除了我在字符串的第二部分之前放置实际的 & 符号外,这种方法效果很好。如果我手动添加第二个字符串,它可以与 & 符号一起使用。请参阅我的示例,其中包含注释掉的代码。我该如何理解这一点?

\documentclass[11pt]{article}
\usepackage{xstring,amsmath}

\newcommand{\splitEquals}[1]{%
\StrCut{#1}{=}{\macroA}{\macroB}%
%enable only one at a time:
%\macroA&=3+4       %works
%\macroA&=\macroB   %doesn't work
\macroA=\macroB     %works
}
\begin{document}
%\splitEquals{d=3+4}
\begin{align*}
    \splitEquals{d=3+4}
\end{align*}
\end{document}

编辑:splitEquals 的结果应为:d&=3+4,这样可以很好地对齐。我不需要任何行尾。

答案1

这里的问题是,宏\macroA\macroB是在环境的“第一个单元格”内创建的align,但随后在跨“多个单元格”的构造中使用。左侧(第一个)单元格是\macroA,右侧是= \macroB。宏创建不会在当前单元格之外继续存在,因为定义是本地的(或在该组内)。

您可以通过将其设为全局来纠正此问题。这是一种使用 的非常快捷的方法\xdef,尽管其他方法也是可行的:

\documentclass{article}
\usepackage{xstring,amsmath}

\newcommand{\splitEquals}[1]{%
  \StrCut{#1}{=}{\macroA}{\macroB}%
  \xdef\macroB{\macroB}% Make \macroB global
  \macroA &= \macroB
}

\begin{document}

\begin{align*}
  \splitEquals{d=3+4}
\end{align*}

\end{document}

一个xstring-自由选择可能是

\makeatletter
\newcommand{\splitEquals}[1]{\expandafter\splitEqu@ls#1}
\def\splitEqu@ls#1=#2{#1 &= #2}
\makeatother

使用参数分隔符在=符号处断开。

相关内容