![将作者姓氏设置为小写,但编辑、翻译等使用 biblatex 时应避免使用](https://linux22.com/image/241001/%E5%B0%86%E4%BD%9C%E8%80%85%E5%A7%93%E6%B0%8F%E8%AE%BE%E7%BD%AE%E4%B8%BA%E5%B0%8F%E5%86%99%EF%BC%8C%E4%BD%86%E7%BC%96%E8%BE%91%E3%80%81%E7%BF%BB%E8%AF%91%E7%AD%89%E4%BD%BF%E7%94%A8%20biblatex%20%E6%97%B6%E5%BA%94%E9%81%BF%E5%85%8D%E4%BD%BF%E7%94%A8.png)
我正在使用 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}}