如何在有引用来源的情况下调用 \printbibliography 和 \section

如何在有引用来源的情况下调用 \printbibliography 和 \section

我正在处理许多论文,其中有一些头文件可以做重要的事情(定义函数等)。我想创建一个新的“页眉”(或“页脚”)文件,其中包含以下内容:

\clearpage
\section{Sources}
\printbibliography
\clearpage

但有些文献没有注明来源,而是添加了一个空白页。

有什么办法可以做到这一点?

\if(numberOfUsedSources > 1) {
    \clearpage
    \section{Sources}
    \printbibliography
    \clearpage
}

这真的很有帮助!

答案1

您可以简单地使用\printbibliography[heading=bibintoc,title={Sources}]。这应该只在有引用条目的情况下打印任何内容,并且在这种情况下会添加标题为“来源”的部分。如果 documentclass 使用章节(例如book),则应改用subbibintoc

由于缺少 MWE,我们不知道您的整体设置的更多细节,我只能猜测,clearpage考虑到出现/不出现的参考书目,可能可以在没有条件的情况下处理 s。

更新:稍微复杂一些,处理\clearpages 也很好。全文:

\documentclass{article}
\usepackage{biblatex}
\usepackage{kantlipsum}

\addbibresource{biblatex-examples.bib}

\defbibheading{myheading}[Sources]{%
    \clearpage%
    \section{#1}}

\defbibnote{mypostnote}{\clearpage}

\begin{document}

\section{Section 1}
\kant[1-4]

\nocite{*}
\printbibliography[heading=myheading,postnote=mypostnote]

\kant[1-4]

\newrefsection
\section{Section 2}

\kant[1-4]

\printbibliography[heading=myheading,postnote=mypostnote]

\kant[1-4]

\end{document}

答案2

在提问时,最好加上最小工作示例这样人们就知道\documentclass你正在使用什么。MWE 还可以让你更轻松地回答你的问题,因为它通常有助于澄清问题所在——并且它为人们提供了可以开始使用的工作代码。

可能有一个标准比布拉特克斯这样做的方法,但如果做不到这一点,我建议创建一个新的布尔值,比如\ifCiting,然后重新定义\cite,以便它首先设置\Citingtrue然后使用真实\cite命令。然后您可以使用它\ifCiting...\fi来打印参考书目部分,也可以不打印。

以下是实现此目的的一种方法:

\documentclass{article}
\usepackage{biblatex}

\let\realCite\cite% save the orginal \cite macro as \realCite for future use
\newif\ifCiting\Citingfalse% no citations by default
\renewcommand\cite[2][]{% optional argument is empty by default
  \Citingtrue% we have at least one citation!
  \if\relax\detokenize{#1}\relax% no optional argument
    \realCite{#2}%
  \else% an optional argument
    \realCite[#1]{#2}%
  \fi%
}

\begin{document}

\ifCiting
    \clearpage
    \section{Sources}
    \printbibliography
    \clearpage
\fi

\end{document}

唯一棘手的是检查可选参数是否为\cite“空”。执行此操作的标准方法是使用以下代码行\if\relax\detokenize{#1}\relax

编辑

正如 Skillmon 在评论中指出的那样,一个更有效(并且“全局”正确)的解决方案是:

\documentclass{article}
\usepackage{biblatex}

\let\realCite\cite% save the orginal \cite macro for future use
\newif\ifCiting\Citingfalse% no citations by default
\renewcommand*\cite{\global\Citingtrue\realCite}

\begin{document}

\ifCiting
    \clearpage
    \section{Sources}
    \printbibliography
    \clearpage
\fi

\end{document}

相关内容