\list 环境中的 \noalign

\list 环境中的 \noalign

我正在使用列表环境来设置一些文本和方程式。方程式使用 flalign 显示(但后面的所有内容也适用于 align),并且它们与前后文本正确对齐。但如果我想在两行方程式之间引入一条线,使用\noalign,则插入的文本将完全向左刷新,并且左边距将被忽略:

\documentclass[a4paper, 11pt]{article}

\usepackage{amsmath}

\begin{document}

\begin{list}{(a)}{%
  \settowidth{\leftmargin}{(m)}%
  \labelwidth\leftmargin\advance\labelwidth-\labelsep%
  \partopsep=0pt%
  }
\item Some text to make a line for the first example, using
  \texttt{\textbackslash align}.
  \begin{flalign*}
    &x^2+y^2=a^2&&\\
    \noalign{\text{a comment}} &r^2=a^2&&
  \end{flalign*}
  And some text to close the whole thing.
\end{list}

\end{document}

得出: 在此处输入图片描述

我知道我可以解决这个问题,例如通过定义一个命令,比如\leftalign,在文本前面加上一个适当的\hspace,但我想知道是否有人可以向我解释为什么\noalign忽略了左边距设置。我确信我遗漏了一些可能很重要的东西,但我没有在任何地方找到解释。

答案1

作为芭芭拉建议的替代,在这里我使用了\rlap文本,并添加了一些垂直空间。

\documentclass[a4paper, 11pt]{article}

\usepackage{amsmath}

\begin{document}

\begin{list}{(a)}{%
  \settowidth{\leftmargin}{(m)}%
  \labelwidth\leftmargin\advance\labelwidth-\labelsep%
  \partopsep=0pt%
  }
\item Some text to make a line for the first example, using
  \texttt{\textbackslash align}.
  \begin{flalign*}
    &x^2+y^2=a^2&&\\[3pt]
    &\text{a comment}\\[3pt]
    &r^2=a^2&&
  \end{flalign*}
  And some text to close the whole thing.
\end{list}

\end{document}

在此处输入图片描述

答案2

可以\shortintertext(需要mathtools) 或\intertext(仅amsmath) 来做。您还可以利用 ,enumitem而不必手动进行所有计算list

\documentclass[a4paper, 11pt]{article}

\usepackage{amsmath,mathtools}
\usepackage{enumitem}
\usepackage{showframe}

\begin{document}

\begin{enumerate}[label=(\alph*),leftmargin=*,partopsep=0pt]
\item Some text to make a line for the first example, using
  \texttt{align}.
  \begin{flalign*}
  &x^2+y^2=a^2&&\\
  \shortintertext{a comment}
  &r^2=a^2&&
  \end{flalign*}
  And some text to close the whole thing.

\item Something else
\end{enumerate}

\end{document}

showframe加载该包只是为了显示文本区域的边界框。

在此处输入图片描述

不过,你需要注意,不同的文档类别可能具有非常不一样关于整个事情的想法。如果你变成articleamsart你会得到

在此处输入图片描述

你可以这样做nccmath

\documentclass[a4paper, 11pt]{article}

\usepackage{amsmath,mathtools}
\usepackage{enumitem}
\usepackage{nccmath}
\usepackage{showframe}

\begin{document}

\begin{enumerate}[label=(\alph*),leftmargin=*,partopsep=0pt]
\begin{fleqn}
\item Some text to make a line for the first example, using
  \texttt{align}.
  \begin{align*}
  &x^2+y^2=a^2 \\
  \shortintertext{a comment}
  &r^2=a^2
  \end{align*}
  And some text to close the whole thing.

\item Some text to make a line for the first example, using
  \texttt{align}.
  \begin{equation*}
  x^2+y^2=a^2
  \end{equation*}
  a comment
  \begin{equation*}
  r^2=a^2
  \end{equation*}
  And some text to close the whole thing.
\end{fleqn}
\end{enumerate}

\end{document}

在此处输入图片描述

amsart应该只改变\begin{fleqn}\begin{fleqn}[\leftmargin]得到

在此处输入图片描述

添加设置itemsep会更好。

相关内容