Comparación de cadenas en el resultado de \citefield

Comparación de cadenas en el resultado de \citefield

Estoy usando \citeallun formateador de entradas personalizado para enumerar todas las entradas en mi archivo bib, pero me gustaría formatear condicionalmente las entradas de un diario específico. Para hacer esto, intenté usar \ifthenelseuna cadena de comparación con el resultado de \citefield{key}{journaltitle}, pero no funciona. Retazo:

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

escupe "FALSO" para cada entrada, aunque

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

tiene muchas salidas que son "CoRR". Me imagino que el problema es que la cadena \citefield{#1}{journaltitle}se está comparando con "CoRR", cuando lo que quiero es comparar con elresultado de llamar a la \citefieldmacro.

Probé \expandaftervarios otros ejemplos de comparación de cadenas más elaborados, pero nada funcionó todavía. He jugado con los paquetes y xstringtambién . Diablos, incluso usar etoolbox comoxifthenpdftexcmds\ifdefstring

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

no funcionó.

Respuesta1

Te encuentras con un problema similar al que surgió con esta pregunta:¿Por qué \ifx considera que \MakeUppercase{1} y \MakeLowercase{1} son diferentes?

\citefieldes un comando para imprimir el contenido del campo, y no una función que devuelve el texto (el lenguaje de TeX se basa en la expansión de macros, por lo que realmente no hay funciones per se, lo cual es un tema completamente diferente).

Alguien más familiarizado con los aspectos internos de BibLaTeX podría encontrar una manera de extraer el título de la revista de una manera que tenga sentido (y supongo que posiblemente haya algo preenrollado que haga lo que usted desea si puede ser más explícito sobre cuál es su objetivo final).

Respuesta2

Esto es similar al tema discutido enAplicar un reemplazo de cadena en la cita devuelta por \cite.

ComoDon Hoekexplicado ensu respuestabiblatexLos comandos de , \...cite...están destinados a la composición tipográfica, no se expanden (ni devuelven) el texto tipográfico en sí. Eso significa que con las herramientas TeX normales no se pueden comparar ni reemplazar bits del resultado producido por \...cite...comandos con texto simple.

Es posible comparar el contenido de los campos en biblatex, pero eso tiene que suceder en un nivel diferente, mientras estás en un " biblatexcontexto". Normalmente eso no es un problema, ya que si quieres influir en la producción de citas o en la bibliografía, tienes que trabajar en ese contexto de todos modos.

A continuación se muestra un ejemplo muy sencillo utilizando \iffieldequalstr. Solemos \AtEveryBibitemconectarnos al biblatexcontexto: normalmente usarías una prueba como esta en el bibmacro que modificas.

\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}

Appleby, Humphrey (1980). 'Sobre la importancia de la función pública'. En: CoRR.//FSigfridsson, Emma y Ulf Ryde (1998). 'Comparación de métodos para derivar cargas atómicas a partir del potencial y momentos electrostáticos'. En: Revista de Química Computacional 19.4, págs. 377–395. doi: 10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P.


Puede haber otras formas de detectar ciertas clases de entradas mejor que mediante la comparación de cadenas en ciertos campos (lo cual siempre es un poco complicado). Es común definir una nueva opción o establecer una palabra clave explícitamente en caso de que la propiedad que busca no se pueda establecer fácilmente a partir de los datos ya presentes.


Si se refiere a arXiv CoRR (https://arxiv.org/corr), entonces yo diría que, al igual que el propio arXiv, CoRR no es realmente una revista. Para entradas como esa usaría @online(cf.Formato de @artículo sin campo de título de revista en entradas de bibliografía biblatex).

información relacionada