Skip to content
Snippets Groups Projects
base.dtx 57.8 KiB
Newer Older
% \fi\file{style/mu/fithesis-base.sty}\label{sec:fithesis-mu-base}
% This is the base style file for theses written at the Masaryk
% University in Brno. When inheritance is enabled for style files,
% this file is always the second style file to be loaded right
% after \texttt{style/fithesis-base.sty}, regardless of the value
% of the |\thesis@style| macro.
\ProvidesPackage{fithesis/style/mu/fithesis-base}[2017/05/21]
\NeedsTeXFormat{LaTeX2e}
%    \end{macrocode}
% The file recognizes the following options: \begin{itemize}
%   \item\texttt{10pt}, \texttt{11pt}, \texttt{12pt} -- Sets the
%     type size to 10, 11 or 12 points respectively.
%    \begin{macrocode}
\DeclareOption{10pt}{\def\thesis@ptsize{0}}
\DeclareOption{11pt}{\def\thesis@ptsize{1}}
\DeclareOption{12pt}{\def\thesis@ptsize{2}}
%    \end{macrocode}
%   \item\texttt{oneside}, \texttt{twoside} -- The document is
%     going to be either single- or double-sided, respectively. In
%     a double-sided document, headers, page numbering, margin
%     notes and several other elements will be arranged based on
%     the parity of the page. Blank pages will also be inserted
%     prior the beginning of each chapter to ensure that it starts
%     on a right-hand (odd-numbered) page. The
%     \DescribeMacro{\ifthesis@twoside@}|\ifthesis@twoside@|
%     conditional is set to either \texttt{false} or \texttt{true},
%     respectively.
%    \begin{macrocode}
\newif\ifthesis@twoside@
\DeclareOption{oneside}{%
  \thesis@twoside@false\@twosidefalse\@mparswitchfalse}
\DeclareOption{twoside}{%
  \thesis@twoside@true \@twosidetrue \@mparswitchtrue}
%    \end{macrocode}
%   \item\texttt{onecolumn}, \texttt{twocolumn} -- The document
%     is going to be set in either a single column or in two
%     columns, respectively.
%    \begin{macrocode}
\DeclareOption{onecolumn}{\@twocolumnfalse}
\DeclareOption{twocolumn}{\@twocolumntrue}
%    \end{macrocode}
%   \item\texttt{draft}, \texttt{final} -- Overful lines either are
%     or aren't marked within the document, respectively, and
%     graphics either aren't or are inserted into the document,
%    \begin{macrocode}
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
\DeclareOption{final}{\setlength\overfullrule{0pt}}
%    \end{macrocode}
Vít Novotný's avatar
Vít Novotný committed
%   \item\texttt{palatino}, \texttt{nopalatino} -- The roman
%     text font family and the math font family is going to be
%     either set to Palatino or left untouched, respectively. The
%     \DescribeMacro{\ifthesis@palatino@}|\ifthesis@|^^A
%     \discretionary{}{}{}|palatino@| conditional is set to either
%     \texttt{true} or \texttt{false}, respectively. The
%     Palatino font is a part of the visual identity of the Faculty
%     of Informatics at which the document class was created.
%    \begin{macrocode}
\newif\ifthesis@palatino@
\DeclareOption{palatino}{\thesis@palatino@true}
\DeclareOption{nopalatino}{\thesis@palatino@false}
%    \end{macrocode}
%   \item\texttt{color}, \texttt{monochrome} -- Certain
%     typographical elements either are or aren't going to be
%     typeset in color, respectively. The
%     \DescribeMacro{\ifthesis@color@}|\ifthesis@color@|
%     conditional is set to either \texttt{true} or \texttt{false},
%     respectively.
%    \begin{macrocode}
\newif\ifthesis@color@
\DeclareOption{monochrome}{\thesis@color@false}
\DeclareOption{color}{\thesis@color@true}
%    \end{macrocode}
%   \item\texttt{microtype}, \texttt{nomicrotype} -- The
%     microtypographic extension of modern \TeX\ engines -- such as
%     \hologo{pdfTeX}, \Hologo{XeTeX}, or \Hologo{LuaTeX} -- is or isn't
%     going to be enabled, respectively. The
%     \DescribeMacro{\ifthesis@microtype@}|\ifthesis@microtype@|
%     conditional is set to either \texttt{true} or \texttt{false},
%     respectively.
%    \begin{macrocode}
\newif\ifthesis@microtype@
\DeclareOption{microtype}{\thesis@microtype@true}
\DeclareOption{nomicrotype}{\thesis@microtype@false}
%    \end{macrocode}
%   \item\texttt{table}, \texttt{oldtable} -- If the
%     |\ifthesis@color@| conditional is \texttt{true}, then the
%     definitions of the \texttt{tabular}, \texttt{tabularx}, and
%     \texttt{tabu} commands either are or aren't going to be
%     altered to better match the style, respectively. The
%     \DescribeMacro{\ifthesis@newtable@}|\ifthesis@newtable@|
%     conditional is set to either \texttt{true} or \texttt{false},
%     respectively.
%    \begin{macrocode}
\newif\ifthesis@newtable@
\DeclareOption{table}{\thesis@newtable@true}
\DeclareOption{oldtable}{\thesis@newtable@false}
%    \end{macrocode}
%
%     The choice of the option name is deliberate -- the
%     redefinition of the table environments depends on the
%     \textsf{xcolor} package, which needs to be loaded with the
%     \texttt{table} option. Since so many other packages depend on
%     the \textsf{xcolor} package and this style file is loaded at
%     the very end of the preamble, there would either be a great
%     chance of an option clash, or the option would have to be
%     passed to the \textsf{xcolor} package before the preamble
%     from the body of the \textsf{fithesis3} class thus breaking
%     the encapsulation. Naming the option \texttt{table} forces
%     the option to be processed by the \textsf{xcolor} package as
%     well and it is therefore an elegant solution to the problem
%     at hand.
%   \item\texttt{lot}, \texttt{nolot} -- The \DescribeMacro{^^A
%     \thesis@blocks@lot}|\thesis@blocks@lot| macro will be defined
%     as either |\listoftables| or |\relax|, respectively. As a
%     side effect, the |\listoftables| either is or isn't going to
%     be included in the \DescribeMacro{\thesis@blocks@tables}^^A
%     |\thesis@|\discretionary{}{}{}|blocks@tables| block,
%     respectively.
\DeclareOption{nolot}{\let\thesis@blocks@lot\relax}
\DeclareOption{lot}{\let\thesis@blocks@lot\listoftables}
%    \end{macrocode}
%   \item\texttt{lot}, \texttt{nolot} -- The \DescribeMacro{^^A
%     \thesis@blocks@lof}|\thesis@blocks@lof| macro will be defined
%     as either |\listoffigures| or |\relax|, respectively. As a
%     side effect, the |\listoffigures| either is or isn't going to
%     be included in the \DescribeMacro{\thesis@blocks@tables}^^A
%     |\thesis@|\discretionary{}{}{}|blocks@tables| block,
%     respectively.
\DeclareOption{nolof}{\let\thesis@blocks@lof\relax}
\DeclareOption{lof}{\let\thesis@blocks@lof\listoffigures}
%    \end{macrocode}
%   \item\texttt{cover}, \texttt{nocover} -- The
%     \DescribeMacro{\thesis@blocks@cover}|\thesis@blocks@cover|
%     either is going to expand to either the thesis cover or
%     produces no output, respectively. The
%     \DescribeMacro{\ifthesis@cover@}|\ifthesis@cover@|
%     conditional is set to \texttt{false} or \texttt{true},
%     respectively.
\newif\ifthesis@cover@
\DeclareOption{nocover}{\thesis@cover@false}
\DeclareOption{cover}{\thesis@cover@true}
%    \end{macrocode}
%   \item\texttt{digital}, \texttt{printed} -- These macrooptions
%     set the options that are appropriate for either the printed or
%     for the digital version of the document, respectively. The
%     \DescribeMacro{\ifthesis@digital@}|\ifthesis@digital@|
%     conditional is set to \texttt{true} or \texttt{false},
%     respectively.
\newif\ifthesis@digital@
\DeclareOption{digital}{%
  \ExecuteOptions{color,cover}%
  \thesis@digital@true}
