Biblatex:对 André Miede 博士撰写的“ClassicThesis”的双重引用(在章节末尾和文档末尾均有引用)

Biblatex:对 André Miede 博士撰写的“ClassicThesis”的双重引用(在章节末尾和文档末尾均有引用)

我一直在使用 LaTeX《经典论文》Dr. André Miede v. 4.6 的模板,用于我的论文/毕业论文文档。但是我需要在每章末尾添加参考文献,并在文档/毕业论文末尾添加“参考书目”。我尝试添加如下命令:

\begin{refsection},

\printbibliography[heading=subbibliography],

\end{refsection}

但我一直收到错误。有人能为我提供一步一步的指南,教我如何修改这个模板吗?因为它只包含很少的配置文件。

  • [“ClassicThesis”] 针对全局书目文件在文档末尾生成数字书目。
  • 每一章是否可以引用单独的参考书目文件。并且文档末尾的参考书目引用全局参考书目文件。
  • 我可以使用字母或数字参考,如果是数字,则每个章节的引用是否可以采用“1-12”这样的形式,其中 1 代表章节编号,12 代表第 12 个参考。

答案1

这实际上令人惊讶地复杂(或者可能并不那么令人惊讶,因为考虑到我在您编辑之前在评论中提到的这种设置的根本复杂性)。

如果您希望每个章节都有单独的参考书目,其中项目将以章节前缀出现,则需要使用refsections。否则(使用refsegments)在多个章节中引用的条目将在每一章中获得相同的前缀,因此第 1 章和第 3 章中引用的项目即使在第 3 章中也始终被引用为“1-4”,这看起来很奇怪。但是使用refsections,在最后生成总体参考书目会变得更加复杂。当我们需要时更是如此labelprefix,因此refcontexts。\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不仅仅是一个包,而且有些文件似乎需要修改,所以... 可能没问题。)

  1. 转到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风格并添加更多选项,但至关重要的是,defernumbersbackend=biber都保留下来,并且不会被其他选项覆盖/抵触。

  2. 删除完整内容FrontBackmatter/Bibliography.tex并将其替换为

    \printbibheading[title=Overall \bibname]
    \bibbysection[heading=none]
    
  3. 在每一章中添加

    \newrefsection
    \newrefcontext[labelprefix=\thechapter-]
    \savechapterrefsection
    

    之后\chapter然后\label添加

    \printbibliography[heading=subbibliography, title={\bibname\ for chapter~\thechapter}]
    

    到您希望参考书目的章节文件末尾。如果您希望参考书目在目录中,请输入heading=subbibintocheading=subbibnumbered而不是heading=subbibliography

  4. 确保使用 Biber 而不是 BibTeX 编译文件。请参阅Biblatex 与 Biber:配置我的编辑器以避免未定义的引用求助。

我使用 CTAN 中的文件测试了这个工作流程,只有两个注意事项。

  • 该文件AMiede_Publications.bib未采用 UTF-8 编码。Biber 会因此而卡住,但可以通过重新编码文件来解决,这对大多数人来说可能不是问题,因为他们会使用他们的.bib文件。

  • 代码中大量使用了natbib命令。如果要使用这些命令,则需要使用步骤 1 中的选项进行加载。另请biblatex参阅natbib=true将 natbib=true 与 biblatex 一起使用有什么缺点吗?

结果是

第 2 章参考书目

第 2 章参考书目的开头和

总体书目

查看整体书目。

相关内容