![A definição do ambiente dá um erro](https://rvso.com/image/281483/A%20defini%C3%A7%C3%A3o%20do%20ambiente%20d%C3%A1%20um%20erro.png)
\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}
O LaTeX está me dizendo \begin{align*} on input line 511 ended by \end{enumalign}.
que parece ter algo a ver com a forma como o LaTeX interpreta meu código e substitui macros - mas não consegui acertar.
Responder1
Este é o código correto:
\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}
Saída:
Primeiro de tudo, você tem que carregar amsmath
se quiser usar align*
no seu documento.
Além disso, o espaço disponível para o minipage
é \linewidth
e não \textwidth
, então mudei.
E agora, tente ver por que você recebeu esse erro. Ambientes aninhados geralmente causam erros como o que você possui. Para contornar isso, você deve usar a forma de comando do ambiente (início e fim).
Por exemplo, a forma de comando do ambiente myenv
é
\myenv % same as \begin{myenv}
\endmyenv % same as \end{myenv}
No seu caso, substituí \begin{minipage}
por \minipage
e \end{minipage}
por \endminipage
.
Sobre align*
(sendo a forma com estrela), se você der uma olhada na definição do align*
ambiente em amsmath.sty
, verá
\newenvironment{align*}{%
\start@align\@ne\st@rredtrue\m@ne
}{%
\endalign
}
então, substituí \begin{align*}
por \start@align\@ne\st@rredtrue\m@ne
e \end{align*}
por \endalign
.
Observe que, como egreg aponta em seu comentário, você pode substituir \start@align\@ne\st@rredtrue\m@ne
por \@nameuse{align*}
, que é um wrapper para \csname align*\endcsname
.