\citefield 结果上的字符串比较

\citefield 结果上的字符串比较

我正在使用\citeall自定义条目格式化程序列出 bib 文件中的所有条目,但我想有条件地格式化特定期刊的条目。为此,我尝试使用\ifthenelse字符串与 的结果进行比较\citefield{key}{journaltitle},但它不起作用。代码片段:

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

每次输入都会输出“FALSE”,尽管

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

有许多输出为“CoRR”。我认为问题在于字符串\citefield{#1}{journaltitle}正在与“CoRR”进行比较,而我想要的是与\citefield调用宏的结果

我尝试过\expandafter各种其他更复杂的字符串比较示例,但都不起作用。我也修改过xstringxifthenpdftexcmds包。哎呀,甚至使用 etoolbox\ifdefstring

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

没有用。

答案1

您遇到的问题与此问题类似:为什么 \ifx 认为 \MakeUppercase{1} 和 \MakeLowercase{1} 不同?

\citefield是一个打印字段内容的命令,而不是返回文本的函数(TeX 的语言基于宏扩展,因此实际上并没有函数本身,这是一个完全不同的问题)。

更熟悉 BibLaTeX 内部结构的人可能能够找到一种合理的方法来提取期刊标题(并且我猜想如果您能够更明确地说明您的最终目标,那么可能存在一些预先准备好的东西可以做您想做的事情)。

答案2

这与对 \cite 返回的引文应用字符串替换

作为唐·霍塞克解释他的回答,biblatex\...cite...命令用于排版,它们不会扩展为(或返回)可排版文本本身。这意味着使用普通的 TeX 工具,您既不能比较也不能替换\...cite...命令生成的输出部分和简单文本。

可以比较 中的字段内容biblatex,但这必须在不同的级别进行,即在“biblatex上下文”中。通常这不是问题,因为如果您想影响引文或参考书目的输出,无论如何您都必须在该上下文中工作。

这是一个使用 的非常简单的例子\iffieldequalstr。我们使用\AtEveryBibitem来挂钩到biblatex上下文:通常,您会在修改的 bibmacro 中使用这样的测试。

\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)。《论公务员制度的重要性》。收录于:CoRR.//FSigfridsson, Emma 和 Ulf Ryde (1998)。《从电势和电矩推导原子电荷的方法比较》。收录于:Journal of Computational Chemistry 19.4,第 377-395 页。doi:10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P。


可能还有其他方法可以比通过对某些字段进行字符串比较(这总是有点棘手)更好地检测某些类别的条目。如果您要查找的属性无法从现有数据中轻松确定,则通常需要定义一个新选项或明确设置一个关键字。


如果你参考 arXiv CoRR (https://arxiv.org/corr),那么我认为,就像 arXiv 本身一样,CoRR 并不是真正的期刊。对于这样的条目,我会使用@online(cf.biblatex 书目条目中没有期刊标题字段的 @article 格式)。

相关内容