使用 KOMA-Script 将参考书目添加到目录中

使用 KOMA-Script 将参考书目添加到目录中

我现在尝试为自己编写一个小类。到目前为止,除了将书目标题放入目录内之外,一切都按预期运行。通常我使用 KOMA 选项bibliography=totoclistof=totoc一切都运行良好。

我所做的是创建一个接受三个选项的类:

  • add-tocs-to-toc(图片列表、表格列表、文献)
  • 添加参考书目(加载 biblatex 和 csquotes)
  • bib-file(传递自定义 bib 文件)

KOMA 选项listof=totoc正在按预期运行。

我的课程文件 bibtest.cls

\ProvidesClass{bib-test}[2017-11-12 v0.1 MWE]

\RequirePackage{etoolbox, pgfopts, scrlfile}

\newcommand*{\bibtest@cls@baseclass}{scrreprt}
\newcommand*{\bibtest@cls@baseclass@options}{}

% ----------------------------------------------------------
% Define booleans
% ----------------------------------------------------------
\newbool{bibtest@cls@if@bib}
\newbool{bibtest@cls@if@tocstotoc}

% ----------------------------------------------------------
% Define available options
% ----------------------------------------------------------
\pgfkeys{
    bibtest/.cd,
        add-tocs-to-toc/.is if      = bibtest@cls@if@tocstotoc,
        add-bibliography/.is if     = bibtest@cls@if@bib,
        bib-file/.store in          = \bibtest@bib@file,
        bib-file = {},
        unknown/.code               = \edef\bibtest@cls@baseclass@options{\bibtest@cls@baseclass@options,\pgfkeyscurrentname}
}

\ifbool{bibtest@cls@if@tocstotoc}{%
    \KOMAoptions{%
        listof  = totoc,
        bibliography = totoc
    }
}{}

\ProcessPgfOptions{/bibtest}

\LoadClass[\bibtest@cls@baseclass@options]{\bibtest@cls@baseclass}

\ifbool{bibtest@cls@if@bib}{%
    \AfterPackage{inputenc}{\RequirePackage[autostyle]{csquotes}}%
    \AtEndDocument{\printbibliography}%
    \RequirePackage[%
        backend      = biber,
        style        = numeric-comp
    ]{biblatex}%
    \ifdefempty{\bibtest@bib@file}{%
        \IfFileExists{source.bib}{%
            \pgfkeys{/bibtest/bib-file = source.bib}%
        }{%
            \ClassWarning{bibtest}{Cannot find default source.bib file.}%
        }%
    }{%
        \IfFileExists{\bibtest@bib@file}{}{%
            \ClassWarning{bibtest}{Couldn't find passed bib file}
        }%
    }%
    \addbibresource{\bibtest@bib@file}%
}{}%

\endinput

用于测试的 MWE

\documentclass[
    add-tocs-to-toc,
    add-bibliography,
    bib-file = biblatex-examples.bib
]{bibtest}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}
    \tableofcontents
    \listoffigures
    \listoftables

        \chapter{Hallo Welt}
            Hallo Welt
        \chapter{Hello World}
            Hello World \cite{aksin}
\end{document}

您可能会看到,目录中没有文献条目。我在 Windows 10 下使用 MiKTeX 进行了测试。

答案1

如果您biblatex与 KOMA 类一起使用,那么实际上biblatex负责标题格式的是您的bibliography而不是 KOMA 类。

也请参阅KOMA 文档(第 139 页)

natbib使用诸如、babelbib或 之类的附加参考书目样式biblatex几乎不会限制 KOMA-Script 对参考书目的影响。在这种情况下,重要的是参阅参考书目包的手册!

从 3.8 版biblatex和 3.25 版 KOMA 脚本开始,这两个包将更加紧密地协同工作。KOMA 脚本添加了一个新命令\bibliography@heading来排版参考书目标题,该命令可以由 使用biblatex。标准bibliographybiblist标题现在将此命令与 KOMA 类一起使用。本质上,这意味着biblatex将参考书目标题的控制权交还给 KOMA(此行为可以明确覆盖),因此默认标题将遵循 KOMA 脚本的所有选项。感谢 Markus Kohm 使之成为可能。更多详细信息可以在https://github.com/plk/biblatex/issues/627https://sourceforge.net/p/koma-script/code/2685/tree//trunk/scrkernel-bibliography.dtx?diff=52f0ae7181b24b7fb854e8b2:2684

还有一些想法可以让文档类更容易与 协同工作biblatex,但这可能需要对biblatex和 各自的类进行更改。如果您有任何想法或意见,请在以下网址分享:https://github.com/plk/biblatex/issues/693


biblatex有一些基本代码可以检测传递给 KOMA 类的某些类选项。但是,这仅在加载类时将选项作为可选全局参数传递时才有效。它不适用于\KOMAoptions

biblatex文档在第 130 页的脚注 27 中提到(重点是我加的)

这适用于这些选项的传统语法(bibtotocbibtotocnumbered)以及<key>=<value>KOMA-Script 3.x 中引入的语法,即bibliography=nottotocbibliography=totocbibliography=totocnumbered。全局toc=bibliographytoc=bibliographynumbered选项及其别名也被检测到。无论如何,必须在可选参数中全局设置选项\documentclass

因此,您必须使用biblatex命令和选项来使参考书目出现在目录中,而不是 KOMA 选项。

而不是\printbibliography使用\printbibliography[heading=bibintoc]

或者,您可以重新定义标准\defbibheading{bibliography}。或者您可以手动设置

 \let\ifkomabibtotoc=\@firstoftwo
 \let\ifkomabibtotocnumbered=\@secondoftwo

bibtest@cls@if@tocstotoc

相关内容