BibTeX 中作者字段中的贵族头衔

BibTeX 中作者字段中的贵族头衔

我引用了 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和字段。此处抓取字段的前三个字母,索引抓取字段中的最后两个数字。编译文件shortauthor0:2shortauthor2:3year*.tex

\documentclass{article}

\begin{document}

\nocite{*}
\bibliographystyle{example6}
\bibliography{example6}

\end{document}

给出所需的格式化结果:

格式化结果 PDF

相关内容