有没有办法创建一个命令,将其添加到表格中,或者在用户指定的位置进行排版?我想要的示例
\documentclass{article}
\begin{document}
\tableofequations
\begin{equation}
e^{i\pi} = -1
\end{equation}\rememberequation{e^{i\pi}=-1}{Euler's Equation}
\end{document}
命令\tableofequations
将渲染类似
%with \usepackage{array}
\begin{center}
\begin{tabular}{m{0.3\linewidth} m{0.3\linewidth} m{0.3\linewidth}}
Equation & Name & Page \\\hline
\[e^{i\pi} = -1\] & Euler's Equation & Page 1\\\hline
\end{tabular}
\end{center}
我想要的效果是几乎一模一样 记录在这个答案中唯一的区别是可以在显示方程之前放置方程表(就像图表在排版之前显示标题一样)。可能通过辅助文件来实现,尽管我几乎不知道它们是如何工作的。
答案1
此代码使用.aux
文件来存储相关信息。\rememberequation
排版并保存公式。第二次运行时,数据会自动在文档开头读入,构建(一个长)宏\listofequations
,然后使用它\tableofequations
来排版表格(在文档中的任何位置)。
\documentclass{article}
\usepackage{etoolbox}
\makeatletter
\newcommand\rememberequation[2]{%
\begin{equation}#1\end{equation}%
\protected@write\@mainaux{}
{\detokenize{\gappto\listofequations}{%
(\theequation)&
\detokenize{$#1$}&
\detokenize{#2}&
\thepage\\
}%
}%
}
\makeatother
\newcommand\tableofequations{%
\preto\listofequations{%
\begin{tabular}{cccc}
\#&Equation&Name&Page\\\hline
}%
\appto\listofequations{%
\hline
\end{tabular}
}%
\begin{center}
\listofequations
\end{center}
}
\begin{document}
\tableofequations
\rememberequation{e^{i\pi}=-1}{Euler's Equation}
\rememberequation{e^{i\pi}=-1}{Euler's Equation, again}
\newpage
\rememberequation{e^{i\pi}=-1}{Euler's Equation, yet again}
\end{document}
编辑:评论中要求的花哨版本
因此,我们的想法是在通常的equation
环境中编写方程式,并通过触发“记忆”代码\caption
。 (我相信\caption
这是比更好的选择\label
。)
在代码之前,有一个免责声明。这是一个 hack。我不知道它与某些包结合可能会造成什么麻烦...
\documentclass{article}
\usepackage{etoolbox}
\usepackage{environ}
\makeatletter
\AtBeginEnvironment{equation}{%
\Collect@Body\rememberequation
}
\newtoks\currentequation
\def\rememberequation#1{%
\typeout{DEBUG: \detokenize{#1}}%
% #1 starts with \csname equation\endcsname
\expandafter\currentequation\expandafter{#1}%
\let\caption\storecurrentequation
#1%
}
\def\storecurrentequation#1{%
\protected@write\@mainaux{}%
{\detokenize{\gappto\listofequations}{%
(\theequation)&
$\expandafter\detokenize\expandafter{\the\currentequation}$&
\detokenize{#1}&% #1 = caption
\thepage\\
}%
}%
}
\newcommand\tableofequations{%
\preto\listofequations{%
\begin{tabular}{cccc}
\#&Equation&Name&Page\\\hline
}%
\appto\listofequations{%
\hline
\end{tabular}
}%
\begin{center}
\let\equation\relax
\let\label\@gobble
\let\caption\@gobble
\listofequations
\end{center}
}
\makeatother
\begin{document}
\tableofequations
\def\caption#1{}
\begin{equation}
\label{eq:1}
e^{i\pi}=-1
\caption{Euler's Equation}
\end{equation}
\begin{equation}
\label{eq:2}
e^{i\pi}=-1
\caption{Euler's Equation, again}
\end{equation}
\newpage
\begin{equation}
\label{eq:3}
e^{i\pi}=-1
\caption{Euler's Equation, yet again}
\end{equation}
\end{document}