環境定義給出錯誤

環境定義給出錯誤
\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*在文件中使用,你必須載入。

而且, 的可用空間minipageis\linewidth和 not \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

相關內容