Comparação de strings no resultado \citefield

Comparação de strings no resultado \citefield

Estou usando \citeallum formatador de entrada personalizado para listar todas as entradas em meu arquivo bib, mas gostaria de formatar condicionalmente as entradas de um diário específico. Para fazer isso, tentei \ifthenelsecomparar a string com o resultado de \citefield{key}{journaltitle}, mas não está funcionando. Trecho:

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

cospe "FALSE" para cada entrada, mesmo que

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

tem muitas saídas que são "CoRR". Eu acho que o problema é que a string \citefield{#1}{journaltitle}está sendo comparada com "CoRR", quando o que eu quero é comparar com oresultado da chamada da \citefieldmacro.

Eu tentei \expandaftervários outros exemplos de comparação de strings mais elaborados, mas nada funcionou ainda. Eu mexi nos xstringpacotes xifthene pdftexcmdstambém. Caramba, mesmo usando etoolbox \ifdefstringcomo

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

não funcionou.

Responder1

Você está enfrentando um problema semelhante ao que surgiu com esta pergunta:Por que \ifx considera \MakeUppercase{1} e \MakeLowercase{1} diferentes?

\citefieldé um comando para imprimir o conteúdo do campo, e não uma função que retorna o texto (a linguagem do TeX é baseada na expansão de macros, portanto não existem funções em si, o que é outra questão).

Alguém mais familiarizado com os componentes internos do BibLaTeX pode ser capaz de encontrar uma maneira de extrair o título do diário de uma forma que faça sentido (e suponho que possivelmente haja algo pré-lançado que faça o que você deseja, se você puder ser mais explícito sobre qual é o seu objetivo final).

Responder2

Isto é semelhante ao assunto discutido emAplique uma substituição de string na citação retornada por \cite.

ComoDon Hosekexplicado ema resposta dele, os comandos biblatexde \...cite...são destinados à composição tipográfica, eles não se expandem (ou retornam) ao texto digitável em si. Isso significa que com ferramentas TeX normais você não pode comparar nem substituir bits da saída produzida por \...cite...comandos por texto simples.

É possível comparar o conteúdo dos campos biblatex, mas isso tem que acontecer em um nível diferente, enquanto você está em um ' biblatexcontexto'. Normalmente isso não é um problema, pois se você quiser influenciar o resultado das citações ou da bibliografia, terá que trabalhar nesse contexto de qualquer maneira.

Aqui está um exemplo muito simples usando \iffieldequalstr. Usamos \AtEveryBibitempara nos conectar ao biblatexcontexto: Normalmente você usaria um teste como este na bibmacro que você modifica.

\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). 'Sobre a Importância da Função Pública'. In: CoRR.//FSigfridsson, Emma e Ulf Ryde (1998). 'Comparação de métodos para derivar cargas atômicas do potencial e momentos eletrostáticos'. In: Journal of Computational Chemistry 19.4, pp. doi: 10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P.


Pode haver outras maneiras de detectar melhor certas classes de entradas do que pela comparação de strings em determinados campos (o que é sempre um pouco complicado). É comum definir uma nova opção ou definir uma palavra-chave explicitamente caso o imóvel que procura não seja facilmente estabelecido a partir dos dados já presentes.


Se você consultar o arXiv CoRR (https://arxiv.org/corr), então eu diria que, assim como o próprio arXiv, o CoRR não é realmente um diário. Para entradas como essa eu usaria @online(cf.Formato de @artigo sem campo de título de periódico nas entradas bibliográficas do biblatex).

informação relacionada