导出参考文献的页码

导出参考文献的页码

我想导出文档中所有内部参考文献的页码。如何实现?同样,我们如何导出所有内部参考文献的章节号?

对于参考书目的外部引用(我使用 bibtex),使用该\backref命令创建一个.brf包含此信息的文件。


编辑:\label所谓内部引用,是指对 定义并引用的 标签的引用\ref。例如,考虑以下最小示例:

\documentclass{article}
\begin{document}

\section{One}
Here\label{here}

\newpage
\section{Two}

\newpage
\section{Three}
Here is \ref{here}.
\end{document}

我想检索从第 3 页(第 3 节)到第 1 页(第 1 节)的内部引用。

答案1

这不是一个完整的解决方案,因为我不清楚您想如何实际使用收集到的信息,但它应该为您提供一些如何获取它的起点。

\documentclass{article}

\makeatletter
\def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}%
% addition
   \protected@write\@auxout{}%
         {\string\usedlabel{#1}{\thepage}}}
\def\pageref#1{\expandafter\@setref\csname r@#1\endcsname
                                   \@secondoftwo{#1}%
% addition
      \protected@write\@auxout{}%
         {\string\usedpagelabel{#1}{\thepage}}}

\def\usedlabel#1#2{\typeout{ref #1 on page #2}}
\def\usedpagelabel#1#2{\typeout{pageref #1 on page #2}}
\makeatother

\begin{document}

\section{A}\label{A}

text\label{B} see section~\ref{A}

\newpage

text referencing page~\pageref{B} in section~\ref{A}

\end{document}

本质上,这发生了变化\ref,并在文件中做了如下\pageref记录:.aux

\usedlabel{A}{1}
\usedpagelabel{B}{2}

我定义了这些命令来执行输出,但一切皆有可能。请注意,aux 文件被读入两次,一次在开头,一次在结尾,因此需要进一步的工作。另外,这种简单的方法不适用于以\ref某种方式修改的任何包。

从上述结果可以看出:

ref A on page 1
pageref B on page 2
ref A on page 2

在屏幕上和日志中。

更新

我忘了说,修补\ref当然只有在不使用修改此命令的软件包的情况下才有效。因此,一个破坏此规则的例子是软件包hyperref,出于充分的理由,它提供了自己的(完全不同的)实现\ref,因此上述修改根本就不会被使用。

快速查看hyperref代码,最有可能被挂钩的候选者似乎是\T@ref但我没有进行详尽的检查,这可能不是最好的方法(并且它可能不适用于 hyperref 提供的所有选项)。无论如何,对我来说它是有效的:

\usepackage{hyperref}

\makeatletter
\AtBeginDocument{%
  \def\T@ref#1{%
     \protected@write\@auxout{}{\string\usedlabel{#1}{\thepage}}%
      \Hy@safe@activestrue
      \expandafter\@setref\csname r@#1\endcsname\@firstoffive{#1}%
      \Hy@safe@activesfalse
    }%
    \def\T@pageref#1{%
      \protected@write\@auxout{}{\string\usedpagelabel{#1}{\thepage}}
      \Hy@safe@activestrue
      \expandafter\@setref\csname r@#1\endcsname\@secondoffive{#1}%
      \Hy@safe@activesfalse
    }%
}

相关内容