\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:
Zunächst müssen Sie es laden, wenn Sie es in Ihrem Dokument amsmath
verwenden möchten .align*
minipage
Darüber hinaus beträgt der verfügbare Platz für \linewidth
und 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 myenv
lautet die Befehlsform der Umgebung
\myenv % same as \begin{myenv}
\endmyenv % same as \end{myenv}
\begin{minipage}
In Ihrem Fall habe ich durch \minipage
und \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@ne
und \end{align*}
durch ersetzt \endalign
.
Beachten Sie, dass Sie, wie egreg in seinem Kommentar erläutert, \start@align\@ne\st@rredtrue\m@ne
durch ersetzen können \@nameuse{align*}
, wobei es sich um einen Wrapper für handelt \csname align*\endcsname
.