biblatex:根据语言更改作者姓名?

biblatex:根据语言更改作者姓名?

通常,无论使用哪种语言,名字都是相同的。因此,每当我引用 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 部分正在进行中,但工作量很大。

相关内容