如何创建精美的方程式表(在文本中呈现方程式之前进行排版)

如何创建精美的方程式表(在文本中呈现方程式之前进行排版)

有没有办法创建一个命令,将其添加到表格中,或者在用户指定的位置进行排版?我想要的示例

\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}

相关内容