Bedingtes Ausblenden von Teilen von Bibtex-Feldern abhängig vom Sprachfeldwert

Bedingtes Ausblenden von Teilen von Bibtex-Feldern abhängig vom Sprachfeldwert

Ich möchte mit Biber ein Dokument mit einer Bibliographie erstellen, indem ich XeLaTeX verwende. In der Bibliographie sind sowohl chinesische Bücher und Artikel als auch englische oder deutsche. Einige der Autoren haben Artikel (oder Bücher, was hier nicht wirklich wichtig ist) sowohl auf Chinesisch als auch auf Englisch geschrieben. In den chinesischen Artikeln möchte ich dem Autor auch einen chinesischen Namen in Schriftzeichen geben, während dies in seinen englischen Artikeln nicht erforderlich ist.

Unten sehen Sie ein Beispiel aus meiner .bib-Datei. Die \zh{}Funktion wird verwendet, um zu verhindern, dass LaTeX auch die Zeichen in Fußnoten druckt:

@article{Liu2008,
  author    = {Liu, {Guofu \zh{(刘国福)}}},
  title     = {The Latest Development of Immigration Law: On the Transformation of China's Emmigration and Immigration Administration Law (移民法的最新发展——兼论中国出入境管理法的改造和重塑)},
  journal   = {Journal of Henan Administrative Institute of Politics and Law (河南省政法管理干部学院学报)},
  year      = {2008},
  volume    = {5},
  pages     = {46--58},
  language  = {chinese},
  keywords  = {article,hani}
}

@book{Liu2011,
  author    = {Liu, {Guofu \zh{(刘国福)}}},
  title     = {Chinese Immigration Law},
  year      = {2011},
  publisher = {Ashgate},
  address   = {Farnham},
  language  = {english},
  keywords  = {monography,latn}
}

Der Punkt ist nun: Biber erkennt den Autor natürlich nur dann als denselben, wenn der Inhalt der Autorenfelder in beiden Datensätzen gleich ist. Wenn ich die chinesischen Schriftzeichen auch im englischen Artikel nicht verwende, schreibt Biber den vollständigen Namen, um die „beiden“ Autoren unterscheidbar zu machen, und ignoriert dabei die Tatsache, dass sie tatsächlich identisch sind. Daher muss ich die chinesischen Schriftzeichen auch in englischen oder deutschen Artikeln in den Autorennamen aufnehmen.

Dabei habe ich alles so hinbekommen, wie ich wollte: In der Bibliographie folgen die Autorennamen dem Muster „LIU, Guofu (刘国福) (2008)“, und in den Fußnoten steht nur „LIU 2008“ (sofern kein anderer Autor mit dem Namen Liu vorkommt).

Dies habe ich mit dem folgenden Codeausschnitt im Präambelteil meiner .tex-Datei erreicht:

\providecommand{\zh}[1]{}
\AtBeginBibliography{%
 \renewcommand*{\zh}[1]{#1}
}

Aber: Wie sage ich LaTeX, dass der \zh{}Teil im Autorenfeld nicht gedruckt werden soll, wenn für den Eintrag nicht Chinesisch als Sprache eingestellt ist? Gibt es eine Möglichkeit, dies bedingt festzulegen? Auch in den Fußnoten sollten die chinesischen Schriftzeichen niemals erscheinen. Es wäre schön, wenn ich LaTeX direkt in der .tex-Datei sagen könnte, wie das geht.

Es gibt auch Artikel mit mehreren Autoren, die dann dem Muster „WANG, Liping (王丽萍); ZHANG, Ailing (张爱玲) (2008)“ entsprechen sollten, was die Verwendung eines weiteren Eingabefelds für die chinesischen Schriftzeichen wohl etwas kompliziert macht, weil dann alle Namen in chinesischen Schriftzeichen nach der Liste der Autorennamen in lateinischen Schriftzeichen kämen.


Bearbeiten (22.03.2014):

Es scheint, dass mein Problem bereits anderswo behandelt wurde:

So erstellen Sie mehrsprachige (Englisch, Japanisch) Bibliographien mit Biblatex, Biber und Polyglossia

Ab bibLaTeX 3.0 und bibLaTeX 2.0 (beide Versionen befinden sich derzeit im experimentellen Stadium) gibt es die Möglichkeit, Transkriptionen oder Übersetzungen für die meisten Felder zu speichern und, was noch erstaunlicher ist, es gibt eine Möglichkeit, den Anzeigemodus (Originalsprache anzeigen, Übersetzung anzeigen usw.) für jeden .bib-Eintrag separat einzustellen.

Bearbeiten (23.03.2014):

Ein anderer Ansatz unter Verwendung des Namenszusatzes:

https://tex.stackexchange.com/a/66825/47927

Dies scheint ein funktionierendes Beispiel für den Vorschlag von Ienissei zu sein.

Antwort1

Um endlich eine umfassende Antwort auf meine eigene Frage zu geben, damit Sie später darauf zurückgreifen können, wird das Folgende das bewirken, was ich ursprünglich wollte:

Zunächst einmal besteht keine Notwendigkeit, das \zh{}Token zu verwenden, da dieses Beispiel mit der Verwendung des Namenszusatzes funktioniert, wie hier von Audrey beschrieben:https://tex.stackexchange.com/a/66825/47927

Ich habe den Teil von Audreys Vorschlag nicht verwendet titleaddon, da ich ihn nicht brauche. Außerdem habe ich mich an die Reihenfolge „Nachname-Vorname“ gehalten.

Die Bibliographieeinträge sollten also wie folgt aussehen (die Schlüsselwörter „latn“ oder „hani“ sollen das Schriftsystem des jeweiligen Artikels darstellen und dienen dazu, den chinesischen Teil des Namens bedingt auszublenden):

@article{Liu2008,
  author    = {Liu, 刘国福, Guofu},
  title     = {The Latest Development of Immigration Law: On the Transformation of China's Emmigration and Immigration Administration Law (移民法的最新发展——兼论中国出入境管理法的改造和重塑)},
  journal   = {Journal of Henan Administrative Institute of Politics and Law (河南省政法管理干部学院学报)},
  year      = {2008},
  volume    = {5},
  pages     = {46--58},
  language  = {chinese},
  keywords  = {article,hani}
}

@book{Liu2011,
  author    = {Liu, 刘国福, Guofu},
  title     = {Chinese Immigration Law},
  year      = {2011},
  publisher = {Ashgate},
  address   = {Farnham},
  language  = {english},
  keywords  = {monography,latn}
}

Nun der Teil für die .tex-Datei (leicht bearbeitet aus dem oben verlinkten Beitrag von Audrey):

% Keep name affixes for English names
\forcsvlist{\listadd\nameaffixlist}{Junior,Senior}
\newcommand{\ifnameaffix}[1]{%
 \ifboolexpr{test{\ifrmnum{#1}} or test{\ifinlist{#1}{\nameaffixlist}}}}

% Set label format using last-first order
\DeclareNameFormat{labelname}{%
 \ifboolexpr{test{\ifblank{#7}} or test{\ifnameaffix{#7}}}
  {\ifcase\value{uniquename}%
   \usebibmacro{name:last}{#1}{#3}{#5}{#7}\or
   \ifuseprefix
    {\usebibmacro{name:last-first}{#1}{#4}{#5}{#8}}
    {\usebibmacro{name:last-first}{#1}{#4}{#6}{#8}}\or
    \usebibmacro{name:last-first}{#1}{#3}{#5}{#7}\fi}%
  {\ifnumequal{\value{uniquename}}{0}%
   {\usebibmacro{name:cjk}{#1}{}{}}
   {\usebibmacro{name:cjk}{#1}{#3}{}}}%
 \usebibmacro{name:andothers}
}

% Set name field format also using last-first order
\DeclareNameFormat{last-first}{%
 \ifboolexpr{test{\ifblank{#7}} or test{\ifnameaffix{#7}}}
  {\iffirstinits
   {\usebibmacro{name:last-first}{#1}{#4}{#5}{#7}}
   {\usebibmacro{name:last-first}{#1}{#3}{#5}{#7}}}
  {\usebibmacro{name:cjk}{#1}{#3}{#7}}%
 \usebibmacro{name:andothers}
}
\DeclareNameAlias{sortname}{last-first}
\DeclareNameAlias{default}{last-first}

% Making Chinese name appear after first name in parentheses, but only if the keyword 'hani' exists (see bib entries above for reference)
\newbibmacro*{name:cjk}[3]{%
 \usebibmacro{name:delim}{#2#3#1}%
 \usebibmacro{name:hook}{#2#3#1}%
 \mkbibnamelast{#1}%
 \ifblank{#2}{}{\bibnamedelimd\mkbibnamefirst{#2}}%
 \ifkeyword{hani}{%
  \ifblank{#3}{}{\bibnamedelimd\mkbibnameaffix{\mkbibparens{#3}}}%
 }{}
}

\AtEveryBibitem{\clearlist{language}}
\AtBeginBibliography{%
 \renewcommand*{\multinamedelim}{\addsemicolon\space}
}

Eine Sache ist zu beachten: Wenn in der Bibliographie nur das erste Vorkommen des Autors angezeigt wird und die folgenden Vorkommen durch einen Bindestrich ersetzt werden, wählt dieses Skript das erste Vorkommen abhängig von der Sprache des ersten Eintrags. Wenn also der erste Eintrag nicht chinesisch ist, einer der folgenden Einträge jedoch schon, wird der chinesische Name nirgendwo erscheinen.


Bearbeiten (22.01.2018):

Die Makronamen name:lastund name:firstwurden in name:familyund geändert name:given, das Makro \mkbibnamefirstwurde dementsprechend in \mkbibnamegivenund \iffirstinitsin umbenannt \ifgiveninits. Des Weiteren \ifblanksollte in geändert werden \ifdefvoid. Ich habe diese Antwort nicht vor Kurzem getestet. Ich vermute, dass noch einige andere Dinge geändert werden müssen, da die BibLaTeX-Pakete in der Zwischenzeit mehrmals aktualisiert wurden.

Dies ist mein endgültiges Setup als MWE (obwohl es ziemlich viel Code ist):

\begin{filecontents}{example.bib}
    @article{Liu2008,
      author    = {Liu, 刘国福, Guofu},
      title     = {The Latest Development of Immigration Law: On the Transformation of China's Emmigration and Immigration Administration Law (移民法的最新发展——兼论中国出入境管理法的改造和重塑)},
      journal   = {Journal of Henan Administrative Institute of Politics and Law (河南省政法管理干部学院学报)},
      year      = {2008},
      volume    = {5},
      pages     = {46--58},
      language  = {chinese},
      keywords  = {article,hani}
    }

    @book{Liu2011,
      author    = {Liu, 刘国福, Guofu},
      title     = {Chinese Immigration Law},
      year      = {2011},
      publisher = {Ashgate},
      address   = {Farnham},
      language  = {english},
      keywords  = {monography,latn}
    }
\end{filecontents}

\documentclass{article}

\usepackage{fontspec}
\setmainfont[SmallCapsFeatures={LetterSpace=2}]{TeX Gyre Termes}

\usepackage{xeCJK} 
\setCJKmainfont[Script=CJK]{Noto Serif CJK SC}
\CJKsetecglue{\,}

\usepackage[
 backend=biber,
 language=autobib,
 autolang=hyphen,
 style=authoryear,
 defernumbers=true,
 sortlocale=en-GB,
 urldate=long,
 dateabbrev=false,
 sortcites=true,
 sorting=anyvt,
 safeinputenc
 ]{biblatex}
% =====

\renewbibmacro*{labeltitle}{\iffieldundef{shorttitle}%
 {\printfield{title}\clearfield{title}}%
 {\mkbibemph{\printfield{shorttitle}}\addspace\printtext[parens]{\printfield{year}}}%
}

\renewbibmacro*{date+extradate}{\ifkeyword{law}%
 {}%
 {\printtext[parens]{%
   \iflabeldateisdate%
    {\printfield{issue}\setunit*{\addspace}\printdateextra}%
    {\printlabeldateextra}}}%
}
\renewbibmacro*{issue+date}{\ifkeyword{law}%
 {}%
 {\iflabeldateisdate%
  {\printfield{issue}\setunit*{\addspace}\printtext[parens]{\printdate}}%
  {\printtext[parens]{\printfield{issue}\setunit*{\addspace}\printdate}}}%
}
\renewbibmacro*{cite:labeldate+extradate}{\ifkeyword{law}%
 {}%
 {\iffieldundef{labelyear}%
  {}%
  {\printtext[bibhyperref]{\mkbibparens{\printlabeldateextra}}}}%
}

\renewcommand*{\multinamedelim}{\addnbthinspace\slash\thinspace}
\renewcommand*{\finalnamedelim}{\multinamedelim}
\renewcommand*{\labelnamepunct}{\addcolon\addspace}
\renewcommand*\mkbibnameprefix[1]{\textsc{#1}}
\renewcommand*\mkbibnamefamily[1]{\textsc{#1}}
\renewcommand*\bibnamedash{\rule[.48ex]{3em}{.5pt}\addspace}
\DeclareFieldFormat*{citetitle}{\mkbibemph{#1}}
\DeclareFieldFormat*{extradate}{\addnbthinspace\mknumalph{#1}}
\DeclareFieldFormat*{url}{URL\addcolon\addspace\url{#1}}

% =====
% Settings for Chinese names

\forcsvlist{\listadd\nameaffixlist}{Junior,Senior}

\newcommand{\ifnameaffix}[1]{%
 \ifboolexpr{ test {\ifrmnum{#1}} or test {\xifinlist{#1}{\nameaffixlist}} }}

% Based on definitions from biblatex.def

\newbibmacro*{name:cjk}[3]{%
 \usebibmacro{name:delim}{#2#3#1}%
 \usebibmacro{name:hook}{#2#3#1}%
 \mkbibnamefamily{#1}%
 \ifdefvoid{#2}{}{\bibnamedelimd\mkbibnamegiven{#2}}%
 \ifkeyword{hani}{%
  \ifdefvoid{#3}{}{\bibnamedelimd\mkbibnamesuffix{\mkbibparens{\upshape #3}}}%
 }{}}
 
\newbibmacro*{name:cjk-short}[3]{%
 \usebibmacro{name:delim}{#2#3#1}%
 \usebibmacro{name:hook}{#2#3#1}%
 \mkbibnamefamily{#1}%
 \ifdefvoid{#2}{}{\bibnamedelimd\mkbibnamegiven{#2}}%
 \ifkeyword{hani}{%
  \ifdefvoid{#3}{}{}%
 }{}}

\DeclareNameFormat{given-family}{%
 \ifboolexpr{ test {\ifdefvoid{\namepartsuffix}} or test {\ifnameaffix{\namepartsuffix}} }%
  {\ifgiveninits%
   {\usebibmacro{name:given-family}
    {\namepartfamily}
    {\namepartgiveni}
    {\namepartprefix}
    {\namepartsuffix}}%
   {\usebibmacro{name:given-family}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}}}%
  {\usebibmacro{name:cjk}{\namepartfamily}{\namepartgiven}{\namepartsuffix}}%
 \usebibmacro{name:andothers}}

\DeclareNameFormat{family-given}{%
 \ifboolexpr{ test {\ifdefvoid{\namepartsuffix}} or test {\ifnameaffix{\namepartsuffix}} }%
  {\ifgiveninits%
   {\usebibmacro{name:family-given}
    {\namepartfamily}
    {\namepartgiveni} 
    {\namepartprefix}
    {\namepartsuffix}}%
   {\usebibmacro{name:family-given}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}}}%
  {\usebibmacro{name:cjk}{\namepartfamily}{\namepartgiven}{\namepartsuffix}}%
 \usebibmacro{name:andothers}}

\DeclareNameFormat{family-given/given-family}{%
 \ifboolexpr{ test {\ifdefvoid{\namepartsuffix}} or test {\ifnameaffix{\namepartsuffix}} }%
  {\ifnumequal{\value{listcount}}{1}%
   {\ifgiveninits%
    {\usebibmacro{name:family-given}
    {\namepartfamily}
    {\namepartgiveni}
    {\namepartprefix}
    {\namepartsuffix}}%
   {\usebibmacro{name:family-given}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}}%
   \ifboolexpe{ test {\ifdefvoid\namepartgiven} and test {\ifdefvoid\namepartprefix} }%
    {}%
    {\usebibmacro{name:revsdelim}}}%
   {\ifgiveninits%
    {\usebibmacro{name:given-family}
     {\namepartfamily}
     {\namepartgiveni}
     {\namepartprefix}
     {\namepartsuffix}}%
    {\usebibmacro{name:given-family}
     {\namepartfamily}
     {\namepartgiven}
     {\namepartprefix}
     {\namepartsuffix}}}}%
  {\usebibmacro{name:cjk}{\namepartfamily}{\namepartgiven}{\namepartsuffix}}%
 \usebibmacro{name:andothers}}
  
\DeclareNameFormat{labelname}{%
 \ifcase\value{uniquename}%
  \usebibmacro{name:family}
   {\namepartfamily}
   {\namepartgiven}
   {\namepartprefix}
   {\namepartsuffix}%
  \or%
  \ifboolexpr{ test {\ifdefvoid{\namepartsuffix}} or test {\ifnameaffix{\namepartsuffix}} }%
   {\ifuseprefix%
    {\usebibmacro{name:given-family}
     {\namepartfamily}
     {\namepartgiven}  % i
     {\namepartprefix}
     {\namepartsuffix}}% i
    {\usebibmacro{name:given-family}
     {\namepartfamily}
     {\namepartgiven}   % i
     {\namepartprefix}  % i
     {\namepartsuffix}}}% i
   {\usebibmacro{name:cjk-short}{\namepartfamily}{\namepartgiven}{\namepartsuffix}}%
 \or%
  \ifboolexpr{ test {\ifdefvoid{\namepartsuffix}} or test {\ifnameaffix{\namepartsuffix}} }%
   {\usebibmacro{name:given-family}%
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}}%
   {\usebibmacro{name:cjk-short}{\namepartfamily}{\namepartgiven}{\namepartsuffix}}%
 \fi%
 \usebibmacro{name:andothers}}
 
\DeclareFieldFormat{citetitle}{\mkbibemph{#1}\ifkeyword{law}{\addspace\printtext[parens]{\printfield{year}}}{}}

\AtEveryBibitem{\clearlist{language}}
\AtBeginBibliography{%
 \renewcommand*{\multinamedelim}{\addsemicolon\addspace}%
}

\DefineBibliographyExtras{english}{%
 \protected\def\mkbibdatelong#1#2#3{%
  \iffieldundef{#3}
   {}
   {\stripzeros{\thefield{#3}}%
    \iffieldundef{#2}{}{\nobreakspace}}%
  \iffieldundef{#2}
   {}
   {\mkbibmonth{\thefield{#2}}%
    \iffieldundef{#1}{}{\space}}%
  \iffieldbibstring{#1}
   {\bibstring{\thefield{#1}}}
   {\stripzeros{\thefield{#1}}}%
 }%
}

\addbibresource{example.bib}

\begin{document}

Some text.\footnote{\cite{Liu2008}, \cite{Liu2011}.}

\printbibliography

\end{document}

Die Ausgabe für die Bibliographie lautet:

Bildbeschreibung hier eingeben

Die Ausgabe für die Fußnoten lautet:

Bildbeschreibung hier eingeben

verwandte Informationen