biblatex: изменить имя автора в зависимости от языка?

biblatex: изменить имя автора в зависимости от языка?

Обычно имя остается неизменным на любом языке. Поэтому, когда я цитирую работу Кнута — будь то в английской статье или немецкой — я буду цитировать его как Donald E. Knuth.

Это не всегда касается древних или средневековых имен. Они пишутся по-разному в разных языках. Два примера на английском | немецком | французском:

  • Аристотель | Аристотель | Аристотель
  • Фома Аквинский | Томас фон Аквин | Томас д'Акен

Это означает, что когда я пишу статью на английском языке, мне нужен файл bib, содержащий английские имена, но когда я хочу написать статью на немецком языке, мне нужно просмотреть свой файл bib и изменить имена соответствующим образом. В зависимости от того, как часто я фактически публикуюсь на английском или немецком языке, это может занять меня и привести к ошибкам.

Итак, я подумал, может быть, я мог бы иметь разные имена, уже включенные в один bibфайл, и позволить biblatexвыбирать правильное имя в соответствии с основным языком, используемым в документе. Есть идеи?

NB: Я не хочу использовать в одном документе оба написания 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 в процессе, но это довольно серьезная работа.

Связанный контент