![환경 정의에서 오류가 발생합니다.](https://rvso.com/image/281483/%ED%99%98%EA%B2%BD%20%EC%A0%95%EC%9D%98%EC%97%90%EC%84%9C%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A9%EB%8B%88%EB%8B%A4..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}
\begin{align*} on input line 511 ended by \end{enumalign}.
LaTeX는 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
is \linewidth
와 not 에 사용 가능한 공간이 \textwidth
있어서 변경했습니다.
이제 왜 해당 오류가 발생했는지 알아보십시오. 중첩된 환경으로 인해 발생한 것과 같은 오류가 발생하는 경우가 많습니다. 이를 방지하려면 환경의 명령 형식(시작 및 끝)을 사용해야 합니다.
예를 들어 환경의 명령 형식 myenv
은 다음과 같습니다.
\myenv % same as \begin{myenv}
\endmyenv % same as \end{myenv}
귀하 의 경우에는 \begin{minipage}
and \minipage
로 대체했습니다 \end{minipage}
.\endminipage
(별표 형식이므로)에 대한 환경 align*
정의를 살펴보면 다음을 알 수 있습니다.align*
amsmath.sty
\newenvironment{align*}{%
\start@align\@ne\st@rredtrue\m@ne
}{%
\endalign
}
그래서 나는 \begin{align*}
and \start@align\@ne\st@rredtrue\m@ne
로 대체 했습니다 \end{align*}
.\endalign
egreg가 그의 의견에서 지적했듯이 의 래퍼인 \start@align\@ne\st@rredtrue\m@ne
로 바꿀 수 있습니다 .\@nameuse{align*}
\csname align*\endcsname