\DeclareOption{printed}{%
  \ExecuteOptions{monochrome,nocover}%
  \thesis@digital@false}
% These are the default options:
%    \begin{macrocode}
\ExecuteOptions{%
  printed,12pt,twoside,final,microtype,palatino,oldtable,lot,lof}
\ProcessOptions*
% The file uses English locale strings within the macros.
%    \begin{macrocode}
\thesis@requireLocale{english}
%    \end{macrocode}
% The file loads the following packages: \begin{itemize}
%   \item\textsf{xcolor} -- Adds support for color manipulation.
%   \item\textsf{ifxetex} -- Used to detect the \Hologo{XeTeX}
%     engine.
witiko's avatar
witiko committed
%   \item\textsf{ifluatex} -- Used to detect the \Hologo{LuaTeX}
%     engine.
%   \item\textsf{graphix} -- Adds support for the inclusion of
%     graphics files.
%   \item\textsf{pdfpages} -- Adds support for the injection of PDF
%     documents into the resulting document, namely the thesis
%     assignment.
%   \item\textsf{hyperref} -- Adds support for the injection of
%     metadata into the resulting PDF document.
%   \item\textsf{keyval} -- Adds support for parsing
%     comma-delimited lists of key-value pairs.
% \end{itemize}
%    \begin{macrocode}
witiko's avatar
witiko committed
\thesis@require{xcolor}
\thesis@require{graphicx}
\thesis@require{pdfpages}
\thesis@require{keyval}
\thesis@require{ifxetex}
witiko's avatar
witiko committed
\thesis@require{ifluatex}
%    \end{macrocode}
% If the |\thesis@microtype@| is set to true, then the
% \textsf{microtype} package gets loaded.
%    \begin{macrocode}
\ifthesis@microtype@
  \thesis@require[final,babel]{microtype}
witiko's avatar
witiko committed
% Using the |\ifxetex| and |\ifluatex| conditionals, a compound
% \DescribeMacro{\ifthesis@xeluatex}|\ifthesis@xeluatex|
witiko's avatar
witiko committed
% conditional was constructed. This conditional can be used by
% subsequently loaded style files to test, whether either the
% \Hologo{XeTeX} or the \Hologo{LuaTeX} engine is being used.
witiko's avatar
witiko committed
%    \begin{macrocode}
witiko's avatar
witiko committed
{\let\x\expandafter
\x\global\x\let\x\ifthesis@xeluatex\csname if%
witiko's avatar
witiko committed
  \ifxetex true\else
    \ifluatex\x\x\x t\x\x\x r\x\x\x u\x\x\x e%
    \else   f\x\x\x a\x\x\x l\x\x\x s\x\x\x e%
witiko's avatar
witiko committed
    \fi
witiko's avatar
witiko committed
  \fi\endcsname}
