可能重复:
标题中显示的表格/图形的使用
除了 bibtex 之外,还有什么方法可以进行反向引用,以便使用类似\backref
LaTeX 的东西来显示对某个项目的引用在哪里?例如:
...
\begin{enumerate}
\item \label{1} Something. Referenced by [\backref].
\item \label{2} Something else. Referencing [\ref{1}].
\end{enumerate}
...
输出如下内容:
- 某事。参考[2]。
- 其他内容。参考[1]。
嗯,这对于家谱文本很有用,其中每一项代表一个家庭,每个子项代表一个人。当一个人结婚时,我可以参考他/她来自哪个家庭,但看看他/她属于哪个家庭也会很有用。也许举个例子会有所帮助 ; ) :
\begin{enumerate}
\item \label{f:1} John and Mary had:
\begin{enumerate}
\item \label{p:1} James
\end{enumerate}
\item \label{f:2} Bruce and Alina had:
\begin{enumerate}
\item \label{p:2} Elisabeth
\end{enumerate}
\item \label{f:3} James [\ref{p:1}] and Elisabeth [\ref{p:2}] married.
\end{enumerate}
这\backref
将使我能够展示詹姆斯和伊丽莎白是否结婚了。
答案1
您可以通过修补现有\ref
命令来记住调用它的上下文。即使\ref
在同一标签上多次调用此新版本,它也能正常工作,生成一个以逗号分隔的数字列表(无空格)。它有一些限制;例如,无论它们属于哪种标签(枚举、部分等),列表都会生成看起来相同的数字。我认为可以添加某种钩子来\backref
处理列表并改善这种情况,但除非您说需要,否则我不会这样做。
这不适用于hyperref
,对此我深表歉意。如果您需要,我会解开它的谜团。
这是一份完整的文档;您应该将其中的所有内容复制\documentclass{article}
到\begin{document}
您的序言中。
\documentclass{article}
\usepackage{etoolbox}
\makeatletter
\def\@newbackl@bel#1#2#3{%
\@ifundefined{#1@#2}%
{\global\@namedef{#1@#2}{#3}}
{\cs@g@appendpair{#1@#2}{#3}}%
}
% #1 and #2 are each of the form {a}{b}, and the a and b groups are to be concatenated independently.
\def\cs@g@appendpair#1#2{{%
\edef\first{\csname #1\endcsname}%
\csxdef{#1}%
{{\expandafter\@firstoftwo\first,\@firstoftwo#2}%
{\expandafter\@secondoftwo\first,\@secondoftwo#2}}%
}}
% Patching into the existing commands
\def\newbacklabel{\@newbackl@bel B}
\let\backlabel=\label
\patchcmd\backlabel{\newlabel}{\newbacklabel}{}{}
\let\backref=\ref
\patchcmd\backref{r@#1}{B@#1}{}{}
\let\pagebackref=\pageref
\patchcmd\pagebackref{r@#1}{B@#1}{}{}
\pretocmd\ref{\backlabel{#1}}{}{}
\makeatother
\begin{document}
\begin{enumerate}
\item \label{e:1} Part 1, referenced by part(s) \backref{e:1} on page(s) \pagebackref{e:1}.
\item \label{e:2} Part 2, referencing part \ref{e:1}
\item \label{e:3} Part 3, referencing part \ref{e:1}.
\end{enumerate}
\newpage
\section{A section}
\label{s:1}
Here is another reference to part \ref{e:1}.
\end{document}