环境定义给出错误

环境定义给出错误
\documentclass{scrreprt}

\usepackage{fontspec}
\setmainfont{Linux Libertine O}

\usepackage{graphicx}

\usepackage{polyglossia}
\setdefaultlanguage[babelshorthands=true]{german}

% align in enumerate
\newenvironment{enumalign}[1][\textwidth]%
{\item \begin{minipage}[t]{#1} \vspace{-5.375ex} \begin{align*}}
{\end{align*} \end{minipage}}

\renewcommand*\thechapter{\arabic{chapter}}

\usepackage{color}

\newcommand*\defin[1]{\textcolor{red}{#1}}

\begin{document}

\begin{enumerate}
\begin{enumalign}
test
\end{enumalign}
\end{enumerate}

\end{document}

LaTeX 告诉我\begin{align*} on input line 511 ended by \end{enumalign}.这似乎与 LaTeX 如何解释我的代码和替换宏有关 - 但我无法正确理解。

答案1

这是正确的代码:

\documentclass{scrreprt}

\usepackage{amsmath}

\usepackage{fontspec}
\setmainfont{Linux Libertine O}

\usepackage{graphicx}

\usepackage{polyglossia}
\setdefaultlanguage[babelshorthands=true]{german}

% align in enumerate
\makeatletter
\newenvironment{enumalign}[1][\linewidth]%
{\item\minipage[t]{#1}\vspace{-5.375ex}\start@align\@ne\st@rredtrue\m@ne}
{\endalign\endminipage}
\makeatother

\renewcommand*\thechapter{\arabic{chapter}}

\usepackage{color}

\newcommand*\defin[1]{\textcolor{red}{#1}}

\begin{document}

\begin{enumerate}
\begin{enumalign}
test
\end{enumalign}
\end{enumerate}

\end{document} 

输出:

在此处输入图片描述

首先,amsmath如果您想align*在文档中使用,您必须加载。

此外, 的可用空间是minipage\linewidth不是\textwidth,所以我更改了它。

现在,试着看看为什么会出现这个错误。嵌套环境经常会导致类似这样的错误。为了避免这种情况,您必须使用环境的命令形式(开始和结束)。

例如,环境的命令形式myenv

\myenv     % same as \begin{myenv}
\endmyenv  % same as \end{myenv}

对于您来说,我已经\begin{minipage}\minipage和替换\end{minipage}\endminipage

关于align*(带星号的形式),如果你看一下align*中的环境定义amsmath.sty,你会看到

\newenvironment{align*}{%
  \start@align\@ne\st@rredtrue\m@ne
}{%
  \endalign
}

因此,我用\begin{align*}\start@align\@ne\st@rredtrue\m@ne代替\end{align*}\endalign

请注意,正如 egreg 在其评论中指出的那样,您可以用 替换\start@align\@ne\st@rredtrue\m@ne\@nameuse{align*}它是 的包装器\csname align*\endcsname

相关内容