![BibTeX 中作者字段中的贵族头衔](https://linux22.com/image/280061/BibTeX%20%E4%B8%AD%E4%BD%9C%E8%80%85%E5%AD%97%E6%AE%B5%E4%B8%AD%E7%9A%84%E8%B4%B5%E6%97%8F%E5%A4%B4%E8%A1%94.png)
我引用了 John William Strutt(通常称为 Baron Rayleigh)的《声音理论》。他的名字应如何显示在 BibTeX 的作者字段中?目前我有:
@book{Ray94,
title = "The Theory of Sound",
author = "John William Strutt, Baron Rayleigh",
year = 1894,
publisher = "Dover"
}
由于大多数人只知道他叫雷利 (Rayleigh),因此有必要提及他的头衔。
虽然不是很重要,但如果我要使用 alpha 样式,我该如何让此条目显示为 [Ray94]?
答案1
通常情况下,这些名称会以真实姓名列出(即本例中的 Strutt)。但是,我认为,如果采用字母顺序样式,则可以同时使用常用名称作为引文标签,从而兼顾两者的优点。以下是在 中执行此操作的方法。如果不做大量工作,biblatex
在 中执行此操作可能是不可能的。natbib
该biblatex
包有一个字段nameaddon
,可用于向名称添加额外材料。它还有一个shortauthor
字段,可用于根据作者覆盖常规引用标签。我们使用这两个字段来获得所需的结果:
% !BIB TS-program = biber
\begin{filecontents}{\jobname.bib}
@article{Rayleigh1892,
Author = {Strutt, John William},
Date-Added = {2013-12-01 23:58:46 +0000},
Date-Modified = {2013-12-02 00:29:31 +0000},
Journal = {Philosophical Magazine},
Nameaddon = {3rd Baron Rayleigh},
Pages = {481-502},
Shortauthor = {Rayleigh},
Title = {On the influence of obstacles arranged in rectangular order upon the properties of a medium},
Volume = {34},
Year = {1892}}
\end{filecontents}
\documentclass{article}
\usepackage[style=alphabetic]{biblatex}
\addbibresource{\jobname.bib}
\renewbibmacro*{author}{%
\ifboolexpr{
test \ifuseauthor
and
not test {\ifnameundef{author}}
}
{\printnames{author}\space\printfield[parens]{nameaddon}%
\iffieldundef{authortype}
{}
{\setunit{\addcomma\space}%
\usebibmacro{authorstrg}}}
{}}
\begin{document}
\textcite{Rayleigh1892} wrote some stuff about obstacles.
\printbibliography
\end{document}
答案2
作为参考,实现 OP 要求的另一种方法是使用嗜酒' 样式模板。模板的优点是提供了更直接的格式元素视图。因此,对于数据库文件
@article{Rayleigh1892,
author = {Strutt, John William},
journal = {Philosophical Magazine},
nameaddon = {3rd Baron Rayleigh},
pages = {481-502},
shortauthor = {Rayleigh},
title = {On the influence of obstacles arranged in rectangular
order upon the properties of a medium},
volume = {34},
year = {1892}
}
表单的模板文件
TEMPLATES:
article = <au>[ (<nameaddon>)], \enquote{<title>}. In:{ }...
\textit{<journal>} <volume> (<year>),{ }...
[pp.~<startpage>--<endpage>|p.~<startpage>|].[ <note>]
SPECIAL-TEMPLATES:
authorlist = <author.to_namelist()>
editorlist = <editor.to_namelist()>
authorname.n = [<authorlist.n.first> ][<authorlist.n.middle> ]...
[<authorlist.n.prefix> ]<authorlist.n.last>...
[, <authorlist.n.suffix>]
au = <authorname.0>, ...,{ and }<authorname.9>
citelabel = [<shortauthor.0:2><year.2:3>|<authorlist.0.last.0:2><year.2:3>|]
sortkey = <authorlist.0.last>
利用数据库条目中提供的nameaddon
和字段。此处抓取字段的前三个字母,索引抓取字段中的最后两个数字。编译文件shortauthor
0:2
shortauthor
2:3
year
*.tex
\documentclass{article}
\begin{document}
\nocite{*}
\bibliographystyle{example6}
\bibliography{example6}
\end{document}
给出所需的格式化结果: