我正在使用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}{}