我使用了一些关于如何在 biblatex 中玩弄反向引用格式的技巧,我发现格式非常灵活。在下面的屏幕截图中,我将反向引用放入了一个框中。这很有趣,但我希望反向引用能够出现后句号,即整个引用之后,如下所示:
- 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
),则重新定义为空。
下一步是在反向引用之前打印一个句点。为此,pageref
bibmacro 的定义必须\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}
}}}}