这里的根本问题是怎么能在有来源可引用的情况下才打印参考书目呢?
背景
我正在尝试扩大小包装(起初由 Jackson Taylor 和 Becca Funke 编写的论文格式符合 MLA 13 标准。(这种格式通常用于文学类课程。)
该软件包目前提供基本的格式化功能,例如(看起来像)自定义/maketitle
和正确的运行标题(Last \thepage
)。我正在尝试使其更具功能性/健壮性。这包括越来越多的功能:
- 自然使用
\author
\date
支持- 可选的标题页和摘要
- 更强大的书目处理
- 对“可定制”内容进行一般定制,例如“引用的作品”/“参考文献”/等等。
丰富的背景
目前,mla13
只要您告诉它,它就会打印参考书目。由于这是总是在 MLA 论文的末尾,我刚刚使用了适当的命令来执行它\end{document}
。这一小步自动化带来了一个问题——如何将参考文献聪明地打印的?也就是说,如果没有要引用的来源,那么出现一张空白页写着“参考文献”就有点尴尬了。
肉
使用biblatex
,是否可以检查并查看任何文档中是否引用了源?我查看了文件job.bbl
,似乎如果可以检查\entry
文件中是否未找到该字符串,则这足以作为开关。我已经检查了原语\read
和\readline
,但老实说,我不知道如何应用这些信息(我也不太了解它)。
我描述的方法可行吗?如果可行,如何实现?有没有更好的方法来实现?
答案1
命令
\printbibliography[heading=<heading>,...]
当文件不包含任何条目时,不会打印任何内容bbl
。如果引文件中bbl
您想要考虑的条目,然后使用类别。命令
\printbibliography[heading=<heading>,category=<category>,...]
不会打印任何内容,只要为空,并且排除和<category>
中的附加选项设置。下面的示例考虑了文档类。其默认标题不会发出分页符,但我们可以使用重新定义它。标准、KOMA 脚本和回忆录文档类的默认标题定义可以在中找到。...
check
filter
article
bibliography
\defbibheading
biblatex.def
\documentclass{article}
\usepackage[defernumbers]{biblatex}
% add every cited article to a category
% (nb: this excludes entries accessed via \nocite)
\DeclareBibliographyCategory{cited}
\AtEveryCitekey{\addtocategory{cited}{\thefield{entrykey}}}
% define bibliography heading that issues a page break
\defbibheading{bibliography}[\refname]{%
\clearpage
\section*{#1}%
\markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}
\addbibresource{biblatex-examples.bib}
\begin{document}
Filler text.
% More filler text \parencite{companion}.
\printbibliography[heading=bibliography,title={Works cited},category=cited]
\end{document}
使用\AtEveryCitekey
仅打印明确引用的条目的参考书目,不包括通过 访问的条目\nocite
。要考虑bbl
文件中所有要打印的条目,请使用:
\makeatletter
\AtDataInput{\iftoggle{blx@skipbib}{}{\addtocategory{cited}{\thefield{entrykey}}}}
\makeatother
空值\printbibliography
会在日志中生成警告。为了避免这种情况,您可以使用布尔标志来指示引用。
\documentclass{article}
\usepackage[defernumbers]{biblatex}
\newbool{anycited}
\AtEveryCitekey{%
\ifbool{anycited}{}{\global\booltrue{anycited}}}
\newrobustcmd*{\printworkscited}{%
\ifbool{anycited}{\printbibliography}{\printnothing}}
\def\printnothing[#1]{}
\defbibheading{bibliography}[\refname]{%
\clearpage
\section*{#1}%
\markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}
\addbibresource{biblatex-examples.bib}
\begin{document}
Filler text.
% More filler text \parencite{companion}.
\printworkscited[heading=bibliography,title={Works cited}]
\end{document}
对于此文档,biber 将发出无引用警告。对此你无能为力。挂钩\printbibliography
可能\end{document}
看起来很方便,但你正在强迫用户运行 biber。当我写一篇不使用任何书目数据的论文时,这对我来说没有多大意义。你可以使用 BibTeX 避开其中一些问题,但要以许多 biblatex 功能为代价。