我在自动化文档时遇到了一个新问题。要求是在文档末尾插入参考书目。因此我使用\AtEndDocument
from etoolbox
。如下面的 mwe 所示,这工作得很好。
\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{etoolbox}
\usepackage{blindtext}
\usepackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\AtEndDocument{\printbibliography[type=article]}
\begin{document}
\tableofcontents
\Blinddocument
\nocite{*}
% Appendix is optional
% But the bibliography should be printed first
\appendix
\chapter{Last chapter after bibliography}
\blindtext
\end{document}
但还有第二个要求。如果有附录(可选),则必须提供参考书目前附录。现在有两个问题:
- 如何测试文档中是否有附录?
- 如果有附录,如何自动将参考书目插入到附录之前。否则,如果没有附录,请将参考书目放在文档末尾。
答案1
您可以修补该\appendix
命令以告诉它打印参考书目,并在打印时设置标志/切换。然后您可以在 中检查该标志\AtEndDocument
。
正如评论中所解释的那样 \pretocmd
确保书目打印的逻辑性前附录,而\apptocmd
会使参考书目成为附录的一部分。如果您尝试使用 下面的 ,您可以看到两者之间的明显差异\printbibliography[heading=bibnumbered]
。\apptocmd
参考书目将是第一章,附录的第一部分,\pretocmd
另一方面第2章,正文的最后一章。
\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{etoolbox}
\usepackage{blindtext}
\usepackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\newtoggle{appendixbib}
\pretocmd\appendix{\toggletrue{appendixbib}\printbibliography}{}{}
\AtEndDocument{\iftoggle{appendixbib}{}{\printbibliography}}
\begin{document}
\tableofcontents
\Blinddocument
\cite{sigfridsson}
% Appendix is optional
% But the bibliography should be printed first
\appendix
\chapter{Last chapter after bibliography}
\blindtext
\end{document}
答案2
像这样使用:
\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{etoolbox}
\usepackage{blindtext}
\usepackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\AtEndDocument{\printbibliography[type=article]}
\begin{document}
\tableofcontents
\Blinddocument
\nocite{*}
% Appendix is optional
% But the bibliography should be printed first
\printbibliography[heading=none]
\appendix
\chapter{Last chapter after bibliography}
\blindtext
\end{document}