将选项传递给每个命令(尤其是 biblatex 中的 \printbibliography)

将选项传递给每个命令(尤其是 biblatex 中的 \printbibliography)

在一本包含许多子书目的大型书中,我希望确保bibchecks每次调用时都会执行关键的\printbibliography。通常,\printbibliography[check=...]每次只需调用一次,但这是一个大型的多用户项目,我希望绝对确保存在,而check无需检查每次调用。据我所知,biblatex 不支持设置默认选项。

根据 biblatex 手册,我认为可以使用\AtEveryBiblistitem{subbibliography}{<code>}(§4.10.6) 来完成。但是没有使用示例,我不知道<code>这里需要什么。

一般来说,这是在每次出现时附加可选参数的问题,因此每次都\printbibliograhy[options]更改为\printbibliography[check=...,options]。所以我想我正在寻找一个类似的东西\PassOptionsToPackage,但我还没有遇到过。

答案1

没有\PassOptionsToPackage与 相对应的功能\printbibliography。如果您真心认为可能需要此功能,可以打开功能请求:https://github.com/plk/biblatex/issues

在这个特殊情况下,可以修补\printbibliography(或者更确切地说是修补其内部实现),这样如果没有其他请求,check就会始终应用默认值(因为每个只能调用一个 bibcheck)。当然,这在很大程度上依赖于各种内部因素。check\printbibliography

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

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

\addbibresource{biblatex-examples.bib}

\makeatletter
\pretocmd{\blx@printbibliography}
  {\blx@key@bibcheck{onlyart}}
  {}{}
\makeatother

\defbibcheck{onlyart}{%
  \ifentrytype{article}
    {}
    {\skipentry}%
}

\defbibcheck{onlybook}{%
  \ifentrytype{book}
    {}
    {\skipentry}%
}

\begin{document}
\cite{sigfridsson,worman,nussbaum,cicero}
\printbibliography

\printbibliography[check=onlybook]
\end{document}

第一个参考书目仅显示 <code>sigfridsson</code>,第二个显示所有其他条目。

我同意 gusbrs 的评论:你想应用一次检查,这有点奇怪全部 \printbibliographys. 在这种情况下,似乎应该有一个更优雅的解决方案,例如 sourcemap 或dataonly

相关内容