在 biber 中第一次引用后重新定义引用命令

在 biber 中第一次引用后重新定义引用命令

我使用 biber 作为具有字母样式的 biblatex 的后端。我希望使 textcite 和 citeauthor 命令按如下方式运行:

如果我第一次对某个参考文献使用上述命令之一,我希望它打印所有作者姓名。然后在进一步引用时,我希望它仅显示第一作者姓名 + “et al.” 。到目前为止,我这样做的方式如下:

    \DeclareCiteCommand*{\textcite*}{%
    \defcounter{maxnames}{99}%
    \defcounter{minnames}{99}%
    \defcounter{uniquename}{0}%
    \booltrue{citetracker}%
    \boolfalse{pagetracker}%
    \usebibmacro{prenote}
    }{\ifciteindex{\indexnames{labelname}}{}%
      \ifciteseen{\printnames[][1-1]{labelname}}{\printnames[][1-99]{labelname}}
    }{\multicitedelim}{\usebibmacro{postnote}}

问题在于,一方面我需要调用 \textcite* 而不是 \textcite;另一方面 \textcite 和 \citeauthor 在这里是分开处理的,也就是说,如果我调用 \textcite,它会起作用,但是当我第一次调用 \citeauthor 时,它会再次引用所有名称。如果有人知道如何解决这个问题,我会非常高兴。谢谢。


好吧,我注意到,如果我调用 \textcite,作者姓名后面的引文将被省略。因此,我稍微修改了命令,如下所示:

    \DeclareCiteCommand{\textcite}{%
    \defcounter{maxnames}{99}%
    \defcounter{minnames}{99}%
    \defcounter{uniquename}{0}%
    \booltrue{citetracker}%
    \boolfalse{pagetracker}%
    \usebibmacro{prenote}
    }{\ifciteindex{\indexnames{labelname}}{}%
      \ifciteseen{
    {\printnames[][1-1]{labelname}\space\bibopenbracket}%
   \ifnumequal{\value{citecount}}{1}{\usebibmacro{prenote}}{}%
   \usebibmacro{cite}\bibclosebracket
    }{
      {\printnames[][1-99]{labelname}\space\bibopenbracket}%
   \ifnumequal{\value{citecount}}{1}{\usebibmacro{prenote}}{}%
   \usebibmacro{cite}\bibclosebracket
     }
    }{\multicitedelim}{\usebibmacro{postnote}}

但是使用此代码,我会得到一个包含名称和引文的引文,但它也会在引文后面添加一个空格,这看起来不太好看。有人知道如何纠正吗?谢谢?

@Seamus:我在 biblatex 中找不到这样的功能。如果您知道类似的东西,我将不胜感激。

答案1

textcite如果对参考书目宏进行编辑而不是重新定义,则很容易避免间距问题\textcite

测试还涉及另一个问题\ifciteseen。当labelname始终是引文标签的一部分时,这是合适的。作者-年份样式就是这种情况(例如biblatex – 等从第二次引用开始?),但不是alphabetic。解决此问题的一种方法是通过\textcite\citeauthor使用 来跟踪已经引用的条目category

\documentclass{article}
\usepackage[backend=biber,style=alphabetic,maxcitenames=1]{biblatex}

\DeclareBibliographyCategory{nameseen}

\newbibmacro*{labelname}{%
  \ifcategory{nameseen}
    {\printnames{labelname}}
    {\addtocategory{nameseen}{\thefield{entrykey}}%
     \printnames[][1-99]{labelname}}}

% Based on generic definition from biblatex.def
\DeclareCiteCommand{\citeauthor}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\ifciteindex
     {\indexnames{labelname}}
     {}%
   \usebibmacro{labelname}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\makeatletter
% Based on definition from alphabetic.cbx
\renewbibmacro*{textcite}{%
  \ifcategory{nameseen}
    {}
    {\clearfield{namehash}}%
  \iffieldequals{namehash}{\cbx@lasthash}
    {\multicitedelim}
    {\cbx@tempa
     \ifnameundef{labelname}
       {}
       {\usebibmacro{labelname}\space}%
     \bibopenbracket}%
  \ifnumequal{\value{citecount}}{1}
    {\usebibmacro{prenote}}
    {}%
  \usebibmacro{cite}%
  \savefield{namehash}{\cbx@lasthash}%
  \gdef\cbx@tempa{\bibclosebracket\multicitedelim}}
\makeatother

\begin{filecontents}{\jobname.bib}
@article{bertram2,
  title = {Gromov Invariants for Holomorphic Maps from Riemann Surfaces to Grassmannians},
  author = {Bertram, Aaron and Daskalopoulos, Georgios and Wentworth, Richard},
  journal = {Journal of the American Mathematical Society},
  volume = {9},
  number = {2},
  pages = {529--571},
  year = {1996}}
\end{filecontents}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
Some filler text \parencite{companion,bertram}.
\Citeauthor{companion} showed that...
\Textcite{companion} showed that...
The results from \textcite{bertram,bertram2,companion}...
The results from \textcite{bertram,bertram2,companion}...
The results by \citeauthor{bertram,companion,yoon}...
\end{document}

在此处输入图片描述

该解决方案还可使用 BibTeX 作为后端。

alphabetic-verb风格与 类似alphabetic,但不会生成紧凑的引用列表。要使解决方案正常工作,alphabetic-verb请使用以下 的重新定义textcite

% Based on definition from alphabetic-verb.cbx
\renewbibmacro*{textcite}{%
  \ifnameundef{labelname}
    {}
    {\usebibmacro{labelname}\space}%
  \bibopenbracket
  \ifnumequal{\value{citecount}}{1}
    {\usebibmacro{prenote}}
    {}%
  \usebibmacro{cite}}

相关内容