我有LaTeX
编号的定理,然后是 LateX 编号的定理内外的一些方程。
当我引用定理陈述中的方程时,LaTeX
指的是定理的编号而不是方程的编号。
\usepackage{amsmath}
\newtheorem{prop}[thm]{Proposition}
\begin{prop}
Blah is
\begin{equation}\label{eq:Blah}
B=L+a-H
\end{equation}
\end{prop}
From equation ~\ref{eq:Blah} we know blah blah blah.
假设命题数为4.1
,方程数为,12
那么我的文本捕捉的4.1
是 而不是12
。我并不特别关心捕捉的是哪个数字,只要它是一致的即可。这样阅读文本的人就能找到我所指的内容。
我怎样才能解决这个问题?
答案1
生成正确的引用标签分为两个步骤:
计数器使用 (计数器增量的“可引用”形式) 增加
\refstepcounter
。这通常在调用宏 (如\section
) 或环境时发生。以下是\refstepcounter
来自latex.ltx
:\def\refstepcounter#1{\stepcounter{#1}% \protected@edef\@currentlabel {\csname p@#1\endcsname\csname the#1\endcsname}% }
看到那
\refstepcounter
是“已修改\stepcounter
”,因为它还更新了\@currentlabel
。插入 时
\label
,LaTeX 的默认行为是将宏\@currentlabel
和作为 的参数写入文件\thepage
。以下是.aux
\newlabel
\label
latex.ltx
:\def\label#1{\@bsphack \protected@write\@auxout{}% {\string\newlabel{#1}{{\@currentlabel}{\thepage}}}% \@esphack}
一般来说,
\newlabel
这里只是一种内置机制,用于检查标签是否已经存在并发出警告(以“存在多次定义的标签”或“标签‘...’多次定义”的形式)。
因此,每当\refstepcounter
执行 a 时,\@currentlabel
都会更新,因此会更改使用 a 创建的任何引用\label
。这种错误标记最常见的问题是当用户执行(例如)
\begin{figure}
% Image stuff here
\label{mylabel}
\caption{My caption}
\end{figure}
并收到对其图形的错误引用。这是因为\caption
执行\refstepcounter
而不是figure
环境本身,导致将错误\@currentlabel
写入.aux
文件(无论它是什么)。一个实际的例子:
\documentclass{article}
\begin{document}
\section{A section}
See Figure~\ref{fig:ref} in section~\ref{sec:ref}.
\section{A section} Here is some text. \label{sec:ref}
\begin{figure}[bh!]
\centering\rule{.8\textwidth}{.2\textheight}
\label{fig:ref}\caption{A figure caption}
\end{figure}
\end{document}
请注意,图中引用\ref{fig:ref}
返回的2
是 而不是。这是因为write1
的问题仍由前面的设置为。切换和将产生所需的结果(无论多么简单)。\label{fig:ref}
\@currentlabel
2
\section
\label
\caption
底线是,有一个适当的位置\label
相对于计数器,否则参考可能是不正确的。这里强调的是,有些环境会收集内容并对其进行后期处理,可能是为了纠正不适当的放置,例如\label
。