错误缺失 } 并插入 align*

错误缺失 } 并插入 align*

编辑:鉴于评论,我将从头重写我的问题并提供解决方案。这对某些人可能有用。

missing } inserted end{align*}如果我使用以下代码,我会收到错误

\documentclass[11pt,openany]{book}

\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{lipsum}


\newbox\savedeqs %% <- box register that will store your equations
\makeatletter %% <- change @ so that it can be used in command names
\newcommand\saveandprinteq[1]{% %% <- saves equation in a box register, then prints it
  \begingroup
    \expandafter\let\csname \@currenvir\expandafter\endcsname\csname listeq@\@currenvir\endcsname
    \expandafter\let\csname end\@currenvir\expandafter\endcsname\csname listeq@end\@currenvir\endcsname
    %% ^^ restore original environment definitions
    \edef\listeq@temp{% %% <- the full environment, with its original name
      \noexpand\begin{\@currenvir}%
        \unexpanded{#1}%
      \noexpand\end{\@currenvir}%
    }%
    \savecounters@ %% <- store counter values
      \global\setbox\savedeqs=\vbox{\unvbox\savedeqs\listeq@temp}% %% <- append to \savedeqs
    \restorecounters@ %% <- restore them
    \listeq@temp %% <- print the environment
  \endgroup
}
\newcommand*\listeqpatch[1]{% %% <- patches equation environment
  \expandafter\let\csname listeq@#1\expandafter\endcsname\csname #1\endcsname
  \expandafter\let\csname listeq@end#1\expandafter\endcsname\csname end#1\endcsname
  \renewenvironment{#1}{\collect@body\saveandprinteq}{}%
}
\newcommand\listofequations{ %% <- prints the list of equations
  \section*{List of equations}
  \unvbox\savedeqs
}
\makeatother %% <- change @ back

%% Patching equation environments
\listeqpatch{equation}
\listeqpatch{align}
\listeqpatch{gather}
\listeqpatch{multline}
\listeqpatch{flalign}

\begin{document}
\date{}

\frontmatter
\pagenumbering{arabic}

\begin{align*}
X:\: &\mathcal{F} \rightarrow I \subseteq \mathbb{R}  \tag{2.15} \label{eq2.15}\\
& E \rightarrow x = X(E)  \tag{2.16} \label{eq2.16}
\end{align*}

\listofequations

\end{document}

后面的部分\usepackage{lipsum}取自另一个帖子(自动列出文档中的所有方程式) 并允许提供文中写的方程式列表。

我注意到,在上述部分中有一个带有 的部分\listeqpatch{align}。如果我将其替换为,\listeqpatch{align*}则错误消失。

答案1

该错误是由于例程尝试列出某些类型的所有项目而产生的。

align类型是通过代码引用的\listeqpatch{align},但我使用环境的方式align是通过

\begin{align*}

Write equation here

\end{align*}

列表例程无法识别它并导致编译错误。

\listeqpatch{align}如果我从代码中删除该行或者用 替换它,错误就会消失\listeqpatch{align*}

但我仍然不明白为什么会出现此编译错误。我注意到,该equation环境并未出现此错误。

相关内容