从 hyperref 的 pagebackref 中删除重复条目

从 hyperref 的 pagebackref 中删除重复条目

使用时hyperref's pagebackref,如果引用在特定页面上出现多次,则同一页面将被列出多次。

例如:

A. Hindle、M. Godfrey 和 R. Holt。使用恢复的统一流程视图进行软件流程恢复。在软件维护 (ICSM) 中,2010 年 IEEE 国际会议,第 1-10 页。IEEE,2010 年。doi:10.1109/ICSM.2010.5609670。(第 3、3、6、6、6、6 页)。

如何从列表中删除重复条目?

边注:

您可能已经注意到,我添加了“page”/“pages”这里) 归结为:

\renewcommand*{\backreflastsep}{, }
\renewcommand*{\backreftwosep}{, }
\renewcommand*{\backref}[1]{}
\renewcommand*{\backrefalt}[4]{%
  \ifcase #1 %
    No citations.% use \relax if you do not want the "No citations" message
  \or
    (page #4).%
  \else
    (pages #4).%
  \fi%
}

如果没有这个添加,引用也会出现多次。

答案1

只需在重新定义中替换#4#2\backrefalt反向引用手册解释,\backrefalt采用四个参数:

  1. 无重复的引用次数。
  2. 返回没有重复的引用列表。
  3. 所有引用的数量(包括重复)。
  4. 返回包含所有条目(包括重复项)的参考列表。

#2正是您所需要的。

最小测试用例:

\documentclass{article}

\begin{filecontents*}{bibliography.bib}
@INPROCEEDINGS{5609670, 
 author={Hindle, A. and Godfrey, M.W. and Holt, R.C.}, 
 booktitle={Software Maintenance (ICSM), 2010 IEEE International Conference on}, 
 title={Software process recovery using Recovered Unified Process Views}, 
 year={2010}, 
 month={sept.}, 
 volume={}, 
 number={}, 
 pages={1 -10}, 
 doi={10.1109/ICSM.2010.5609670}, 
 ISSN={1063-6773},}
\end{filecontents*}

\usepackage[pagebackref]{hyperref}

\renewcommand*{\backreflastsep}{, }
\renewcommand*{\backreftwosep}{, }
\renewcommand*{\backref}[1]{}
\renewcommand*{\backrefalt}[4]{%
  \ifcase #1 %
    No citations.% use \relax if you do not want the "No citations" message
  \or
    (page #2).%
  \else
    (pages #2).%
  \fi%
}

\begin{document}
\null\clearpage
\null\clearpage
\cite{5609670}\cite{5609670}\clearpage
\null\clearpage
\null\clearpage
\cite{5609670}\cite{5609670}\cite{5609670}\cite{5609670}\clearpage

\bibliographystyle{plain}
\bibliography{bibliography}
\end{document}

输出结果

相关内容