通常,无论使用哪种语言,名字都是相同的。因此,每当我引用 Knuth 的作品时(无论是在英文文章中还是德文文章中),我都会引用他的名字Donald E. Knuth
。
古代或中世纪的名字并不总是这样。它们在不同语言中的拼写不同。英语 | 德语 | 法语的两个例子:
- 亞里斯多德 | 亞里斯多德 | 亞里斯多德
- 托马斯·阿奎那 | 托马斯·冯·阿奎因 | 托马斯·达奎因
这意味着当我写一篇英文文章时,我需要一个bib
包含英文名称的文件,但当我想写一篇德文文章时,我需要浏览我的 bib 文件并相应地更改名称。根据我实际上用英文或德文发表文章的频率,这可能会让我很忙,而且很容易出错。
因此,我想,也许我可以将不同的名称包含在一个bib
文件中,然后biblatex
根据文档中使用的主要语言选择正确的名称。有什么想法吗?
注意:我不想在单个文档中使用 Aristotle 和 Aristoteles 这两个拼写(下面的 MWE 可能会让您这么想)。当然,如果文章的主要语言是英语,那么所有对 Aristotle 的引用都将使用他名字的英语拼写。但是,我希望能够用不同的语言撰写文章,而不必 (a) 每次都编辑我的文件bib
或 (b) 通常维护的不是一个单个文件而是两个不同的文件,每个语言一个,或 (c) 在一个文件bib
中有两个不同的条目bib
平均能量损失
% !TEX TS-program = lualatexmk
\documentclass{scrartcl}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Times New Roman}
\usepackage[ngerman, british]{babel}
\usepackage[babel]{csquotes}
\usepackage[style=verbose,abbreviate=false,backend=biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{aristotle:ross:1924,
Author = {Aristotle}, % It is here, I think, that something could be done, e.g., ...
Title = {Metaphysics}, % ... british=Aristotle,ngerman=Aristoteles,french=Aristote
Editor = {William David Ross},
Commentator = {William David Ross},
Introduction = {William David Ross},
Hyphenation = {british},
Location = {Oxford},
Publisher = {Clarendon Press},
Volumes = {2},
Year = {1924}}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\selectlanguage{british}
Some English text.\footcite{aristotle:ross:1924}
\selectlanguage{ngerman}
Etwas Text auf Deutsch.\footcite{aristotle:ross:1924}
\end{document}
答案1
这里有一种方法:
\begin{filecontents}{\jobname.bib}
@book{aristotle:ross:1924,
Author = {\Aristotle}, % It is here, I think, that something could be done, e.g., ...
Title = {Metaphysics}, % ... british=Aristotle,ngerman=Aristoteles,french=Aristote
Editor = {William David Ross},
Commentator = {William David Ross},
Introduction = {William David Ross},
Hyphenation = {british},
Location = {Oxford},
Publisher = {Clarendon Press},
Volumes = {2},
Year = {1924}}
\end{filecontents}
\documentclass{scrartcl}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Times New Roman}
\usepackage[ngerman,french,british]{babel}
\usepackage[babel]{csquotes}
\usepackage[style=verbose,abbreviate=false,backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\newauthor}{mm}
{
\clint_newauthor:nn {#1} {#2}
}
\tl_new:N \l__clint_author_tl
\cs_new_protected:Npn \clint_newauthor:nn #1 #2
{
\prop_new:c { g_clint_author_#1_prop }
\tl_set:Nn \l__clint_author_tl { #1 }
\keys_set:nn { clint-author } { #2 }
\cs_new:cpn { #1 } { \prop_get:cV { g_clint_author_#1_prop } \languagename }
}
\cs_generate_variant:Nn \prop_get:Nn { cV }
\keys_define:nn { clint-author }
{
unknown .code:n =
\prop_gput:cVn { g_clint_author_ \l__clint_author_tl _prop }
\l_keys_key_tl
{ #1 }
}
\ExplSyntaxOff
\newauthor{Aristotle}{
british=Aristotle,
ngerman=Aristoteles,
french=Aristote
}
\begin{document}
\selectlanguage{british}
Some English text.\footcite{aristotle:ross:1924}
\selectlanguage{ngerman}
Etwas Text auf Deutsch.\footcite{aristotle:ross:1924}
\selectlanguage{french}
Du texte en Français.\footcite{aristotle:ross:1924}
\end{document}
您使用以下方式定义控制序列
\newauthor{Aristotle}{
british=Aristotle,
ngerman=Aristoteles,
french=Aristote
}
命令将被调用\Aristotle
(但字符串是任意的)。命令应该在文件中使用.bib
。也许可以使用biblatex
方法来处理作者姓名而不改变它。
答案2
这实际上并不是一个“答案”。但是。这是为 biblatex 4.0/biber 4.0 计划的。您(希望)能够定义如下替代方案:
AUTHOR = {Aristotle},
AUTHOR_translated_ngerman = {Aristoteles},
AUTHOR_translated_french = {Aristote}
然后在样式中挑选出这些:
\printname{author}
\printname[form=translated,lang=ngerman]{author}
\printname[form=translated,lang=french]{author}
\selectlanguage
可能按照@egreg 所示进行切换。
这种(可选,为了向后兼容)表单/语言接口计划用于处理字段、列表或名称的任何宏。工作正在进行中,biber 部分已经完成,biblatex 部分正在进行中,但工作量很大。