hyperref pagebackref 选项用于单数反向引用(backpointer)情况。pages vs page

hyperref pagebackref 选项用于单数反向引用(backpointer)情况。pages vs page

我想定制 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 运行之间),因此无论如何,您可能都需要一个占位符。

相关内容