考虑以下最小示例:
\documentclass{article}
\usepackage{biblatex,filecontents}
\begin{filecontents*}{references.bib}
@book{book1,
author = {A Author},
title = {A title},
chapter = {1},
publisher = {A publisher},
year = {2000}
}
@book{book2,
author = {B Author},
title = {B Title},
chapter = {1-3},
publisher = {B publisher},
year = {2001}
}
\end{filecontents*}
\addbibresource{references.bib}
\DeclareFieldFormat[book]{chapter}{Chapter~\mkcomprange{#1}}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
我如何更新chapter
字段声明的格式(本例中特定于@book
条目),以便能够区分单个和多个章节条目。也就是说,book1
应该按原样打印,而book2
应该打印Chapters 1-5
(注意复数形式)。
我试过
\DeclareFieldFormat[book]{chapter}{%
Chapter\ifnumcomp{\rangelen{chapter}}{>}{1}{s}{}~\mkcomprange{#1}}
但\rangelen
期望一个字段被定义为包含一个范围,但chapter
事实并非如此。
答案1
我们有检查\ifnumeral
和\ifnumerals
。前者检查数字,而后者检查数字范围。我们可以放心地假设,\ifnumeral
当你想要单数字符串时,将产生“true”,而\ifnumerals
当你想要复数字符串时,将产生“true”。
我建议您另外使用参考书目字符串。chapter
已经存在,但没有复数形式chapters
\NewBibliographyString{chapters}
\DefineBibliographyStrings{english}{
chapter = {chapter},
chapters = {chapters}
}
然后你可以使用
\DeclareFieldFormat[book]{chapter}{%
\ifnumerals{#1}
{\ifnumeral{#1}
{\bibstring{chapter}}
{\bibstring{chapters}}}
{}%
~\mkcomprange{#1}}
或者
\DeclareFieldFormat[book]{chapter}{%
\ifnumeral{#1}
{\bibstring{chapter}}
{\ifnumerals{#1}
{\bibstring{chapters}}
{}}%
~\mkcomprange{#1}}
后者或多或少就是这样\mkpageprefix
的。