BibLaTeX:自定义反向引用

BibLaTeX:自定义反向引用

我正在尝试从 Natbib 切换到 BibLaTeX。在 Natbib(通过 hyperref)中,我对反向引用进行了以下自定义:

\renewcommand*{\backref}[1]{}
\renewcommand*{\backrefalt}[4]{%
\ifcase #1 %
(Not cited.)%
\or
Cited on page~#2.%
\else
Cited on pages~#2.%
\fi}
\renewcommand*{\backrefsep}{, }
\renewcommand*{\backreftwosep}{ and~}
\renewcommand*{\backreflastsep}{, and~}

我想在 BibLatex 中进行相同的自定义。以下内容将始终有效:

\usepackage[backref=true]{biblatex}
\DefineBibliographyStrings{english}{%
    backrefpage = {Cited on page},
    backrefpages = {Cited on pages},
}

我需要的帮助是:

  1. 将(未引用)添加到通过 \nocite{} 添加的所有条目。
  2. 正确格式化页面列表,例如“在第 1、2、3、4 和 5 页引用”。 --- 现在它输出“在第 1、2、3、4、5 页引用”。

编辑:


解决方案(根据@Guido 的回复创建):

\documentclass{article}
\usepackage{hyperref}
\hypersetup{colorlinks=false, pdfborder={0 0 0}}    

\usepackage[backend=bibtex,backref=true]{biblatex}
\DefineBibliographyStrings{english}{%
  backrefpage = {Cited on page},
  backrefpages = {Cited on pages},
}
\renewbibmacro{pageref}{%
  \iflistundef{pageref}
    {\printtext[parens]{Not Cited}} 
    {%
     \printtext[parens]{\ifnumgreater{\value{pageref}}{1}   
       {\bibstring{backrefpages}\ppspace} 
       {\bibstring{backrefpage}\ppspace}
       \printlist [pageref][-\value{listtotal}]{pageref}}}}    

\DeclareListFormat{pageref}{%
     % == 2 references
    \ifthenelse{\value{liststop} < 3}{\ifthenelse{\value{listcount}<\value{liststop}}{\hyperpage{#1} and }{\hyperpage{#1}}} %
    { % > 2 references
        \ifthenelse{\value{listcount}<\value{liststop}}
          {\hyperpage{#1}\addcomma\addspace}
          {\ifnumequal{\value{listcount}}{\value{liststop}}
            {and \hyperpage{#1}}
            {}%
          }%
    }%  
}
\begin{filecontents}{mybib.bib}
@article{zero,title= {Tile 0}}
@article{one,title= {Tile 1}}
@article{two,title= {Tile 2}}
@article{three,title= {Tile 3}},
}            

\end{filecontents} 
\bibliography{mybib}
\begin{document}            

\nocite{zero}
\cite{one}
\cite{two}
\cite{three}            

\newpage
\cite{two}
\cite{three}
\newpage
\cite{three}            

\printbibliography
\end{document}

生成:

[1] “Tile 0”。出处:()。(未引用)。

[2] “Tile 1”。出处:()(引自第 1 页)。

[3] “Tile 2”。出处:()(引用自第 1 页和第 2 页)。

[4] “Tile 3”。出处:()(引用自第 1、2 和 3 页)。

答案1

反向引用存储在pageref列表中。因此,您可以\DeclareListFormat控制反向引用的格式。

这是一个可以实现您想要的定义:

\DeclareListFormat{pageref}{%
\ifthenelse{\value{listcount}<\value{liststop}}
  {#1\addcomma\addspace}
  {\ifnumequal{\value{listcount}}{\value{liststop}}
    {and #1}
    {}%
  }%
}

为了解决未引用条目的情况,必须修改pagerefbibmacro

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

利用提供的 MWE 它生成:

在此处输入图片描述

答案2

如果不想使用 BibLaTeX 在最后一个元素前添加逗号,则应修改 Guido 和 OP 提出的定义:

\DeclareListFormat{pageref}{%
    \ifthenelse{\value{listcount}=1}%
        {\hyperpage{#1}}%
        {\ifthenelse{\value{listcount}<\value{liststop}}%
            {\addcomma\addspace\hyperpage{#1}}%
            {\ifnumequal{\value{listcount}}{\value{liststop}}%
                {\addspace{}and\addspace\hyperpage{#1}}{}%
            }%
        }%
}%

示例输出为:

(引自第 1 页和第 2 页)

(引自第 1、2 和 3 页)

顺便说一句,向 TeX.stackexchange 社区问好!

相关内容