![Определение среды выдает ошибку](https://rvso.com/image/281483/%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%D1%80%D0%B5%D0%B4%D1%8B%20%D0%B2%D1%8B%D0%B4%D0%B0%D0%B5%D1%82%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D1%83.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}
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
, поэтому я его изменил.
А теперь попробуйте понять, почему у вас эта ошибка. Вложенные среды часто вызывают ошибки, подобные той, что у вас. Чтобы обойти это, вам нужно использовать командную форму среды (begin и end).
Например, командная форма среды 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
.