From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/ksp-thesis/ksp-thesis.cls | 377 +++++++++++++++++++++++++ 1 file changed, 377 insertions(+) create mode 100644 macros/latex/contrib/ksp-thesis/ksp-thesis.cls (limited to 'macros/latex/contrib/ksp-thesis/ksp-thesis.cls') diff --git a/macros/latex/contrib/ksp-thesis/ksp-thesis.cls b/macros/latex/contrib/ksp-thesis/ksp-thesis.cls new file mode 100644 index 0000000000..dab8421957 --- /dev/null +++ b/macros/latex/contrib/ksp-thesis/ksp-thesis.cls @@ -0,0 +1,377 @@ +%%% =========================================================================== +%%% +%%% A LaTeX class for theses published with KIT Scientific Publishing +%%% =========================================================================== +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{ksp-thesis}[2015/12/09 v1.0.2 LaTeX class for theses published with KIT Scientific Publishing] + +%%% =========================================================================== +%%% PRELIMINARY DECLARATIONS +%%% =========================================================================== +%%% Page layout options +%%% --------------------------------------------------------------------------- +%%% draft layout (for private print and correction prints) +\newcommand{\kspths@setlayout@draft}{% + \KOMAoptions{paper=a4,twoside=off,DIV=12,fontsize=12pt,BCOR=0.0mm,parskip=half,headsepline}% + \setheadsepline{0.5pt}% + \raggedbottom% +} +%%% official layout (for faculty and thesis committee) +\newcommand{\kspths@setlayout@official}{% + \KOMAoptions{paper=a4,twoside=on,DIV=13,fontsize=12pt,BCOR=15.0mm,parskip=half,cleardoublepage=empty,headsepline}% + \setheadsepline{0.5pt}% + \raggedbottom% +} +%%% KIT Scientific Report layout (for publication release, A4 paper size) +\newcommand{\kspths@setlayout@report}{\kspths@setlayout@official} +%%% KIT Scientific Publishing book layout (for publication release, 17cm x 24cm paper size) +\newcommand{\kspths@setlayout@seventeentwentyfour}{% + \KOMAoptions{paper=17cm:24cm,twoside=on,DIV=14,fontsize=10pt,BCOR=15.0mm,parskip=half,cleardoublepage=empty,headinclude,pagesize,headsepline}% + \setheadsepline{0.5pt}% + \raggedbottom% +} +%%% default layout (if not set in class options) +\newcommand{\kspths@setlayout}{% + \ClassWarning{ksp-thesis}{You have not selected a page layout, the default option 'report' will be used.} + \kspths@setlayout@report% +} + +%%% =========================================================================== +%%% OPTION DECLARATION AND PROCESSING +%%% =========================================================================== +\RequirePackage{xkeyval} +%%% BEGIN PATCH +%%% to avoid endless loop when using bad presetkey settings +%%% http://tex.stackexchange.com/a/94006 +\def\XKV@badsetkeys{% + \@latex@error{You can't nest \noexpand\setkeys in preset keys. + \MessageBreak That could cause an endless loop}\@ehd +} +\let\XKV@savsetkeys\setkeys +\def\XKV@usepresetkeys#1#2{% + \XKV@presettrue + \let\setkeys\XKV@badsetkeys + \XKV@for@eo\XKV@fams\XKV@tfam{% + \XKV@makehd\XKV@tfam + \XKV@ifundefined{XKV@\XKV@header#2}{}{% + \XKV@toks\expandafter\expandafter\expandafter + {\csname XKV@\XKV@header#2\endcsname}% + \@expandtwoargs\XKV@s@tkeys{\the\XKV@toks}% + {\XKV@naa\ifx\XKV@naa\@empty\else,\fi#1}% + }% + }% + \let\setkeys\XKV@savsetkeys + \XKV@presetfalse +} +%%% END PATCH + +%%% main page layout options +%%% --------------------------------------------------------------------------- +\define@choicekey*+{ksp-thesis.cls}{layout}[\val\nr]{draft,official,report,17x24}{% + \ifcase\nr\relax + \renewcommand{\kspths@setlayout}{\kspths@setlayout@draft} + \or + \renewcommand{\kspths@setlayout}{\kspths@setlayout@official} + \or + \renewcommand{\kspths@setlayout}{\kspths@setlayout@report} + \or + \renewcommand{\kspths@setlayout}{\kspths@setlayout@seventeentwentyfour} + \fi +}{% + \ClassWarning{ksp-thesis}{Value '#1' is unknown for key 'layout' and will % + be ignored.}% +} +%%% TOC style options +%%% --------------------------------------------------------------------------- +%%% dotted TOC +\define@boolkey+{ksp-thesis.cls}[kspths@]{dottedtoc}[true]{% + \ifkspths@dottedtoc + \else + \@ifpackagewith{classicthesis}{dottedtoc}{% + \ClassWarning{ksp-thesis}{'dottedtoc=#1': The option 'dottedtoc' of % + the package has been previously set and cannot be % + overridden anymore. % + Please remove the earlier setting} + }{% + \ClassWarning{ksp-thesis}{The default setting for 'dottedtoc' has % + been changed to '#1'.} + } + \fi +}{% + \ClassError{ksp-thesis}{Invalid value '#1' for 'dottedtoc' key, assuming 'true'}% + {Please use 'true' or 'false'}% + \setkeys{ksp-thesis.cls}{dottedtoc=true} +} +%%% dotted part entries in TOC +\define@boolkey+{ksp-thesis.cls}[kspths@]{dottedtocparts}[true]{% + \ifkspths@dottedtoc + \else + \ifkspths@dottedtocparts + \ClassWarning{ksp-thesis}{You are using 'dottedtocparts=true' % + in combination with 'dottedtoc=false'. This results in an % + inconsistent TOC layout and is not recommended}% + \fi + \fi +}{% + \else + \ClassError{ksp-thesis}{Invalid value '#1' for 'dottedtocparts' key, % + assuming 'true'}% + {Please use 'true' or 'false'}% + \setkeys{ksp-thesis.cls}{dottedtocparts=true} +} +%%% dotted chapter entries in TOC +\define@boolkey+{ksp-thesis.cls}[kspths@]{dottedtocchapters}[true]{% + \ifkspths@dottedtoc + \else + \ifkspths@dottedtocchapters + \ClassWarning{ksp-thesis}{You are using 'dottedtocchapters=true' % + in combination with 'dottedtoc=false'. This results in an % + inconsistent TOC layout and is not recommended}% + \fi + \fi +}{% + \ClassError{ksp-thesis}{Invalid value '#1' for 'dottedtocchapters' key, % + assuming 'true'}% + {Please use 'true' or 'false'}% + \setkeys{ksp-thesis.cls}{dottedtocchapters=true} +} +%%% bold TOC part entries +\define@boolkey+{ksp-thesis.cls}[kspths@]{tocpartentriesbold}[true]{% + \ifkspths@tocpartentriesbold + \else + \ClassWarning{ksp-thesis}{The default setting for 'tocpartentriesbold' has been % + changed to '#1'.} + \fi +}{% + \ClassError{ksp-thesis}{Invalid value '#1' for 'tocpartentriesbold' key, assuming 'true'}% + {Please use 'true' or 'false'}% + \setkeys{ksp-thesis.cls}{tocpartentriesbold=true} +} +%%% bold TOC chapter entries +\define@boolkey+{ksp-thesis.cls}[kspths@]{tocchapterentriesbold}[true]{% + \ifkspths@tocchapterentriesbold + \else + \ClassWarning{ksp-thesis}{The default setting for 'tocchapterentriesbold' has been % + changed to '#1'.} + \fi +}{% + \ClassError{ksp-thesis}{Invalid value '#1' for 'tocchapterentriesbold' key, assuming 'true'}% + {Please use 'true' or 'false'}% + \setkeys{ksp-thesis.cls}{tocchapterentriesbold=true} +} +%%% bold TOC entries +\define@boolkey+{ksp-thesis.cls}[kspths@]{tocentriesbold}[true]{% + \setkeys{ksp-thesis.cls}{tocpartentriesbold=#1,tocchapterentriesbold=#1} + \ifkspths@tocentriesbold + \else + \ClassWarning{ksp-thesis}{The default setting for 'tocentriesbold' has been % + changed to '#1'.} + \fi +}{% + \ClassError{ksp-thesis}{Invalid value '#1' for 'tocentriesbold' key, assuming 'true'}% + {Please use 'true' or 'false'}% + \setkeys{ksp-thesis.cls}{tocentriesbold=true} +} +%%% ragged lists +\define@boolkey+{ksp-thesis.cls}[kspths@]{raggedlists}[true]{% +}{% + \ClassError{ksp-thesis}{Invalid value '#1' for 'raggedlists' key, % + assuming 'true'}% + {Please use 'true' or 'false'}% + \setkeys{ksp-thesis.cls}{raggedlists=true} +} + +%%% pass unknown options on to the base class +%%% --------------------------------------------------------------------------- +\DeclareOptionX*{% + \PassOptionsToClass{\CurrentOption}{scrbook}% +} +%%% default settings +%%% --------------------------------------------------------------------------- +\presetkeys{ksp-thesis.cls}{% + dottedtoc, + raggedlists, + %tocentriesbold, % cannot be set within \presetkeys + %layout=report, % default behavoir is set above with \newcommand{\kspths@setlayout} +}{} +\setkeys{ksp-thesis.cls}{tocentriesbold} % cannot be set within \presetkeys +%%% process options +%%% --------------------------------------------------------------------------- +\ProcessOptionsX + +%%% =========================================================================== +%%% LOAD BASE CLASS +%%% =========================================================================== +\LoadClass{scrbook} +\RequirePackage{scrlayer-scrpage} % change header and footer + +%%% =========================================================================== +%%% MAIN DECLARATIONS +%%% =========================================================================== +%%% set package options +%%% --------------------------------------------------------------------------- +\ifkspths@dottedtoc + \PassOptionsToPackage{dottedtoc}{classicthesis} % sets pagenumbers flushed right in the table of contents +\fi +%%% and for layout, font and typography settings +%%% --------------------------------------------------------------------------- +\RequirePackage{classicthesis} +\RequirePackage{arsclassica} +%%% reset page and typearea settings according to KSP requirements +%%% --------------------------------------------------------------------------- +\kspths@setlayout +\recalctypearea +%%% modify definitions for headings +%%% --------------------------------------------------------------------------- +%%% color definitions +\definecolor{parttitlecolor}{named}{Maroon} +%%% use font definitions that are compatible with KOMA script +\setkomafont{part}{\normalfont\centering\large} +\newkomafont{parttitle}{\color{parttitlecolor}\spacedallcaps} +\setkomafont{chapter}{\normalfont\Large\sffamily} +\newkomafont{chaptertitle}{\raggedright\spacedallcaps} +\setkomafont{section}{\normalfont\Large\sffamily\raggedright} +\newkomafont{sectiontitle}{\spacedlowsmallcaps} +\setkomafont{subsection}{\normalfont\large\sffamily\raggedright} +\newkomafont{subsectiontitle}{\relax} +\setkomafont{subsubsection}{\normalfont\sffamily\itshape\raggedright} +\newkomafont{subsubsectiontitle}{\normalsize\itshape} +\setkomafont{paragraph}{\normalfont\normalsize\sffamily} +\newkomafont{paragraphtitle}{\spacedlowsmallcaps} +\setkomafont{descriptionlabel}{\bfseries\spacedlowsmallcaps} +%%% command to make a box with the width of the current chapter number +%%% (this allows to use equal width for chapter, ..., subsubsection numbers) +\newlength{\secnumwidth}% +\newcommand{\kspths@secnumbox}[1]{% +\settowidth{\secnumwidth}{\usekomafont{chapter}{\chapterNumber\thechapter\hspace{10pt}\vline} }% +\makebox[\secnumwidth][l]{#1}% +} +%%% reformat parts +\ifthenelse{\boolean{@parts}}% +{% + \titleformat{\part}[display] + {\usekomafont{part}}% + {\thispagestyle{empty}\partname~\MakeTextUppercase{\thepart}}{1em}% + {\usekomafont{parttitle}} +}{\relax} +%%% reformat chapters +\ifthenelse{\boolean{@linedheaders}}{% + \ClassWarning{ksp-thesis}{% + The 'linedheaders' option of the package is incompatible and % + will be ignored.}% +}{} +\renewcommand\formatchapter[1]{% + \vbox to \ht\strutbox{ + \setbox0=\hbox{\chapterNumber\thechapter\hspace{10pt}\vline\ } + \advance\hsize-\wd0 \advance\hsize-10pt + \usekomafont{chaptertitle}{#1}\vss}} +\titleformat{\chapter}[block] + {\usekomafont{chapter}} + {\textcolor{halfgray}{\chapterNumber\thechapter} + \hspace{10pt}\vline\ }{10pt} + {\formatchapter} +%%% reformat sections +\titleformat{\section} + {\usekomafont{section}}{\kspths@secnumbox{\textsc% + {\MakeTextLowercase{\thesection}}}}% + {10pt}{\usekomafont{sectiontitle}} +%%% reformat subsections +\titleformat{\subsection} + {\usekomafont{subsection}}{\kspths@secnumbox{\textsc{\MakeTextLowercase% + {\thesubsection}}}}{10pt}{\usekomafont{subsectiontitle}} +%%% reformat subsubsections +\titleformat{\subsubsection} + {\usekomafont{subsubsection}}{\kspths@secnumbox{\textsc% + {\MakeTextLowercase{\thesubsubsection}}}}% + {10pt}{\usekomafont{subsubsectiontitle}} +%%% reformat paragraphs +\titleformat{\paragraph}[runin] + {\usekomafont{paragraph}}{\textsc% + {\MakeTextLowercase{\theparagraph}}}% + {0pt}{\usekomafont{paragraphtitle}} +%%% reformat descriptionlabels +\renewcommand{\descriptionlabel}[1]{\hspace*{\labelsep}% +\usekomafont{descriptionlabel}{#1}} +%%% modify definitions for TOC style +%%% --------------------------------------------------------------------------- +%%% change colors +\ifthenelse{\boolean{@parts}}{% + \renewcommand{\cftpartfont}{\color{parttitlecolor}\normalfont}% + \renewcommand{\cftpartpagefont}{\color{parttitlecolor}\normalfont}% +}{\relax} +%%% use correct format of parts in TOC +%%% http://tex.stackexchange.com/a/140053 +\def\ttl@tocpart{\def\ttl@a{\protect\numberline{\thepart}\@gobble{}}} +%%% use equal width for part numbers and chapter numbers +\setlength{\cftpartnumwidth}{\cftchapnumwidth} +%%% use bold parts instead of smallcaps if specified in the options +\ifkspths@tocpartentriesbold + \renewcommand{\thepart}{\Roman{part}}% + \renewcommand{\cftpartpresnum}{\normalfont\bfseries}% \scshape + \let\cftpartfontoriginal\cftpartfont + \renewcommand{\cftpartfont}{% +\let\spacedlowsmallcapstemp\spacedlowsmallcaps% +\let\spacedlowsmallcaps\relax% +\cftpartfontoriginal\bfseries}% + \let\cftpartpagefontoriginal\cftpartpagefont + \renewcommand{\cftpartafterpnum}{\let\spacedlowsmallcaps\spacedlowsmallcapstemp\ifkspths@dottedtoc\else\cftparfillskip\fi} + \renewcommand{\cftpartpagefont}{\cftpartpagefontoriginal\bfseries}% +\fi +%%% use bold chapters instead of smallcaps if specified in the options +\ifkspths@tocchapterentriesbold + \renewcommand{\cftchappresnum}{\normalfont\bfseries}% + \renewcommand{\cftchapfont}{% +\let\spacedlowsmallcapstemp\spacedlowsmallcaps% +\let\spacedlowsmallcaps\relax% +\normalfont\bfseries}% + \renewcommand{\cftchapafterpnum}{\let\spacedlowsmallcaps\spacedlowsmallcapstemp\ifkspths@dottedtoc\else\cftparfillskip\fi} + \renewcommand{\cftchappagefont}{\normalfont\bfseries}% +\fi +%%% use dotted leaders for parts/chapters if specified in the options +\ifkspths@dottedtocparts + \renewcommand{\cftpartleader}{\cftdotfill{\cftdotsep}}% +\fi +\ifkspths@dottedtocchapters + \renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}% +\fi +%%% additional layout settings +%%% --------------------------------------------------------------------------- +%%% left-aligned footnotes +\deffootnote{1.5em}{1em}{\makebox[1.5em][l]{\thefootnotemark}} +%%% ragged lists +%%% http://tex.stackexchange.com/a/104093 +\RequirePackage{ragged2e} % improved ragged text +\RequirePackage{etoolbox} % programming tools for LaTeX class and package authors +\newkomafont{itemize}{} +\newkomafont{enumerate}{} +\newkomafont{description}{} +\ifkspths@raggedlists + \setkomafont{itemize}{\RaggedRight} + \setkomafont{enumerate}{\RaggedRight} + \setkomafont{description}{\RaggedRight} +\fi +\AtBeginEnvironment{itemize}{\preto\item{\usekomafont{itemize}}} +\AtBeginEnvironment{enumerate}{\preto\item{\usekomafont{enumerate}}} +\AtBeginEnvironment{description}{\preto\item{\usekomafont{description}}} +%%% line break controls +%%% http://www.tex.ac.uk/FAQ-widows.html +\clubpenalty = 10000 % disable first line of a paragraph at the end of a page (orphans / Schusterjungen) +\widowpenalty = 10000 % disable last line of a paragraph at the start of a page (widows / Hurenkinder) +\finalhyphendemerits=50000000 % avoid hyphenation before last line of paragraph +%%% commands for manual word spacing controls +%%% http://tex.stackexchange.com/a/23924 +\newdimen\origiwspc +\newdimen\origiwstr +\newcommand{\resetwspc}{\fontdimen2\font=\origiwspc} +\newcommand{\resetwstr}{\fontdimen3\font=\origiwstr} +\newcommand{\reducewspc}[1][0.95]{\fontdimen2\font=#1\origiwspc} +\newcommand{\reducewstr}[1][0.95]{\fontdimen3\font=#1\origiwstr} +\AtBeginDocument{% +\origiwspc=\fontdimen2\font% original inter word space +\origiwstr=\fontdimen3\font% original inter word stretch +} +%%% do not highlight links (remove colors set by ) +\RequirePackage{hyperref} +\hypersetup{ + hidelinks, % remove link color and border +} -- cgit v1.2.3