환경 정의에서 오류가 발생합니다.

환경 정의에서 오류가 발생합니다.
\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*

게다가 minipageis \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

관련 정보