条件宏:如果包含 &,则为 A;否则为 B

条件宏:如果包含 &,则为 A;否则为 B

我想制作一个条件宏。我目前使用以下代码

\def\[#1\]{\begin{align*}#1\end{align*}}

因为我经常使用对齐,不想\begin{align*} ... \end{align*}每次都打字。(生活很艰难。)但是,当使用\qedhere(来自一个AMS包……?)时,它会将 QED 符号放在错误的位置:它与部分文本重叠,而不是向右对齐,例如写作

\[ a = b \qedhere \].

如果我在某处放置一个 & ,则不会发生这种情况,例如写作

\[ & a = b \qedhere \].

然而,我经常忘记这一点,这有点烦人。(再说一次,生活如此艰难......)

有什么方法可以让我做出以下定义吗?

if #1 includes a & sign, then define \[#1\] as {\begin{align*}#1\end{align*}}
otherwise, define \[#1\] as {\begin{equation*}#1\end{equation*}}

我正在使用以下包:amsmath, amsthm, amssymb, mathrsfs, xifthen

答案1

我认为这不是一个好主意,你也许应该正确输入你的东西。但下面的代码可以满足你的要求:

\documentclass[]{article}

\usepackage[]{amsmath}

\def\IfAmpersandUseAlign#1#2&#3\EndIfAmpersandUseAlign%
  {%
    \if\relax\detokenize{#3}\relax
      \begin{equation*}%
        #1%
      \end{equation*}%
    \else
      \begin{align*}%
        #1%
      \end{align*}%
    \fi
  }
\def\[#1\]%
  {%
    \IfAmpersandUseAlign{#1}#1&\EndIfAmpersandUseAlign
  }

\begin{document}
\[
  This &= is + a + bad + idea\\
       &=really + it + is
\]
\[
  This = is + a + bad + idea\\
       =really + it + is
\]
\end{document}

输出(如您所见,第二行没有换行,因为它不在里面align*):

在此处输入图片描述

相关内容