我想定制 hyperref+backref 包提供的宏,以考虑每个反向引用列表之前的前导文本中的引用次数。
宏\backrefpagesname{-> pages}
允许我使用“ -> 第 i、iv、15 页”反向引用文本,但对于只有一个反向引用的条目,我如何才能将其调整为“-> 第 X 页”?我宁愿不这样做“-> 页”。
这就是我所拥有的:
\usepackage[bookmarks,bookmarksnumbered,%
pdfborder={0 0 0},
pagebackref,
linktocpage%
]{hyperref}
\renewcommand\backrefpagesname{\(\rightarrow\) pages}
\renewcommand\backref{\backrefpagesname\ }
示例输出
以下是我的参考书目示例。在第二个条目中,尽管只有一个反向引用,但它显示“-> pages”(复数)。
环境
我使用 Ubuntu 16.04LTS 自带的标准软件包:
- hyperref 2012/11/06 v6.83m。
- backref(由 hyperref 包含)2012/07/25 v1.38。
也可以看看
自定义连续页面的引用页码列表:如何使用自制的 tex 命令修改 backrefalt (未回答)
答案1
我找到了一个受 backref 包手册中示例启发的解决方案。我删除了对\backrefpagesname
和的重新定义\backref
,并选择了一组不同的宏,这些宏将引用数作为参数提供,即\backrefalt
。我仍在使用 hyperref(以及它包含的 backref 包)。
我已修改我的主要文档文件以包含以下宏:
\usepackage[bookmarks,bookmarksnumbered,%
pdfborder={0 0 0},
pagebackref,
linktocpage%
]{hyperref}
%...
% adapt back reference leading text to account for number of citations
%
%\renewcommand*{\backref}[1]{}% for backref < 1.33 necessary
\renewcommand*{\backrefsep}{,~}%
\renewcommand*{\backreftwosep}{,~}% ', and~'
\renewcommand*{\backreflastsep}{,~}% ' and~'
\renewcommand*{\backrefalt}[4]{%
\ifcase #1 %
No citations.%
\or
\(\rightarrow\) page #2%
\else
\(\rightarrow\) pages #2%
\fi
}
默认\backrefXsep
宏在每个列表中插入了“x、y 和 z”。为了保留原始文档的外观,我已将它们重新定义为仅使用逗号。
最终输出如下所示:
如果您注意到,就会发现有一个“无引用”的情况。它不会出现在我的最终文档中,因为参考书目仅显示至少被引用一次的项目,但它确实会在编译的中间阶段弹出(即在 pdflatex/bibtex 运行之间),因此无论如何,您可能都需要一个占位符。