biblatex:将 backrefpages 移至句点之后

biblatex:将 backrefpages 移至句点之后

我使用了一些关于如何在 biblatex 中玩弄反向引用格式的技巧,我发现格式非常灵活。在下面的屏幕截图中,我将反向引用放入了一个框中。这很有趣,但我希望反向引用能够出现句号,即整个引用之后,如下所示:

  1. M. Nowak,科学 314,1560-1563(2006年)。See p. 1

不是像这样:

盒子在句号前面......

梅威瑟:

\documentclass{article}
\usepackage{filecontents}
\usepackage[natbib=true,
            hyperref=true,
            url=false,
            style=science,
            sorting=nyt,
            autocite=superscript,
            isbn=false,
            backref=true,
            maxcitenames=3,
            maxbibnames=100,
            block=none]{biblatex}

\DefineBibliographyStrings{english}{%
    backrefpage  = {See p.}, % for single page number
    backrefpages = {See pp.} % for multiple page numbers
}

\renewbibmacro*{pageref}{%
  \iflistundef{pageref}
    {}
    {\printtext{%
  \fbox{
       \ifnumgreater{\value{pageref}}{1}
         {\bibstring{backrefpages}\ppspace}
     {\bibstring{backrefpage}\ppspace}%
       \printlist[pageref][-\value{listtotal}]{pageref}
  }}}}

\usepackage{hyperref}

\begin{filecontents}{references.bib}
@article{nowak2006five,
  title={Five rules for the evolution of cooperation},
  author={Nowak, M.A.},
  journal={Science},
  volume={314},
  number={5805},
  pages={1560--1563},
  year={2006},
  publisher={American Association for the Advancement of Science}
}
\end{filecontents}

\bibliography{references.bib}

\begin{document}
Evolutionary games.\supercite{nowak2006five}
\printbibliography
\end{document}

更新 我已经尝试了下面接受的答案中 Guido 的修复方法——它适用于我的 MWE,但当有多个参考书目条目时会引入另一个问题(请参阅微电子工程协会)我希望它只需要进行微小的改动……

没有句号,但有一个额外的逗号

答案1

评论后编辑的答案

参考文献末尾的句点由 bibmacro 插入finentry,这是标准 biblatex 输入驱动程序的最后一条指令。它所做的一件事finenty就是使用 打印最后一个句点\finentrypunct

因此,为了避免在末尾打印句点,必须重新定义它:

\renewbibmacro*{finentry}{\iflistundef{pageref}{}{\renewcommand{\finentrypunct}{}}\finentry}

根据此定义,\finentrypoint若有反向引用(pageref),则重新定义为空。

下一步是在反向引用之前打印一个句点。为此,pagerefbibmacro 的定义必须\setunit{\adddot\addspace}在 的 false 子句开头包含这样的指令\iflistundef{pageref}

\renewbibmacro*{pageref}{%
  \iflistundef{pageref}
    {}
    {\setunit{\adddot\addspace}\printtext{%
  \fbox{
       \ifnumgreater{\value{pageref}}{1}
         {\bibstring{backrefpages}\ppspace}
     {\bibstring{backrefpage}\ppspace}%
       \printlist[pageref][-\value{listtotal}]{pageref}
  }}}}

在此处输入图片描述

相关内容