backref
与支持在 LaTeX 文档中反向引用书目项目的软件包类似,我想在图表列表中使用反向引用。有没有一种简洁的方法来实现这一点?
编辑:我想在 LoF 中的标题后面添加文本,说明给定图形在哪些页面上被引用。
例如:
2.3 制造过程可视化(参考第 3、4 和 8 页) ...................................... 3
答案1
这只是一个概念证明,它不会检查同一页面上的重复引用或两个或多个引用等。它仍然需要大量改进和针对活动字符的保护,使其与超引用一起工作等。
要使用它,请将命令放在\makefigreflist
序言中并使用自定义\figcaption[shortcap]{longcap}{label}
和\figref{label}
命令。它必须经过两次 latexed。
编辑 1:将信息直接写入输出文件并使其更安全
\documentclass{article}
\makeatletter
\newcommand*\figreflistout[1]{}
\newcommand*\makefigreflist{%
\begingroup
\makeatletter
\@input{\jobname.frl}%
\newwrite\frl@outfile
\immediate\openout\frl@outfile=\jobname.frl\relax
\endgroup
\let\makefigreflist\@empty
\renewcommand*\figreflistout{%
\@bsphack
\begingroup
\@sanitize
\@figreflistout}%
}
\newcommand*\@figreflistout[1]{%
\protected@write\frl@outfile{}%
{\string\addtofigreflist{#1}{\thepage}}%
\endgroup
\@esphack}
\newcommand*\addtofigreflist[2]{%
\@ifundefined{frl@#1}%
{\expandafter\protected@xdef\csname frl@#1\endcsname{#2}}%
{\expandafter\protected@xdef\csname frl@#1\endcsname{\csname frl@#1\endcsname, #2}}}
\newcommand*\printfigreflist[1]{%
\@ifundefined{frl@#1}%
{\ (not referenced)}%
{\ (referenced on page~\@nameuse{frl@#1})}}
\newcommand\defaultcapt{}
\newcommand\figcaption[3][\defaultcapt]{%
\renewcommand\defaultcapt{#2}%
\caption[#1\protect\printfigreflist{#3}]{#2}%
\label{#3}}
\newcommand\figref[1]{%
\ref{#1}\figreflistout{#1}}
\makeatother
\makefigreflist
\begin{document}
\listoffigures
\begin{figure}
\figcaption{First figure}{fig:01}
\figcaption{Second figure}{fig:02}
\figcaption{Third figure}{fig:03}
\end{figure}
\bigskip
In figure \figref{fig:01} and \figref{fig:02} it is..
\clearpage
In figure \figref{fig:01}
\clearpage
In figure \figref{fig:01} and \figref{fig:02} it is..
\end{document}