% \iffalse meta-comment
%
% File: se2thesis.dtx Copyright (C) 2022 Stephan Lukasczyk
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
% license or (at your option) any later version.  The latest version
% of this license is in the file
%
%    https://www.latex-project.org/lppl.txt
%
% This file is part of the "se2thesis bundle" (The Work in LPPL)
% and all files in that bundle must be distributed together.
%
% The released version of this bundle is available from CTAN.
%
% ----------------------------------------------------------------------
%
% The development version of the bundle can be found at
%
%    https://github.com/se2p/se2thesis
%
% for those people who are interested.
%
% ----------------------------------------------------------------------
%
%<*driver>
\documentclass{l3doc}
% The next line is needed so that \GetFileInfo will be able to pick up
% version data.
\usepackage{se2colors}
%
% Commands for this document, taken from Joseph Wright's siunitx
% documentation:
\ExplSyntaxOn
\makeatletter
\NewDocumentCommand \acro { m }
  {
    \textsc
      {
        \exp_args:NV \tl_if_head_eq_charcode:nNTF \f@series { m }
        { \text_lowercase:n }
        { \use:n }
          {#1}
      }
  }
\makeatother
\ExplSyntaxOff
\NewDocumentCommand{\email}{m}{\href{mailto:#1}{\nolinkurl{#1}}}
\NewDocumentCommand{\ext}{m}{\texttt.#1}
\NewDocumentCommand{\opt}{m}{\texttt{#1}}
% Tidy up the above in bookmarks
\makeatletter
\pdfstringdefDisableCommands{%
  \let\acro\@firstofone
  \let\ext\@firstofone
  \let\opt\@firstofone
}
\makeatother

% For creating code demonstration, taken from Joseph Wright's siunitx
% documentation:
\usepackage{listings}
\makeatletter
\lst@RequireAspects{writefile}
\newsavebox\LaTeXdemo@box
\lstnewenvironment{LaTeXdemo}[1][code and example]
  {%
    \global\let\lst@intname\@empty
    \edef\LaTeXdemo@end{%
      \expandafter\noexpand\csname LaTeXdemo@@#1@end\endcsname
    }%
    \@nameuse{LaTeXdemo@@#1}%
  }
  {\LaTeXdemo@end}
\newcommand\LaTeXdemo@new[3]{%
  \@namedef{LaTeXdemo@@#1}{#2}
  \@namedef{LaTeXdemo@@#1@end}{#3}%
}
\newcommand*\LaTeXdemo@common{%
  \setkeys{lst}
    {%
      basicstyle       = \small\ttfamily,
      breaklines       = true,
      basewidth        = 0.51em,
      captionpos       = t,
      extendedchars    = true,
      frame            = single,
      gobble           = 2,
      keywordstyle     = \color{blue}\bfseries,
      language         = [LaTeX]{TeX},
      showspaces       = false,
      showstringspaces = false,
      showtabs         = false,
      tabsize          = 2,
    }%
}
\newcount\LaTeXdemo@count
\newcommand*\LaTeXdemo@input{%
  \catcode`\^^M = 10\relax
  \input{\jobname-\number\LaTeXdemo@count.tmp}%
}
\LaTeXdemo@new{code and example}{%
  \setbox\LaTeXdemo@box=\hbox\bgroup
    \global\advance\LaTeXdemo@count by 1 %
    \lst@BeginAlsoWriteFile{\jobname-\number\LaTeXdemo@count.tmp}%
    \LaTeXdemo@common
}{%
    \lst@EndWriteFile
  \egroup
  \begin{center}
    \ifdim\wd\LaTeXdemo@box > 0.48\linewidth
      \begin{minipage}{\linewidth}
        \usebox\LaTeXdemo@box
      \end{minipage}%
      \par
      \begin{minipage}{\linewidth}
        \LaTeXdemo@input
      \end{minipage}
    \else
      \begin{minipage}{0.48\linewidth}
        \LaTeXdemo@input
      \end{minipage}%
      \hspace{\fill}%
      \begin{minipage}{0.48\linewidth}
        \usebox\LaTeXdemo@box
      \end{minipage}%
    \fi
  \end{center}
}
\LaTeXdemo@new{code and float}{%
  \global\advance\LaTeXdemo@count by 1 %
  \lst@BeginAlsoWriteFile{\jobname-\number\LaTeXdemo@count.tmp}%
  \LaTeXdemo@common
}{%
  \lst@EndWriteFile
  \LaTeXdemo@input
}
\LaTeXdemo@new{code only}{\LaTeXdemo@common}{}
\makeatother

\usepackage[UKenglish]{babel}
\usepackage{fontspec}
\usepackage{hvlogos}

% Taken from xcolor.dtx
\makeatletter
\def\testclr#1#{\@testclr{#1}}
\def\@testclr#1#2{{\fboxsep\z@\fbox{\colorbox#1{#2}{\phantom{XX}}}}}
\makeatother

\usepackage{hvfloat}
\hypersetup{%
  allcolors=UPSE2-Blue,%
  pdftitle={se2thesis -- A Thesis Class for the Chair of Software Engineering II
  at the University of Passau, Germany},%
  pdfauthor={Stephan Lukasczyk},
}
\usepackage[capitalise]{cleveref}

\begin{document}
  \DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \GetFileInfo{se2colors.sty}
%
% \title{^^A
%   \pkg{se2thesis} -- A Thesis Class for the Chair of Software
%   Engineering~II at the University of Passau, Germany^^A
%   \thanks{This file describes \fileversion,
%     last revised \filedate.}^^A
% }
%
% \author{^^A
%   Stephan Lukasczyk^^A
%   \thanks{^^A
%     E-mail: \href{mailto:tex@lukasczyk.me}{tex@lukasczyk.me}^^A
%   }^^A
% }
%
% \date{Released \filedate}
%
% \maketitle
%
% \begin{abstract}
%   One can choose from a wide variety of templates to write a thesis.
%   Many universities provide very rigorous style guides and force their
%   students to obey to those guides, even though they might be questionable
%   from a typographics point of view.
%   Other universities do not provide such guides and leave it to their students
%   to choose or come up with a template.
%   The latter is causing very differently-looking theses.
%
%   To avoid such a situation in the future this bundle combines several
%   \LaTeX{} packages and classes for the use at the Chair of Software
%   Engineering~II at the University of Passau.
%   We provide, among others, a document class for theses that shall be
%   used by our students.
%   The bundle is designed in a way that one can use the basic components as
%   standalone packages to allow their reuse for other projects.
% \end{abstract}
%
% \tableofcontents
%
% \begin{documentation}
%
% \part{User Documentation}\label{sec:doc}
%
% This documentation is split into two parts:
% the first part is the documentation for the user,
% which provides all macros, variables, and functions
% that are provided by the \pkg{se2thesis} bundle.
% The second part (starting on page~\pageref{sec:impl})
% shows the implementation.
% This might be interesting for you
% if you are curious how certain things are defined
% of if you need to change some of the default implementation.
%
% \section{Introduction}\label{sec:doc-intro}
%
% The University of Passau does not provide a common thesis template
% to its students.
% For theses, written at the Chair of Software Engineering~II,
% many students chose between two templates that were provided by different
% people from the chair;
% other students chose from the large variety of templates available from the
% internet, causing each thesis looking differently.
%
% The author of this package provided a template,
% which he initially created for his bachelor and master thesis,
% that was recommended and used by many students.
% The implementation of that template, however, was very hacky and required
% some changes over time.
% This lead to the idea of creating a new template from scratch,
% that shall be used by all our students for their various types of theses,
% from bachelor to PhD level.
% The result is the \pkg{se2thesis} bundle.
%
% The bundle itself consists of several \LaTeX{} classes and packages
% that also allow reuse of various parts of it.
% Its main class is the \pkg{se2thesis} document class,
% an extension of the \KOMAScript{} |scrreprt| document class.
% The packages \pkg{se2colors} (documented in \cref{sec:doc-se2colors}) and
% \pkg{se2fonts} (documented in \cref{sec:doc-se2fonts}) provide necessary
% colour and font settings for the \pkg{se2thesis} class.
% They are available as separate packages, however, to allow their reuse for
% other classes, packages, and projects, as well.
%
% They all have in common one macro, \cs{IfFormatAtLeastTF};
% this macro is part of the latest \LaTeX{} kernel.
% However, not all users might have upgraded their \TeX{} installation
% to a level using a recently-enough kernel version.
% Therefore, every class and package of this bundle will conditionally
% define the following macro:
%
% \begin{function}{\IfFormatAtLeastTF}
%   \begin{syntax}
%     \cmd{\IfFormatAtLeastTF} \marg{version} \marg{then block} \marg{else-block}
%   \end{syntax}
%   Checks whether the used \LaTeX{} format is at least the one from the
%   given date value.
%   The date needs to be specified either in YYYY/MM/DD or in YYYY-MM-DD
%   format.
% \end{function}
%
% \section{License}\label{sec:doc-license}
%
% Permission is granted to copy, distribute, and/or modify this software under
% the terms of the \LaTeX{} Project Public License~(LPPL), version~1.3c or
% later~(\href{https://www.latex-project.org/lppl.txt}{https://www.latex-project.org/lppl.txt}).
% The software has the status \enquote{maintained}.
%
% \section{The \cls{se2thesis} class}\label{sec:doc-se2thesis}
%
% The \cls{se2thesis} class is the central component of this bundle.
% It provides a wide variety of settings, mostly regarding the title page~(see
% \cref{sec:doc-se2thesis-title}) and the type area~(see
% \cref{sec:doc-se2thesis-typearea}).
%
% We aim to keep the \cls{se2thesis} class relatively small, especially
% considering packages that we load.
% Currently, the class itself loads the \pkg{se2colors}~(see
% \cref{sec:doc-se2colors}) and \pkg{se2fonts}~(see \cref{sec:doc-se2fonts})
% packages.
% The following packages and classes are loaded:
% \pkg{expl3}, \pkg{l3keys2e} in case one uses a \LaTeX{} kernel from before
% 2022--06--01, \pkg{graphicx}, \pkg{translations}, \KOMAScript, \pkg{xcolor},
% \pkg{ifthen}, as well as \pkg{fontspec} and \pkg{unicode-math} if one uses
% \LuaTeX{};
% for \pdfLaTeX{} we load \pkg{fontenc}, \pkg{FiraMono}, \pkg{tgheros},
% \pkg{tgpagella} instead of the latter two.
% Furthermore, we load \pkg{microtype};
% when using \LuaTeX{}, we also load \pkg{lua-widow-control} and \pkg{selnolig}.
%
% However, we recommend to use a couple of further packages, together with some
% further options to those package.  We describe these settings in
% \cref{sec:doc-se2thesis-pkgs}.
% Please consider looking at this section when starting to write your document.
%
% Before we start with a detailed documentation of the class, we explain one
% helper macro that can be used to check whether a package has been loaded.
% \begin{function}[EXP, pTF, updated = 2022-09-27]{\slcd_package_if_loaded:}
%   \begin{syntax}
%     |\slcd_package_if_loaded:TF| \Arg{true code} \Arg{false code}
%   \end{syntax}
%   Checks whether a package has been loaded and conditionally executes code.
% \end{function}
%
% \subsection{Load-time options}\label{sec:doc-se2thesis-options}
%
% The \pkg{se2thesis} class defines several load-time options, all of them
% optional, on top of the options provided by the \KOMAScript{} document
% classes.
% \begin{function}{class}
%   \begin{syntax}
%     |class| = \meta{choice}
%   \end{syntax}
%   Set the base document class.
%   Values are \cls{scrreprt}, \cls{scrartcl}, or \cls{scrbook}.
%   Default is |scrreprt|.
% \end{function}
%
% \begin{function}{paper}
%   \begin{syntax}
%     |paper| = \meta{choice}
%   \end{syntax}
%   Set the paper format.
%   Possible values are |a4|, |a5|, or |b5|.
%   Default is |a4|.
% \end{function}
%
% \begin{function}{logofile}
%   \begin{syntax}
%     |logofile| = \marg{path-to-file}
%   \end{syntax}
%   Defines the path to the University's logo for the title page.
% \end{function}
%
% \begin{function}{thesistype}
%   \begin{syntax}
%     |thesistype| = \meta{choice}
%   \end{syntax}
%   Defines the type of the thesis.
%   Possible values are:
%   |bachelor| for a bachelor thesis, |bachelorproposal| for a proposal to
%   a bachelor thesis, |master| for a master thesis, |masterproposal| for
%   a proposal to a master thesis, |phdproposal| for a proposal to a PhD thesis,
%   and |phd| for a PhD thesis.
% \end{function}
%
% \begin{function}{biblatex}
%   \begin{syntax}
%     |biblatex| = \meta{true,false}
%   \end{syntax}
%   Whether \cls{se2thesis} shall load the \pkg{biblatex} package together with
%   some settings automatically.
% \end{function}
%
% \begin{function}{colormode}
%   \begin{syntax}
%     |colormode| = \meta{choice}
%   \end{syntax}
%   Select the color scheme used by the automatically loaded \pkg{se2colors}
%   package, see \cref{sec:doc-se2colors} for a description.
% \end{function}
%
% \begin{function}{fontmode}
%   \begin{syntax}
%     |fontmode| = \meta{choice}
%   \end{syntax}
%   Select the font scheme used by the automatically loaded \pkg{se2fonts}
%   package, see \cref{sec:doc-se2fonts} for a description.
% \end{function}
%
%
% \subsection{The title page}\label{sec:doc-se2thesis-title}
%
% Designing a title package for a thesis can be complicated.
% There might be some requirements that are not obvious to the user, especially
% considering the positioning of elements.
% The University of Passau, for example, requires the logo to be positioned on
% the top right of a page;
% theses—especially PhD theses that shall be published through the University's
% library system—could be rejected from publication by the library until this is
% fixed.
%
% We thus redeclare the standard \cs{maketitle} macro from \KOMAScript{} and
% customise it to our needs.
% \begin{variable}{\@maketitle}
%   \begin{syntax}
%     \cmd{\@maketitle}
%   \end{syntax}
%   We override the definition of the \cmd{\@maketitle} macro for our needs.
% \end{variable}
% In addition to the macros provided by the \KOMAScript{} classes
% for the title-page values (e.g. \cs{author}, \cs{title},
% we provide some further macros that can be used.
% Setting values to these macros is optional in any case,
% if they are not set, the corresponding value is not put to the title page.
%
% \begin{function}{\version}
%   \begin{syntax}
%     \cmd{\version} \marg{version}
%   \end{syntax}
%   Specify the version of the document.  This can, for example, be a |git| hash
%   of the current version.
% \end{function}
%
% \begin{function}{\degreeprogramme}
%   \begin{syntax}
%     \cmd{\degreeprogramme} \marg{programme-name}
%   \end{syntax}
%   Specify the degree programme the thesis is meant to be accepted in.
%   Possible values are, among others, \enquote{Informatik} if you are writing
%   your thesis in German, or \enquote{Computer Science} if you are writing the
%   thesis in English.
% \end{function}
%
% \begin{function}{\matrnumber}
%   \begin{syntax}
%     \cmd{\matrnumber} \marg{matriculation-number}
%   \end{syntax}
%   Specify the matriculation number of the student writing the thesis.
%   This is required for Bachelor and Master theses.
% \end{function}
%
% \begin{function}{\supervisor, \cosupervisor}
%   \begin{syntax}
%     \cmd{\supervisor} \marg{name}
%     \cmd{\cosupervisor} \marg{name}
%   \end{syntax}
%   Specify the name of your supervisor and co-supervisor.
%   Both people usually are professors.
% \end{function}
%
% \begin{function}{\advisor, \coadvisor}
%   \begin{syntax}
%     \cmd{\advisor} \marg{name}
%     \cmd{\coadvisor} \marg{name}
%   \end{syntax}
%   Specify the name of your advisor and co-advisor.
%   Both people usually are PhD students or postdocs.
% \end{function}
%
% \begin{function}{\department, \institute}
%   \begin{syntax}
%     \cmd{\department} \marg{name}
%     \cmd{\institute} \oarg{short-name} \marg{name}
%   \end{syntax}
%   Specify the department and institute.
%   The department is, for example, \enquote{Faculty of Computer Science and
%   Mathematics}, the institute, for example, \enquote{Chair of Software
%   Engineering~II}.
%   If the \cs{department} value is not specify, we use \enquote{Faculty of
%   Computer Science} as the default value for English theses and
%   \enquote{Fakultät für Informatik und Mathematik} as the default value of
%   German theses.
% \end{function}
%
% \begin{function}{\external}
%   \begin{syntax}
%     \cmd{\external} \marg{name}
%   \end{syntax}
%   Specify the name of an external referee.
% \end{function}
%
% \begin{function}{\location}
%   \begin{syntax}
%     \cmd{\location} \marg{name-of-town}
%   \end{syntax}
%   Specify the name of your residence town for the signature field.
% \end{function}
%
% To define the path to the logo graphics we require a different workflow:
% We do not bundle logo graphics with this package due to legal restrictions.
% They can be downloaded from the University's website; please note that the
% website for downloading the logo graphics is only accessible from within the
% University's campus network or a VPN connection.
% To specify the path to the logo graphics, we provide a load-time option to the
% \cls{se2thesis} class called |logofile|~(see \cref{sec:doc-se2thesis-options}).
%
% When printing the thesis in two-side mode—which we recommend—the back of the
% title page again denotes author and title on the bottom.
% \begin{variable}{\@lowertitleback}
%   \begin{syntax}
%     \cmd{\l@lowertitleback}
%   \end{syntax}
%   Override this internal macro of \KOMAScript{} to print this information on
%   the back side of the title page.
% \end{variable}
%
% Additionally, we provide some interal rewritings to standard macros from
% \KOMAScript{} that allow to automatically split authors using the \cmd{\and}
% command.
% \begin{variable}{\author, \@author}
%   \begin{syntax}
%     \cmd{\author} \marg{author}
%   \end{syntax}
%   We rewrite the definitions of \cmd{\author} and \cmd{\@author} to do this
%   splitting automatically.
%   Additionally, this also adds a correctly translated version of \enquote{and}
%   between the author names if required.
% \end{variable}
%
% \subsection{Type-area settings}\label{sec:doc-se2thesis-typearea}
%
% The \cls{se2thesis} class manipulates the type area compared to the default
% settings of the \KOMAScript{} classes.
% Our settings are inspired by the \pkg{classicthesis} package, which itself is
% inspired by the style used by famous statistician Edward Tufte.
% We provide predefined settings for DIN-A4, DIN-A5, and DIN-B5 papers.
% If you need settings for other paper sizes, please open an issue on this
% package's GitHub repository
% (\href{https://github.com/se2p/se2thesis}{https://github.com/se2p/se2thesis})
% and we will happily include those settings in a future release of this bundle.
%
% Additionally, we are setting the page footer in a way that it contains the
% page numbers in the outer margin and the headmarks split from the page numbers
% by a vertical bar.
%
% \subsection{Recommended additional packages}\label{sec:doc-se2thesis-pkgs}
%
% Several packages can be useful for writing a thesis.
% We list them in this section; for the recommended option settings, please have
% a look at our examples.
% Please note that you might not need all these packages, however, having a look
% at them (especially their documentation) might give you an insight, whether to
% use a package.
% Our general recommendation is to use as few packages as you can; some might
% have conflicts, others basically do the same or are outdated.
% Please consider reading the documentation of each package you are using to
% figure out whether they have any conflicts with other packages~(for example,
% one cannot use the recommended \pkg{siunitx} package together with
% \pkg{SIunits}) or they might require to be loaded at special places in your
% preamble~(for example, \pkg{hyperref} is usually meant to be loaded as the
% last package, except you are also using \pkg{cleveref}, which needs to be
% loaded \emph{after} \pkg{hyperref}).
%
% \subsubsection{Quoting with \pkg{csquotes}}
%
% The \pkg{csquotes} package allows for intelligent quoting of text.
% While verbose quotes are not that common on computer science, the package
% still provides some useful macros to the user.
%
% \subsubsection{Number formatting with \pkg{siunitx}}
%
% While \pkg{siunitx}'s original purpose was to format physical quantities, it
% provides a lot of useful features when typesetting theses~(and other
% documents) in computer science.
% When you skim through its documentation, especially look at the \cmd{\qty} and
% \cmd{\num} macros, as well as the section on typesetting tabular material.
% We also recommend reading an extensive discussion on number formatting,
% precision of presented numbers, and many more related topics in Beyer et al.'s
% journal paper on requirements and solutions for reliable
% benchmarking~\cite{DBLP:journals/sttt/BeyerLW19}.
%
% When using the \pkg{siunitx} package, we recommend adding the following lines
% to your document's preamble
% \begin{LaTeXdemo}[code only]
% \usepackage[
%   group-minimum-digits=4,
%   list-final-separator={, and },
%   add-integer-zero=false,
%   free-standing-units,
%   round-mode=figures,
%   round-precision=3,
%   detect-weight=true,
%   detect-inline-weight=math,
%   separate-uncertainty=true,
%   uncertainty-mode=separate,
% ]{siunitx}
% \end{LaTeXdemo}
%
% \subsubsection{Code listings with \pkg{minted}}
%
% We prefer using the \pkg{minted} package for code listings.
% However, this package requires the installation of Python and the setting of
% the |-shell-escape| option to your \TeX{} engine.
% Please read the package's documentation to set it up.
% If you do not want to install Python and the dependencies, we also provide
% settings for the alternative \pkg{listings} package in the next subsection.
%
% When using \pkg{minted} we recommend the following settings:
% \begin{LaTeXdemo}[code only]
% \usepackage[newfloat=true]{minted}
% \setminted{
%   autogobble,
%   breaklines=true,
%   fontsize=\footnotesize,
%   linenos=false,
%   resetmargins=true,
%   xleftmargin=1em,
%   xrightmargin=1em,
%   frame=single,
% }
% \end{LaTeXdemo}
%
% \subsubsection{Code listing with \pkg{listings}}
%
% In case you do not want to use the aforementioned \pkg{minted} package, please
% consider using \pkg{listings} for typesetting your code listings.
% \begin{LaTeXdemo}[code only]
% \usepackage{listings}
% \lstset{
%   frame=single,
%   extendedchars=true,
%   basicstyle=\footnotesize\ttfamily,
%   keywordstyle=\color{blue}\bfseries,
%   showstringspaces=false,
%   showspaces=false,
%   tabsize=2,
%   breaklines=true,
%   showtabs=false,
%   captionpos=t,
% }
% \end{LaTeXdemo}
%
% Please be aware to use \emph{either} \pkg{minted} \emph{or} \pkg{listings}!
%
% \subsubsection{Designing tables}
%
% A basically mandatory package to all users of tables is the \pkg{booktabs}
% package.
% Especially its documentation is a must read!
% It provides a large variety of hints for designing tables,
% most notably that one should never ever use vertical lines;
% horizontal lines should be used sparsely; \pkg{booktabs} provides three macros
% for lines that shall be used: \cmd{\toprule} for a rule on the top of a table,
% above the column heads, \cmd{\midrule} to separate column heads and the
% content but, and \cmd{\bottomrule} to mark the bottom of a table.
%
% Note that captions of tables shall be put \emph{above} the table whereas
% captions of figures shall go \emph{below} the figure.
% The rationale is that a figure should be more of less self explaining whereas
% a table almost always needs some explanation.
%
% Unfortunately, the distances when using a \cmd{\caption} above a table are
% wrong by default; when creating tables, consider loading the \pkg{hvfloats}
% package and use its \cmd{\tabcaption} instead of \cmd{\caption} for tables.
% The \pkg{hvfloats} package furthermore provides additional useful things to
% typeset all kinds of floats.
%
% \subsubsection{Use \pkg{biblatex} for bibliographic references}
%
% The standard way of typesetting bibliographic references was using
% \BibTeX.
% The original \BibTeX, however, seems to be very outdated in
% various ways: it originally supported only 7\,bit character sets and creating
% citation styles requires the usage of an archaic language.
% \BibLaTeX resolves many of the drawbacks of \BibTeX;
% when combined with the |biber| engine, it supports full UTF-8 unicode,
% therefore correct sorting of the references now works out of the box; also
% creating citation styles can now be done using simple \LaTeX{} commands.
%
% For easier usage, we provide the load-time option |biblatex| that already sets
% all settings~(see \cref{sec:doc-se2thesis-options}.
% Set this options to \cls{se2thesis} and add your reference file using the
% \cmd{\addbibresource} macro.  \cmd{\printbibliography} will print your
% references.
%
% \subsubsection{Use \pkg{cleveref} for internal references}
%
% \LaTeX{} provides an easy-to-use reference mechanism using the \cmd{\label}
% and \cmd{\ref} macros.
% However, this requires some manual effort and the text needs to specify
% whether a reference is to a figure, section, or table.
% We often see things in drafts such as \enquote{we discuss our findings in 4};
% but what is \enquote{4} here?
% Is it a section, a table, a figure?
% To avoid such confusion, use the \pkg{cleveref} package, which automatically
% infers the type of the reference~(see its documentation on how this works).
% The \pkg{cleveref} package furthermore avoids one additional mistake: between
% the name of the element and its reference one needs to have a non-breaking
% space that often is forgotten.
%
% Please note that, in contrast to most other packages, \pkg{cleveref} has to be
% loaded \emph{after} the \pkg{hyperref} package!
%
% \subsection{Abstract for the thesis}\label{sec:doc-se2thesis-abstract}
%
% Each thesis shall come with an abstract that summarises its content.
% The abstract should be written in the language the thesis is written in.
% Additionally, there is the requirement to provide a German abstract if the
% thesis is written in a foreign language.
% \begin{function}{\abstract}
%   \begin{syntax}
%     \cmd{\abstract}
%   \end{syntax}
%   We ensure that the \cmd{\abstract} command is defined for all document
%   classes.
% \end{function}
%
% \DescribeEnv{abstract}
% To typeset an abstract, we provide an environment called \env{abstract}.
% The environment takes an optional argument that specifies the language that is
% used in this abstract.
% Setting the abstract's language will cause its title to change to the
% respective language;
% additionally, hyphenation is also changed for that language.
% \begin{verbatim}
% \begin{abstract}[language]
%   Your abstract text.
% \end{abstract}
% \end{verbatim}
%
% \subsection{Acknowledgements}\label{sec:doc-se2thesis-acknowledgements}
%
% \DescribeEnv{acknowledgements}
% We provide the \env{acknowledgements} environment to typeset acknowledgements
% for your thesis.
% Using this environment is optional.
% Usually, bachelor and master thesis do not contain such an acknowledgements
% section, however, there is no general rule to this.
% \begin{verbatim}
% \begin{acknowledgements}[language]
%   Your acknowledgements.
% \end{acknowledgements}
% \end{verbatim}
%
% \subsection{Document structuring}\label{sec:doc-se2thesis-structuring}
%
% A larger work, such as a thesis, is usually structured in three large blocks:
% a frontmatter that provides all the overview, such as abstract, table of
% contents, etc.,
% a mainmatter that contains all the actual content,
% and a backmatter for appendices.
% \cls{se2thesis} ensures that the following macros are defined because they are
% not provided by all \KOMAScript{} classes.
% \begin{function}{\frontmatter, \mainmatter, \backmatter}
%   \begin{syntax}
%     \cmd{\frontmatter}
%     \cmd{\mainmatter}
%     \cmd{\backmatter}
%   \end{syntax}
%   Switches between frontmatter, mainmatter, and backmatter.
%   Most notably, the frontmatter will have roman page numbers, while the other
%   two will have arabic page numbers.
% \end{function}
%
% \subsection{Authorship declaration}\label{sec:doc-se2thesis-authorship}
%
% The University of Passau requires its students to provide an authorship
% declaration as part of their thesis for submission.
% They provide a template form, which would not fit the style of the
% \cls{se2thesis} class.
% Thus, we provide the \cmd{\authorshipDeclaration} macro to typeset such
% a declaration.
% It uses the original~(German) text of the declaration and fills in the values
% that are specified by the \cmd{\author} and \cmd{\location} macros.
% \begin{function}{\authorshipDeclaration}
%   \begin{syntax}
%     \cmd{\authorshipDeclaration}
%   \end{syntax}
%   Print the authorship declaration text.
% \end{function}
% \emph{Please note:} the authorship declaration will always be printed in
% German, no matter what the language of the thesis is.
% This happens due to legal requirements.
% In order to make this work, you have to load the \pkg{babel} or
% \pkg{polyglossia} package in a way that it also supports German hyphenation.
% For example, use
% \begin{verbatim}
% \usepackage[ngerman,main=UKenglish]{babel}
% \end{verbatim}
% for a thesis with \emph{traditional English}\footnote{
%   there is a nice, probably photoshopped, picture of a Steam setup dialogue
%   stating that American English is a \enquote{simplified version} of British
%   English, see
%   \href{https://jakubmarian.com/is-american-english-simplified-and-british-english-traditional/}{https://jakubmarian.com/is-american-english-simplified-and-british-english-traditional/}.
% } as its main language and support for German.
%
% \begin{function}{\signatureBox}
%   \begin{syntax}
%     \cmd{\signatureBox} \oarg{width} \marg{signature-name}
%   \end{syntax}
%   A helper macro to print the signature box for the authorship declaration.
%   The optional argument \oarg{width} allows to specify a custom width for the
%   signature line.
%   The default is 5\,cm.
%   The mandatory argument \marg{signature-name} specifies the name of the
%   signee, which will be typeset below the signature line.
% \end{function}
%
% \subsection{Research Questions and findings summaries}\label{sec:doc-se2thesis-summaries}
%
% Most theses written at our Chair will require the student to provide some
% empirical evaluation of their work to shed insights whether their proposed
% ideas are actually useful.
% For an empirical study, one needs to specify research questions and maybe also
% hypotheses.
% The \cls{se2thesis} class supports this by providing environments for this.
%
% \DescribeEnv{resq}
% The \env{resq} environment shall be used to specify a research question.
%
% \DescribeEnv{hyp}
% The \env{hyp} environment shall be used to specify a hypothesis.
%
% \DescribeEnv{summary}
% After describing the results, we recommend to give an explicit summary of the
% findings for a research question or hypothesis.
% This summary shall be given in one or two sentences.
% The \env{summary} environment provides a convenient way for this;
% it will be typeset in a highlighted box that is easy to spot and also allows
% readers of the work to quickly grasp the main findings.
% \begin{verbatim}
% \begin{summary}{label-reference}
%   The summary text itself.
% \end{summary}
% \end{verbatim}
% The environment expects as a parameter a label, for example, to a research
% question;
% however, this can also be arbitrary text.
%
% \section{The \pkg{se2colors} package}\label{sec:doc-se2colors}
%
% Several colours are specific to the university
% and we want to have a comprehensive interface
% to access them throughout all our packages.
%
% The \pkg{se2colors} package provides this exact features.
% One can load it using |\usepackage{se2colors}| in the document preamble.
%
% \begin{function}[updated = 2022-11-03]{cmode}
%   \begin{syntax}
%     |cmode| = \meta{choice}
%   \end{syntax}
%   Selects the colour mode that shall be used for creating the results,
%   a choice from the options specified in \cref{tab:coloursoptions}.
%   The default setting is |4C|.
% \end{function}
%
% \begin{table}[th]
%   \tabcaption{\label{tab:coloursoptions}%
%     Options provided by \pkg{se2colors}.%
%   }
%   \centering
%   \begin{tabular}{@{} l l @{}} \toprule
%     Option & Description \\ \midrule
%     %
%     |cmode=4C|
%            & Define colours in CMYK colour space (\emph{default}). \\
%     %
%     |CMYK|, |cmyk|
%            & Aliases for the previous. \\
%     %
%     |cmode=RGB|
%            & Define colours in RGB colour space. \\
%     %
%     |RGB|, |rgb|
%            & Aliases for the previous. \\
%     %
%     |cmode=BW|
%            & Define colours in black-and-white colour space. \\
%     %
%     |cmode=1C|
%            & Alias for the previous. \\
%     %
%     |gray|
%            & Alias for the previous. \\
%     %
%     \bottomrule
%   \end{tabular}
% \end{table}
%
% We define two basic colours
% that are taken from the University's logo,
% namely |UPSE2-Gray| \testclr{UPSE2-Gray}
% and |UPSE2-Orange| \testclr{UPSE2-Orange}.
%
% Additionally,
% we define four colours for the four faculties of the University:
% \begin{itemize}
%   \item the Faculty of Law |UPSE2-JUR| \testclr{UPSE2-JUR},
%   \item the School of Business, Economics and Information Systems |UPSE2-WIWI| \testclr{UPSE2-WIWI},
%   \item the Faculty of Arts and Humanities |UPSE2-PHIL| \testclr{UPSE2-PHIL}, and
%   \item the Faculty of Computer Science and Mathematics |UPSE2-FIM| \testclr{UPSE2-FIM}.
% \end{itemize}
%
% Finally,
% we define a full set of supplementary colours:
% \begin{itemize}
%   \item |UPSE2-DarkGray| \testclr{UPSE2-DarkGray}
%     with its derivatives \\
%     |UPSE2-DarkGray1| \testclr{UPSE2-DarkGray1},
%     |UPSE2-DarkGray2| \testclr{UPSE2-DarkGray2},
%     |UPSE2-DarkGray3| \testclr{UPSE2-DarkGray3},
%     |UPSE2-DarkGray4| \testclr{UPSE2-DarkGray4}, and
%     |UPSE2-DarkGray5| \testclr{UPSE2-DarkGray5}.
%   \item |UPSE2-White| \testclr{UPSE2-White}
%     with its derivatives \\
%     |UPSE2-White1| \testclr{UPSE2-White1},
%     |UPSE2-White2| \testclr{UPSE2-White2},
%     |UPSE2-White3| \testclr{UPSE2-White3},
%     |UPSE2-White4| \testclr{UPSE2-White4}, and
%     |UPSE2-White5| \testclr{UPSE2-White5}.
%   \item |UPSE2-MediumGray| \testclr{UPSE2-MediumGray}
%     with its derivatives \\
%     |UPSE2-MediumGray1| \testclr{UPSE2-MediumGray1},
%     |UPSE2-MediumGray2| \testclr{UPSE2-MediumGray2},
%     |UPSE2-MediumGray3| \testclr{UPSE2-MediumGray3},
%     |UPSE2-MediumGray4| \testclr{UPSE2-MediumGray4}, and
%     |UPSE2-MediumGray5| \testclr{UPSE2-MediumGray5}.
%   \item |UPSE2-LightGray| \testclr{UPSE2-LightGray}
%     with its derivatives \\
%     |UPSE2-LightGray1| \testclr{UPSE2-LightGray1},
%     |UPSE2-LightGray2| \testclr{UPSE2-LightGray2},
%     |UPSE2-LightGray3| \testclr{UPSE2-LightGray3},
%     |UPSE2-LightGray4| \testclr{UPSE2-LightGray4}, and
%     |UPSE2-LightGray5| \testclr{UPSE2-LightGray5}.
%   \item |UPSE2-Orange| \testclr{UPSE2-Orange}
%     with its derivatives \\
%     |UPSE2-Orange1| \testclr{UPSE2-Orange1},
%     |UPSE2-Orange2| \testclr{UPSE2-Orange2},
%     |UPSE2-Orange3| \testclr{UPSE2-Orange3},
%     |UPSE2-Orange4| \testclr{UPSE2-Orange4}, and
%     |UPSE2-Orange5| \testclr{UPSE2-Orange5}.
%   \item |UPSE2-LightRed| \testclr{UPSE2-LightRed}
%     with its derivatives \\
%     |UPSE2-LightRed1| \testclr{UPSE2-LightRed1},
%     |UPSE2-LightRed2| \testclr{UPSE2-LightRed2},
%     |UPSE2-LightRed3| \testclr{UPSE2-LightRed3},
%     |UPSE2-LightRed4| \testclr{UPSE2-LightRed4}, and
%     |UPSE2-LightRed5| \testclr{UPSE2-LightRed5}.
%   \item |UPSE2-DarkRed| \testclr{UPSE2-DarkRed}
%     with its derivatives \\
%     |UPSE2-DarkRed1| \testclr{UPSE2-DarkRed1},
%     |UPSE2-DarkRed2| \testclr{UPSE2-DarkRed2},
%     |UPSE2-DarkRed3| \testclr{UPSE2-DarkRed3},
%     |UPSE2-DarkRed4| \testclr{UPSE2-DarkRed4}, and
%     |UPSE2-DarkRed5| \testclr{UPSE2-DarkRed5}.
%   \item |UPSE2-Green| \testclr{UPSE2-Green}
%     with its derivatives \\
%     |UPSE2-Green1| \testclr{UPSE2-Green1},
%     |UPSE2-Green2| \testclr{UPSE2-Green2},
%     |UPSE2-Green3| \testclr{UPSE2-Green3},
%     |UPSE2-Green4| \testclr{UPSE2-Green4}, and
%     |UPSE2-Green5| \testclr{UPSE2-Green5}.
%   \item |UPSE2-Blue| \testclr{UPSE2-Blue}
%     with its derivatives \\
%     |UPSE2-Blue1| \testclr{UPSE2-Blue1},
%     |UPSE2-Blue2| \testclr{UPSE2-Blue2},
%     |UPSE2-Blue3| \testclr{UPSE2-Blue3},
%     |UPSE2-Blue4| \testclr{UPSE2-Blue4}, and
%     |UPSE2-Blue5| \testclr{UPSE2-Blue5}.
%   \item |UPSE2-AccentGray| \testclr{UPSE2-AccentGray}
%     with its derivatives \\
%     |UPSE2-AccentGray1| \testclr{UPSE2-AccentGray1},
%     |UPSE2-AccentGray2| \testclr{UPSE2-AccentGray2},
%     |UPSE2-AccentGray3| \testclr{UPSE2-AccentGray3},
%     |UPSE2-AccentGray4| \testclr{UPSE2-AccentGray4}, and
%     |UPSE2-AccentGray5| \testclr{UPSE2-AccentGray5}.
% \end{itemize}
%
% \section{The \pkg{se2fonts} package}\label{sec:doc-se2fonts}
%
% The \pkg{se2fonts} package sets the fonts for the document.
% By default,
% we recommend using Hermann Zapf's beautiul \emph{Palatino} font
% as the main text font,
% accompanied with the sans-serif font \emph{Helvetica}
% and \emph{Neo Euler} as the default math font;
% we set \emph{Meslo LGS Nerd Font Mono} as the monospaced font.
% Palatino and Helvetica get shipped with any macOS system,
% the user, however, needs to download Neo Euler themself\footnote{
%   for example from
%   \href{https://fontlibrary.org/en/font/euler-otf}{https://fontlibrary.org/en/font/euler-otf}.
% }.
% Being aware that these fonts might not be available on every user's system,
% we recommend using \emph{\TeX{} Gyre Pagella} as an alternative to
% Palatino, \emph{\TeX{} Gyre Heros} as an alternative to Helvetica,
% and the \emph{\TeX{} Gyre Pagella Math} as the default math font;
% \emph{Fira Code} is a nice monospaced font.
% Although they look different in various details
% they still provide a nice-looking alternative
% that is bundled with a recent standard \TeX{} distribution.
%
% If you are using \LuaTeX{},
% fonts are expected to be present as open-type fonts;
% using \pdfLaTeX{} will fallback to Type-1 fonts,
% and will use \TeX{} Gyre Pagella,
% \TeX{} Gyre Heros,
% Fira Code,
% and \TeX{} Gyre Pagella Math as the default fonts.
%
% \emph{Note that the package does not support \XeTeX{}!}
%
% The following option is defined by the \pkg{se2fonts} package
% to influence the selection of the fonts.
%
% \begin{function}[updated = 2022-11-03]{fmode}
%   \begin{syntax}
%     |fmode| = \meta{choice}
%   \end{syntax}
%   Sets the font-selection mode based on a choice:
%   |original| selects the fonts we recommend for using,
%   |replacement| selects fonts that are part of a standard \TeX{}
%   distribution,
%   in case one has no access to the |original| fonts;
%   |auto| selects fonts automatically,
%   preferring the |original| fonts if available.
%   The default is |auto|.
%
%   The fonts are automatically scaled based on their lower-case characters
%   using the mechanisms provided by \pkg{fontspec} when using \LuaTeX.
% \end{function}
%
% The following list provides examples for each of the fonts:
% \begin{itemize}
%   \item {\fontspec{Palatino}An example text in Palatino}
%   \item {\fontspec{TeX Gyre Pagella}An example text in \TeX{} Gyre Pagella}
%   \item {\fontspec{Helvetica}An example text in Helvetica}
%   \item {\fontspec{TeX Gyre Heros}An example text in \TeX{} Gyre Heros}
%   \item {\fontspec{MesloLGSNerd Font Mono}An example text in MesloLGS}
%   \item {\fontspec{Fira Code}An example text in Fira Code}
%   \item {\fontspec{Neo Euler}An example text in Neo Euler}
%   \item {\fontspec{TeX Gyre Pagella Math}An example text in \TeX{} Gyre
%     Pagella Math}
% \end{itemize}
%
% The package provides additional helper functions
% that are also available to the user.
%
% \begin{function}{\pdftexengine, \xetexengine, \luatexengine}
%   \begin{syntax}
%     \cmd{\pdftexengine}
%     \cmd{\xetexengine}
%     \cmd{luatexengine}
%   \end{syntax}
%   These commands alias the built-in \LaTeX3{} macros
%   \cs{sys_if_engine_pdftex_p:},
%   \cs{sys_if_engine_xetex_p:}, and
%   \cs{sys_if_engine_luatex_p:}.
%   They can be used to check which engine the user is currently running.
% \end{function}
%
% \begin{function}{\ifengineTF, \ifengineT, \ifengineF}
%   \begin{syntax}
%     \cmd{\ifengineTF} \marg{engine} \marg{then block} \marg{else block}
%     \cmd{\ifengineT} \marg{engine} \marg{then block}
%     \cmd{\ifengineF} \marg{engine} \marg{then block}
%   \end{syntax}
%   Allows to execute code based on the running engine.
%   The base variant \cs{ifengineTF} expects the user to specify a condition,
%   which can be built of combinations of the \cs{pdftexengine},
%   \cs{xetexengine},
%   and \cs{luatexengine} macros,
%   followed by the code that will be executed if the condition holds
%   and the code that will be executed if the condition does not hold.
%
%   For convenience,
%   we provide the variants \cs{ifengineT} and \cs{ifengineF}
%   that allow to omit an empty then or else branch, respectivly.
% \end{function}
%
% \end{documentation}
%
% \clearpage
%
% \begin{implementation}
%
% \part{Implementation}\label{sec:impl}
%
% \section{Global helpers}\label{sec:impl-global}
%
% These helpers might be useful for many exported packages and classes,
% thus we keep them on the global level of this implementation.
%
%    \begin{macrocode}
%<*init>
%    \end{macrocode}
%
% Load only the essential support (\pkg{expl3}) \enquote{up-front}, and only
% if required.
%    \begin{macrocode}
\@ifundefined{ExplLoaderFileDate}
  { \RequirePackage{expl3} }
  {}
%    \end{macrocode}
%
% Make sure that the version of \pkg{l3kernel} in use is sufficiently new.
% We use \cs{ExplFileDate} as \cs{@ifpackagelater} does not work for
% pre-loaded \pkg{expl3} in the absence of the package.
%    \begin{macrocode}
\@ifl@t@r\ExplLoaderFileDate{2020-01-09}
  {}
  {%
    \PackageError{se2colors}{Support package expl3 too old}
    {%
      You need to update your installation of the bundles 'l3kernel' and
      'l3packages'.\MessageBreak
      Loading~se2colors~will~abort!%
    }%
    \endinput
  }%
%    \end{macrocode}
%
% \begin{macro}{\IfFormatAtLeastTF}
%   This macro is not present in older kernels, thus we use the \LaTeXe{}
%   mechanism as this is correct for this case.
%    \begin{macrocode}
\providecommand \IfFormatAtLeastTF { \@ifl@t@r \fmtversion }
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
%</init>
%    \end{macrocode}
%
% \section{The \cls{se2thesis} implementation}\label{sec:impl-se2thesis}
%
% Start the \pkg{DocStrip} guards.
%    \begin{macrocode}
%<*class>
%    \end{macrocode}
%
% Identify the internal prefix (\LaTeX3 \pkg{DocStrip} convention): only
% internal material in this \emph{submodule} should be used directly.
%    \begin{macrocode}
%<@@=slcd>
%    \end{macrocode}
%
% Identify the class and give the overall version number.
%    \begin{macrocode}
\ProvidesExplClass {se2thesis} {2022-11-08} {1.3.0}
  {A thesis class for the Chair of Software Engineering II}
%    \end{macrocode}
%
% \begin{macro}
%   {
%     \slcd_package_if_loaded:nTF,
%     \slcd_package_if_loaded:nT,
%     \slcd_package_if_loaded:nF,
%     \slcd_package_if_loaded_p:n
%   }
%   Defines various \LaTeX3{} variants for the internal \cmd{\@ifpackageloaded}
%   macro to check whether a package has been loaded.
%    \begin{macrocode}
\prg_new_conditional:Nnn \slcd_package_if_loaded:n { p, T, F, TF }
  {
    \use:c { @ifpackageloaded }
      { #1 }
      { \prg_return_true: }
      { \prg_return_false: }
  }
%    \end{macrocode}
% \end{macro}
%
% Load required packages early.
%    \begin{macrocode}
\RequirePackage{graphicx}
\RequirePackage{translations}
\LoadDictionary{se2translations}
\DeclareTranslationFallback{version-of-date}{%
  Version~\l_@@_version_tl\ of~\@date
}
\DeclareTranslation{German}{version-of-date}{%
  Version~\l_@@_version_tl\ vom~\@date
}
\DeclareTranslation{English}{version-of-date}{%
  Version~\l_@@_version_tl\ of~\@date
}
%    \end{macrocode}
%
% \subsection{Define Variables}
%
% The following variables are necessary for the argument handling.
% \begin{variable}{\l_@@_paper_int}
%   A variable to store the key of the page size selected by the user.
%    \begin{macrocode}
\int_new:N \l_@@_paper_int
%    \end{macrocode}
% \end{variable}
%
% We also need properties to store class options that are not for us,
% thus shall be handled by the underlying base class.
% \begin{variable}
%   {
%     \l_@@_base_class_tl,
%     \l_@@_clsopts_prop,
%     \l_@@_unknown_clsopts_prop
%   }
%   Store the base class, the known, and the unknown class options.
%   The latter will be forwarded to the base class later.
%    \begin{macrocode}
\tl_new:N \l_@@_base_class_tl
\prop_new:N \l_@@_clsopts_prop
\prop_new:N \l_@@_unknown_clsopts_prop
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_biblatex_bool}
%   The user wants to load the \pkg{biblatex} package together with our
%   settings.
%    \begin{macrocode}
\bool_new:N \l_@@_biblatex_bool
%    \end{macrocode}
% \end{variable}
%
% Define internal variables to hold the values of the fields of the title
% page.
% \begin{variable}
%   {
%     \l_@@_version_tl,
%     \l_@@_degreeprogramme_tl,
%     \l_@@_matrnumber_tl,
%     \l_@@_supervisor_tl,
%     \l_@@_cosupervisor_tl,
%     \l_@@_advisor_tl,
%     \l_@@_coadvisor_tl,
%     \l_@@_department_tl,
%     \l_@@_institute_tl,
%     \l_@@_external_tl,
%     \l_@@_logofile_tl,
%     \l_@@_signature_tl,
%     \l_@@_location_tl
%   }
%    \begin{macrocode}
\tl_new:N \l_@@_version_tl
\tl_new:N \l_@@_degreeprogramme_tl
\tl_new:N \l_@@_matrnumber_tl
\tl_new:N \l_@@_supervisor_tl
\tl_new:N \l_@@_cosupervisor_tl
\tl_new:N \l_@@_advisor_tl
\tl_new:N \l_@@_coadvisor_tl
\tl_new:N \l_@@_department_tl
\tl_new:N \l_@@_institute_tl
\tl_new:N \l_@@_external_tl
\tl_new:N \l_@@_logofile_tl
\tl_new:N \l_@@_signature_tl
\tl_new:N \l_@@_location_tl
%    \end{macrocode}
% \end{variable}
%
% Define several dimensions for the \pkg{typearea} package to define the
% package style.
% \begin{variable}
%   {
%     \l_@@_marginspace_dim,
%     \l_@@_headmarkspace_dim,
%     \l_@@_rulespace_dim,
%     \l_@@_pagemark_minipage_dim,
%     \l_@@_ruleraise_dim,
%     \l_@@_rulewidth_dim,
%     \l_@@_rulethickness_dim
%   }
%    \begin{macrocode}
\dim_new:N \l_@@_marginspace_dim
\dim_new:N \l_@@_headmarkspace_dim
\dim_new:N \l_@@_rulespace_dim
\dim_new:N \l_@@_pagemark_minipage_dim
\dim_new:N \l_@@_ruleraise_dim
\dim_new:N \l_@@_rulewidth_dim
\dim_new:N \l_@@_rulethickness_dim
\dim_gset:Nn \l_@@_marginspace_dim { -1.85cm }
\dim_gset:Nn \l_@@_headmarkspace_dim { 0.75cm }
\dim_gset:Nn \l_@@_rulespace_dim { 10pt }
\dim_gset:Nn \l_@@_pagemark_minipage_dim { 1.5cm }
\dim_gset:Nn \l_@@_ruleraise_dim { -100pt }
\dim_gset:Nn \l_@@_rulewidth_dim { 1.25pt }
\dim_gset:Nn \l_@@_rulethickness_dim { 110pt }
%    \end{macrocode}
% \end{variable}
%
% \subsection{Load-time options}
%
% We define the key-value interface for the class.
% \begin{variable}
%   {
%     \l_@@_base_class_tl,
%     \l_@@_unknown_clsopts_prop,
%     \l_@@_paper_int,
%     \l_@@_thesis_type_tl,
%     \l_@@_licensetype_tl,
%     \l_@@_licensemodifier_tl,
%     \l_@@_licenseversion_tl,
%     \l_@@_colormode_tl,
%     \l_@@_fontmode_tl,
%   }
%    \begin{macrocode}
\keys_define:nn { seiithesis }
  {
    class .choice:,
    class / report .meta:n = {class=scrreprt},
    class / scrreprt .code:n = \tl_gset:Nn \l_@@_base_class_tl {scrreprt},
    class / article .meta:n = {class=scrartcl},
    class / scrartcl .code:n = \tl_gset:Nn \l_@@_base_class_tl {scrartcl},
    class / book .meta:n = {class=scrbook},
    class / scrbook .code:n = \tl_gset:Nn \l_@@_base_class_tl {scrbook},
    class .initial:n = scrreprt,

    paper .choices:nn = {a4,a5,b5}{
      \int_gset_eq:NN \l_@@_paper_int \l_keys_choice_int
    },
    paper .initial:n = a4,

    logofile .tl_gset:N = \l_@@_logofile_tl,
    logofile .initial:n =,

    thesistype .choice:,
    thesistype / bachelor .code:n = \tl_gset:Nn \l_@@_thesis_type_tl {bachelor},
    thesistype / bachelorproposal .code:n = {
      \tl_gset:Nn \l_@@_thesis_type_tl {bachelorproposal}
    },
    thesistype / master .code:n = \tl_gset:Nn \l_@@_thesis_type_tl {master},
    thesistype / masterproposal .code:n = {
      \tl_gset:Nn \l_@@_thesis_type_tl {masterproposal}
    },
    thesistype / phd .code:n = \tl_gset:Nn \l_@@_thesis_type_tl {phd},
    thesistype / phdproposal .code:n = {
      \tl_gset:Nn \l_@@_thesis_type_tl {phdproposal}
    },
    thesistype .initial:n = master,

    biblatex .bool_gset:N = \l_@@_biblatex_bool,
    biblatex .initial:n = false,

    colormode .choices:nn = {cmyk,rgb,bw}{
      \tl_gset_eq:NN \l_@@_colormode_tl \l_keys_choice_tl
    },
    colormode .initial:n = cmyk,

    fontmode .choices:nn = {original,replacement,auto}{
      \tl_gset_eq:NN \l_@@_fontmode_tl \l_keys_choice_tl
    },
    fontmode .initial:n = auto,

    unknown .code:n = {
      \prop_gput:NVn \l_@@_unknown_clsopts_prop \l_keys_key_tl {#1}
    },
  }
%    \end{macrocode}
% \end{variable}
%
% Handle the options
%    \begin{macrocode}
\IfFormatAtLeastTF { 2022-06-01 }
  { \ProcessKeyOptions [ seiithesis ] }
  {
    \RequirePackage{ l3keys2e }
    \ProcessKeysOptions { seiithesis }
  }
%    \end{macrocode}
%
% Handle the known options for base class
%    \begin{macrocode}
\prop_map_inline:Nn \l_@@_clsopts_prop
  {
    \tl_if_empty:nTF {#2}
      { \PassOptionsToClass {#1} {\l_@@_base_class_tl} }
      {
        \clist_map_inline:nn {#2}
          { \PassOptionsToClass {#1=##1} {\l_@@_base_class_tl} }
      }
  }
%    \end{macrocode}
%
% Load the base class
%    \begin{macrocode}
\LoadClass{\l_@@_base_class_tl}
%    \end{macrocode}
%
% Attempt to handle the unknown options
%    \begin{macrocode}
\prop_map_inline:Nn \l_@@_unknown_clsopts_prop
  {
    \cs_if_exist:cT {KV@KOMA.\l_@@_base_class_tl.cls@#1}
      {
        \tl_if_empty:nTF {#2}
          { \KOMAoptions{#1} }
          { \KOMAoption{#1}{#2}}
      }
  }
%    \end{macrocode}
%
% \subsection{Package loading}
%
% We load some packages with options that depend on options to the
% \cls{se2thesis} class.
% Thus, we load them here to be able to hand them over the respective values.
%
% We start with the \pkg{se2colors} and \pkg{se2fonts} packages.
%    \begin{macrocode}
\PassOptionsToPackage{\l_@@_colormode_tl}{se2colors}
\RequirePackage{se2colors}

\PassOptionsToPackage{\l_@@_fontmode_tl}{se2fonts}
\RequirePackage{se2fonts}
%    \end{macrocode}
%
% Load the \pkg{microtype} package.
% We also set some options to \pkg{microtype}, namely the penalties for widows
% and orphans (which might also be corrected by \pkg{lua-widow-control} when
% using \LuaTeX{}) and a thin space around the m-dash.
% We are aware of the discussion whether to have a space around the m-dash in
% English, however, we think it looks more beautiful.
% We took this from \href{https://tex.stackexchange.com/a/109188/14622}{a
% \TeX{}.StackExchange post}.
%    \begin{macrocode}
\RequirePackage{microtype}
\clubpenalty=10000
\widowpenalty=10000
\displaywidowpenalty=10000
\SetExtraKerning{
  encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1,EU1,EU2}
}{
  \textemdash = {167,167},
  — = {167,167}
}
%    \end{macrocode}
%
% When using \LuaTeX{} load the \pkg{lua-widow-control} package for a better
% control of orphans and widows.
%    \begin{macrocode}
\ifengineT { \luatexengine }
  {
    \IfFileExists { lua-widow-control.sty }
      { \RequirePackage{lua-widow-control} }
      {
        \msg:nnn { seiithesis }
          { lua-widow-control-not-available }
          {
            Could~ not~ find~ lua-widow-control.sty.~ You~ might~ want~ to~
            install~ it~ for~ better~ control~ over~ orphans~ and~ widows.
          }
        \msg_note:nn { seiithesis } { lua-widow-control-not-available }
      }
  }
%    \end{macrocode}
%
% Similarly, load \pkg{ligtype} when using \LuaTeX.
%    \begin{macrocode}
\ifengineT { \luatexengine }
  {
    \IfFileExists { selnolig.sty }
      { \RequirePackage{selnolig} }
      {
        \msg:nnn { seiithesis }
          { selnolig-not-available }
          {
            Could~ not~ find~ selnolig.sty.~ You~ might~ want~ to~ install~ it~
            for~ better~ ligatures~ control.
          }
        \msg_note:nn { seiithesis } { selnolig-not-available }
      }
  }
%    \end{macrocode}
%
% When the user requests the |biblatex| option, also load \pkg{biblatex}
%    \begin{macrocode}
\bool_if:NT \l_@@_biblatex_bool
  {
    \PassOptionsToPackage
      {
        backend=biber,
        hyperref=true,
        backref=true,
        backrefstyle=none,
        style=alphabetic,
        maxnames=100,
        minalphanames=3,
        sorting=nyt,
        giveninits=true,
      }{biblatex}
    \RequirePackage{biblatex}
%    \end{macrocode}
% Define strings for back-referencing.
%    \begin{macrocode}
    \DefineBibliographyStrings{english}{
      backrefpage = {\lowercase{c}ited~ on~ p.},
      backrefpages = {\lowercase{c}ited~ on~ pp.},
    }
    \DefineBibliographyStrings{german}{
      backrefpage = {\lowercase{z}itiert~ auf~ S.},
      backrefpages = {\lowercase{z}itiert~ auf~ S.},
    }
%    \end{macrocode}
% Design the page-ref format.
%    \begin{macrocode}
    \DeclareFieldFormat{pagerefformat}{
      {
        \color{UPSE2-Gray}
        \mkbibparens{\mkbibemph{#1}}
      }
    }
    \renewbibmacro*{pageref}{
      \iflistundef{pageref}{}{
        \printtext[pagerefformat]{
          \ifnumgreater{
            \value{pageref}
          }{1}
          {\bibstring{backrefpages}\ppspace}
          {\bibstring{backrefpage}\ppspace}
          \printlist[pageref][-\value{listtotal}]{pageref}
        }
      }
    }
%    \end{macrocode}
% End of the \BibLaTeX{} settings.
%    \begin{macrocode}
  }
%    \end{macrocode}
%
% \subsection{User macros for the title page}
%
% In addition to the macros provided by the \KOMAScript{} classes
% for the title-page values (e.g. \cs{author}, \cs{title}),
% provide these additional macros to the user.
% \begin{macro}{\version}
%   Specify the version of the document, e.g., a |git| hash.
%    \begin{macrocode}
\ProvideDocumentCommand \version { m }
  {
    \tl_set:Nn \l_@@_version_tl {#1}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\degreeprogramme}
%   Specify the degree programme the thesis is meant to be accepted in.
%    \begin{macrocode}
\ProvideDocumentCommand \degreeprogramme { m }
  {
    \tl_set:Nn \l_@@_degreeprogramme_tl {#1}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\matrnumber}
%   Specify the matriculation number of the student.
%    \begin{macrocode}
\ProvideDocumentCommand \matrnumber { m }
  {
    \tl_set:Nn \l_@@_matrnumber_tl {#1}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\supervisor, \cosupervisor}
%   Specify the supervisor and co-supervisor of the thesis, usually a professor.
%    \begin{macrocode}
\ProvideDocumentCommand \supervisor { m }
  {
    \tl_set:Nn \l_@@_supervisor_tl {#1}
  }
\ProvideDocumentCommand \cosupervisor { m }
  {
    \tl_set:Nn \l_@@_cosupervisor_tl {#1}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\advisor, \coadvisor}
%   Specify the advisor and co-advisor of the thesis, usually a PhD student or
%   postdoc.
%    \begin{macrocode}
\ProvideDocumentCommand \advisor { m }
  {
    \tl_set:Nn \l_@@_advisor_tl {#1}
  }
\ProvideDocumentCommand \coadvisor { m }
  {
    \tl_set:Nn \l_@@_coadvisor_tl {#1}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\department, \institute}
%   Specify the university's department and institute you are writing
%   the thesis for.
%    \begin{macrocode}
\ProvideDocumentCommand \department { m }
  {
    \tl_set:Nn \l_@@_department_tl {#1}
  }
\ProvideDocumentCommand \institute { o m }
  {
    \tl_set:Nn \l_@@_institute_tl {#2}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\external}
%   Specify an external referee.
%    \begin{macrocode}
\ProvideDocumentCommand \external { m }
  {
    \tl_set:Nn \l_@@_external_tl {#1}
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\location}
%   Specify the location for the signature field.
%    \begin{macrocode}
\ProvideDocumentCommand \location { m }
  {
    \tl_set:Nn \l_@@_location_tl {#1}
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{Define logo, paper size, and paper style}
%
% For the logo on the titlepage, we define further variables to store its height
% and a box to store the logo itself.
% \begin{variable}{\l_@@_logo_height_dim, \l_@@_logo_box}
%    \begin{macrocode}
\dim_if_exist:NF \l_@@_logo_height_dim
  {
    \dim_new:N \l_@@_logo_height_dim
    \dim_gset:Nn \l_@@_logo_height_dim { 67.5pt }
  }
\box_if_exist:NF \l_@@_logo_box
  {
    \box_new:N \l_@@_logo_box
  }
\tl_if_empty:NF \l_@@_logofile_tl
  {
    \hbox_gset:Nn \l_@@_logo_box
      {
        \includegraphics[%
          height=\l_@@_logo_height_dim%
        ]{\l_@@_logofile_tl}
      }
  }
%    \end{macrocode}
% \end{variable}
%
% Set the paper size depending on the selected |paper| option.
%    \begin{macrocode}
\int_compare:nTF { \l_@@_paper_int=1 }
  {
    \areaset[current]{389pt}{630pt}
    \setlength{\marginparsep}{8.5cm}
    \setlength{\marginparsep}{1em}
  }{
    \int_compare:nTF { \l_@@_paper_int=2 }
      {
        \areaset[current]{275pt}{445pt}
        \setlength{\marginparsep}{6.0cm}
        \setlength{\marginparsep}{0.71em}
      }{
        \areaset[current]{337pt}{545pt}
        \setlength{\marginparsep}{7.4cm}
        \setlength{\marginparsep}{0.87em}
      }
  }
%    \end{macrocode}
%
% Provide the package style.
% We start by loading the \pkg{scrlayer-scrpage} package with the appropriate
% options and set some basic properties.
%    \begin{macrocode}
\PassOptionsToPackage{automark}{scrlayer-scrpage}
\RequirePackage{scrlayer-scrpage}
\clearpairofpagestyles
\setkomafont{pagefoot}{\normalfont\sffamily}
%    \end{macrocode}
%
% We can then define the footer for odd pages, which will appear on the right
% side of the page's footer.
% This definition contains first, as an optional argument, the style of a page
% with |pagestyle| set to |empty|, i.e., a page where a new chapter starts, and
% afterwards the style of a regular right-hand side page.
%    \begin{macrocode}
\rofoot[{%
  \group_begin: \ \group_end:
  \footnotesize%
  \hspace*{\l_@@_headmarkspace_dim}%
  \group_begin:
    \color{UPSE2-Blue}%
    \rule[\l_@@_ruleraise_dim]{\l_@@_rulewidth_dim}{\l_@@_rulethickness_dim}%
  \group_end:
  \hspace*{\l_@@_rulespace_dim}%
  \begin{minipage}[b]{\l_@@_pagemark_minipage_dim}%
    \normalsize\textbf{\pagemark}%
  \end{minipage}%
  \hspace{\l_@@_marginspace_dim}%
}]{%
  \group_begin: \ \group_end:
  \footnotesize%
  \group_begin:
    \color{UPSE2-Blue}\headmark
  \group_end:
  \hspace*{\l_@@_rulespace_dim}%
  \group_begin:
    \color{UPSE2-Blue}%
    \rule[\l_@@_ruleraise_dim]{\l_@@_rulewidth_dim}{\l_@@_rulethickness_dim}%
  \group_end:
  \hspace*{\l_@@_rulespace_dim}%
  \begin{minipage}[b]{\l_@@_pagemark_minipage_dim}%
    \normalsize\textbf{\pagemark}%
  \end{minipage}%
  \hspace{\l_@@_marginspace_dim}%
}
%    \end{macrocode}
%
% Similarly, we define the footer for even pages, which will appear on the left
% side of the page's footer.
%    \begin{macrocode}
\lefoot[{%
  \null\hspace{\l_@@_marginspace_dim}%
  \footnotesize%
  \begin{minipage}[b]{\l_@@_pagemark_minipage_dim}%
    \raggedleft\normalsize\textbf{\pagemark}%
  \end{minipage}%
  \footnotesize%
  \hspace*{\l_@@_rulespace_dim}%
  \group_begin:
    \color{UPSE2-Blue}%
    \rule[\l_@@_ruleraise_dim]{\l_@@_rulewidth_dim}{\l_@@_rulethickness_dim}%
  \group_end:
}]{%
  \null\hspace{\l_@@_marginspace_dim}%
  \footnotesize%
  \begin{minipage}[b]{\l_@@_pagemark_minipage_dim}%
    \raggedleft\normalsize\textbf{\pagemark}%
  \end{minipage}%
  \footnotesize%
  \hspace*{\l_@@_rulespace_dim}%
  \group_begin:
    \color{UPSE2-Blue}%
    \rule[\l_@@_ruleraise_dim]{\l_@@_rulewidth_dim}{\l_@@_rulethickness_dim}%
  \group_end:
  \hspace*{\l_@@_headmarkspace_dim}%
  \group_begin:
    \color{UPSE2-Blue}\headmark
  \group_end:
}
%    \end{macrocode}
%
% Finally, set the page style.
%    \begin{macrocode}
\pagestyle{scrheadings}
%    \end{macrocode}
%
% \subsection{The title page}
%
% We start out by adjusting some \KOMAScript{} fonts.
%    \begin{macrocode}
\setkomafont{title}{\Huge}
\setkomafont{subtitle}{\Large}
\setkomafont{subject}{\normalsize}
\setkomafont{author}{\large}
\setkomafont{date}{\normalsize}
\setkomafont{publishers}{\normalsize}
%    \end{macrocode}
%
% \begin{variable}{\author, \@author}
%   Allow for automated splitting of author's names.
%    \begin{macrocode}
\seq_new:N \l_@@_author_seq
\renewcommand*\author[2][]{
  \seq_gset_split:Nnn \l_@@_author_seq {\and} {#2}
  \tl_if_empty:nTF {#1}
    { \tl_set:Nn \l_@@_signature_tl {#2} }
    { \tl_set:Nn \l_@@_signature_tl {#1} }
}
\renewcommand*{\@author}{
  \group_begin:
    \hyphenpenalty=100000
    \seq_use:Nnnn \l_@@_author_seq {~\GetTranslation{and}~} {,~} {~\&~}
  \group_end:
}
%    \end{macrocode}
% \end{variable}
%
% Define a new layer using the functionality from \pkg{scrlayer-scrpage} for the
% logo image.
%    \begin{macrocode}
\DeclareNewLayer[
  mode=picture,
  foreground,
  align=tr,
  hoffset=\oddsidemargin+1.5in+\textwidth,
  voffset=\coverpagetopmargin+1.5in+\ht\strutbox,
  width=\textwidth - \box_wd:N \l_@@_logo_box,
  height=\box_ht:N \l_@@_logo_box,
  contents={\putUL{\box_use:N \l_@@_logo_box}},
]{title.seii.logo}
\DeclareNewPageStyleByLayers{title.seii}{title.seii.logo}
\renewcommand*{\titlepagestyle}{title.seii}
%    \end{macrocode}
%
% Redefine the \cs{maketitle} command.
% The following code is an adapted version of the corresponding \KOMAScript{}
% macro by Markus Kohm.
%    \begin{macrocode}
\renewcommand*{\maketitle}[1][1]{
  \begin{titlepage}
    \setcounter{page}{#1}
    \def\thefootnote{\fnsymbol{footnote}}
    \edef\titlepage@restore{%
      \noexpand\endgroup
      \noexpand\global\noexpand\@colht\the\@colht
      \noexpand\global\noexpand\@colroom\the\@colroom
      \noexpand\global\vsize\the\vsize
      \noexpand\global\noexpand\@titlepageiscoverpagefalse
      \noexpand\let\noexpand\titlepage@restore\noexpand\relax
    }%
    \begingroup
    \topmargin=\dimexpr \coverpagetopmargin-1in\relax
    \oddsidemargin=\dimexpr 0in\relax
    \evensidemargin=\dimexpr 0in\relax
    \textwidth=\dimexpr \paperwidth-2in\relax
    \textheight=\dimexpr
    \paperheight-\coverpagetopmargin-\coverpagebottommargin\relax
    \headheight=0pt
    \headsep=0pt
    \footskip=\baselineskip
    \@colht=\textheight
    \@colroom=\textheight
    \vsize=\textheight
    \columnwidth=\textwidth
    \hsize=\textwidth
    \linewidth=\hsize
    \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
    \thispagestyle{title.seii}
    %
    \@maketitle
    %
    \if@twoside
      \@tempswatrue
      \if@tempswa
        \next@tpage
        \begin{minipage}[t]{\textwidth}
          \@uppertitleback
        \end{minipage}
        \vfill
        \begin{minipage}[b]{\textwidth}
          \@lowertitleback
        \end{minipage}\par
        \@thanks\let\@thanks\@empty
      \fi
    \fi
    \ifx\titlepage@restore\relax\else\clearpage\titlepage@restore\fi
  \end{titlepage}
}
%    \end{macrocode}
%
% \begin{variable}{\l_@@_title_box}
%   Define a box for the title if it does not yet exist.
%    \begin{macrocode}
\box_if_exist:NF \l_@@_title_box
  {
    \box_new:N \l_@@_title_box
  }
%    \end{macrocode}
% \end{variable}
%
% \begin{variable}{\@maketitle}
%   Redeclare the \cs{@maketitle} macro.
%    \begin{macrocode}
\renewcommand*{\@maketitle}{%
  \group_begin:
    \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
    \thispagestyle{title.seii}
    \hbox_gset:Nn \l_@@_title_box
      {
        \parbox{\textwidth}{\__@@_print_title:}
      }
    \null
    \skip_vertical:n { 2.5 \box_ht:N \l_@@_logo_box }
    \box_use:N \l_@@_title_box
    \skip_vertical:n { .5 \box_ht:N \l_@@_logo_box }
  \group_end:
  \@thanks\let\@thanks\@empty
}
%    \end{macrocode}
% \end{variable}
%
% Load the \pkg{ifthen} package.
%    \begin{macrocode}
\RequirePackage{ifthen}
%    \end{macrocode}
%
% Prints the title formatted appropriately.
% We start with printing the title, optional subtitle, and the author names.
%    \begin{macrocode}
\cs_new:Nn \__@@_print_title:
  {
    \group_begin:
      \usekomafont{title}\centering\@title\par
    \group_end:
    \ifx\@subtitle\@empty\else{%
      \medskip\usekomafont{subtitle}\centering\@subtitle\par%
    }\fi
    \bigskip
    \group_begin:
      \usekomafont{author}\centering\@author\par
    \group_end:
    \bigskip
%    \end{macrocode}
%   The next block generates the text that describes the thesis.
%   In case of a PhD thesis, this text is predefined to match the requirements.
%   In case of a bachelor or master thesis, or a proposal thereof, we generate
%   a text based on the values of the |thesistype| load-time option and the
%   values of the \cmd{\degreeprogramme}, \cmd{\department}, and
%   \cmd{\institute} variables.
%    \begin{macrocode}
    \exp_args:NV
      {
        \begin{center}
          \tl_if_eq:NnTF \l_@@_thesis_type_tl { phd }
            {
              Dissertation~ zur~ Erlangung~ des~ Doktorgrades\\
              der~ Naturwissenschaften~ (Dr.\,rer.\,nat.)\\
              eingereicht~ an~ der~ Fakultät~ für~ Informatik~ und~ Mathematik\\
              der~ Universität~ Passau\\
              \rule{\textwidth}{.1pt}\\
              Dissertation~ submitted~ to\\
              the~ Faculty~ of~ Computer~ Science~ and~ Mathematics\\
              of~ the~ University~ of~ Passau\\
              in~ partial~ fulfillment~ of~ obtaining\\
              the~ degree~ of~ a~ Doctor~ of~ Natural~ Sciences
            } {
              \tl_if_eq:NnT \l_@@_thesis_type_tl { bachelor }
                { \GetTranslation{Bachelor-thesis} }
              \tl_if_eq:NnT \l_@@_thesis_type_tl { bachelorproposal }
                { \GetTranslation{Bachelor-thesis-proposal} }
              \tl_if_eq:NnT \l_@@_thesis_type_tl { master }
                { \GetTranslation{Master-thesis} }
              \tl_if_eq:NnT \l_@@_thesis_type_tl { masterproposal }
                { \GetTranslation{Master-thesis-proposal} }
              \tl_if_eq:NnT \l_@@_thesis_type_tl { phdproposal }
                { \GetTranslation{PhD-thesis-proposal} }
              \tl_if_empty:NF \l_@@_degreeprogramme_tl
                {
                  \ in~\l_@@_degreeprogramme_tl
                }
              \par
              \tl_if_empty:NF \l_@@_department_tl { \l_@@_department_tl \par }
              \tl_if_empty:NF \l_@@_institute_tl { \l_@@_institute_tl \par }
            }
        \end{center}\par\bigskip
%    \end{macrocode}
%   Finally, generate a table with information about supervisors, advisors, etc.
%    \begin{macrocode}
        \begin{center}
          \begin{tabular}{@{} l @{\quad} l}
            \tl_if_empty:NF \l_@@_matrnumber_tl
              {
                \GetTranslation{Matrnumber}    & \l_@@_matrnumber_tl \\
              }
            \tl_if_empty:NF \l_@@_supervisor_tl
              {
                \GetTranslation{Supervisor}    & \l_@@_supervisor_tl \\
              }
            \tl_if_empty:NF \l_@@_cosupervisor_tl
              {
                \GetTranslation{Co-supervisor} & \l_@@_cosupervisor_tl \\
              }
            \tl_if_empty:NF \l_@@_advisor_tl
              {
                \GetTranslation{Advisor}       & \l_@@_advisor_tl \\
              }
            \tl_if_empty:NF \l_@@_coadvisor_tl
              {
                \GetTranslation{Co-advisor}    & \l_@@_coadvisor_tl \\
              }
            \tl_if_empty:NF \l_@@_external_tl
              {
                \GetTranslation{External}      & \l_@@_external_tl \\
              }
          \end{tabular}
        \end{center}
        \par\medskip
%    \end{macrocode}
%   Last, print the date or the version.
%    \begin{macrocode}
        \group_begin:
          \usekomafont{date}
          \centering
          \tl_if_empty:NTF \l_@@_version_tl
            { \@date }
            { \GetTranslation{version-of-date} }
          \par\smallskip
        \group_end:
      }
  }
%    \end{macrocode}
%
% \begin{variable}{\@lowertitleback}
%   Afterwards, override the definition of \cs{@lowertitleback}.
%    \begin{macrocode}
\renewcommand*{\@lowertitleback}{%
  \group_begin:
    \noindent\textbf{\@author}:\\
    \emph{\@title}\\
    \tl_if_eq:NnT \l_@@_thesis_type_tl { bachelor }
      { \GetTranslation{Bachelor-thesis},~ }
    \tl_if_eq:NnT \l_@@_thesis_type_tl { master }
      { \GetTranslation{Master-thesis},~ }
    \tl_if_eq:NnT \l_@@_thesis_type_tl { phd }
      { \GetTranslation{PhD},~ }
    \GetTranslation{up},~\the\year.
  \group_end:
}
%    \end{macrocode}
% \end{variable}
%
% \subsection{Provide an environment for abstracts}
%
% We want to allow abstracts in German and English, which is also a requirement
% when writing a thesis in English.
% First, ensure that the \cmd{\abstract} macro is available for all classes.
% \begin{macro}{\abstract}
%    \begin{macrocode}
\providecommand{\abstract}{}
%    \end{macrocode}
% \end{macro}
% Then redefine the |abstract| environment such that it provides an optional
% argument for language selection.
% \begin{environment}{abstract}
%   Used to typeset an abstract for the thesis.
%   The optional argument allows to specify a language.
%   As a default the current document language will be used.
%    \begin{macrocode}
\RenewDocumentEnvironment { abstract } { o }
  {
    \group_begin:
      \IfNoValueF {#1} { \selectlanguage{#1} }
      \scr@ifundefinedorrelax{chapter}{
        \Iftocfeature{toc}{leveldown}
          {\subsection*}
          {\section*}
      }{
        \let\clearpage\relax
        \Iftocfeature{toc}{leveldown}
          {\section*}
          {\chapter*}
      } { \GetTranslation{Abstract} }
  } {
    \group_end:
  }
%    \end{macrocode}
% \end{environment}
%
% \subsection{Provide an environment for acknowledgements}
%
% Often, especially in a PhD thesis, one wants to acknowledge the help of
% certain people, for example, supervisors, family, and friends.
% \begin{environment}{acknowledgements}
%   Use to typeset the acknowledgements for the thesis.
%    \begin{macrocode}
\NewDocumentEnvironment { acknowledgements } { o }
  {
    \group_begin:
      \IfNoValueF {#1} { \selectlanguage{#1} }
      \scr@ifundefinedorrelax{chapter}{
        \Iftocfeature{toc}{leveldown}
          {\subsection*}
          {\section*}
      }{
        \Iftocfeature{toc}{leveldown}
          {\section*}
          {\chapter*}
      } { \GetTranslation{Acknowledgements} }
  } {
    \group_end:
  }
%    \end{macrocode}
% \end{environment}
%
% \subsection{Document structuring macros}
%
% Ensure that these macros are defined.
% \begin{macro}{\frontmatter}
%   Starts the frontmatter.
%   Most notably, set the page numbers to roman.
%    \begin{macrocode}
\providecommand*{\frontmatter}
  {
    \if@twoside\cleardoublepage\else\clearpage\fi
    \@mainmatterfalse
    \pagenumbering { roman }
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\mainmatter, \backmatter}
%   Starts the mainmatter or the backmatter.
%   Most notably, set the page numbers to arabic.
%    \begin{macrocode}
\providecommand*{\mainmatter}
  {
    \if@twoside\cleardoublepage\else\clearpage\fi
    \@mainmattertrue
    \pagenumbering { arabic }
  }
\providecommand*{\backmatter}
  {
    \if@twoside\cleardoublepage\else\clearpage\fi
    \@mainmatterfalse
  }
%    \end{macrocode}
% \end{macro}
%
% \subsection{Declaration of authorship}
%
% \begin{macro}{\authorshipDeclaration}
%   Provide a command to typeset the authorship declaration.
%    \begin{macrocode}
\NewDocumentCommand \authorshipDeclaration { o }
  {
    \par
    \group_begin:
      \selectlanguage{ngerman}
      \IfNoValueF {#1}
        { \tl_gset:Nn \l_@@_location_tl {#1} }

      \tl_if_empty:NT \l_@@_location_tl
        {
          \msg_new:nnn { seiithesis }
            { no-location-specified }
            {
              You~ need~ to~ specify~ a~ location~ for~ the~ authorship~
              declaration.~ Either~ via~ the~ location~ macro~ or~ via~ the~
              optional~ argument~ of~ the~ authorshipDeclaration~ macro.
            }
          \msg_warning:nn { seiithesis } { no-location-specified }
        }

      \scr@ifundefinedorrelax{chapter}{
        \Iftocfeature{toc}{leveldown}
          {\subsection*}
          {\section*}
      }{
        \Iftocfeature{toc}{leveldown}
          {\section*}
          {\chapter*}
      } { Eigenständigkeitserklärung }

      Hiermit~ versichere~ ich,~ \l_@@_signature_tl,
      \begin{enumerate}
        \item dass~ ich~ die~ vorliegende~ Arbeit~ selbstständig~ und~ ohne~
          unzulässige~ Hilfe~ verfasst~ und~ kein~ anderen~ als~ die~
          angegebenen~ Quellen~ und~ Hilfsmittel~ benutzt,~ sowie~ die~
          wörtlich~ und~ sinngemäß~ übernommenen~ Passagen~ aus~ anderen~
          Werken~ kenntlich~ gemacht~ habe.
        \item Außerdem~ erkläre~ ich,~ dass~ ich~ der~ Universität~ ein~
          Nutzungsrecht~ zum~ Zwecke~ der~ Überprüfung~ mittels~ einer~
          Plagiatssoftware~ in~ anonymisierter~ Form~ einräume.
      \end{enumerate}\par
      \bigskip
      \noindent \l_@@_location_tl,~ \@date\hfill
      \signatureBox{\l_@@_signature_tl}
    \group_end:
    \\\strut\cleardoublepage
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\signatureBox}
%   Provide a box for the signature.
%    \begin{macrocode}
\newcommand*{\signatureBox}[2][5cm]{
  \parbox[t]{#1}{
    \centering
    \rule{\linewidth}{.3pt}\\\makebox[0pt][c]{#2}
  }
}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Research questions and summary boxes}
%
% We utilise the \pkg{ntheorem} package for defining new theorem environments
% that are used for defining research questions and hypotheses.
% Therefore, start with loading this package.
% \pkg{ntheorem}.
%    \begin{macrocode}
\slcd_package_if_loaded:nT { amsmath }
  {
    \PassOptionsToPackage{amsmath}{ntheorem}
  }
\RequirePackage{ntheorem}
\theoremseparator{:}
%    \end{macrocode}
%
% \begin{environment}{resq, hyp}
%    We can then define the \env{resq} and \env{hyp} environments using the
%    \cmd{\newtheorem} macro from \pkg{ntheorem}.
%    \begin{macrocode}
\newtheorem{resq}{Research Question}
\newtheorem{hyp}{Hypothesis}
%    \end{macrocode}
% \end{environment}
%
% For the summary boxes, we utilise the \pkg{tcolorbox} package.
% We start with loading this package.
%    \begin{macrocode}
\RequirePackage{tcolorbox}
%    \end{macrocode}
%
% \begin{environment}{summary}
%   The \env{summary} environment expects a label and has the summary text in
%   its content.
%    \begin{macrocode}
\NewDocumentEnvironment { summary } { m }
  { \begin{tcolorbox}[title={Summary~ (#1)}] }
  { \end{tcolorbox} }
%    \end{macrocode}
% \end{environment}
%
%
%
%
%
%
%
%
%
%    \begin{macrocode}
%</class>
%    \end{macrocode}
%
% \section{Translations for \cls{se2thesis}}\label{sec:impl-translations}
%
%    \begin{macrocode}
%<*translations>
%    \end{macrocode}
%
% \subsection{English Translations}\label{sec:impl-translations-english}
%
%    \begin{macrocode}
%<*english>
%    \end{macrocode}
%
% We provide the following English translations.
%
%    \begin{macrocode}
\ProvideDictionaryFor{English}{se2translations}[2022/11/08]
\ProvideDictTranslation{abstract}{abstract}
\ProvideDictTranslation{Abstract}{Abstract}
\ProvideDictTranslation{acknowledgement}{acknowledgement}
\ProvideDictTranslation{Acknowledgement}{Acknowledgement}
\ProvideDictTranslation{acknowledgements}{acknowledgements}
\ProvideDictTranslation{Acknowledgements}{Acknowledgements}
\ProvideDictTranslation{advisor}{advisor}
\ProvideDictTranslation{Advisor}{Advisor}
\ProvideDictTranslation{advisors}{advisors}
\ProvideDictTranslation{Advisors}{Advisors}
\ProvideDictTranslation{co-advisor}{co-advisor}
\ProvideDictTranslation{Co-advisor}{Co-advisor}
\ProvideDictTranslation{co-advisors}{co-advisors}
\ProvideDictTranslation{Co-advisors}{Co-advisors}
\ProvideDictTranslation{matrnumber}{matriculation number}
\ProvideDictTranslation{Matrnumber}{Matriculation number}
\ProvideDictTranslation{supervisor}{supervisor}
\ProvideDictTranslation{Supervisor}{Supervisor}
\ProvideDictTranslation{co-supervisor}{co-supervisor}
\ProvideDictTranslation{Co-supervisor}{Co-supervisor}
\ProvideDictTranslation{external}{external examiner}
\ProvideDictTranslation{External}{External Examiner}
\ProvideDictTranslation{degreeprogramme}{programme}
\ProvideDictTranslation{Degreeprogramme}{Programme}
\ProvideDictTranslation{Bachelor-thesis}{Bachelor Thesis}
\ProvideDictTranslation{Bachelor-thesis-proposal}{Bachelor Thesis Proposal}
\ProvideDictTranslation{Master-thesis}{Master Thesis}
\ProvideDictTranslation{Master-thesis-proposal}{Master Thesis Proposal}
\ProvideDictTranslation{PhD-thesis}{PhD Thesis}
\ProvideDictTranslation{PhD-thesis-proposal}{PhD Thesis Proposal}
\ProvideDictTranslation{date}{date}
\ProvideDictTranslation{Date}{Date}
\ProvideDictTranslation{university-of-passau}{University of Passau}
\ProvideDictTranslation{up}{University of Passau}
\ProvideDictTranslation{fim}{Faculty of Computer Science and Mathematics}
%    \end{macrocode}
%
%    \begin{macrocode}
%</english>
%    \end{macrocode}
%
% \subsection{German Translations}\label{sec:impl-translations-german}
%
%    \begin{macrocode}
%<*german>
%    \end{macrocode}
%
% We provide the following German translations.
%
%    \begin{macrocode}
\ProvideDictionaryFor{German}{se2translations}[2022/11/08]
\ProvideDictTranslation{abstract}{Zusammenfassung}
\ProvideDictTranslation{Abstract}{Zusammenfassung}
\ProvideDictTranslation{acknowledgement}{Danksagung}
\ProvideDictTranslation{Acknowledgement}{Danksagung}
\ProvideDictTranslation{acknowledgements}{Danksagungen}
\ProvideDictTranslation{Acknowledgements}{Danksagungen}
\ProvideDictTranslation{advisor}{Betreuer}
\ProvideDictTranslation{Advisor}{Betreuer}
\ProvideDictTranslation{advisors}{Betreuer}
\ProvideDictTranslation{Advisors}{Betreuer}
\ProvideDictTranslation{co-advisor}{Mitbetreuer}
\ProvideDictTranslation{Co-advisor}{Mitbetreuer}
\ProvideDictTranslation{co-advisors}{Mitbetreuer}
\ProvideDictTranslation{Co-advisors}{Mitbetreuer}
\ProvideDictTranslation{matrnumber}{Matrikelnummer}
\ProvideDictTranslation{Matrnumber}{Matrikelnummer}
\ProvideDictTranslation{supervisor}{Prüfer}
\ProvideDictTranslation{Supervisor}{Prüfer}
\ProvideDictTranslation{co-supervisor}{Zweitprüfer}
\ProvideDictTranslation{Co-supervisor}{Zweitprüfer}
\ProvideDictTranslation{external}{Externer Gutachter}
\ProvideDictTranslation{External}{Externer Gutachter}
\ProvideDictTranslation{degreeprogramme}{Studiengang}
\ProvideDictTranslation{Degreeprogramme}{Studiengang}
\ProvideDictTranslation{Bachelor-thesis}{Bachelorarbeit}
\ProvideDictTranslation{Bachelor-thesis-proposal}{Bachelorarbeitsproposal}
\ProvideDictTranslation{Master-thesis}{Masterarbeit}
\ProvideDictTranslation{Master-thesis-proposal}{Masterarbeitsproposal}
\ProvideDictTranslation{PhD-thesis}{Dissertation}
\ProvideDictTranslation{PhD-thesis-proposal}{Dissertationsproposal}
\ProvideDictTranslation{date}{Datum}
\ProvideDictTranslation{Date}{Datum}
\ProvideDictTranslation{university-of-passau}{Universität Passau}
\ProvideDictTranslation{up}{Universität Passau}
\ProvideDictTranslation{fim}{Fakultät für Informatik und Mathematik}
%    \end{macrocode}
%
%    \begin{macrocode}
%</german>
%    \end{macrocode}
%
%    \begin{macrocode}
%</translations>
%    \end{macrocode}
%
% \section{The \pkg{se2colors} implementation}\label{sec:impl-se2colors}
%
% Start the \pkg{DocStrip} guards.
%    \begin{macrocode}
%<*colors>
%    \end{macrocode}
%
% Identify the internal prefix (\LaTeX3 \pkg{DocStrip} convention): only
% internal material in this \emph{submodule} should be used directly.
%    \begin{macrocode}
%<@@=slcd_colors>
%    \end{macrocode}
%
% Identify the package and give the overall version information.
%    \begin{macrocode}
\ProvidesExplPackage {se2colors} {2022-11-08} {1.3.0}
  {A colour support package for the se2thesis bundle}
%    \end{macrocode}
%
%
% \subsection{Load-time options}
%
% \begin{variable}{\l_@@_colormode_tl}
%   Holds the colour mode selected by the user as a package load-time option.
%    \begin{macrocode}
\keys_define:nn { seiicolors }
  {
    cmode .choice:,
    cmode / 4C .code:n = {
      \PassOptionsToPackage{cmyk}{xcolor}
      \tl_gset:Nn \l_@@_colormode_tl {4C}
    },
    cmode / RGB .code:n = {
      \PassOptionsToPackage{rgb}{xcolor}
      \tl_gset:Nn \l_@@_colormode_tl {RGB}
    },
    cmode / BW .code:n = {
      \PassOptionsToPackage{gray}{xcolor}
      \tl_gset:Nn \l_@@_colormode_tl {BW}
    },
    cmode / CMYK .meta:n = {cmode=4C},
    cmode / cmyk .meta:n = {cmode=4C},
    cmode / rgb .meta:n = {cmode=RGB},
    cmode / gray .meta:n = {cmode=BW},
    RGB .meta:n = {cmode=RGB},
    rgb .meta:n = {cmode=rgb},
    CMYK .meta:n = {cmode=4C},
    cmyk .meta:n = {cmode=4C},
    gray .meta:n = {cmode=BW},
  }
\keys_set:nn { seiicolors } { cmode = 4C }
%    \end{macrocode}
% \end{variable}
%
% \subsection{Option handling}
%
%    \begin{macrocode}
\IfFormatAtLeastTF { 2022-06-01 }
  { \ProcessKeyOptions [ seiicolors ] }
  {
    \RequirePackage { l3keys2e }
    \ProcessKeysOptions { seiicolors }
  }
%    \end{macrocode}
%
% \subsection{Colour definitions}
%
% Load the \pkg{xcolor} package for colour definitions.
%    \begin{macrocode}
\RequirePackage{xcolor}
%    \end{macrocode}
%
% Define the primary colours gray and orange as given by the University of
% Passau's style guides.
%    \begin{macrocode}
\definecolorset[named]{RGB/cmyk}{UPSE2-}{}{%
  Orange,242,148,0/0.00,0.44,0.95,0.01;%
  Gray,153,159,158/0.40,0.28,0.28,0.00;%
  JUR,229,49,56/0.01,0.90,0.81,0.01;%
  WIWI,0,96,57/0.87,0.20,0.87,0.36;%
  PHIL,188,42,51/0.06,0.93,0.81,0.11;%
  FIM,0,90,161/0.93,0.63,0.01,0.02;%
  DarkGray,77,77,77/0.74,0.67,0.62,0.18;%
  White,255,255,255/0.00,0.00,0.00,0.00;%
  MediumGray,127,127,127/0.52,0.43,0.40,0.02;%
  LightGray,229,229,229/0.08,0.06,0.04,0.00;%
  LightRed,229,49,56/0.01,0.90,0.81,0.01;%
  DarkRed,188,42,51/0.06,0.93,0.80,0.11;%
  Green,0,96,57/0.87,0.20,0.86,0.35;%
  Blue,0,90,161/0.93,0.63,0.01,0.02;%
  AccentGray,153,159,158/0.40,0.28,0.28,0.00%
}
%    \end{macrocode}
%
% Define the derived colours.
%    \begin{macrocode}
\colorlet{UPSE2-DarkGray1}{UPSE2-DarkGray!20!white}
\colorlet{UPSE2-DarkGray2}{UPSE2-DarkGray!40!white}
\colorlet{UPSE2-DarkGray3}{UPSE2-DarkGray!60!white}
\colorlet{UPSE2-DarkGray4}{UPSE2-DarkGray!75!black}
\colorlet{UPSE2-DarkGray5}{UPSE2-DarkGray!50!black}
\colorlet{UPSE2-White1}{UPSE2-White!95!black}
\colorlet{UPSE2-White2}{UPSE2-White!85!black}
\colorlet{UPSE2-White3}{UPSE2-White!75!black}
\colorlet{UPSE2-White4}{UPSE2-White!65!black}
\colorlet{UPSE2-White5}{UPSE2-White!50!black}
\colorlet{UPSE2-MediumGray1}{UPSE2-MediumGray!20!white}
\colorlet{UPSE2-MediumGray2}{UPSE2-MediumGray!40!white}
\colorlet{UPSE2-MediumGray3}{UPSE2-MediumGray!60!white}
\colorlet{UPSE2-MediumGray4}{UPSE2-MediumGray!75!black}
\colorlet{UPSE2-MediumGray5}{UPSE2-MediumGray!50!black}
\colorlet{UPSE2-LightGray1}{UPSE2-LightGray!90!black}
\colorlet{UPSE2-LightGray2}{UPSE2-LightGray!75!black}
\colorlet{UPSE2-LightGray3}{UPSE2-LightGray!55!black}
\colorlet{UPSE2-LightGray4}{UPSE2-LightGray!25!black}
\colorlet{UPSE2-LightGray5}{UPSE2-LightGray!10!black}
\colorlet{UPSE2-Orange1}{UPSE2-Orange!20!white}
\colorlet{UPSE2-Orange2}{UPSE2-Orange!40!white}
\colorlet{UPSE2-Orange3}{UPSE2-Orange!60!white}
\colorlet{UPSE2-Orange4}{UPSE2-Orange!75!black}
\colorlet{UPSE2-Orange5}{UPSE2-Orange!50!black}
\colorlet{UPSE2-LightRed1}{UPSE2-LightRed!20!white}
\colorlet{UPSE2-LightRed2}{UPSE2-LightRed!40!white}
\colorlet{UPSE2-LightRed3}{UPSE2-LightRed!60!white}
\colorlet{UPSE2-LightRed4}{UPSE2-LightRed!75!black}
\colorlet{UPSE2-LightRed5}{UPSE2-LightRed!50!black}
\colorlet{UPSE2-DarkRed1}{UPSE2-DarkRed!20!white}
\colorlet{UPSE2-DarkRed2}{UPSE2-DarkRed!40!white}
\colorlet{UPSE2-DarkRed3}{UPSE2-DarkRed!60!white}
\colorlet{UPSE2-DarkRed4}{UPSE2-DarkRed!75!black}
\colorlet{UPSE2-DarkRed5}{UPSE2-DarkRed!50!black}
\colorlet{UPSE2-Green1}{UPSE2-Green!10!white}
\colorlet{UPSE2-Green2}{UPSE2-Green!25!white}
\colorlet{UPSE2-Green3}{UPSE2-Green!50!white}
\colorlet{UPSE2-Green4}{UPSE2-Green!75!white}
\colorlet{UPSE2-Green5}{UPSE2-Green!90!white}
\colorlet{UPSE2-Blue1}{UPSE2-Blue!20!white}
\colorlet{UPSE2-Blue2}{UPSE2-Blue!40!white}
\colorlet{UPSE2-Blue3}{UPSE2-Blue!60!white}
\colorlet{UPSE2-Blue4}{UPSE2-Blue!75!black}
\colorlet{UPSE2-Blue5}{UPSE2-Blue!50!black}
\colorlet{UPSE2-AccentGray1}{UPSE2-AccentGray!20!white}
\colorlet{UPSE2-AccentGray2}{UPSE2-AccentGray!40!white}
\colorlet{UPSE2-AccentGray3}{UPSE2-AccentGray!60!white}
\colorlet{UPSE2-AccentGray4}{UPSE2-AccentGray!75!black}
\colorlet{UPSE2-AccentGray5}{UPSE2-AccentGray!50!black}
%    \end{macrocode}
%
%    \begin{macrocode}
%</colors>
%    \end{macrocode}
%
% \section{The \pkg{se2fonts} implementation}\label{sec:impl-se2fonts}
%
% Start the \pkg{DocStrip} guards.
%    \begin{macrocode}
%<*fonts>
%    \end{macrocode}
%
% Identify the internal prefix (\LaTeX3 \pkg{DocStrip} convention): only
% internal material in this \emph{submodule} should be used directly.
%    \begin{macrocode}
%<@@=slcd_fonts>
%    \end{macrocode}
%
% Identify the package and give the overall version information.
%    \begin{macrocode}
\ProvidesExplPackage {se2fonts} {2022-11-08} {1.3.0}
  {A font-selection support package for the se2thesis bundle}
%    \end{macrocode}
%
% \subsection{Load-time options}
%
% \begin{variable}{\l_@@_fontmode_tl}
%   Holds the font-selection mode specified by the user as a package
%   load-time option.
%    \begin{macrocode}
\keys_define:nn { seiifonts }
  {
    fmode .choice:,
    fmode / original .code:n = {
      \tl_gset:Nn \l_@@_fontmode_tl {original}
    },
    fmode / replacement .code:n = {
      \tl_gset:Nn \l_@@_fontmode_tl {replacement}
    },
    fmode / auto .code:n = {
      \tl_gset:Nn \l_@@_fontmode_tl {auto}
    },
    original .meta:n = {fmode=original},
    replacement .meta:n = {fmode=replacement},
    auto .meta:n = {fmode=auto},
  }
\keys_set:nn { seiifonts } { fmode = auto }
%    \end{macrocode}
% \end{variable}
%
% \subsection{Option handling}
%
%    \begin{macrocode}
\IfFormatAtLeastTF { 2022-06-01 }
  { \ProcessKeyOptions [ seiifonts ] }
  {
    \RequirePackage{ l3keys2e }
    \ProcessKeysOptions { seiifonts }
  }
%    \end{macrocode}
%
% \subsection{Helper macros}
%
% \begin{macro}{\pdftexengine, \xetexengine, \luatexengine}
%   We define several alias macros to identify which engine the user is
%   running.
%    \begin{macrocode}
\cs_new_eq:NN \pdftexengine \sys_if_engine_pdftex_p:
\cs_new_eq:NN \xetexengine \sys_if_engine_xetex_p:
\cs_new_eq:NN \luatexengine \sys_if_engine_luatex_p:
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ifengineTF, \ifengineT, \ifengineF}
%   True, if the engine used matches the given first argument.
%    \begin{macrocode}
\NewExpandableDocumentCommand \ifengineTF { mmm }
  {
    \bool_if:nTF { #1 } { #2 } { #3 }
  }
\NewExpandableDocumentCommand \ifengineT { mm }
  {
    \bool_if:nT { #1 } { #2 }
  }
\NewExpandableDocumentCommand \ifengineF { mm }
  {
    \bool_if:nF { #1 } { #2 }
  }
%    \end{macrocode}
% \end{macro}
%
% The package is not tested with \XeTeX{}, thus we provide an error to the
% user and stop the execution, when they want to use the package with
% \XeTeX{}.
%    \begin{macrocode}
\ifengineT { \xetexengine }
  {
    \msg_set:nnnn { seiifonts } { xetex-not-supported }
      { XeTeX~ is~ not~ supported~ by~ the~ se2fonts~ package. }
      { Switch~ to~ pdfTeX~ or~ (preferably)~ LuaTeX. }
    \msg_error:nn { seiifonts } { xetex-not-supported }
  }
%    \end{macrocode}
%
% \subsection{Font loading}
%
% Depending on the engine used by the user,
% we can use \pkg{fontspec} for loading fonts.
%    \begin{macrocode}
\ifengineTF { \luatexengine }
  {
%    \end{macrocode}
%
% If the user uses \LuaTeX{}, load \pkg{fontspec} and
% \pkg{unicode-math}.
%    \begin{macrocode}
    \RequirePackage{fontspec}
    \RequirePackage{unicode-math}
%    \end{macrocode}
% To make sure the scaling of the fonts matches, we let \pkg{fontspec} do this
% matching based on the lower-case characters.
%    \begin{macrocode}
    \defaultfontfeatures{ Scale = MatchLowercase }
    \defaultfontfeatures[\rmfamily]{ Scale = 1 }
%    \end{macrocode}
%
% The user wants to have the |original| fonts,
% which are Palatino, Helvetica, MesloLGS Nerd Font Mono, and Neo Euler.
%    \begin{macrocode}
    \tl_if_eq:NnT \l_@@_fontmode_tl {original}
      {
        \setmainfont{Palatino}
        \setsansfont{Helvetica}
        \setmonofont{MesloLGS Nerd Font Mono}
        \setmathfont{Neo Euler}[math-style=upright]
      }
%    \end{macrocode}
%
% The user wants to have the |replacement| fonts,
% which are \TeX{} Gyre Pagella, \TeX{} Gyre Heros, Fira Code, and \TeX{}
% Gyre Pagella Math.
%    \begin{macrocode}
    \tl_if_eq:NnT \l_@@_fontmode_tl {replacement}
      {
        \setmainfont{TeX Gyre Pagella}
        \setsansfont{TeX Gyre Heros}
        \setmonofont{Fira Code}
        \setmathfont{TeX Gyre Pagella Math}
        \setmathfont{Latin Modern Math}[range={\mathcal,\mathbb}]
      }
%    \end{macrocode}
%
% The user set the |auto| mode,
% which causes the package to check whether a font from the |original| fonts
% exists on the system.
% If such a font exists,
% it will be used;
% otherwise, a |replacement| font will be used.
%    \begin{macrocode}
    \tl_if_eq:NnT \l_@@_fontmode_tl {auto}
      {
        \IfFontExistsTF { Palatino }
          { \setmainfont{Palatino} }
          { \setmainfont{TeX Gyre Pagella} }
        \IfFontExistsTF { Helvetica }
          { \setsansfont{Helvetica} }
          { \setsansfont{TeXGyre Heros} }
        \IfFontExistsTF{ MesloLGS Nerd Font Mono }
          { \setmonofont{MesloLGS Nerd Font Mono} }
          { \setmonofont{Fira Code} }
        \IfFontExistsTF { Neo Euler }
          { \setmathfont{Neo Euler}[math-style=upright] }
          {
            \setmathfont{TeX Gyre Pagella Math}
            \setmathfont{Latin Modern Math}[range={\mathcal,\mathbb}]
          }
      }
%    \end{macrocode}
%
%    \begin{macrocode}
  } {
%    \end{macrocode}
%
% The user does neither use \LuaTeX{}, fall back
%    \begin{macrocode}
    \PassOptionsToPackage{T1}{fontenc}
    \RequirePackage{fontenc}
    \RequirePackage{FiraMono}
    \RequirePackage{tgheros}
    \RequirePackage{tgpagella}
  }
%    \end{macrocode}
%
%    \begin{macrocode}
%</fonts>
%    \end{macrocode}
%
% \end{implementation}
%
% \clearpage
%
% \begin{thebibliography}{9}
%   \bibitem{DBLP:journals/sttt/BeyerLW19} Dirk Beyer, Stefan Löwe, and Philipp
%   Wendler: \emph{Reliable benchmarking: requirements and solutions}. STTT
%   21(1): 1--29 (2019)
% \end{thebibliography}
%
% \PrintIndex
