nbw-bt/Proposal/LaTeX/ifiseries.sty
2014-09-26 15:45:57 +02:00

939 lines
30 KiB
TeX

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{ifiseries}
\RequirePackage{kvoptions}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Options and their defaults
\DeclareBoolOption[false]{legacytexlive} % for the ancient TeX Live shipped with Ubuntu
\DeclareBoolOption[false]{natbib}
\DeclareBoolOption[false]{babelbib}
\DeclareBoolOption[true]{biblatex}
\DeclareStringOption[sort,numbers]{natbibOptions}
\DeclareStringOption[alphabetic]{biblatexstyle}
\DeclareStringOption[maxcitenames=4,maxbibnames=10,babel=other]{biblatexOptions}
\DeclareStringOption[]{bibresource}
\DeclareStringOption[ngerman,english]{babelOptions}
\DeclareStringOption[]{variorefOptions}
\DeclareStringOption[linesnumbered,ruled,vlined]{algorithmOptions}
\DeclareStringOption[alphaurl]{bibliographystyle} % only for bibtex, not biblatex
\DeclareStringOption[utf8]{inputencOptions}
\DeclareBoolOption[true]{tikz}
\DeclareBoolOption[true]{algorithmForwardCompatibility}
\DeclareBoolOption[true]{algorithmBackwardCompatibility}
\DeclareStringOption[smaller,nohyperlinks,printonlyused]{acronymOptions}
\DeclareStringOption[caption=false,font=footnotesize]{subfigOptions}
\DeclareStringOption[]{theorems}
\DeclareStringOption[Bibliography]{refname}
\DeclareStringOption[black]{hypercolor}
\DeclareBoolOption[false]{dottednumbers}
\DeclareStringOption[english]{language}
\DeclareBoolOption[true]{runningtitle}
\DeclareBoolOption[true]{layout}
\DeclareBoolOption[true]{pagelayout}
\DeclareStringOption[ustrade]{paper}
\DeclareStringOption[]{paperwidth}
\DeclareStringOption[]{paperheight}
\DeclareStringOption[0mm]{bindingoffset}
\DeclareStringOption[.25]{halfparskipfill}
\DeclareBoolOption[false]{halfparskip}
\DeclareStringOption[Palatino]{font}
\DeclareStringOption[12]{marginfrac}
\DeclareStringOption[floatrow]{figure}
\DeclareStringOption[]{compact}
\DeclareStringOption[1.5]{headsepmult}
\DeclareStringOption[3]{footskipmult}
\DeclareBoolOption[false]{leftmarkright}
\if@twoside
\DeclareBoolOption[false]{hcenter}
\else
\DeclareBoolOption[true]{hcenter}
\fi
\@ifclassloaded{book}%
{\DeclareStringOption[section]{theoremswithin}}%
{\DeclareStringOption[subsection]{theoremswithin}}
\DeclareBoolOption[false]{largepaper}
\ProcessKeyvalOptions*
\RequirePackage{etoolbox}
\RequirePackage{xifthen}
\RequirePackage{expl3}
\ifthenelse{\boolean{ifiseries@legacytexlive}}{% FIXME why can't i use \ififiseries@legacytexlive?
\let\ifiseries@natbibtrue\@undefined%
\let\ifiseries@natbibfalse\@undefined%
\let\ififiseries@natbib\@undefined%
\let\ifiseries@biblatextrue\@undefined%
\let\ifiseries@biblatexfalse\@undefined%
\let\ififiseries@biblatex\@undefined%
\DeclareBoolOption[true]{natbib}%
\DeclareBoolOption[false]{biblatex}%
}{}
\ififiseries@largepaper
\let\ifiseries@marginfrac\@undefined%
\let\ifiseries@headsepmult\@undefined%
\let\ifiseries@footskipmult\@undefined%
\DeclareStringOption[9]{marginfrac}%
\DeclareStringOption[2]{headsepmult}%
\DeclareStringOption[3.5]{footskipmult}%
\fi
\ExplSyntaxOn
% TeX Live 2009 (still shipped with Ubuntu in 2012) does not provide the 'onn' version.
% So we have to use a little trick to get the argument expanded.
% This will occur frequently in this code.
\newcommand{\ifiseries@temp}[1]{
\prg_case_str:nnn{#1}{
{english} {\relax}
{german} {
\let\ifiseries@babelOptions\@undefined%
\let\ifiseries@variorefOptions\@undefined%
\let\ifiseries@refname\@undefined%
\let\ifiseries@dottednumberstrue\@undefined%
\let\ifiseries@dottednumbersfalse\@undefined%
\let\ififiseries@dottednumbers\@undefined%
\DeclareStringOption[english,ngerman]{babelOptions}%
\DeclareStringOption[ngerman]{variorefOptions}%
\DeclareStringOption[Bibliografie]{refname}%
\DeclareBoolOption[true]{dottednumbers}%
\ifthenelse{\boolean{ifiseries@legacytexlive}}{%
\let\ifiseries@babelbibtrue\@undefined%
\let\ifiseries@babelbibfalse\@undefined%
\let\ififiseries@babelbib\@undefined%
\let\ifiseries@bibliographystyle\@undefined%
\DeclareBoolOption[true]{babelbib}%
\DeclareStringOption[babalpha]{bibliographystyle}%
}{}
}
}{\PackageError{ifiseries}{Unsupported~language:~#1}\@ehc}}
\ExplSyntaxOff
\expandafter\ifiseries@temp\expandafter{\ifiseries@language}
\ProcessKeyvalOptions*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Packages with no or minimal influence on the main layout
\RequirePackage{etex}
\RequirePackage[\ifiseries@inputencOptions]{inputenc}
\RequirePackage[T1]{fontenc}
\@ifclassloaded{beamer}{}{\RequirePackage[rgb,svgnames]{xcolor}}
\RequirePackage[\ifiseries@babelOptions]{babel}
\RequirePackage{amsmath}
\RequirePackage[matha]{mathabx}
\RequirePackage{amssymb}
\RequirePackage{amsfonts}
\RequirePackage{amstext}
\RequirePackage{mathtools}
\RequirePackage{nicefrac}
\RequirePackage{graphicx}
\RequirePackage{grffile}
\RequirePackage{eso-pic}
\RequirePackage{listings}
\RequirePackage{booktabs}
\RequirePackage{multicol}
\RequirePackage{multirow}
\RequirePackage[autolanguage]{numprint}
\RequirePackage{units}
\RequirePackage[babel=true]{csquotes}
\ififiseries@natbib\RequirePackage[\ifiseries@natbibOptions]{natbib}\fi
\ififiseries@babelbib\RequirePackage{babelbib}\fi
\ififiseries@biblatex
\RequirePackage[style=\ifiseries@biblatexstyle,\ifiseries@biblatexOptions]{biblatex}%
\ifdefempty{\ifiseries@bibresource}{}{\addbibresource{\ifiseries@bibresource}}%
\DeclareFieldFormat[article,unpublished,inproceedings]{realtitlecase}{\MakeSentenceCase*{#1}}%
%% cf. texmf-dist/tex/latex/biblatex/biblatex.def
\renewbibmacro*{title}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\printfield[realtitlecase]{title}%
\setunit{\subtitlepunct}%
\printfield[realtitlecase]{subtitle}}%
\newunit}%
\printfield{titleaddon}}%
%%
\else
\bibliographystyle{\ifiseries@bibliographystyle}%
\RequirePackage{bibentry}%
\fi
\RequirePackage[\ifiseries@variorefOptions]{varioref}
\RequirePackage{url}
\RequirePackage{dsfont}
\RequirePackage{bbding}
\RequirePackage{pifont}
\RequirePackage{calc}
\RequirePackage{blindtext}
\RequirePackage{setspace}
\RequirePackage{relsize}
\RequirePackage[\ifiseries@algorithmOptions]{algorithm2e}
\ififiseries@algorithmForwardCompatibility
\ifthenelse{\isundefined{\DontPrintSemicolon}}{\newcommand*{\DontPrintSemicolon}{\dontprintsemicolon}}{}
\ifthenelse{\isundefined{\SetAlgoVlined}}{\newcommand*{\SetAlgoVlined}{\SetVline}}{}
\ifthenelse{\isundefined{\SetAlgoNoLine}}{\newcommand*{\SetAlgoNoLine}{\SetNoline}}{}
\fi
\ififiseries@algorithmBackwardCompatibility
\ifthenelse{\isundefined{\RestyleAlgo}}{\let\RestyleAlgo\restylealgo}
\fi
\RequirePackage[compatibility=false]{caption} % compatibility switched off for hyperref
\RequirePackage{bookmark}
\RequirePackage{hyperref}
\hypersetup{%
final=true,%
colorlinks=true,%
linkcolor=\ifiseries@hypercolor,%
citecolor=\ifiseries@hypercolor,%
urlcolor=\ifiseries@hypercolor,%
}
\RequirePackage[strict]{changepage}
\ififiseries@tikz
\RequirePackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows}
\usetikzlibrary{shapes}
\usetikzlibrary{shadows}
\usetikzlibrary{decorations.text}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{petri}
\usetikzlibrary{shapes.symbols}
\usetikzlibrary{shapes.arrows}
\usetikzlibrary{decorations}
\usetikzlibrary{decorations.pathreplacing}
\usetikzlibrary{decorations.shapes}
\usetikzlibrary{calc}
\usetikzlibrary{chains}
\usetikzlibrary{patterns}
\usetikzlibrary{matrix}
\usetikzlibrary{backgrounds}
\usetikzlibrary{mindmap}
\usetikzlibrary{topaths}
\usetikzlibrary{automata}
\fi
\RequirePackage{microtype}
\RequirePackage{enumitem} %%% add 'inline' option once it is supported everywhere
\newlist{compactitemize}{itemize}{3}
\setlist[compactitemize]{label=\raisebox{.1em}{\smaller\textbullet}}
\newlist{compactenumerate}{enumerate}{2}
\setlist[compactenumerate]{label=\arabic*.}
\newlist{compactdescription}{description}{3}
\RequirePackage{placeins}
\ExplSyntaxOn
\renewcommand{\ifiseries@temp}[1]{
\prg_case_str:nnn{#1}{
{} {\relax}
{floatrow} {\RequirePackage{floatrow}\DeclareCaptionSubType[alph]{figure}}
{subfig} {\RequirePackage[\ifiseries@subfigOptions]{subfig}\RequirePackage{sidecap}\sidecaptionvpos{figure}{t}}
}{\PackageError{ifiseries}{Unknown~figure~system:~#1}\@ehc}}
\expandafter\ifiseries@temp\expandafter{\ifiseries@figure}
\ExplSyntaxOff
\RequirePackage[\ifiseries@acronymOptions]{acronym}
\RequirePackage{xspace}
\RequirePackage{hyphenat}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Useful commands
%% Remove margins for screen viewing.
%% This command is used by the code below if 'compact' is set.
%% It is the same as the '\nomargin' command in 'localKit'.
\newcommand*{\nomargin}{
\setlength{\oddsidemargin}{.02\textwidth-1in}
\setlength{\evensidemargin}{.02\textwidth-1in}
\setlength{\paperwidth}{1.04\textwidth}
\setlength{\paperheight}{\headheight+\headsep+\textheight+\footskip}
\setlength{\paperheight}{1.04\paperheight}
\setlength{\topmargin}{.02\paperheight-1in}
}
%% Abbreviations
\newcommand*{\abbrdot}{\protect\@ifnextchar.{}{.\@\xspace}}
\newcommand*{\abbrcomma}{\protect\@ifnextchar,{}{,\xspace}}
\newcommand*{\eg}{e.\@\,g.\@\abbrcomma}
\newcommand*{\ie}{i.\@\,e.\@\abbrcomma}
\newcommand*{\cf}{cf.\@\abbrcomma}
\newcommand*{\Eg}{E.\@\,g.\@\abbrcomma}
\newcommand*{\Ie}{I.\@\,e.\@\abbrcomma}
\newcommand*{\Cf}{Cf.\@\abbrcomma}
\newcommand*{\etal}{et~al\abbrdot}
\newcommand*{\etc}{etc\abbrdot}
\newcommand*{\vs}{vs\abbrdot}
\newcommand*{\Wlg}{W.l.o.g\abbrdot}
\newcommand*{\wlg}{w.l.o.g\abbrdot}
\newcommand*{\OBdA}{O.B.d.A\abbrdot}
\newcommand*{\oBdA}{o.B.d.A\abbrdot}
\newcommand*{\wrt}{w.r.t.\@\xspace}
\newcommand*{\rv}{r.v.\@\xspace}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Theorems. If 'theorems' is empty, nothing happens here.
\ExplSyntaxOn
\renewcommand{\ifiseries@temp}[1]{
\prg_case_str:nnn{#1}{
{} {\relax}
{numbersfirst} {
\ififiseries@dottednumbers% FIXME how can I pass through boolean options?
\RequirePackage[within=\ifiseries@theoremswithin,likeequations,language=\ifiseries@language,dottednumbers=true]{localTheorem}%
\else%
\RequirePackage[within=\ifiseries@theoremswithin,likeequations,language=\ifiseries@language,dottednumbers=false]{localTheorem}%
\fi%
\let\@subsection\subsection%
\renewcommand*\subsection{\@ifnextchar*{\@subsection}{\@subsection*}}%
\let\@subsubsection\subsubsection%
\renewcommand*\subsubsection{\@ifnextchar*{\@subsubsection}{\@subsubsection*}}%
}
{numberslast} {
\ififiseries@dottednumbers%
\RequirePackage[numbersfirst=false,language=\ifiseries@language,dottednumbers=true]{localTheorem}%
\else%
\RequirePackage[numbersfirst=false,language=\ifiseries@language,dottednumbers=false]{localTheorem}%
\fi%
}
}{\PackageError{ifiseries}{Unknown~theorem~system:~#1}\@ehc}}
\ExplSyntaxOff
\expandafter\ifiseries@temp\expandafter{\ifiseries@theorems}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Packages and settings with influence on the main layout
\ififiseries@layout
\newcommand*{\ifiseries@titlefontfamily}{}
\newcommand*{\ifiseries@sectionfontweight}{\bfseries}
\newcommand*{\ifiseries@chapterfontweight}{\bfseries}
%% Font and linespread.
\ExplSyntaxOn
\renewcommand{\ifiseries@temp}[1]{
\prg_case_str:nnn{#1}{
{} {\relax}
{Bera} {
\RequirePackage[scaled]{beraserif}%
\RequirePackage[scaled=.90]{berasans}%
\RequirePackage[scaled=.90]{beramono}%
\linespread{1.05}%
}
{Charter} { %% sometimes problem: "Too many math alphabets used in version normal."
\usepackage[bitstream-charter]{mathdesign}%
\RequirePackage[scaled]{berasans}%
\RequirePackage[scaled]{beramono}%
\RequirePackage{eucal}%
\linespread{1.05}%
}
{ConcreteEuler} {
\RequirePackage{lmodern}%
\RequirePackage[boldsans]{concmath}%
\RequirePackage{eulervm}%
\RequirePackage[scaled=.84]{beramono}%
\linespread{1.05}%
}
{DejaVu} {
\RequirePackage[scaled]{DejaVuSerif}
\RequirePackage{eulervm}
\RequirePackage[scaled=.95]{beramono}
\linespread{1.10}
}
{DejaVuCondensed} {
\RequirePackage[scaled]{DejaVuSerifCondensed}
\RequirePackage{eulervm}
\RequirePackage[scaled=.95]{beramono}
\linespread{1.10}
}
{Kerkis} { %% some problems in math mode, e.g., tildas extend into symbols
\usepackage{kmath,kerkis}%
\let\openbox\@undefined%
\RequirePackage[scaled=.81]{berasans}%
\RequirePackage[scaled=.81]{beramono}%
\renewcommand*{\bfdefault}{sb}%
\linespread{1.10}%
}
{KP} {
\RequirePackage{kpfonts}%
\linespread{1.05}%
}
{LatinModern} {
\RequirePackage{lmodern}%
\RequirePackage[scaled=.80]{beramono}%
\let\@bfseries\bfseries%
\renewcommand*{\bfseries}{\sffamily\@bfseries\fontseries{sbc}\selectfont}%
\linespread{1.05}%
}
{NewCenturySchoolbook} {
\RequirePackage{fouriernc}%
\RequirePackage[scaled=.85]{beramono}%
\linespread{1.10}%
}
{Palatino} {
\RequirePackage[sc]{mathpazo}%
\@ifclassloaded{beamer}{%
\RequirePackage[scaled=.90]{helvet}%
\RequirePackage[scaled=.80]{beramono}%
}{%
\RequirePackage[scaled=.80]{berasans}%
\RequirePackage[scaled=.80]{beramono}%
}%
\linespread{1.05}%
}
{Schola} {
\RequirePackage{fouriernc}% only for the math
\RequirePackage{tgschola}%
\RequirePackage[scaled=.88]{beramono}%
\linespread{1.05}%
}
{Times} {
\RequirePackage{eucal}%
\RequirePackage{mathptmx}%
\RequirePackage[scaled=.87]{helvet}%
\RequirePackage[scaled=.82]{beramono}%
\linespread{1.05}%
}
{Termes} {
\RequirePackage{tgtermes}%
\RequirePackage[scaled=.86]{berasans}%
\RequirePackage[scaled=.86]{beramono}%
\linespread{1.05}%
}
{TX} {
\RequirePackage{txfonts}%
\RequirePackage[scaled=.86]{berasans}%
\RequirePackage[scaled=.86]{beramono}%
\linespread{1.05}%
}
{Utopia} {
\RequirePackage[widespace]{fourier}%
\RequirePackage{eucal}%
\RequirePackage[scaled=.82]{berasans}%
\RequirePackage[scaled=.82]{beramono}%
\linespread{1.05}%
}
}{\PackageError{ifiseries}{Unknown~font:~#1}\@ehc}}
\ExplSyntaxOff
\expandafter\ifiseries@temp\expandafter{\ifiseries@font}
%% \prg_case_str cannot occur inside an argument.
%% So we have to prepare several commands here to be called later
%% inside the \@ifclassloaded.
\ExplSyntaxOn
%
\newcommand{\ifiseries@temp@paper}[1]{
\prg_case_str:nnn{#1} {
{} {\relax}
{ustrade} {\geometry{paperwidth=15.24cm, paperheight=22.86cm}}
{15522} {\geometry{paperwidth=15.50cm, paperheight=22.00cm}}
{royal} {\geometry{paperwidth=15.57cm, paperheight=23.39cm}}
{crownquarto} {\geometry{paperwidth=18.91cm, paperheight=24.589cm}}
}{\geometry{paper=\ifiseries@paper}}}
%
\newcommand{\ifiseries@temp@compact}[1]{
\prg_case_str:nnn{#1}{
{} {\relax}
{moderate} {
\setlength{\headsep}{.5\baselineskip}%
\setlength{\footskip}{\baselineskip}%
\nomargin%
}
{strong} {
%% This does the same as the '\ebook' command in 'localKit'.
\fancyhf{}%
\fancyfoot[R]{\thepage}%
\fancypagestyle{plain}{\fancyhf{}\fancyfoot[R]{\thepage}}%
\setlength{\headsep}{0pt}%
\setlength{\headheight}{0pt}%
%\setlength{\topskip}{0pt}% affects height of textblock in ways difficult to determine!
\setlength{\footskip}{1.5\baselineskip}%
\setlength{\oddsidemargin}{.02\textwidth-1in}%
\setlength{\evensidemargin}{.02\textwidth-1in}%
\setlength{\paperwidth}{1.04\textwidth}%
\setlength{\paperheight}{\textheight+\footskip}%
\setlength{\topmargin}{.005\paperheight-1in}% CHANGE
\setlength{\paperheight}{1.02\paperheight}%
}
}{\PackageError{ifiseries}{Unknown~compact~system:~#1}\@ehc}}
\ExplSyntaxOff
%% End of preparations.
\@ifclassloaded{beamer}{}{%
%% Page layout.
\ififiseries@pagelayout
\RequirePackage{geometry}
\expandafter\ifiseries@temp@paper\expandafter{\ifiseries@paper}
\ifdefempty{\ifiseries@paperheight}{}{\ifdefempty{\ifiseries@paperwidth}{}%
{\geometry{paperwidth=\ifiseries@paperwidth,paperheight=\ifiseries@paperheight}}}
%
\ifthenelse
{\equal{\@ptsize}{1}}
{\setlength{\headheight}{13.59999pt}}
{}
%
\ififiseries@hcenter
\geometry{%
bindingoffset=\ifiseries@bindingoffset, %
heightrounded, %
headsep=\ifiseries@headsepmult\baselineskip, %
footskip=\ifiseries@footskipmult\baselineskip, %
left=3\paperwidth/(2*\ifiseries@marginfrac), hmarginratio=1:1, %
includehead, top=\paperheight/\ifiseries@marginfrac, vmarginratio=1:2}
\else
\geometry{%
bindingoffset=\ifiseries@bindingoffset, %
heightrounded, %
headsep=\ifiseries@headsepmult\baselineskip, %
footskip=\ifiseries@footskipmult\baselineskip, %
left=\paperwidth/\ifiseries@marginfrac, hmarginratio=1:2, %
includehead, top=\paperheight/\ifiseries@marginfrac, vmarginratio=1:2}
\fi
\fi % pagelayout
%% Folios and running titles (and others, see below).
\ififiseries@leftmarkright\let\rightmark\leftmark\fi
\RequirePackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\@ifclassloaded{book}{%
\let\@frontmatter\frontmatter
\renewcommand*{\frontmatter}{\@frontmatter\renewcommand*{\chaptermark}[1]{\markboth{##1}{##1}}}
\let\@mainmatter\mainmatter
\renewcommand*{\mainmatter}{\@mainmatter\renewcommand*{\chaptermark}[1]{\markboth{\thechapter. \ ##1}{}}}
\let\@backmatter\backmatter
\renewcommand*{\backmatter}{\@backmatter\bookmarksetup{startatroot}}
\let\@appendix\appendix
\renewcommand*{\appendix}{\bookmarksetup{startatroot}\@appendix}
\fancyhead[LE]{\nouppercase{\leftmark}}
}{ %%% else ifclassloaded book
\ififiseries@runningtitle\fancyhead[LE]{\nouppercase{\rightmark}}\fi
} %%% end ifclassloaded book
\ififiseries@runningtitle\fancyhead[RO]{\nouppercase{\rightmark}}\fi
\fancyfoot[RO]{\thepage}
\fancyfoot[LE]{\thepage}
\renewcommand*{\headrulewidth}{0pt}
\fancypagestyle{plain}{\fancyhf{}\fancyfoot[LE]{\thepage}\fancyfoot[RO]{\thepage}}
%% Compact system: reduce margins.
\expandafter\ifiseries@temp@compact\expandafter{\ifiseries@compact}
%% Empty clearpages (i.e., pages left blank before a chapter start).
\renewcommand*{\cleardoublepage}{%
\clearpage
\if@twoside
\ifodd
\c@page
\else
\thispagestyle{empty}
\hbox{}
\newpage
\if@twocolumn
\hbox{}
\newpage
\fi
\fi
\fi
}
%% Section headings.
\RequirePackage{sectsty}
\sectionfont{\normalfont\Large\ifiseries@sectionfontweight\ifiseries@titlefontfamily}
\subsectionfont{\normalfont\large\ifiseries@sectionfontweight\ifiseries@titlefontfamily}
\subsubsectionfont{\normalfont\normalsize\ifiseries@sectionfontweight\ifiseries@titlefontfamily}
\ififiseries@dottednumbers
\def\@seccntformat#1{\csname the#1\endcsname.\quad}
\def\@subseccntformat#1{\csname the#1\endcsname.\quad}
\def\@subsubseccntformat#1{\csname the#1\endcsname.\quad}
\fi
%% Part title page (package 'sectsty' must be loaded first).
\newenvironment{centerpage}%
{\begin{adjustwidth*}%
{(\paperwidth-\textwidth)/2-1in-\oddsidemargin+\ifiseries@bindingoffset}%
{(\paperwidth-\textwidth)/2-1in-\evensidemargin}%
\centering}%
{\end{adjustwidth*}}
\newcommand*{\typesetpart}[1]{{%
\begin{centerpage}
\null
\vspace{.20\textheight}
\interlinepenalty \@M
\normalfont
\ifnum \c@secnumdepth >-2\relax
\LARGE\sc\bfseries\ifiseries@titlefontfamily \partname\nobreakspace\thepart
\par\normalsize\normalfont
\vskip 20\p@
\fi
\Huge \bfseries \ifiseries@titlefontfamily #1\par
\end{centerpage}
}}
\renewcommand*{\part}{%
\if@openright
\FloatBarrier
\newpage\thispagestyle{empty}\hbox{}
\cleardoublepage
\else
\clearpage
\fi
\thispagestyle{empty}%
\if@twocolumn
\onecolumn
\@tempswatrue
\else
\@tempswafalse
\fi
\secdef\@part\@spart%
}
\renewcommand*{\@part}[2][]{%
\ifnum \c@secnumdepth >-2\relax
\refstepcounter{part}%
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{part}{#1}%
\fi
\markboth{}{}%
\typesetpart{#2}%
\@endpart%
}
%% Chapter titles
%% cf. texlive/2011/texmf-dist/tex/latex/base/book.cls
\@ifclassloaded{book}{%
\renewcommand*{\@makechapterhead}[1]{%
%\vspace*{20\p@}%
{\parindent \z@ \flushright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\large\sc\ifiseries@chapterfontweight\ifiseries@titlefontfamily \@chapapp\space \thechapter
\par\normalsize\normalfont\nobreak
\vskip 20\p@
\fi
\fi
\interlinepenalty\@M
\huge \ifiseries@chapterfontweight \ifiseries@titlefontfamily #1\par\nobreak
\vskip 50\p@
}}
\renewcommand*{\@makeschapterhead}[1]{%
%\vspace*{50\p@}%
{\parindent \z@ \flushright
\normalfont
\interlinepenalty\@M
{\huge\bfseries #1\par\nobreak}
\vskip 50\p@
}}
}{} %%% end ifclassloaded book
} %%% end ifclassloaded not beamer
%% Bibliography.
\@ifclassloaded{book}{%
\newcommand*{\preparebibliography}{%
\renewcommand*{\refname}{\ifiseries@refname}%
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{\refname}
}%
\newcommand*{\tocbibliography}{%
\preparebibliography%
\ififiseries@biblatex\printbibliography\else\bibliography{\ifiseries@bibresource}\fi}}{%
\newcommand*{\preparebibliography}{%
\renewcommand*{\refname}{\ifiseries@refname}%
\phantomsection
\addcontentsline{toc}{section}{\refname}
}%
\newcommand*{\tocbibliography}{%
\preparebibliography%
\ififiseries@biblatex\printbibliography\else\bibliography{\ifiseries@bibresource}\fi}}
%% For multiple authors.
\newcommand*{\andauthor}{\\[.5\baselineskip]}
%% Command to create generic cover pages.
\ifthenelse{\equal{\ifiseries@compact}{}}{\newcommand*{\ifiseries@titlepagetopskip}{}}%
{\newcommand*{\ifiseries@titlepagetopskip}{\vspace*{5ex}}}
\newcommand{\gentitlepage}[4]{%
\newpage
\thispagestyle{empty}
\begin{centerpage}
\ifiseries@titlepagetopskip%
\Huge #1\\
\normalsize\vspace{5ex}
\Large \ifthenelse{\equal{#2}{}}{\mbox{ }}{#2}\\
\normalsize\vspace{5ex}
\Large #3\\
\normalsize\vfill
#4
\end{centerpage}}
%% Command to create the cover page for dissertations.
\newcommand{\disstitlepage}[5]{%
\gentitlepage{#1}{#2}{#3}{%
Dissertation\\
zur Erlangung des akademischen Grades\\
%
\ifstrequal{#4}{nat}{%
Doktor der Naturwissenschaften\\%
(Dr.~rer.~nat.)\\%
}{\ifstrequal{#4}{ing}{%
Doktor der Ingenieurwissenschaften\\%
(Dr.-Ing.)\\%
}{}}%
%
der Technischen Fakult\"at\\
der Christian-Albrechts-Universit\"at zu Kiel\\
eingereicht im Jahr #5}}
%% Command to create the cover page for student's thesis.
\newcommand{\studtitlepage}[7]{%
\gentitlepage{#1}{#2}{#3}{%
#4\\
eingereicht im Jahr #5\\
\vspace{1ex}
Christian-Albrechts-Universit\"at zu Kiel\\
#6\\
\vspace{1ex}
Betreut durch: #7}}
%% Command to create the reviewer page for dissertations.
\newcommand{\dissreviewerpage}[4]{%
\newpage
\thispagestyle{plain}
\vspace*{.5\textheight}
\noindent
\begin{tabular}{@{}p{.20\textwidth}@{\hspace{.05\textwidth}}p{.75\textwidth}@{}}
1.~Gutachter: & \ifthenelse{\equal{#1}{_}}{\rule{12em}{.3pt}}{#1} \\[1em]
2.~Gutachter: & \ifthenelse{\equal{#2}{_}}{\rule{12em}{.3pt}}{#2}
\ifthenelse{\equal{#3}{}}{}{\\[1em] 3.~Gutachter: & \ifthenelse{\equal{#3}{_}}{\rule{12em}{.3pt}}{#3}}
\end{tabular}
\par
\vspace*{2em}
\noindent
Datum der m\"undlichen Pr\"ufung:~\ifthenelse{\equal{#4}{_}}{\rule{12em}{.3pt}}{#4}}
%% Eidesstattliche Erklaerung
\newcommand*{\eidesstatt}{%
\newpage
\thispagestyle{plain}
\hskip 0mm
\vfill
\noindent
\begin{otherlanguage}{ngerman}
\textbf{Eidesstattliche Erkl{\"a}rung}\par
\bigskip\noindent Hiermit erkl{\"a}re ich an Eides statt, dass
ich die vorliegende Arbeit selbst\-st{\"a}n\-dig verfasst und keine
anderen als die angegebenen Quellen und Hilfsmittel verwendet habe.\par
\bigskip\noindent Kiel,
\vskip 10mm
\hfill\rule{18em}{.3pt}%
\end{otherlanguage}}
%% Command to create a page with meta data.
\newcommand{\metapage}[7]{%
\newpage%
\thispagestyle{plain}%
\footnotesize%
\mbox{}\vfill%
\begin{itemize}[label=]%
\item Kiel Computer Science Series (KCSS) #1%
\item
ISSN 2193-6781 (print version)\\
ISSN 2194-6639 (electronic version)
\item Electronic version, updates, errata available via
\url{https://www.informatik.uni-kiel.de/kcss}
\ifthenelse{\equal{#2}{}}{}{\item The author can be contacted via #2}%
\item Published by the Department of Computer Science, Christian-Albrechts-Universit\"at zu Kiel%
\item #3%
\item Please cite as:%
\begin{itemize}%
\item #4%
\end{itemize}%
\item \lstinputlisting[%
nolol=true,frame=none,numbers=none,language={},style={},keywordsprefix={},basicstyle=\tt,%
aboveskip=\medskipamount,belowskip=\medskipamount,lineskip=0pt,boxpos=c,print=true,%
showlines=false,gobble=0,tabsize=8,showtabs=false,showspaces=false,%
linewidth=\linewidth,xleftmargin=0pt,xrightmargin=0pt,resetmargins=false,breaklines=false,%
columns={[c]fixed},flexiblecolumns=false,keepspaces=false,basewidth={0.6em,0.45em},fontadjust=false,%
mathescape=false,escapechar={},escapeinside={},%
]{#5}%
\item \textcopyright\ #6%
\ifthenelse{\equal{#7}{}}{}{\item #7}%
\end{itemize}%
\normalsize}
%% Paragraph skip instead of paragraph indentation.
\ififiseries@halfparskip
\setlength{\parskip}{.5\baselineskip plus .5\baselineskip}
\setlength{\parindent}{0em}
\setlength{\parfillskip}{\ifiseries@halfparskipfill\textwidth plus 1fil}
\fi
%% Enumeration environments.
%
\ififiseries@halfparskip
%
% For halfparskip, we set topsep to 0 everywhere.
% This seems to be necessary to prevent excessive whitespace.
%
\setitemize{leftmargin=*, label=$\triangleright$, topsep=0em}
\setenumerate{leftmargin=*, topsep=0em}
\setdescription{leftmargin=\parindent, style=sameline, font=\it, topsep=0em}
\setlist[compactitemize]{%
label=\raisebox{.1em}{\smaller\textbullet},%
leftmargin=*,%
topsep=.0em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
\setlist[compactitemize,2,3]{%
topsep=.0em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
%
\setlist[compactenumerate]{%
label=\arabic*.,%
leftmargin=*,%
topsep=.0em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
% FIXME: third level does not work for compactenumerate
\setlist[compactenumerate,2]{%
label=(\alph*),%
topsep=.0em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
%
\setlist[compactdescription]{%
style=sameline,%
font=\it,%
leftmargin=\parindent,%
topsep=.0em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
\setlist[compactdescription,2,3]{%
topsep=.0em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
\else
%
% Settings for non-halfparskip (the normal settings).
%
\@ifclassloaded{beamer}{\setitemize{leftmargin=*,%
label={\usebeamercolor[fg]{itemize item}%
\scriptsize\raise1.25pt\hbox{\donotcoloroutermaths$\blacktriangleright$}}}%
\setenumerate{leftmargin=*}%
\setdescription{font={\normalfont\usebeamercolor[fg]{itemize item}}}}%
{\setitemize{leftmargin=*, label=$\triangleright$}%
\setenumerate{leftmargin=*}%
\setdescription{leftmargin=\parindent, style=sameline, font=\it}}
\setlist[compactitemize]{%
label=\raisebox{.1em}{\smaller\textbullet},%
leftmargin=*,%
topsep=.4em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
\setlist[compactitemize,2,3]{%
topsep=.1em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
%
\setlist[compactenumerate]{%
label=\arabic*.,%
leftmargin=*,%
topsep=.4em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
\setlist[compactenumerate,2,3]{%
topsep=.1em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
%
\setlist[compactdescription]{%
style=sameline,%
font=\it,%
leftmargin=\parindent,%
topsep=.4em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
\setlist[compactdescription,2,3]{%
topsep=.1em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
\fi
%% Figures and captions.
\captionsetup{font=small,labelfont=bf,labelsep=period}
\ifdefstring{\ifiseries@figure}{floatrow}{%
\captionsetup[subfigure]{labelformat=parens,labelsep=space}%
\floatsetup[table]{style=plaintop}%
\floatsetup[figure]{capbesideposition={center,inside},facing=yes}}{}
% Alter some defaults for better treatment of figures.
% Taken from http://mintaka.sdsu.edu/GF/bibliog/latex/floats.html
% See also p.105 of "TeX Unbound" for suggested values.
% General parameters, for ALL pages:
\renewcommand*{\topfraction}{0.9} % max fraction of floats at top
\renewcommand*{\bottomfraction}{0.8} % max fraction of floats at bottom
% Parameters for TEXT pages (not float pages):
\setcounter{topnumber}{2}
\setcounter{bottomnumber}{2}
\setcounter{totalnumber}{4} % 2 may work better
\setcounter{dbltopnumber}{2} % for 2-column pages
\renewcommand*{\dbltopfraction}{0.9} % fit big float above 2-col. text
\renewcommand*{\textfraction}{0.07} % allow minimal text w. figs
% Parameters for FLOAT pages (not text pages):
\renewcommand*{\floatpagefraction}{0.7} % require fuller float pages
% N.B.: floatpagefraction MUST be less than topfraction
\renewcommand*{\dblfloatpagefraction}{0.7} % require fuller float pages
%% Hyperref's \autoref feature.
\@ifclassloaded{beamer}{}{%
\providecommand{\subfigureautorefname}{\figureautorefname}
% \extrasenglish seem to be invoked twice, so need \renew.. there, hence all \...refname must be defined
\ifthenelse{\isundefined{\algorithmautorefname}}{\newcommand*{\algorithmautorefname}{Algorithm}}{}
\addto\extrasenglish{
\renewcommand*{\chapterautorefname}{Chapter}
\renewcommand*{\sectionautorefname}{Section}
\renewcommand*{\subsectionautorefname}{Section}
\renewcommand*{\algorithmautorefname}{Algorithm}}
} %%% end ifclassloaded not beamer
%% Configure listings package.
\lstset{basicstyle=\tt}
%% Configure the url package, and adjust \href command.
\ifthenelse{\isundefined{\DeclareUrlCommand}}{\renewcommand*{\path}[1]{\url{#1}}}{\DeclareUrlCommand\path{}} %%% workaround
\renewcommand*{\UrlFont}{\smaller\tt}
\let\@href\href
\renewcommand*{\href}[3][]{\@href[#1]{#2}{\UrlFont #3}}
%% Display settings.
\allowdisplaybreaks
\AtBeginDocument{
\setlength{\abovedisplayshortskip}{-.5\baselineskip plus .5\baselineskip}
\setlength{\abovedisplayskip}{\medskipamount}
\setlength{\belowdisplayshortskip}{\medskipamount}
\setlength{\belowdisplayskip}{\medskipamount}
}
\fi % ifiseries@layout