对齐列表中的方程式

对齐列表中的方程式
  1. 我想要一个方程式列表(最好使用 enumitem 的枚举环境),例如按等号对齐。有办法实现吗?

    下面生成了未对齐的方程式列表:

    \begin{enumerate}
      \item $a=b$
      \item $c+d=e$
    \end{enumerate}
    

    我希望它们对齐

    \begin{align*}
        a &= b \\
      c+d &= e
    \end{align*}
    

    但编号与 产生的标签间距相同enumerate

  2. 如果可能的话,我还想知道如何让它们尽可能地靠左(而不是由align*环境产生的居中)。在上面的例子中,这意味着第二个等式(即“c+d=e”)的排版将与使用时完全一致enumerate,并且第一个等式将与其对齐。

  3. 最后,尽管有些不谦虚,但我希望能够在内联样式和显示样式之间进行选择。

答案1

我建议使用提供的功能eqparbox。具体来说,\eqparbox[<tag>][<align>]{<stuff>}将设置<stuff>在一个具有最大宽度的框中<tag>,并附加一个<align>ment 规范(left、center/default 或right)。经过轻微修改以适应数学模式,\eqmathbox下面定义的操作相同:

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath,eqparbox}

% https://tex.stackexchange.com/a/34412/5764
\makeatletter
\NewDocumentCommand{\eqmathbox}{o O{c} m}{%
  \IfValueTF{#1}
    {\def\eqmathbox@##1##2{\eqmakebox[#1][#2]{$##1##2$}}}
    {\def\eqmathbox@##1##2{\eqmakebox{$##1##2$}}}
  \mathpalette\eqmathbox@{#3}
}
\makeatother

\begin{document}

\begin{enumerate}
  \item
  $\eqmathbox[LHS][r]{a} = b$
  
  \item
  $\eqmathbox[LHS]{c + d} = e$
\end{enumerate}

\end{document}

背后的原理是在处理整个文档后eqparbox存储文件中最大元素的宽度。然后在后续编译期间读取该宽度,将元素设置在适当大小(最大)的框内。由于它使用for 处理,因此每次更改 的最宽元素时都需要至少两次编译。.aux.aux.aux<tag>

答案2

该解决方案(受到 TeXbook 附录 D 中的代码启发)首先使用 排版公式\halign,然后解包\hbox这样生成的 es,将每个\hbox内容放在 之后\item

\def\itemize{\unskip\setbox0=\lastbox
  \ifhbox0{\itemize}\item\unhbox0 \fi}
\begin{enumerate}
\vbox{\halign{\hfil$#$&${}#$\hfil\cr
  a&=b\cr
  c+d&=e\cr
}\itemize}
\end{enumerate}

在此处输入图片描述

\vbox是必需的,因为\lastbox不能在主垂直列表上使用。

为了实现displaystyle,将\halign第四行的模板替换为\hfil$\displaystyle#$&$\displaystyle{}#$\hfil

相关内容