有什么方法可以知道方程编号是多少吗?

有什么方法可以知道方程编号是多少吗?

假设我正在编写一个 LaTeX 文档来描述一些代码,并且我想在代码中引用文档中的特定方程编号。有没有一种自动的方法可以确定将分配给哪个方程编号 \label{eqn:myequation}

编写一个程序来解析源代码并用 pdflatex 分配给该标签的当前数字替换注释中的公式标签将会很好。

答案1

这可能适合你的用途,也可能不适合,因为它不会在物理上改变你的代码文件。(它保留\label代码中的 s,而不是用数字替换它们。)但有几种方法可以做到这一点,使用listings软件包的 LaTeX 功能转义。其他代码漂亮打印软件包也有类似的功能,但我用它作为示例,listings因为它是最普遍的。

您可以Eq.~\ref{eqn:foo}在注释中直接使用,并告诉 listings 包在一组任意分隔符之间转义为 LaTeX 代码(如第一个示例中所示,使用|),或者将所有注释行视为转义的 LaTeX 代码,如第二个示例中所示。

总体思路如下:

\documentclass{article}
\usepackage{listings}
\lstset{language=c}

\begin{document}
My code implements
\begin{equation}\label{eq:energy}
e = mc^2,
\end{equation}
which describes the relationship between mass and energy.
The code is displayed in Listing~\ref{lst:func}.
\begin{lstlisting}[
  caption={Test function.},
  label={lst:func},
  escapechar=|,% <-- for escaping to LaTeX inside comments
]
double NucEnergy(double mass){
    /* here I have |\itshape Eq.~\ref{eq:energy}| of the text */
    < ... code omitted ... >
}
\end{lstlisting}

Another option, where all comment lines are parsed as \LaTeX\ input:
\begin{lstlisting}[
  caption={Another test function.},
  label={lst:func2},
  texcl=true,%<-- to treat all comment lines as escaped LaTeX
]
double NucEnergy(double mass){
    // here I have Eq.~\ref{eq:energy} of the text
    < ... code omitted ... >
}
\end{lstlisting}
\end{document}

在此处输入图片描述

请注意,在第一个例子中,我们完全负责文本样式(注释\itshape),而在第二个例子中,自动使用默认注释样式。

答案2

谢谢您提供的有趣例子,保罗。

看来 Ethan 关于 .aux 文件的建议正是我想要的。我承认我已经使用 LaTeX 大约 13 年了,但之前从未真正看过 .aux 文件。

在我当前的文档中,我有一个等式

\begin{equation}
\min_{\psi,\mathcal{E}} -|\langle \psi(T)|f\rangle|^2 +\frac{\gamma}
{2}\|\mathcal{E}\|^2
\label{eqn:state_equation}
\end{equation}

.aux 文件包含一行

\newlabel{eqn:state_equation}{{1}{1}{}{equation.0.1}{}}

我可以看到,在 .pdf 中这确实是公式 1,因此看起来第一组花括号的内容是指定的数字,而从另一个示例中,页码似乎在第二个 {} 中,包含子部分的名称出现在第三个 {} 中。

现在我可以编写一个文本解析器,它将读取我的源代码并创建一个分发版本,其中 eqn:state_equation 被 (1) 替换。

非常感谢您的建议!

相关内容