我正在使用 biblatex,并且需要作者的姓氏用小写字母,因此我执行以下操作:
\renewcommand\mkbibnamelast[1]{\textsc{#1}}
因此我得到了“SMITH,John”,这就是我需要的。但我还得到了例如:
阿尔西诺斯(1990 年)。柏拉图学说教学。编辑作者:J. WHITTAKER 和 P. LOUIS。巴黎:Belles Lettres。
问题是我不希望编辑、翻译等使用小写字母,因为西班牙语不正确。
编辑:截至 2016 年 3 月(biblatex 3.3),您需要\mkbibnamefamily
答案1
可以使用 选择性地应用小写字母\ifcurrentname
。下面的示例\textsc
仅适用于 字段的姓氏labelname
(author
或editor
,在没有 的情况下author
)。结果通过 进行演示verbose-trad1
,但该解决方案应该适用于大多数样式。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{csquotes}
\usepackage[american]{babel}
\usepackage[style=verbose-trad1]{biblatex}
\renewcommand*{\mkbibnamelast}[1]{%
\ifmknamesc{\textsc{#1}}{#1}}
\renewcommand*{\mkbibnameprefix}[1]{%
\ifboolexpr{ test {\ifmknamesc} and test {\ifuseprefix} }
{\textsc{#1}}
{#1}}
\def\ifmknamesc{%
\ifboolexpr{ test {\ifcurrentname{labelname}}
or test {\ifcurrentname{author}}
or ( test {\ifnameundef{author}} and test {\ifcurrentname{editor}} ) }}
\addbibresource{biblatex-examples.bib}
\begin{document}
\null\vfill\noindent
\citeauthor{aristotle:poetics,gaonkar}.
Filler text \autocites[10--15]{aristotle:poetics}{aristotle:rhetoric,companion,cicero}.
Filler text \autocites[11]{companion}[10--15]{aristotle:poetics}{aristotle:rhetoric,gaonkar,vangennep}.
\printbibliography
\end{document}
请注意,应用此格式会使labelname
设置\citeauthor
变成小写字母。为了避免在启用引用跟踪的样式下出现这种情况,\ifmknamesc
可以进行改进:
\def\ifmknamesc{%
\ifboolexpr{ ( test {\ifbibliography} or test {\ifbool{citetracker}} )
and ( test {\ifcurrentname{labelname}}
or test {\ifcurrentname{author}}
or ( test {\ifnameundef{author}}
and test {\ifcurrentname{editor}} ) ) }}
在没有跟踪的样式下,\citeauthor
可直接修改:
\DeclareCiteCommand{\citeauthor}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{\indexnames{labelname}}
{}%
\let\ifmknamesc=\ifbibliography%
\printnames{labelname}}
{\multicitedelim}
{\usebibmacro{postnote}}
为了完全避免在引用中使用小写字母,我们可以使用测试\ifbibliography
。以下定义也限制\textsc
为第一作者(或编辑)。
\def\ifmknamesc{%
\ifboolexpr{ test {\ifnumequal{\value{listcount}}{1}}
and test {\ifbibliography}
and ( test {\ifcurrentname{author}}
or ( test {\ifnameundef{author}}
and test {\ifcurrentname{editor}} ) ) }}
一个特定于样式的考虑因素是idem
缩写。在示例中,缩写未设置为小写字母。要更改此设置,您可以重新定义cite:idem
参考书目宏。
\renewbibmacro*{cite:idem}{%
\textsc{\bibstring[\mkibid]{idem\thefield{gender}}}%
\setunit{\nametitledelim}}