
我使用\citeall
自訂條目格式化程式來列出我的圍脖檔案中的所有條目,但我想有條件地格式化特定期刊中的條目。為此,我嘗試使用\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
各種其他更複雜的字串比較範例,但還沒有任何效果。我也修改了xstring
,xifthen
和pdftexcmds
包。哎呀,甚至使用 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}
可能還有其他方法可以比透過某些欄位上的字串比較更好地檢測某些類別的條目(這總是有點棘手)。通常會明確定義一個新選項或設定關鍵字,以防您要尋找的屬性無法輕鬆從現有資料建立。
如果您參考 arXiv CoRR (https://arxiv.org/corr),那麼我認為,就像 arXiv 本身一樣,CoRR 並不是真正的期刊。對於這樣的條目我會使用@online
(參見biblatex 參考書目條目中不帶期刊標題欄位的 @article 格式)。