我想制作一个条件宏。我目前使用以下代码
\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\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*
):