biber:一些参考资料的定制标签

biber:一些参考资料的定制标签

我正在写一份文件,我将在其中输入一些论文的 PDF。在介绍中,我想以这种方式引用它们

(Joce 等人,2019 年,含第 XX 页)。

我当然可以通过cite为这些论文定义一个具体的调用来做到这一点:

\newcommand{\citeinc}[1]{\cite[][included page \pageref{ref:#1}]{#1}}

但这要求对我的论文和其他人的论文使用不同的引用命令,这意味着我需要检查我是否总是在重复使用以前文档的文本中这样做,更重要的是,我不能做这样的事情,例如

\cite{Other12,Joce13,YAOne14}

(Other 等人,2012 年,Joce 等人,2013 年,含第 101 页,One 等人,2014 年)

鉴于提供的高度定制biber,我想知道是否可以将此文本自动附加到我的参考标签(但它不应该显示在参考列表中,虽然......我猜这是可以接受的)。

答案1

假设您\label所有包含的论文都使用\label{ref:<entrykey>}此标签格式并且没有在其他任何地方使用,则可以使用以下方法。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\NewBibliographyString{included}

\DefineBibliographyStrings{english}{
  included = {included on},
}

\newbibmacro{ref:inclusion}{%
  \ifcsundef{r@ref:\strfield{entrykey}}
    {}
    {\bibstring{included}%
     \setunit{\addspace}%
     \printtext{\pno~\pageref{ref:\strfield{entrykey}}}}}

\renewbibmacro*{cite}{%
  \iffieldundef{shorthand}
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
       {\usebibmacro{cite:label}%
        \setunit{\printdelim{nonameyeardelim}}}
       {\printnames{labelname}%
        \setunit{\printdelim{nameyeardelim}}}%
     \usebibmacro{cite:labeldate+extradate}}
    {\usebibmacro{cite:shorthand}}%
  \setunit{\addcomma\space}%
  \usebibmacro{ref:inclusion}}

\renewbibmacro*{textcite}{%
  \ifnameundef{labelname}
    {\iffieldundef{shorthand}
       {\usebibmacro{cite:label}%
        \setunit{%
          \global\booltrue{cbx:parens}%
          \printdelim{nonameyeardelim}\bibopenparen}%
        \ifnumequal{\value{citecount}}{1}
          {\usebibmacro{prenote}}
          {}%
        \usebibmacro{cite:labeldate+extradate}%
        \setunit{\addcomma\space}%
        \usebibmacro{ref:inclusion}}
       {\usebibmacro{cite:shorthand}%
        \setunit{%
          \global\booltrue{cbx:parens}%
          \printdelim{nonameyeardelim}\bibopenparen}%
        \ifnumequal{\value{citecount}}{1}
          {\usebibmacro{prenote}}
          {}%
        \usebibmacro{ref:inclusion}}}
    {\printnames{labelname}%
     \setunit{%
       \global\booltrue{cbx:parens}%
       \printdelim{nameyeardelim}\bibopenparen}%
     \ifnumequal{\value{citecount}}{1}
       {\usebibmacro{prenote}}
       {}%
     \usebibmacro{citeyear}%
     \setunit{\addcomma\space}%
     \usebibmacro{ref:inclusion}}}

\addbibresource{biblatex-examples.bib}


\begin{document}
\section{Some text}
\cite{sigfridsson,worman,geer}

\cite{sigfridsson}

\cite{nussbaum}

\printbibliography

\section{\texttt{sigfridsson}}\label{ref:sigfridsson}
Here is \texttt{sigfridsson}

\section{\texttt{nussbaum}}\label{ref:nussbaum}
Here is \texttt{nussbaum}
\end{document}

Sigfridsson 和 Ryde 1998,收录于第 1 页;Worman 2002;Geer 1985//Sigfridsson 和 Ryde 1998,收录于第 1 页//Nussbaum 1978,收录于第 1 页

这里,bibmacro使用了定义命令ref:inclusion的事实,因此我们可以轻松检查当前条目键是否有标签。如果存在这样的标签,我们假设它是包含整个论文的标签并链接到它。\label{foo}r@foo

代码的其余部分仅包括在正确的位置添加新的ref:inclusion宏。citetextcite

MWE 不会在参考书目中添加有关收录内容的注释。如果您想要添加注释,可以添加类似

\renewbibmacro*{finentry}{\newunit\usebibmacro{ref:inclusion}\finentry}

相关内容