biblatex:根據語言更改作者姓名?

biblatex:根據語言更改作者姓名?

通常,無論哪種語言,名稱都保持不變。因此,每當我引用 Knuth 的作品時——無論是在英文文章還是德文文章中——我都會引用他的內容Donald E. Knuth

古代或中世紀的名字並不總是這樣。它們在不同語言中的拼字不同。兩個英語例子 |德語 |法語:

  • 亞里斯多德 |亞里斯多德 |亞里斯多德
  • 托馬斯·阿奎那 |托馬斯·馮·阿奎那 |湯瑪斯·達奎因

這意味著當我寫一篇英文文章時,我需要一個bib包含英文名稱的文件,但是當我想寫一篇德文文章時,我需要瀏覽我的 bib 文件並相應地更改名稱。取決於我實際以英語或德語發表文章的頻率,這可能會讓我很忙並且很容易出錯。

因此,我想也許我可以將不同的名稱包含在一個bib文件中,並biblatex根據文件中使用的主要語言選擇正確的名稱。有任何想法嗎?

注意:我不想在一份文件中同時使用 Aristotle 和 Aristoteles(正如下面的 MWE 可能會讓您想到的那樣)。當然,如果文章的主要語言是英語,那麼所有對亞里斯多德的引用都將使用他名字的英文拼寫。但是,我希望能夠用不同的語言寫文章,而不必(a)bib每次都編輯我的文件,或者(b)通常維護的不是一個bib文件,而是兩個不同的文件,每個文件對應一種語言,或(c ) 在一個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 部分正在進行中,但工作量相當大。

相關內容