%    \end{macrocode}
% The following packages get only loaded, when the document is
witiko's avatar
witiko committed
% being typeset using the \Hologo{XeTeX} or \Hologo{LuaTeX}
% engine: \begin{itemize}
%   \item\textsf{fontspec} -- Allows the selection of
witiko's avatar
witiko committed
%     system-installed fonts.
%   \item\textsf{unicode-math} -- Allows the selection of
witiko's avatar
witiko committed
%     system-installed mathematical fonts.
% \end{itemize}
% Under \Hologo{XeTeX} or \Hologo{LuaTeX}, the \textsf{TeX Gyre
% Pagella} and \textsf{TeX Gyre Pagella Math} are also selected as
% the main text and math fonts.
%    \begin{macrocode}
\ifthesis@xeluatex
  \ifthesis@palatino@
    \thesis@require{fontspec}
    \thesis@require{unicode-math}
    \setmainfont[Ligatures=TeX]{TeX Gyre Pagella}
    \setmathfont[math-style=ISO,bold-style=ISO]{texgyrepagella-math.otf}
%    \end{macrocode}
% The following packages get only loaded, when the document is not
% being typeset using the \Hologo{XeTeX} or \Hologo{LuaTeX} engine
% and the |\ifthesis@palatino@| conditional is \texttt{true}:
% \begin{itemize}
%   \item\textsf{cmap} -- Places an explicit \texttt{ToUnicode}
%     map in the resulting PDF file, allowing for the extraction of
%     the text from the document.
%   \item\textsf{mathpazo} -- Changes the default math font family
%     to \texttt{mathpazo}.
%   \item\textsf{tgpagella} -- Changes the default roman font
%     family to \TeX\ Gyre Pagella.
%   \item\textsf{lmodern} -- Changes the default sans-serif and
%     monotype font faces to Latin Modern instead of the default
%     Computer Modern font family.
%   \item\textsf{fontenc} -- The font encoding is set to Cork.
% \end{itemize}
%    \begin{macrocode}
  \ifthesis@palatino@
    \RequirePackage[resetfonts]{cmap}
    \thesis@require{lmodern}
    \thesis@require{mathpazo}
    \thesis@require{tgpagella}
    \RequirePackage[T1]{fontenc}
  \fi
%    \end{macrocode}
% If the |\thesis@newtable@| conditional is \texttt{true}, then
% some of the dimensions associated with tables are modified in
% preparation for the coloring of the table cells. The following
% packages are also loaded:
% \begin{itemize}
%   \item\textsf{tabularx} -- Provides the \texttt{tabularx}
%     environment, which enables the typesetting of tables with
%     flexible-width columns.
%   \item\textsf{tabu} -- Provides the \texttt{tabu} environment,
%     which enables the typesetting of complex tables.
%   \item\textsf{booktabs} -- A package, which allows the creation
%     of publication-quality tables in \LaTeX.
% \end{itemize}
%    \begin{macrocode}
\let\thesis@newtable@old\tabular
\let\endthesis@newtable@old\endtabular
\ifthesis@newtable@
  % Load the packages.
  \thesis@require{tabularx}
  \thesis@require{tabu}
  \thesis@require{booktabs}
  % Adjust the measurements.
  \setlength{\aboverulesep}{0pt}
  \setlength{\belowrulesep}{0pt}
  \setlength{\extrarowheight}{.75ex}
%    \end{macrocode}
% When both the |\thesis@newtable@| and |\thesis@color@| conditionals are
% \texttt{true}, then the \texttt{tabular} and \texttt{tabularx}
% environments are redefined to better match the style of the given
% faculty.
% 
% The \DescribeMacro{\thesis@newtable@old}|\thesis@newtable@old|
% and \DescribeMacro{\endthesis@newtable@old}
% |\endthesis@newtable@old| macros containing the original
% definition of the |tabular| environment are always defined and
% are available for subsequently loaded styles in case the
% typesetting of unaltered tables is required. Similarly, the
% \DescribeMacro{\thesis@newtable@oldx}|\thesis@newtable@oldx| and
% \DescribeMacro{\endthesis@newtable@oldx}|\endthesis@newtable@oldx|
% macros are defined for the |tabularx| environment and the
% \DescribeMacro{\thesis@newtable@oldtabu}|\thesis@newtable@oldtabu|
% and \DescribeMacro{\endthesis@newtable@oldtabu}
% |\endthesis@newtable@oldtabu| for the |tabu| environment.
%    \begin{macrocode}
  \ifthesis@color@
    % The redefinition of `tabular`
    \renewenvironment{tabular}%
      {\rowcolors{1}{thesis@color@tableOdd}%
                    {thesis@color@tableEven}%
       \thesis@newtable@old}%
      {\endthesis@newtable@old}
    % The redefinition of `tabularx`
    \let\thesis@newtable@oldx\tabularx
    \let\endthesis@newtable@oldx\endtabularx
    \renewenvironment{tabularx}%
      {\rowcolors{1}{thesis@color@tableEven}%
                    {thesis@color@tableOdd}%
       \thesis@newtable@oldx}%
      {\endthesis@newtable@oldx}
    % The redefinition of `tabu`
    \let\thesis@newtable@oldtabu\tabu
    \let\endthesis@newtable@oldtabu\endtabu
    \renewenvironment{tabu}%
      {\rowcolors{1}{thesis@color@tableEven}%
                    {thesis@color@tableOdd}%
       \thesis@newtable@oldtabu}%
      {\endthesis@newtable@oldtabu}
  \fi
