始终隐藏“p.”引文前缀,但仅针对特定书籍

始终隐藏“p.”引文前缀,但仅针对特定书籍

我引用了这个帖子

要省略所有引用的页面前缀,请在序言中添加以下内容:

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

我想做完全相同的事情,但只针对一本特定的书(因此对于所有其他书,“p.”都应该出现在引用中)。

同样的答案也说

要抑制单个引文的前缀,请在引文的可选参数中使用 \nopp(感谢 Gonzalo Medina 提供的提示):

\cite[\nopp 1]{A01}

结果正是我想要的,但我不想每次引用那本特定的书时都必须写命令,而是让操作自动化。

我怎样才能实现这个目标?

答案1

使用该pagination字段并赋予其值none以抑制页面前缀。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear]{biblatex}

\begin{filecontents}{\jobname.bib}
@book{elk,
  author     = {Anne Elk},
  title      = {A Theory on Brontosauruses},
  year       = {1972},
  publisher  = {Monthy \& Co.},
  location   = {London},
  pagination = {none},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite[380]{sigfridsson}
ipsum \autocite[12]{elk}

\printbibliography
\end{document}

Lorem(Sigfridsson 和 Ryde 1998,第 380 页)ipsum(Elk 1972,12)

如果你还需要删除逗号,那么你可以使用类似

\DeclareDelimFormat{postnotedelim}{%
  \ifboolexpr{    test {\iffieldpages{postnote}}
              and test {\iffieldequalstr{pagination}{none}}}
    {\addspace}
    {\addcomma\space}%
}

相关内容