我有许多简短的方程式,我想将它们显示在两列中。本质上:
A = B (1) || C = D (2)
E = F (3)|| G = H (4)
我首先尝试了flalign
环境(我更喜欢这个align
,但这不是必需的),但我无法按照我想要的方式对方程进行编号。align
环境将每一行视为一个方程。
例子:
\documentclass{article}
\usepackage{mathtools}
\usepackage{amsmath}
\begin{document}
\begin{flalign}
A = & B & C = & D \\
E = & F & G = & H
\end{flalign}
\end{document}
另一种方法是使用简单的multicolumn
环境,强制分栏:
\documentclass{article}
\usepackage{mathtools}
\usepackage{amsmath}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
\begin{align}
A = & B \\
E = & F
\end{align}
\columnbreak
\begin{align}
C = & D \\
G = & H
\end{align}
\end{multicols}
\end{document}
然而存在多个问题:
- 这些方程式似乎垂直放置错误
- 编号是垂直的,而不是水平的(这对我来说是可以接受的)
我将非常感激任何对此提供帮助的帮助。
答案1
我认为,如果您打算稍后引用方程式,则应该对其进行编号,因此,按照这种理念,为什么不定义一个宏,既插入方程式编号又制作标签呢:
\newcommand\Label[1]{&\refstepcounter{equation}(\theequation)\ltx@label{#1}&}
这首先会增加equation
计数器,然后打印它,然后使用一些技巧来制作标签(当一行中出现多个标签时,amsmath 环境会打印错误消息,我们需要避开这一点)。因为 ' @
s ,所以这需要包装在 中\makeatletter...\makeatother
。
可能不太明智,我将 包括&
在宏中,因此隐式假设\Label
总是在类似环境的东西中使用align*
——请注意 ,*
因为您不希望环境给出额外的标签。另一方面,需要付出一些额外的努力才能避免align*
出现错误(因为align*
抑制了方程式编号),因此这个宏在 ams 对齐环境之外不起作用。
使用此宏可以得到:
完整代码如下:
\documentclass{article}
\usepackage{mathtools}
\usepackage{amsmath}
\makeatletter
\newcommand\Label[1]{&\refstepcounter{equation}(\theequation)\ltx@label{#1}&}
\makeatother
\begin{document}
\begin{align*}
A &= B \Label{one}& C &= D \Label{two}\\
E &= F \Label{three}& G &= H \Label{four}
\end{align*}
See equations \ref{one}, \ref{two}, \ref{three} and \ref{four}.
\end{document}
&
正如我上面所说,将两个放在宏中可能是不明智的,\Label
因为它隐藏了环境中的某些结构align*
,最终可能会使某些人感到困惑。
flalign*
顺便说一句,这对于环境同样有效。
答案2
我无法在答案中添加评论,因此我将其作为答案添加给遇到类似问题的其他人,并且\Label
仅使用首字母。
\tmpLabel
我已经使用原始添加了一个虚拟变量\def
,以便它可以在内部正确扩展\ltx@label
。
\makeatletter
\newcommand{\allignLabel}[1]{&\refstepcounter{equation}(\theequation)\def\tmplab{#1}\ltx@label\tmplab&}
\makeatother
我确信有一个更优雅的解决方案,因此请使用适当的解决方案来评论或编辑此答案。