
Ich verwende \citeall
einen 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, \ifthenelse
einen 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 \citefield
Makros.
Ich habe es \expandafter
mit verschiedenen anderen, aufwändigeren Beispielen für String-Vergleiche versucht, aber nichts hat bisher funktioniert. Ich habe auch an den Paketen und herumgebastelt xstring
. xifthen
Sogar pdftexcmds
die Verwendung von etoolbox \ifdefstring
als
\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?
\citefield
ist 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 Antwortbiblatex
Die 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 ' biblatex
Kontext'. 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 , \AtEveryBibitem
um uns in den biblatex
Kontext 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}
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).