通常、名前はどの言語でも同じです。したがって、私が Knuth の著作を引用するときは、それが英語の記事であれドイツ語の記事であれ、 と引用しますDonald E. Knuth
。
古代や中世の名前では、必ずしもそうとは限りません。言語によって綴りが異なります。英語、ドイツ語、フランス語の例を 2 つ示します。
- アリストテレス | アリストテレス | アリストテ
- トマス・アクィナス | トーマス・フォン・アクィン | トーマス・ダキン
つまり、英語の記事を書くときはbib
英語の名前を含む -file が必要ですが、ドイツ語の記事を書くときは bib ファイルを調べてそれに応じて名前を変更する必要があります。実際に英語またはドイツ語で出版する頻度によっては、この作業に忙しくなり、エラーが発生しやすくなります。
bib
そこで、さまざまな名前を 1 つのファイルにあらかじめ含めておき、ドキュメントで使用されている主な言語に応じて正しい名前を選択できるようにすればよいのではないかとbiblatex
思いました。何かアイデアはありますか?
注意: 1 つの文書で Aristotle と Aristoteles の両方の綴りを使いたくはありません (次の MWE を見るとそう思うかもしれません)。もちろん、記事の主な言語が英語であれば、Aristotle へのすべての参照では、彼の名前の英語の綴りが使われます。しかし、(a)bib
毎回 -file を編集したり、(b) 一般的に 1 つの-file ではなく、各言語ごとに 1 つずつ 2 つの -file を維持したり、(c) 1 つの-filebib
に 2 つの異なるエントリを入れたりすることなく、異なる言語で記事を書けるようにしたいと考えています。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 部分は進行中ですが、かなりの作業が必要です。