Die Umgebungsdefinition gibt einen Fehler aus

Die Umgebungsdefinition gibt einen Fehler aus
\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 sagt mir: „ \begin{align*} on input line 511 ended by \end{enumalign}.Es scheint etwas damit zu tun zu haben, wie LaTeX meinen Code interpretiert und Makros ersetzt – aber ich habe es nicht richtig hinbekommen.“

Antwort1

Dies ist der richtige Code:

\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} 

Ausgabe:

Bildbeschreibung hier eingeben

Zunächst müssen Sie es laden, wenn Sie es in Ihrem Dokument amsmathverwenden möchten .align*

minipageDarüber hinaus beträgt der verfügbare Platz für \linewidthund nicht \textwidth, also habe ich es geändert.

Versuchen Sie nun herauszufinden, warum dieser Fehler auftritt. Verschachtelte Umgebungen verursachen häufig Fehler wie den, den Sie haben. Um dies zu umgehen, müssen Sie die Befehlsform der Umgebung verwenden (Beginn und Ende).

Beispielsweise myenvlautet die Befehlsform der Umgebung

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

\begin{minipage}In Ihrem Fall habe ich durch \minipageund \end{minipage}durch ersetzt \endminipage.

Über align*(da es sich um die mit Sternchen versehene Form handelt), wenn Sie einen Blick auf die Definition der align*Umgebung in werfen amsmath.sty, werden Sie sehen

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

also habe ich \begin{align*}durch \start@align\@ne\st@rredtrue\m@neund \end{align*}durch ersetzt \endalign.

Beachten Sie, dass Sie, wie egreg in seinem Kommentar erläutert, \start@align\@ne\st@rredtrue\m@nedurch ersetzen können \@nameuse{align*}, wobei es sich um einen Wrapper für handelt \csname align*\endcsname.

verwandte Informationen