biblatex 编辑页面的动态打印方式

biblatex 编辑页面的动态打印方式

我正在尝试让我的书目页面打印动态适应页面字段的内容。我想要实现的是检查是否有页面范围或只是页面数量(搜索 - 也许..?)然后在以下之间切换:第 2-5 页 <-> 4 页,但我找不到任何布尔测试来检查破折号...任何帮助都将不胜感激!

答案1

对于标记为的字段范围字段 biblatex具有特殊宏\rangelen{<field>}来获取范围的跨度/长度。单个页面返回1,实际范围给出更高的数字。

因此,您可以使用以下方法检查单个页面与某个范围

\DeclareFieldFormat{pages}{%
  \ifnumless{\rangelen{pages}}{2}
    {single page: #1}
    {page range: #1}}

这使

“Appleby, Humphrey (1980)。《论公务员制度的重要性》,单页:345。”和“Elk, Anne (1972)。《雷龙理论》。《恐龙杂志》第 14 期,页码范围:345–346。”

更多信息\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作为一种解决方法。

“Appleby, Humphrey (1980)。论公务员制度的重要性。345 页。”和“Elk, Anne (1972)。《关于雷龙的理论》。《恐龙杂志》14,第 345-346 页。”

您还可以设置一些取决于条目类型的内容。通常@article,,,,... 将有一个包含页面范围的字段,而,,,... 将有@incollection一个。@inbookpages@book@collectionpagetotal

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}

相关内容