定义自定义 align 和 align* 环境

定义自定义 align 和 align* 环境

我想重新定义align\align*环境,以便第一行向上移动以与列表标识符对齐。我尝试调整提供的解决方案新环境中的星号对应项以及\NewDocumentEnvironmentfrom ,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}
...

相关内容