作为之前问题关于如何自定义biblatex-chicago
将期刊的卷数和发行号格式化为“ volume
。number
”,我现在想知道是否有一种简单的方法可以修复@gusbrs 对该问题的回答所产生的输出。
梅威瑟:
\documentclass{article}
\usepackage[notes]{biblatex-chicago}
\begin{filecontents*}{\jobname.bib}
@article{browning1964byz.scholarship,
Author = {Browning, Robert},
Journal = {Past \& Present},
Number = {28},
Pages = {3--20},
Title = {Byzantine Scholarship},
Year = {1964}}
\end{filecontents*}
\addbibresource{\jobname.bib}
% solution from @gusbrs
\DeclareFieldFormat{journum}{#1}
\usepackage{xpatch}
\xpatchbibmacro{cjournal+ser+vol+num}{% search
\printfield[jourvol]{volume}%
\setunit{\addcomma\addspace}}{% replace
\printfield[jourvol]{volume}%
\setunit{\adddot}}
{}{}% <success> and <failure>
\pagestyle{empty}
\begin{document}
\cite{browning1964byz.scholarship}
\end{document}
当前输出为:
罗伯特·布朗宁,《拜占庭奖学金》过去,现在.28(1964):3-20。
我希望它变成:
罗伯特·布朗宁,《拜占庭奖学金》过去,现在28 (1964):3-20。
(期刊名称和发行号之间的是空格而不是句号)。
答案1
仅需进行一个小的修改:使用\setunit*{\adddot}
而不是\setunit{\adddot}
。
带星号的版本仅在最后一条命令打印了任何内容时才将标点符号命令插入缓冲区\print...
。在这种情况下,如果没有打印,它将不执行任何操作volume
,这意味着缓冲区中的前一个标点符号仍然存在并被打印。
\documentclass{article}
\usepackage[notes]{biblatex-chicago}
% solution from @gusbrs
\DeclareFieldFormat{journum}{#1}
\usepackage{xpatch}
\xpatchbibmacro{cjournal+ser+vol+num}
{\printfield[jourvol]{volume}%
\setunit{\addcomma\addspace}}
{\printfield[jourvol]{volume}%
\setunit*{\adddot}}
{}{}% <success> and <failure>
\begin{filecontents*}{\jobname.bib}
@article{browning1964byz.scholarship,
author = {Browning, Robert},
journal = {Past \& Present},
number = {28},
pages = {3--20},
title = {Byzantine Scholarship},
year = {1964},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\cite{browning1964byz.scholarship}
\end{document}
看着https://academic.oup.com/past/issue/28/1这里有一个论点,即 28 实际上是 ,volume
并且所有卷都只有一个琐碎的(问题)number
,即number = {1},
,可以删除。因此条目可能看起来像
@article{browning1964byz.scholarship,
author = {Browning, Robert},
journal = {Past \& Present},
volume = {28},
pages = {3--20},
title = {Byzantine Scholarship},
year = {1964},
}
这将消除立即修复的需要(仍然应该保留,因为它是有意义的)。