\fi
%    \end{macrocode}
% \begin{macro}{\ifthesis@bibliography@}
% A new conditional, |\ifthesis@bibliography@|, is defined. This
% conditional is true, when |\thesis@bibFiles| expands to a
% non-empty token list.
%    \begin{macrocode}
\newif\ifthesis@bibliography@
\thesis@bibliography@false
\ifx\thesis@bibFiles\undefined\else
  {\edef\@bibList{\thesis@bibFiles}%
  \ifx\@bibList\empty\else
    \global\thesis@bibliography@true
  \fi}
\fi
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\thesis@bibliography@setup}
% The file defines the |\thesis@bibliography@setup|\marg{options}
% command, where \textit{options} is a comma-delimited list of
% key-value pairs as defined by the \textsf{keyval} package. The
% command can be invoked by the subsequently loaded style
% files to define the bibliography options.
%    \begin{macrocode}
\def\thesis@bibliography@setup#1{%
  \setkeys{thesis@bibliography}{#1}}
%    \end{macrocode}
% \end{macro}
% The following key-value pairs are supported:
% \begin{enumerate}
%   \item\marg{\texttt{style}=style} -- Stores \texttt{style} in
%     \DescribeMacro{\thesis@bibliography@style}^^A
%     |\thesis@bibliography@style|, unless it has already been
%     defined (presumably by the user).
%   \item\marg{\texttt{sorting}=mode} -- Stores \texttt{mode} in
%     \DescribeMacro{\thesis@bibliography@sorting}^^A
%     |\thesis@bibliography@sorting|, unless it has already been
%     defined (presumably by the user).
% \end{enumerate}
%    \begin{macrocode}
\define@key{thesis@bibliography}{style}{%
  \ifx\thesis@bibliography@style\undefined
    \def\thesis@bibliography@style{#1}%
  \fi}
\define@key{thesis@bibliography}{sorting}{%
  \ifx\thesis@bibliography@sorting\undefined
    \def\thesis@bibliography@sorting{#1}%
  \fi}
%    \end{macrocode}
% \begin{macro}{\thesis@bibliography@load}
% When |\ifthesis@bibliography@| is true and
% |\ifthesis@bibliography@loaded@| is false, the
% |\thesis@bibliography@load| macro loads the \textsf{csquotes} and
% Bib\LaTeX\ packages with the bibliography databases specified in
% |\thesis@bibFiles|. The macro also sets the
% \DescribeMacro{\thesis@bibliography@loaded}^^A
% |\ifthesis@bibliography@loaded@| conditional to true.
%    \begin{macrocode}
\newif\ifthesis@bibliography@loaded@
  \thesis@bibliography@loaded@false
\newif\ifthesis@bibliography@included@
  \thesis@bibliography@included@false
\def\thesis@bibliography@load{%
  \ifthesis@bibliography@
    \ifthesis@bibliography@loaded@\else
      \thesis@bibliography@loaded@true
      % Load csquotes and BibLaTeX.
      \thesis@require{csquotes}
%    \end{macrocode}
% If |\thesis@bibliography@style| is undefined, the bibliography
% and citation styles default to |iso-numeric|. If
% |\thesis@bibliography@sorting| is undefined, the sorting scheme
% defaults to |none|.
%    \begin{macrocode}
      \thesis@bibliography@setup{
        style = iso-numeric,
        sorting = none}
      \thesis@require[
        backend=biber,
        style=\thesis@bibliography@style,
        sorting=\thesis@bibliography@sorting,
        autolang=other,
        sortlocale=auto]{biblatex}
      % Load the bibliography databases.
      {\edef\@bibList{\thesis@bibFiles}%
      \def\@inject##1,{%
        \def\@args{##1}\def\@relax{\relax}%
        \ifx\@args\@relax\else
          % Trim leading spaces.
          \edef\@trimmed{\romannumeral-`\.##1}%
          \addbibresource\@trimmed
          \expandafter\@inject\fi}%
      \expandafter\@inject\@bibList,\relax,}%
%    \end{macrocode}
% \begin{macro}{\ifthesis@bibliography@included@}
% The |\ifthesis@bibliography@included@| conditional is true, when
% the user has manually included a bibliography into their
% document. The default value of the conditional is false and
% |\printbibliography| is patched to set the conditional to true on
% expansion. This enables the user to place the bibliography
% manually without it appearing in the autolayout. The original
% macro is stored in the
% \DescribeMacro{\thesis@printbibliography@old}^^A
% |\thesis@printbibliography@old| macro.
%    \begin{macrocode}
      \let\thesis@printbibliography@old\printbibliography
      \def\printbibliography{%
        \global\thesis@bibliography@included@true
        \thesis@printbibliography@old}
    \fi
  \fi}
%    \end{macrocode}
% \end{macro} ^^A The nested \ifthesis@bibliography@included@ def
% \end{macro} ^^A The \thesis@bibliography@load macro definition
% The \textsf{hyperref} package is configured to support both roman
% and arabic page numbering in one document and to decorate
% hyperlinks with an underline instead of a rectangular box.
%    \begin{macrocode}
\thesis@require{hyperref}
\hypersetup{pdfborderstyle={/S/U/W 1}} % Less obtrusive borders
% Clubs and widows are set to be infinitely bad.
%    \begin{macrocode}
\widowpenalty 10000
\clubpenalty  10000
%    \end{macrocode}
% \begin{macro}{\thesis@color@setup}
% The file defines the |\thesis@color@setup|\marg{colors} command,
% where \textit{colors} is a comma-delimited list of key-value
% pairs as defined by the \textsf{keyval} package. The command can
% be invoked either by the subsequently loaded style files or by
% the user to define which colors will be used, when the
% \texttt{color} option is specified.
%    \begin{macrocode}
\def\thesis@color@setup#1{%
  \setkeys{thesis@color}{#1}}
%    \end{macrocode}
% \end{macro}
% The following key-value pairs are supported:
% \begin{enumerate}
%   \item\marg{\texttt{links}=color} -- Sets the color of hyperref
%     links to \textit{color} and stores it under the name
%     \texttt{thesis@color@links}. The default color of links is
%     specified by the \textsf{hyperref} package.
%   \item\marg{\texttt{tableOdd}=color} -- Stores the color of the
%     odd rows of the redefined \texttt{tabular} and
%     \texttt{tabularx} environments under the name
%     \texttt{thesis@color@tableOdd}.
%   \item\marg{\texttt{tableEven}=color} -- Stores the color of the
%     even rows of the redefined \texttt{tabular} and
%     \texttt{tabularx} environments under the name
%     \texttt{thesis@color@tableEven}.
%   \item\marg{\texttt{tableEmph}=color} -- Stores the color of an
%     emphasized cell in a table user under the name
%     \texttt{thesis@color@tableEmph}. This color is meant to be
%     used manually by the user.
% \end{enumerate}
%    \begin{macrocode}
\define@key{thesis@color}{links}{%
  \definecolor{thesis@color@links}#1
  \hypersetup{linkbordercolor=thesis@color@links}}
\define@key{thesis@color}{tableOdd}{%
  \definecolor{thesis@color@tableOdd}#1}
\define@key{thesis@color}{tableEven}{%
  \definecolor{thesis@color@tableEven}#1}
\define@key{thesis@color}{tableEmph}{%
  \definecolor{thesis@color@tableEmph}#1}
% The file defines several blocks to be used in the redefinitions
% of the |\thesis@blocks@preamble| and |\thesis@blocks@postamble|
% macros by the subsequently loaded style files.
% \begin{macro}{\thesis@blocks@coverMatter}
% The |\thesis@blocks@coverMatter| macro sets up the style
% of the cover and the title page of the thesis. This amounts
% to disabling the page numbering, so that hyperref links do not
% point to the cover page and the title page instead of the
% initial pages of the main matter.
% \begin{macrocode}
\def\thesis@blocks@coverMatter{%
  \pagenumbering{gobble}}
%    \end{macrocode}
% \end{macro}\begin{macro}{\thesis@blocks@frontMatter}
% The |\thesis@blocks@frontMatter| macro sets up the style
% of the front matter of the thesis.
% \begin{macrocode}
\def\thesis@blocks@frontMatter{%
  \thesis@blocks@clear
  \pagestyle{plain}
  \parindent 1.5em
  \setcounter{page}{1}
  \pagenumbering{roman}}
%    \end{macrocode}
% \end{macro}\begin{macro}{\thesis@blocks@clear}
% The |\thesis@blocks@clear| macro clears the current page.
% It also clears the next left-hand (even-numbered) page, when
% double-sided typesetting is enabled.
% \begin{macrocode}
\def\thesis@blocks@clear{%
    \thispagestyle{empty}%
% \end{macro}\begin{macro}{\thesis@blocks@clearRight}
% The |\thesis@blocks@clearRight| macro clears the current
% page. It also clears the next right-hand (odd-numbered) page,
% when double-sided typesetting is enabled.
% \begin{macrocode}
\def\thesis@blocks@clearRight{%
    \ifodd\value{page}%
      \thispagestyle{empty}%
      \hbox{}%
% \end{macro}\begin{macro}{\thesis@blocks@facultyLogo@monochrome}
% The |\thesis@blocks@facultyLogo@monochrome|\oarg{options} 
% macro typesets the |\thesis@logopath\thesis@facultyLogo| logo
% with the given \textit{options} passed to |\includegraphics|.
% \begin{macrocode}
\newcommand{\thesis@blocks@facultyLogo@monochrome}[1]%
  [width=40mm]{{%
    \edef\@path{\thesis@logopath\thesis@facultyLogo}%
    \includegraphics[#1]{\@path}}}
%    \end{macrocode}
% \end{macro}\begin{macro}{\thesis@blocks@facultyLogo@color}
% The |\thesis@blocks@facultyLogo@color|\oarg{options} 
% macro typesets either the |\thesis@logopath\thesis@facultyLogo|
% logo, if the |\ifthesis|\discretionary{}{}{}|@color@| conditional
% is \texttt{false}, or the
% |\thesis@logopath\thesis@facultyLogo-color| logo
% otherwise with the given \textit{options} passed to
\newcommand{\thesis@blocks@facultyLogo@color}[1]%
  [width=40mm]{{%
    \edef\@path{\thesis@logopath\thesis@facultyLogo
      \ifthesis@color@-color\fi}%
    \includegraphics[#1]{\@path}}}
%    \end{macrocode}
% \end{macro}\begin{macro}{\thesis@blocks@universityLogo@monochrome}
% The |\thesis@blocks@universityLogo@monochrome|\oarg{options}
% macro typesets the
% |\thesis@logopath\thesis@universityLogo| logo
% with the given \textit{options} passed to |\includegraphics|.
% \begin{macrocode}
\newcommand{\thesis@blocks@universityLogo@monochrome}[1]%
  [width=40mm]{{%
    \edef\@path{\thesis@logopath\thesis@universityLogo}%
    \includegraphics[#1]{\@path}}}
%    \end{macrocode}
% \end{macro}\begin{macro}{\thesis@blocks@universityLogo@color}
% The |\thesis@blocks@universityLogo@color|\oarg{options} 
% macro typesets either the |\thesis@logopath\thesis@universityLogo|
% logo, if the |\ifthesis|\discretionary{}{}{}|@color@| conditional
% is \texttt{false}, or the
% |\thesis@logopath\thesis@universityLogo|\discretionary{}{}{}|-color|
% logo otherwise with the given \textit{options} passed to
% |\includegraphics|.
\newcommand{\thesis@blocks@universityLogo@color}[1]%
  [width=40mm]{{%
    \edef\@path{\thesis@logopath\thesis@universityLogo
      \ifthesis@color@-color\fi}%
    \includegraphics[#1]{\@path}}}
% The |\thesis@department@name| and |\thesis@field@name| macros and
% their English counterparts provide a level of indirection that
% allows the subsequently loaded style files to parse the values of
% |\thesis@department| and |\thesis@field| (and their English
% counterparts) and map them to human-readable names, which will
% then be typeset.
% \begin{macrocode}
\let\thesis@department@name\thesis@department
\let\thesis@departmentEn@name\thesis@departmentEn
\let\thesis@field@name\thesis@field
\let\thesis@fieldEn@name\thesis@fieldEn
%    \end{macrocode}
% \end{macro}\begin{macro}{\thesis@blocks@cover}
% The |\thesis@blocks@cover| macro typesets the thesis
% cover. It is composed of three macros:
% \begin{itemize}
%   \item\DescribeMacro{\thesis@blocks@cover@header}^^A
%        |\thesis@blocks@cover@header| -- The header of the cover
%        page
%   \item\DescribeMacro{\thesis@blocks@cover@content}^^A
%        |\thesis@blocks@cover@content| -- The content of the cover
%        page
%   \item\DescribeMacro{\thesis@blocks@cover@footer}^^A
%        |\thesis@blocks@cover@footer| -- The footer of the cover
%        page
% \end{itemize}
% This allows the subsequently loaded style files to only redefine
% certain parts of the cover page.
% \begin{macrocode}
\def\thesis@blocks@cover{%
    \begin{alwayssingle}%
      \thispagestyle{empty}%
      \begin{center}%
        \thesis@blocks@facultyLogo@monochrome\\[0.4in]%
        \let\footnoterule\relax{}%
        \thesis@blocks@cover@content
        \par\vfill
        \thesis@blocks@cover@footer
      \end{center}%
    \end{alwayssingle}%
% The output of the |\thesis@blocks@cover@header| macro is
% controlled by the following conditionals:
%   \item|\ifthesis@blocks@cover@university@| -- This
%        conditional expression determines, whether the university
%        name is going to be included in the header of the cover.
%        The default value of this conditional is \texttt{true}.
%   \item|\ifthesis@blocks@cover@faculty@| -- This
%        conditional expression determines, whether the faculty
%        name is going to be included in the header of the cover.
%        The default value of this conditional is \texttt{true}.
%   \item|\ifthesis@blocks@cover@department@| -- This
%        conditional expression determines, whether the department
%        name is going to be included in the header of the cover.
%        The default value of this conditional is \texttt{false}.
%   \item|\ifthesis@blocks@cover@field@| -- This
%        conditional expression determines, whether the field of
%        study is going to be included in the header of the cover.
%        The default value of this conditional is \texttt{false}.
% The sebsequently loaded style files can modify the value of these
% conditionals to alter the output of the
% |\thesis@blocks@cover@header| macro without altering its
% definition.
% \begin{macrocode}
\newif\ifthesis@blocks@cover@university@
\thesis@blocks@cover@university@true
\newif\ifthesis@blocks@cover@faculty@
\thesis@blocks@cover@faculty@true
\newif\ifthesis@blocks@cover@department@
\thesis@blocks@cover@department@false
\newif\ifthesis@blocks@cover@field@
\thesis@blocks@cover@field@false

\def\thesis@blocks@cover@header{%
  {\sc\ifthesis@blocks@cover@university@
        \thesis@titlePage@LARGE\thesis@@{universityName}\\%
        \thesis@titlePage@Large\thesis@@{facultyName}\\%
   \fi\ifthesis@blocks@cover@department@
        \thesis@titlePage@large\thesis@department@name\\%
    {\thesis@titlePage@large\vskip 1em%
      {\bf\thesis@@{fieldTitle}:} \thesis@field@name}%
\def\thesis@blocks@cover@content{%
  {\thesis@titlePage@Huge\bf\thesis@TeXtitle\par\vfil}%
  \vskip 0.8in%
  {\thesis@titlePage@large\sc\thesis@@{typeName}}\\[0.3in]%
  {\thesis@titlePage@Large\bf\thesis@author}}
\def\thesis@blocks@cover@footer{%
  {\thesis@titlePage@large\thesis@place, \thesis@@{semester}}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\thesis@blocks@titlePage}
% The |\thesis@blocks@titlePage| macro typesets the thesis
% title page. It is composed of three macros:
% \begin{itemize}
%   \item|\thesis@blocks@titlePage@header| -- The header of the
%        cover page
%   \item|\thesis@blocks@titlePage@content| -- The content of the
%        cover page
%   \item|\thesis@blocks@titlePage@footer| -- The footer of the
%        cover page
% \end{itemize}
% This allows the subsequently loaded style files to only redefine
% certain parts of the title page.
%    \begin{macrocode}
\def\thesis@blocks@titlePage{%
    \begin{alwayssingle}%
      \thispagestyle{empty}%
      \begin{center}%
        \thesis@blocks@facultyLogo@color\\[0.4in]%
        \let\footnoterule\relax{}%
        \thesis@blocks@titlePage@content
        \par\vfill
        \thesis@blocks@titlePage@footer
      \end{center}%
    \end{alwayssingle}}
% The output of the |\thesis@blocks@titlePage@header| macro is
% controlled by the following conditionals:
%   \item|\ifthesis@blocks@titlePage@university@| -- This
%        conditional expression determines, whether the university
%        name is going to be included in the header of the title
%        page. The default value of this conditional is
%        \texttt{true}.
%   \item|\ifthesis@blocks@titlePage@faculty@| -- This
%        conditional expression determines, whether the faculty of
%        study is going to be included in the header of the title
%        page. The default value of this conditional is
%        \texttt{true}.
%   \item|\ifthesis@blocks@titlePage@department@| -- This
%        conditional expression determines, whether the department
%        name is going to be included in the header of the title
%        page. The default value of this conditional is
%        \texttt{false}.
%   \item|\ifthesis@blocks@titlePage@field@| -- This
%        conditional expression determines, whether the field of
%        study is going to be included in the header of the title
%        page. The default value of this conditional is
%        \texttt{false}.
% The sebsequently loaded style files can modify the value of these
% conditionals to alter the output of the
% |\thesis@blocks@titlePage@header| macro without altering its
% definition.
\newif\ifthesis@blocks@titlePage@university@
\thesis@blocks@titlePage@university@true
\newif\ifthesis@blocks@titlePage@faculty@
\thesis@blocks@titlePage@faculty@true
\newif\ifthesis@blocks@titlePage@department@
\thesis@blocks@titlePage@department@false
\newif\ifthesis@blocks@titlePage@field@
\thesis@blocks@titlePage@field@false

\def\thesis@blocks@titlePage@header{%
  {\sc\ifthesis@blocks@titlePage@university@
        \thesis@titlePage@LARGE\thesis@@{universityName}\\%
   \fi\ifthesis@blocks@titlePage@faculty@
        \thesis@titlePage@Large\thesis@@{facultyName}\\%
   \fi\ifthesis@blocks@titlePage@department@
        \thesis@titlePage@large\thesis@department@name\\%
    {\thesis@titlePage@large\vskip 1em%
      {\bf\thesis@@{fieldTitle}:} \thesis@field@name}%
\let\thesis@blocks@titlePage@content=\thesis@blocks@cover@content
\let\thesis@blocks@titlePage@footer=\thesis@blocks@cover@footer
% \end{macro}\begin{macro}{\thesis@blocks@toc}
% The |\thesis@blocks@toc| macro typesets the table of contents.
% \begin{macrocode}
\def\thesis@blocks@toc{%
  \thesis@blocks@clear
  \tableofcontents}
%    \end{macrocode}
% \end{macro}\begin{macro}{\thesis@blocks@tables}
% The |\thesis@blocks@tables| macro typesets the table of
% contents and optionally the list of tables and the
% list of figures.
% \begin{macrocode}
\def\thesis@blocks@tables{%
% \end{macro}\begin{macro}{\thesis@blocks@declaration}
% The |\thesis@blocks@declaration| macro typesets the
% \begin{macrocode}
\def\thesis@blocks@declaration{%
  \begin{alwayssingle}%
    \chapter*{\thesis@@{declarationTitle}}%
witiko's avatar
witiko committed
  \end{alwayssingle}}
% \end{macro}\begin{macro}{\thesis@blocks@thanks}
% The |\thesis@blocks@thanks| macro typesets the
% acknowledgement, if the |\thesis@thanks| macro is
% defined. Otherwise, the macro produces no output.
% \begin{macrocode}
\def\thesis@blocks@thanks{%
  \ifx\thesis@thanks\undefined\else
    \thesis@blocks@clear
    \begin{alwayssingle}%
      \chapter*{\vspace*{\fill}\thesis@@{thanksTitle}}%
    \end{alwayssingle}%
  \fi}
% \end{macro}\begin{macro}{\thesis@blocks@abstract}
% The |\thesis@blocks@abstract| macro typesets the
% \begin{macrocode}
\def\thesis@blocks@abstract{%
  \begin{alwayssingle}%
witiko's avatar
witiko committed
    % Start the new chapter without clearing the right page
    {\def\cleardoublepage{}
    \chapter*{\thesis@@{abstractTitle}}}%
    \noindent\thesis@abstract
    \par\vfil\null
% \end{macro}\begin{macro}{\thesis@blocks@abstractEn}
% The |\thesis@blocks@abstractEn| macro typesets the
% abstract in English. If the current locale is English, the
% \begin{macrocode}
\def\thesis@blocks@abstractEn{%
    {\thesis@selectLocale{english}%
    \begin{alwayssingle}%
      % Start the new chapter without clearing the right page
      {\def\cleardoublepage{}%
      \chapter*{\thesis@english@abstractTitle}%
% \end{macro}\begin{macro}{\thesis@blocks@keywords}
% The |\thesis@blocks@keywords| macro typesets the
% keywords.
% \begin{macrocode}
\def\thesis@blocks@keywords{%
  \begin{alwayssingle}%
witiko's avatar
witiko committed
    % Start the new chapter without clearing the right page
    {\def\cleardoublepage{}%
    \chapter*{\thesis@@{keywordsTitle}}%
    \noindent\thesis@TeXkeywords}%
% \end{macro}\begin{macro}{\thesis@blocks@keywordsEn}
% The |\thesis@blocks@keywordsEn| macro typesets the
% keywords in English. If the current locale is English, the
% \begin{macrocode}
\def\thesis@blocks@keywordsEn{%
    {\thesis@selectLocale{english}%
    \begin{alwayssingle}%
      % Start the new chapter without clearing the right page
      {\def\cleardoublepage{}%
      \chapter*{\thesis@english@keywordsTitle}%
      \thesis@TeXkeywordsEn}%
% \end{macro}\begin{macro}{\thesis@rewind}
% The |\thesis@rewind| macro rewinds the page numbers by either one
% or two pages, depending on whether one-side or two-side
% typesetting is enabled, respectively.
% \begin{macrocode}
\def\thesis@rewind{%
  \addtocounter{page}{-\ifthesis@twoside@2\else1\fi}}
%    \end{macrocode}
% \end{macro}\begin{macro}{\thesis@blocks@assignment}
% The |\thesis@blocks@assignment| macro produces a different output
% depending on the values of the |\thesis@assignmentFiles|.
% |\ifthesis@blocks@assignment@|,
% |\ifthesis@blocks@assignment@hideIfDigital@|, and
% |\ifthesis@digital| macros.
% The default value of the
% \DescribeMacro{\ifthesis@blocks@assignment@}^^A
% |\ifthesis@blocks@assignment@| and
% \DescribeMacro{\ifthesis@blocks@assignment@hideIfDigital}^^A
% |\ifthesis@blocks@assignment@hideIfDigital@| conditionals is
% \begin{macrocode}
\newif\ifthesis@blocks@assignment@
\thesis@blocks@assignment@true
\newif\ifthesis@blocks@assignment@hideIfDigital@
\thesis@blocks@assignment@hideIfDigital@true
\def\thesis@blocks@assignment{%
%    \end{macrocode}
% If the |\ifthesis@blocks@assignment@| conditional is
% \textsf{true} and the |\thesis@assignmentFiles| macro is
% undefined, then typeset a placeholder page.
% \begin{macrocode}
  \ifthesis@blocks@assignment@
    \ifx\thesis@assignmentFiles\undefined
      % Rewind the pages and typeset a placeholder page.
      \begin{alwayssingle}%
        \thispagestyle{empty}\thesis@rewind
        \noindent\textit{\thesis@@{assignment}}%
      \end{alwayssingle}%
% Locally define \DescribeMacro{\@inject}|\@inject| as our routine
% for injecting lists of PDF documents.
% \begin{macrocode}
      {\edef\@pdfList{\thesis@assignmentFiles}%
      \let\ea\expandafter
      % Injects the specified PDF documents.
      \def\@inject##1,{\thesis@blocks@clear
        \def\@args{##1}\def\@relax{\relax}%
        \ifx\@args\@relax\else
          % Trim leading spaces.
          \edef\@trimmed{\romannumeral-`\.##1}%
          % Rewind the pages and include the PDF.
          \thesis@rewind\includepdf[pages=-]\@trimmed
          \ea\@inject\fi}%
%    \end{macrocode}
% If the |\ifthesis@blocks@assignment@| conditional is
% \textsf{true} and the |\thesis@assignmentFiles| macro is neither
% undefined nor empty, then typeset a placeholder page, if the
% |\ifthesis@digital@| conditional is \textsf{true} and the
% |\ifthesis@blocks@assignmane@hideIfDigital@| conditional is
% \textsf{true}
          \ifthesis@blocks@assignment@hideIfDigital@
            \thesis@blocks@clear
            \begin{alwayssingle}%
              \thispagestyle{empty}\thesis@rewind
              \noindent\textit{\thesis@@{assignment}}%
            \end{alwayssingle}%
%    \end{macrocode}
% If the |\ifthesis@blocks@assignment@| conditional is
% \textsf{true} and the |\thesis@assignmentFiles| macro is neither
% undefined nor empty, then inject the PDF documents specified in
% the |\thesis@assignmentFiles|, if the |\ifthesis@digital@|
% conditional is \textsf{false} or the
% |\ifthesis@blocks@assignment@hideIfDigital@| conditional is
% \textsf{false}.
witiko's avatar
witiko committed
      \fi}%
% \end{macro}\begin{macro}{\thesis@blocks@mainMatter}
% The |\thesis@blocks@mainMatter| macro sets up the style
% \begin{macrocode}
\def\thesis@blocks@mainMatter{%
  \setcounter{page}{1}
  \pagenumbering{arabic}
  \pagestyle{thesisheadings}
  \parindent 1.5em\relax}
%    \end{macrocode}