Stringvergleich auf \citefield-Ergebnis

Stringvergleich auf \citefield-Ergebnis

Ich verwende \citealleinen benutzerdefinierten Eintragsformatierer, um alle Einträge in meiner Bib-Datei aufzulisten, möchte aber Einträge aus einem bestimmten Journal bedingt formatieren. Dazu habe ich versucht, \ifthenelseeinen Zeichenfolgenvergleich mit dem Ergebnis von durchzuführen \citefield{key}{journaltitle}, aber das funktioniert nicht. Ausschnitt:

\newcommand{\completecite}[1]{%
    \ifstrequal{\citefield{#1}{journaltitle}}{CoRR}{TRUE}{FALSE}
}
\citeall[\completecite]

spuckt bei jedem Eintrag "FALSE" aus, obwohl

\newcommand{\completecite}[1]{%
    \citefield{#1}{journaltitle}
}
\citeall[\completecite]

hat viele Ausgaben, die "CoRR" sind. Ich vermute, das Problem ist, dass die Zeichenfolge \citefield{#1}{journaltitle}mit "CoRR" verglichen wird, obwohl ich eigentlich mit derErgebnis des Aufrufs des \citefieldMakros.

Ich habe es \expandaftermit verschiedenen anderen, aufwändigeren Beispielen für String-Vergleiche versucht, aber nichts hat bisher funktioniert. Ich habe auch an den Paketen und herumgebastelt xstring. xifthenSogar pdftexcmdsdie Verwendung von etoolbox \ifdefstringals

\newcommand{\completecite}[1]{%
    \ifdefstring{\citefield{#1}{journaltitle}}{CoRR}{TRUE}{FALSE}
}
\citeall[\completecite]

hat nicht funktioniert.

Antwort1

Sie stoßen auf ein ähnliches Problem wie bei dieser Frage:Warum betrachtet \ifx \MakeUppercase{1} und \MakeLowercase{1} als unterschiedlich?

\citefieldist ein Befehl zum Drucken des Feldinhalts und keine Funktion, die den Text zurückgibt (die Sprache von TeX basiert auf Makroerweiterung, daher gibt es an sich keine Funktionen, was ein ganz anderes Problem ist).

Jemand, der mit den internen Vorgängen in BibLaTeX besser vertraut ist, kann möglicherweise eine Möglichkeit finden, den Zeitschriftentitel auf sinnvolle Weise zu extrahieren (und ich vermute, dass es möglicherweise etwas Vorgefertigtes gibt, das das tut, was Sie wollen, wenn Sie Ihr Endziel genauer benennen können).

Antwort2

Dies ähnelt dem inWenden Sie einen String-Ersatz auf das Zitat an, wie es von \cite zurückgegeben wird..

AlsDon Hosekerklärt inseine AntwortbiblatexDie Befehle von sind \...cite...für den Schriftsatz gedacht, sie werden nicht in den satzbaren Text selbst erweitert (oder geben ihn zurück). Das bedeutet, dass Sie mit normalen TeX-Tools weder Teile der von \...cite...Befehlen erzeugten Ausgabe mit einfachem Text vergleichen noch ersetzen können.

Es ist zwar möglich, Feldinhalte in zu vergleichen biblatex, aber das muss auf einer anderen Ebene geschehen, nämlich in einem ' biblatexKontext'. Normalerweise ist das kein Problem, denn wenn man die Ausgabe von Zitaten oder die Bibliographie beeinflussen will, muss man ohnehin in diesem Kontext arbeiten.

Hier ist ein sehr einfaches Beispiel mit \iffieldequalstr. Wir verwenden , \AtEveryBibitemum uns in den biblatexKontext einzuklinken: Normalerweise würden Sie einen Test wie diesen in dem Bibmacro verwenden, das Sie ändern.

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\AtEveryBibitem{%
  \iffieldequalstr{journaltitle}{CoRR}
    {T}
    {F}}

\begin{filecontents}{\jobname.bib}
@article{appleby,
  author  = {Humphrey Appleby},
  title   = {On the Importance of the Civil Service},
  journal = {CoRR},
  date    = {1980},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}


\begin{document}
\cite{sigfridsson,appleby}
\printbibliography
\end{document}

TAppleby, Humphrey (1980). „Über die Bedeutung des öffentlichen Dienstes“. In: CoRR.//FSigfridsson, Emma und Ulf Ryde (1998). „Vergleich von Methoden zur Ableitung atomarer Ladungen aus dem elektrostatischen Potential und Momenten“. In: Journal of Computational Chemistry 19.4, S. 377–395. doi: 10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P.


Es gibt möglicherweise andere Möglichkeiten, bestimmte Eintragsklassen besser zu erkennen als durch den Zeichenfolgenvergleich bestimmter Felder (was immer etwas schwierig ist). Es ist üblich, eine neue Option zu definieren oder ein Schlüsselwort explizit festzulegen, falls die gesuchte Eigenschaft aus den bereits vorhandenen Daten nicht leicht ermittelt werden kann.


Wenn Sie sich auf das arXiv CoRR beziehen (https://arxiv.org/corr), dann würde ich argumentieren, dass CoRR, wie auch arXiv selbst, kein richtiges Journal ist. Für solche Einträge würde ich verwenden @online(vgl.Format von @article ohne Zeitschriftentitelfeld in Bibliographieeinträgen in Biblatex).

verwandte Informationen