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