在一本包含许多子书目的大型书中,我希望确保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}
我同意 gusbrs 的评论:你想应用一次检查,这有点奇怪全部 \printbibliography
s. 在这种情况下,似乎应该有一个更优雅的解决方案,例如 sourcemap 或dataonly
。