我现在尝试为自己编写一个小类。到目前为止,除了将书目标题放入目录内之外,一切都按预期运行。通常我使用 KOMA 选项bibliography=totoc
,listof=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
。标准bibliography
和biblist
标题现在将此命令与 KOMA 类一起使用。本质上,这意味着biblatex
将参考书目标题的控制权交还给 KOMA(此行为可以明确覆盖),因此默认标题将遵循 KOMA 脚本的所有选项。感谢 Markus Kohm 使之成为可能。更多详细信息可以在https://github.com/plk/biblatex/issues/627和https://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 中提到(重点是我加的)
这适用于这些选项的传统语法(
bibtotoc
和bibtotocnumbered
)以及<key>=<value>
KOMA-Script 3.x 中引入的语法,即bibliography=nottotoc
、bibliography=totoc
和bibliography=totocnumbered
。全局toc=bibliography
和toc=bibliographynumbered
选项及其别名也被检测到。无论如何,必须在可选参数中全局设置选项\documentclass
。
因此,您必须使用biblatex
命令和选项来使参考书目出现在目录中,而不是 KOMA 选项。
而不是\printbibliography
使用\printbibliography[heading=bibintoc]
。
或者,您可以重新定义标准\defbibheading{bibliography}
。或者您可以手动设置
\let\ifkomabibtotoc=\@firstoftwo
\let\ifkomabibtotocnumbered=\@secondoftwo
在bibtest@cls@if@tocstotoc
。