在alphabetic
样式中,我使用maxcitenames=4
和minnames=3
作为全局选项。但是,当使用\textcite
而不是 时\cite
,这些设置非常不合理,我希望它表现得像设置了maxcitenames=3
和 一样minnames=1
。我该如何实现这一点?
更具体地说,在下面的例子中,我想要
\cite{ABCDE}
生产
[ABG+01]
, 和
\textcite{ADCDE}
生产
Α,等[ABG+01]
例子:
\documentclass{article}
\usepackage[ style=alphabetic, maxcitenames=4, minnames=3 ]{biblatex}
% set \textcite option maxcitenames=3 and minnames=1 here
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{ABCDE,
author = {Alpha, A. and Beta, B. and Gamma, G. and Delta, D. and Epsilon, E.},
year = 2001
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{ABCDE}
\textcite{ABCDE}
\end{document}
答案1
使用 biber 可以通过以下选项设置来处理这个问题。
maxcitenames=3,minnames=1,maxalphanames=4,minalphanames=3
使用 BibTeX,您可以在文档序言中定义现有引用命令的变体。
\newbool{cbx:resetnames}
\AtEveryCitekey{%
\ifbool{cbx:resetnames}
{\defcounter{minnames}{1}\defcounter{maxnames}{3}}
{}}
\let\origtextcite\textcite
\renewrobustcmd{\textcite}{%
\AtNextCite{\booltrue{cbx:resetnames}}\origtextcite}
\let\origtextcites\textcites
\renewrobustcmd{\textcites}{%
\AtNextCite{\booltrue{cbx:resetnames}}\origtextcites}
\let\origciteauthor\citeauthor
\renewrobustcmd{\citeauthor}{%
\AtNextCite{\booltrue{cbx:resetnames}}\origciteauthor}
请注意,由于minnames
和maxnames
是特定于条目的选项,因此必须使用特定于条目的钩子(如)来重置它们\AtEveryCitekey
。
答案2
\AtNextCite
您可以使用并将计数器设置maxnames
为所需值来定义新命令minnames
;类似于以下示例所示的内容:
\documentclass{article}
\usepackage[ style=alphabetic, maxcitenames=4, minnames=3 ]{biblatex}
\newrobustcmd{\TExtcite}{%
\AtNextCite{\defcounter{maxnames}{3}\defcounter{minnames}{1}}\textcite}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{ABCDE,
author = {Alpha, A. and Beta, B. and Gamma, G. and Delta, D. and Epsilon, E.},
year = 2001
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{ABCDE}
\TExtcite{ABCDE}
\textcite{ABCDE}
\end{document}