我正在尝试让我的书目页面打印动态适应页面字段的内容。我想要实现的是检查是否有页面范围或只是页面数量(搜索 - 也许..?)然后在以下之间切换:第 2-5 页 <-> 4 页,但我找不到任何布尔测试来检查破折号...任何帮助都将不胜感激!
答案1
对于标记为的字段范围字段 biblatex
具有特殊宏\rangelen{<field>}
来获取范围的跨度/长度。单个页面返回1
,实际范围给出更高的数字。
因此,您可以使用以下方法检查单个页面与某个范围
\DeclareFieldFormat{pages}{%
\ifnumless{\rangelen{pages}}{2}
{single page: #1}
{page range: #1}}
这使
更多信息\rangelen
请参见第 239 页biblatex
文档。
在评论中,有消息称你正在寻找显示条目总页数的方法@book
。正确的字段应该是pagetotal
。
显然您的文献参考软件不支持该字段。第一步是向该软件的维护者投诉这一缺陷。如果他们声称他们的软件支持biblatex
,那么它应该能够将pagetotal
字段写入.bib
文件。
您应该尝试在参考管理器及其导出中修复该问题.bib
,而不是尝试在 中实施黑客攻击biblatex
。如果您只能导出到,pages
您可以尝试
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=pages, match=\regexp{\A\d+\Z}, final]
\step[fieldset=pagetotal, origfieldval]
\step[fieldset=pages, null]
}
}
}
将所有单值pages
字段转移到pagetotal
作为一种解决方法。
您还可以设置一些取决于条目类型的内容。通常@article
,,,,... 将有一个包含页面范围的字段,而,,,... 将有@incollection
一个。@inbook
pages
@book
@collection
pagetotal
MWE 将两个建议注释掉
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\iffalse
\DeclareFieldFormat{pages}{%
\ifnumless{\rangelen{pages}}{2}
{single page: #1}
{page range: #1}}
\fi
\iffalse
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=pages, match=\regexp{\A\d+\Z}, final]
\step[fieldset=pagetotal, origfieldval]
\step[fieldset=pages, null]
}
}
}
\fi
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{appleby,
author = {Humphrey Appleby},
title = {On the Importance of the Civil Service},
date = {1980},
pages = {345},
}
@article{elk,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
journal = {Journal of Dinosaurs},
volume = {14},
date = {1972},
pages = {345-346},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{elk,appleby}
\printbibliography
\end{document}