我一直在使用 LaTeX《经典论文》Dr. André Miede v. 4.6 的模板,用于我的论文/毕业论文文档。但是我需要在每章末尾添加参考文献,并在文档/毕业论文末尾添加“参考书目”。我尝试添加如下命令:
\begin{refsection},
\printbibliography[heading=subbibliography],
\end{refsection}
但我一直收到错误。有人能为我提供一步一步的指南,教我如何修改这个模板吗?因为它只包含很少的配置文件。
- [“ClassicThesis”] 针对全局书目文件在文档末尾生成数字书目。
- 每一章是否可以引用单独的参考书目文件。并且文档末尾的参考书目引用全局参考书目文件。
- 我可以使用字母或数字参考,如果是数字,则每个章节的引用是否可以采用“1-12”这样的形式,其中 1 代表章节编号,12 代表第 12 个参考。
答案1
这实际上令人惊讶地复杂(或者可能并不那么令人惊讶,因为考虑到我在您编辑之前在评论中提到的这种设置的根本复杂性)。
如果您希望每个章节都有单独的参考书目,其中项目将以章节前缀出现,则需要使用refsection
s。否则(使用refsegment
s)在多个章节中引用的条目将在每一章中获得相同的前缀,因此第 1 章和第 3 章中引用的项目即使在第 3 章中也始终被引用为“1-4”,这看起来很奇怪。但是使用refsection
s,在最后生成总体参考书目会变得更加复杂。当我们需要时更是如此labelprefix
,因此refcontext
s。\bibbysection
可用于逐一打印所有参考章节的参考书目,但我们需要一个额外的 hack 来refcontext
按预期修复。 hack 是\newrefcontext
在内部命令中添加一个\blx@refsections
。但我们需要在这里知道正确的labelprefix
,所以我们需要用另一个特殊命令记住它:\savechapterrefsection
。
\makeatletter...\makeatother
因此,你需要在序言中添加一些内容。你还需要发布
\newrefsection
\newrefcontext[labelprefix=\thechapter-]
\savechapterrefsection
直接地后每个\chapter
命令。最后\chapter
你可以说
\printbibliography[heading=subbibliography, title={\bibname\ for chapter~\thechapter}]
获取每章的参考书目。
在文档的最后你说
\printbibheading[title=Overall \bibname]
\bibbysection[heading=none]
打印完整的书目。
总共
\documentclass[british]{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=numeric, defernumbers, backend=biber]{biblatex}
\makeatletter
\newcommand*{\savechapterrefsection}{%
\csxdef{chapter@for@refsection@\therefsection}{\thechapter}}
\def\blx@refsections{%
\newrefcontext[labelprefix=\csuse{chapter@for@refsection@\therefsection}-]%
\ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
{}
{\toggletrue{blx@tempa}%
\begingroup
\expandafter\blx@bibliography\csname blx@dlist@entry@\the\c@refsection @\blx@refcontext@context\endcsname}%
\ifnum\c@refsection<\blx@maxsection
\advance\c@refsection\@ne
\expandafter\blx@refsections
\else
\iftoggle{blx@tempa}{}{\blx@warn@bibempty}%
\endgroup
\fi}
\makeatother
\addbibresource{biblatex-examples.bib}
\begin{document}
\chapter{One}
\newrefsection
\newrefcontext[labelprefix=\thechapter-]
\savechapterrefsection
\cite{sigfridsson,worman,geer}
\printbibliography[heading=subbibliography, title={\bibname\ for chapter~\thechapter}]
\chapter{Two}
\newrefsection
\newrefcontext[labelprefix=\thechapter-]
\savechapterrefsection
\cite{knuth:ct:a,knuth:ct:b,sigfridsson}
\printbibliography[heading=subbibliography, title={\bibname\ for chapter~\thechapter}]
\printbibheading[title=Overall \bibname]
\bibbysection[heading=none]
\end{document}
大致classicthesis
步骤相同,但是模板/包的复杂结构使得事情变得非常复杂。
假设您有 CTAN 模板的原始版本。(请注意,一般来说极其糟糕建议修改 CTAN 中的系统安装文件而不重命名它们。但这classicthesis
不仅仅是一个包,而且有些文件似乎需要修改,所以... 可能没问题。)
转到
classicthesis-config.tex
并删除第 85-97 行阅读\PassOptionsToPackage{% %backend=biber,bibencoding=utf8, %instead of bibtex backend=bibtex8,bibencoding=ascii,% language=auto,% style=numeric-comp,% %style=authoryear-comp, % Author 1999, 2010 %bibstyle=authoryear,dashed=false, % dashed: substitute rep. author with --- sorting=nyt, % name, year, title maxbibnames=10, % default: 3, et al. %backref=true,% natbib=true % natbib compatibility mode (\citep and \citet still work) }{biblatex} \usepackage{biblatex}
并将其替换为
\usepackage[style=numeric, defernumbers, backend=biber]{biblatex} \makeatletter \newcommand*{\savechapterrefsection}{% \csxdef{chapter@for@refsection@\therefsection}{\thechapter}} \def\blx@refsections{% \newrefcontext[labelprefix=\csuse{chapter@for@refsection@\therefsection}-]% \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context} {} {\toggletrue{blx@tempa}% \begingroup \expandafter\blx@bibliography\csname blx@dlist@entry@\the\c@refsection @\blx@refcontext@context\endcsname}% \ifnum\c@refsection<\blx@maxsection \advance\c@refsection\@ne \expandafter\blx@refsections \else \iftoggle{blx@tempa}{}{\blx@warn@bibempty}% \endgroup \fi} \makeatother
来自上面的 MWE。当然,您可以选择自己喜欢的
biblatex
风格并添加更多选项,但至关重要的是,defernumbers
和backend=biber
都保留下来,并且不会被其他选项覆盖/抵触。删除完整内容
FrontBackmatter/Bibliography.tex
并将其替换为\printbibheading[title=Overall \bibname] \bibbysection[heading=none]
在每一章中添加
\newrefsection \newrefcontext[labelprefix=\thechapter-] \savechapterrefsection
之后
\chapter
然后\label
添加\printbibliography[heading=subbibliography, title={\bibname\ for chapter~\thechapter}]
到您希望参考书目的章节文件末尾。如果您希望参考书目在目录中,请输入
heading=subbibintoc
或heading=subbibnumbered
而不是heading=subbibliography
。确保使用 Biber 而不是 BibTeX 编译文件。请参阅Biblatex 与 Biber:配置我的编辑器以避免未定义的引用求助。
我使用 CTAN 中的文件测试了这个工作流程,只有两个注意事项。
该文件
AMiede_Publications.bib
未采用 UTF-8 编码。Biber 会因此而卡住,但可以通过重新编码文件来解决,这对大多数人来说可能不是问题,因为他们会使用他们的.bib
文件。代码中大量使用了
natbib
命令。如果要使用这些命令,则需要使用步骤 1 中的选项进行加载。另请biblatex
参阅natbib=true
将 natbib=true 与 biblatex 一起使用有什么缺点吗?。
结果是
第 2 章参考书目的开头和
查看整体书目。