使用 biblatex 放置 Jr. 和 Sr.

使用 biblatex 放置 Jr. 和 Sr.

在大多数书目样式中,后缀Jr.Sr.go参考书目中的作者的两个名字,前面用逗号分隔:

Gauch,Hugh G.,Jr.(2012)。科学方法简介.剑桥:剑桥大学出版社。

似乎大多数BibTeX风格都有努力做到这一点。我现在还发现的默认行为biblatex也不符合标准。在下面的例子中,后缀Jr.按照一般准则

\documentclass{article}
\usepackage[style = authoryear-comp]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{gauch2012,
    AUTHOR = "Gauch, Jr., Hugh G.",
    TITLE = "Scientific method in brief",
    YEAR = "2012",
    LOCATION = "Cambridge",
    PUBLISHER = "Cambridge University Press"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}

在此处输入图片描述

我尝试了文件中顺序的其他排列First name,但没有找到能够提供所需输出的排列。Last nameJr..bib

根据评论BibTeX 样式是否错误地放置了姓名的“次要”部分?biblatex-apa和都biblatex-chicago具有所需的顺序,因此至少可以在中实现这一点biblatex。我该怎么做?


编辑

在实施 Guido 的建议时,后续作者的默认布局由first name-last name变为last name- comma-- first name

\documentclass{article}
\usepackage[style = authoryear-comp]{biblatex}
\DeclareNameFormat{author}{%
  \usebibmacro{name:delim}{#5#1}%
  \ifblank{#5}{#1}{#5 #1}\addcomma\addspace
  #3\isdot
  \ifblank{#7}{}{\addcomma\addspace #7}\isdot
}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{gauch2012,
    AUTHOR = "Gauch, Jr., Hugh G.",
    TITLE = "Scientific method in brief",
    YEAR = "2012",
    LOCATION = "Cambridge",
    PUBLISHER = "Cambridge University Press"}
@BOOK{chomsky1968,
    AUTHOR = "Noam Chomsky and Morris Halle",
    TITLE = "The sound pattern of English",
    YEAR = "1968",
    LOCATION = "New York, NY",
    PUBLISHER = "Harper \& Row",
    SERIES = "Studies in language"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}

在此处输入图片描述

答案1

用于格式化名称的标准 biblatex 指令使用一些辅助 bibmacro:

name:first-last
name:last-first
name:last 

用于预定义姓名格式。每个格式都有四个参数:第一个参数表示姓氏,第二个参数表示名字,第三个参数表示“von”部分,第四个参数表示“junior”部分。

因此,可以使用辅助格式,例如

\DeclareNameFormat{author}{
  \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}
}

对于参数,\DeclareNameFormat将名称分成 8 个部分:

#1: last name
#2: last name (as initials)
#3: first name
#4: first name (as initials)
#5: name prefix (von part)
#6: name prefix (as initials)
#7: name affix (junior part)
#8: name affix (as initials)

如果辅助 bib 宏没有产生所需的格式,则必须提供新的定义。例如,OP 中格式的简化定义可能如下所示:

\DeclareNameFormat{author}{%
  \usebibmacro{name:delim}{#5#1}%
  \ifblank{#5}{#1}{#5 #1}\addcomma\addspace
  #3\isdot
  \ifblank{#7}{}{\addcomma\addspace #7}\isdot
}

author(或其他名称)是列表,因此\DeclareNameFormat循环遍历列表中的所有元素(如果给出则达到限制,例如maxcitenames),并且对于每个名称,它执行定义主体中的代码。

这里第一步是预定义的 biblatex 宏name:delim。此宏负责处理名称之间的标点符号。对于第一个名称,它不执行任何操作,对于连续的名称,它会在最后一个名称前插入逗号 an 和一个逗号 and and。

第二步是查看“von”部分是否为空(参数#5):如果是则打印姓氏(参数#1),否则打印von部分和姓氏(#5 #1)。

下一步是打印名字(参数#3)(此处定义假设有名字!),因此姓氏和名字之间的分隔符打印为 e first name。的作用\isdot是确保首字母中的句号不被视为句号,因此不会忽略后面的标点符号。

最后一步是检查是否有次要部分(参数#7)。如果不是黑色,则打印。是\isdot为了覆盖与之前相同的情况。

编辑

要在模式中使用上述定义last-first/first-last,上述定义可以替换标准name:last-first宏,即:

\renewbibmacro{name:last-first}[4]{
  \usebibmacro{name:delim}{#3#1}%
  \ifblank{#3}{#1}{#3 #1}\addcomma\addspace
  #2\isdot
  \ifblank{#4}{}{\addcomma\addspace #4}\isdot
}

在此处输入图片描述

答案2

处理这种情况时我使用的方法是将姓氏和“Jr.”括在花括号中,如下所示:

AUTHOR = "Hugh G. {Gauch, Jr.}",

可能会出现排序问题,但到目前为止我还没有遇到任何问题。

相关内容