在定理中引用方程

在定理中引用方程

我有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

生成正确的引用标签分为两个步骤:

  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

  2. 插入 时\label,LaTeX 的默认行为是将宏\@currentlabel和作为 的参数写入文件\thepage。以下是.aux\newlabel\labellatex.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}\@currentlabel2\section\label\caption

底线是,有一个适当的位置\label相对于计数器,否则参考可能是不正确的。这里强调的是,有些环境会收集内容并对其进行后期处理,可能是为了纠正不适当的放置,例如\label

相关内容