编辑:鉴于评论,我将从头重写我的问题并提供解决方案。这对某些人可能有用。
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
环境并未出现此错误。