我想重新定义align
和\align*
环境,以便第一行向上移动以与列表标识符对齐。我尝试调整提供的解决方案新环境中的星号对应项以及\NewDocumentEnvironment
from ,xparse
但无法使Ealign*
环境正常工作。注释掉\item
列表中的最后一个会产生:LaTeX 错误:环境 Ealign* 未定义。。
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage[shortlabels]{enumitem}
\usepackage{xparse}
\NewDocumentEnvironment{Ealign}{s}{%
\IfBooleanTF {#1}{%
\csname align*\endcsname\\[-8.6ex]%
}{%
\csname align\endcsname\notag\\[-8.6ex]%
}%
}{%
\IfBooleanTF {#1}{%
\csname endalign*\endcsname%
}{%
\csname endalign\endcsname%
}%
}%
\begin{document}
\begin{enumerate}[(a)]
\item
\begin{align}
a &= b\\
c &= d
\end{align}
%
\item
\begin{Ealign}
a &= b\\
c &= d
\end{Ealign}
\hrule%--------------------------
\item
\begin{align*}
a &= b\\
c &= d
\end{align*}
% Following yields: ! LaTeX Error: Environment Ealign* undefined.
%\item
%\begin{Ealign*}
% a &= b\\
% c &= d
%\end{Ealign*}
\end{enumerate}
\end{document}
顺便说一句,这个问题枚举中 align* 的垂直对齐与我在此尝试解决的问题直接相关。虽然该方法提供了一种看似相当复杂但自动化的校正对齐的方法,但它并未解决为和定义新环境的问题\align*
。\align
我可能会尝试将其合并到环境中Ealign
并消除使用 的黑客解决方案\\[-8.6ex]
,当包含诸如分数之类的内容时,该解决方案不起作用align
(因此需要手动指定空间值)。
答案1
我看不出硬编码垂直空间的意义。但是,无需xparse
尝试:
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage[shortlabels]{enumitem}
\makeatletter
\newenvironment{Ealign}
{\par\vspace{-8.6ex}
\align}
{\endalign}
\newenvironment{Ealign*}
{\par\vspace{-8.6ex}
\start@align\@ne\st@rredtrue\m@ne
}
{\endalign
}
\makeatother
\begin{document}
...