biblatex: 언어에 따라 저자 이름을 변경하시겠습니까?

biblatex: 언어에 따라 저자 이름을 변경하시겠습니까?

일반적으로 이름은 어떤 언어에서든 동일하게 유지됩니다. 그래서 내가 Knuth의 작품을 인용할 때마다 - 그것이 영어 기사이든 독일어 기사이든 - 나는 그를 인용할 것입니다 Donald E. Knuth.

고대 또는 중세 이름의 경우 항상 그런 것은 아닙니다. 그들은 다른 언어로 다르게 철자를 사용합니다. 영어로 된 두 가지 예 | 독일어 | 프랑스 국민:

  • 아리스토텔레스 | 아리스토텔레스 | 아리스토테스
  • 토마스 아퀴나스 | 토마스 폰 아퀸 | 토마스 다퀸

즉, 영어 기사를 작성할 때는 bib영어 이름이 포함된 -file이 필요하지만, 독일어 기사를 작성하려면 bib 파일을 검토하여 그에 따라 이름을 변경해야 합니다. 실제로 영어나 독일어로 출판하는 빈도에 따라 바쁘게 지내고 오류가 발생하기 쉽습니다.

따라서 하나의 단일 bib파일 에 이미 다른 이름이 포함되어 있고 biblatex문서에 사용된 기본 언어에 따라 올바른 이름을 선택할 수도 있습니다. 어떤 아이디어가 있나요?

NB: 나는 하나의 문서에서 Aristotle과 Aristoteles라는 철자를 모두 사용하고 싶지 않습니다(다음 MWE를 보면 알 수 있듯이). 물론 기사의 기본 언어가 영어라면 아리스토텔레스에 대한 모든 언급은 그의 이름의 영어 철자를 사용합니다. 그러나 나는 (a) bib매번 -files를 편집할 필요 없이, 또는 (b) 일반적으로 하나의 단일 bib-file이 아닌 두 개의 다른 파일을 각 언어별로 하나씩 유지하거나 (c) 없이 다른 언어로 기사를 작성할 수 있기를 원합니다 . ) 하나의 bib파일 에 두 개의 서로 다른 항목이 있음

MWE

% !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 부분은 진행 중이지만 꽤 많은 작업이 진행 중입니다.

관련 정보