页面范围:在 \autocite 中将连字符输出为短划线

页面范围:在 \autocite 中将连字符输出为短划线

我正在尝试\autocite输出--页面范围,就像 Biblatex 对参考书目条目所做的那样:

输出

这是我的 MWE:

\documentclass{article}
\usepackage[
backend=biber,
style=authoryear-comp,
uniquename=mininit,
uniquelist=minyear,
firstinits=false,
backref=false,
hyperref=true,
useprefix=true]{biblatex}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{Bli74,
  author = {Blinder, Alan S.},
  year = {1974},
  title = {The economics of brushing teeth},
  journaltitle = {Journal of Political Economy},
  volume = {82},
  number = {4},
  pages = {887-891},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

Brushing teeth is expensive \autocite[883-890]{Bli74}.

\printbibliography

\end{document}

答案1

这有点作弊,但作为\mkcomprange正常化范围,你可以尝试

 \setcounter{mincompwidth}{100000}%something large
 \DeclareFieldFormat{postnote}{\mkcomprange[{\mkpageprefix[pagination]}]{#1}}

在此处输入图片描述

答案2

按照功能请求https://github.com/plk/biblatex/issues/293这已在biblatex3.11 中实现(https://github.com/plk/biblatex/pull/674,这花了三年多的时间,但我想,迟做总比不做好。

有一个新的命令\mknormrange,其工作原理与 Ulrike 的答案类似,\mkcomprange但有一个重要的区别,它只\mknormrange规范范围,而不会以任何方式压缩它们。

\mknormrange已添加到默认的 postnote 格式

\DeclareFieldFormat{postnote}{\mkpageprefix[pagination][\mknormrange]{#1}}
\DeclareFieldFormat{volcitepages}{\mkpageprefix[pagination][\mknormrange]{#1}}
\DeclareFieldFormat{multipostnote}{\mkpageprefix[pagination][\mknormrange]{#1}}

因此,问题中的 MWE 现在将给出一个短划线 ( \bibrangedash),无需进一步修改

Blinder 1974,第 883-890 页


要恢复旧的非规范化行为,请添加

\DeclareFieldFormat{postnote}{\mkpageprefix[pagination]{#1}}
\DeclareFieldFormat{volcitepages}{\mkpageprefix[pagination]{#1}}
\DeclareFieldFormat{multipostnote}{\mkpageprefix[pagination]{#1}}

你的序言。


如果您现在想删除页面前缀“p。”/“pp。”,您可能需要考虑保留\mknormrange

\DeclareFieldFormat{postnote}{\mknormrange{#1}}
\DeclareFieldFormat{volcitepages}{\mknormrange{#1}}
\DeclareFieldFormat{multipostnote}{\mknormrange{#1}}

而不仅仅是\DeclareFieldFormat{postnote}{#1}


请注意,该pages格式不使用是\mknormrange因为其内容已由 Biber 预先规范化。

相关内容