How to set class options that can have multiple values?
The standard LaTeX \documentclass
syntax doesn't use =
at all, just a comma separated list of values like [12pt,twoside]
so
\documentclass[toc=listof, toc=bibliography, toc=flat]{article}
would just be three (undefined) options toc=listof
, toc=bibliography
and toc=flat
There is no mechanism for passing values to an option toc
.
Some classes load keyval
or similar packages and redefine \documentclass
to use that so then your example passes the three values listof
, bibliography
and flat
to the toc
key defined by that class.
In your example toc={listof, bibliography, flat}
the keyval parser will pass the single value
listof, bibliography, flat
to the toc
key, but then it is up to the definition of that key in the class whether it treats this as an unknown value or whether it further processes it as a comma separated list.
The easiest way I found for solving OP's problem is to introduce a new class file xscrbook. See below.
\ProvidesClass{xscrbook}[2013/01/17 v0.1 Extends KOMA-script-book class (AM)]
\NeedsTeXFormat{LaTeX2e}[2011/06/27]
\protected\def\scr@preprocessclassoptionslist#1{%
\ifx#1\relax
\let#1\@empty
\fi
\ifx#1\@empty\else
\begingroup
\def\scr@tempa{}%
\def\scr@tempb##1=##2=##3\scr@nil##4{%
\ifx\relax##2\relax\else
\def\scr@option{##1}%
\edef\scr@value{\zap@space##2 \@empty}%
##4%
\fi
}%
\@for\reserved@a:=#1\do{%
\expandafter\scr@tempb\reserved@a==\scr@nil{%
\@for\reserved@a:=\scr@value\do{%
\edef\scr@tempa{%
\scr@tempa\ifx\scr@tempa\@empty\else,\fi
\scr@option=\reserved@a
}%
}%
}%
}%
\edef\scr@tempa{\endgroup\def\noexpand#1{\scr@tempa}}%
\scr@tempa
\fi
}
\scr@preprocessclassoptionslist\@classoptionslist
\ifdefined\XKV@classoptionslist
\scr@preprocessclassoptionslist\XKV@classoptionslist
\fi
\LoadClass{scrbook}
\endinput
Example
\documentclass[toc={listof, bibliography, flat}]{xscrbook}
\begin{document}
x
\end{document}
The correct way to proceed is described in the KOMA-Script documentation as
Some options can have several values simultaneously. For such options, it is possible, with the help of \KOMAoption, to pass a list of values to a single option. The individual values are given as a comma-separated value list.
So, in your example:
\documentclass[any_option]{scrbook}
\KOMAoption{toc}{bibliography,listof,flat}
Please pay attention that, with biblatex, this was not enough to get the bibliography in the table of contents. I had to use:
\printbibliography[heading=bibintoc]
or any equivalent command.
Enjoy!