![使用 biblatex 放置 Jr. 和 Sr.](https://linux22.com/image/300779/%E4%BD%BF%E7%94%A8%20biblatex%20%E6%94%BE%E7%BD%AE%20Jr.%20%E5%92%8C%20Sr..png)
在大多数书目样式中,后缀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 name
Jr.
.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.}",
可能会出现排序问题,但到目前为止我还没有遇到任何问题。