通常,無論哪種語言,名稱都保持不變。因此,每當我引用 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 部分正在進行中,但工作量相當大。