类似 \textcite 的新命令,但只有一个作者

类似 \textcite 的新命令,但只有一个作者

我正在使用biblatex自定义的numeric-comp样式来显示我的参考资料。我真的很喜欢它的工作方式,但现在我只想有一个新命令,它的作用与此相同,\textcite但将作者数量截断为一个。那就是

@BOOK{Steger2008,
author = {Carsten Steger and Markus Ulrich and Christian Wiedemann},
title = {Machine Vision Algorithms and Applications},
year = {2008}
}

给予\textcite{Steger2008}: "Steger, Ulrich, and Wiedemann"

如果有这样的东西就太好了\shorttextcite{Steger2008}"Steger et al."

这可能吗?怎么做?谢谢你的帮助。

答案1

maxcitenames是影响引文中出现的作者最大数量的选项。它最初设置为与相同的值maxnames,该值定义了参考书目和引文中的最大作者数量(如 Tobjørn T. 对 Dror 回答的评论中所述)。

因此,如果您想全局设置引用以仅打印一位作者,这就是您正在寻找的选项,并且\usepackage[maxcitenames=1]{biblatex}足够了。

但是如果您想在单个引用命令中将此选项本地设置为 1,则必须定义一个新的并maxcitenames在内部更改该选项。

maxcitenames选项设置 var \blx@maxcitenames。在新的引用命令的范围内重新定义它就足够了。

textcite在这里,我从引用样式中复制了的定义authoryear并添加\numdef\blx@maxcitenames{1}到其precode部分:

\makeatletter
\DeclareCiteCommand{\newtextcite}
  {\numdef\blx@maxcitenames{1}% <--- Here.
  \boolfalse{cbx:parens}}
  {\usebibmacro{citeindex}%
   \iffirstcitekey
     {\setcounter{textcitetotal}{1}}
     {\stepcounter{textcitetotal}%
      \textcitedelim}%
   \usebibmacro{textcite}}
  {\ifbool{cbx:parens}
     {\bibcloseparen\global\boolfalse{cbx:parens}}
     {}}
  {\usebibmacro{textcite:postnote}}
\DeclareMultiCiteCommand{\newtextcites}{\newtextcite}{}
\makeatother

以下是 MWE:

\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\DeclareCiteCommand{\newtextcite}
  {\numdef\blx@maxcitenames{1}
  \boolfalse{cbx:parens}}
  {\usebibmacro{citeindex}%
   \iffirstcitekey
     {\setcounter{textcitetotal}{1}}
     {\stepcounter{textcitetotal}%
      \textcitedelim}%
   \usebibmacro{textcite}}
  {\ifbool{cbx:parens}
     {\bibcloseparen\global\boolfalse{cbx:parens}}
     {}}
  {\usebibmacro{textcite:postnote}}
\DeclareMultiCiteCommand{\newtextcites}{\newtextcite}{}
\makeatother
\begin{document}
\textcites{companion,padhye,sorace,laufenberg}

\newtextcites{companion,padhye,sorace,laufenberg}

\printbibliography
\end{document}

在此处输入图片描述

maxnames请注意,和的默认值maxcitenames设置为 3(这就是为什么laufenberg两个示例中的条目都缩短了)

答案2

maxnames=1尝试在包的选项中设置。特别是使用

\usepackage[maxnames=1]{biblatex}

在你的序言中。

答案3

再次感谢 henrique。在您的帮助下,我找到了解决 numeric-comp 样式的问题的方法。现在,我可以将 \shorttextcite{} 用于只有一位作者 + 等人的文本引用。我从 textcite 的 numeric-comp 定义中复制了代码,并添加了 henrique 的行。以下是我添加到 *.cbx 文件中的行:

    % shorttextcite definition
    \DeclareCiteCommand{\cbx@shorttextcite}
        {\usebibmacro{cite:init}}
      {\usebibmacro{citeindex}%
       \usebibmacro{textcite}}
      {}
      {\usebibmacro{cite:dump}%
       \usebibmacro{postnote}%
       \ifbool{cbx:parens}
         {\bibclosebracket\global\boolfalse{cbx:parens}}
         {}}

    \DeclareCiteCommand{\shorttextcite}[\cbx@shorttextcite@init\cbx@shorttextcite]
      {\gdef\cbx@savedkeys{}%
       \citetrackerfalse%
       \pagetrackerfalse%
       \DeferNextCitekeyHook%
       \usebibmacro{cite:init}}
      {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
         {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
          \global\clearfield{multipostnote}}
         {}%
       \xappto\cbx@savedkeys{\thefield{entrykey},}%
       \iffieldequals{namehash}{\cbx@lasthash}
         {}
         {\stepcounter{textcitetotal}%
          \savefield{namehash}{\cbx@lasthash}}}
      {}
      {\protected@xappto\cbx@savedcites{%
         [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}

    \newrobustcmd{\cbx@shorttextcite@init}[2]{%
        \numdef\blx@maxcitenames{1}% <--- Here.
      \setcounter{textcitetotal}{0}%
      \setcounter{textcitecount}{0}%
      \def\cbx@savedcites{#1}#2\cbx@savedcites\empty}

    \DeclareMultiCiteCommand{\cbx@shorttextcites}{\cbx@shorttextcite}{}
    \DeclareMultiCiteCommand{\shorttextcites}[\cbx@shorttextcites@init\cbx@shorttextcites]{\shorttextcite}{}

相关内容