summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-09-10 03:01:32 +0000
committerNorbert Preining <norbert@preining.info>2022-09-10 03:01:32 +0000
commit0948049e9079ec6f512bf68a247495f36237d06e (patch)
tree5334af0f132d745ebbe3ea8c1290a6bf3a85cfcb /macros/latex
parent60dc98f36eb75d91271141a996398f9107b95587 (diff)
CTAN sync 202209100301
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/csquotes/README.md2
-rw-r--r--macros/latex/contrib/csquotes/csq-compat.def2
-rw-r--r--macros/latex/contrib/csquotes/csquotes.def46
-rw-r--r--macros/latex/contrib/csquotes/csquotes.pdfbin294724 -> 304739 bytes
-rw-r--r--macros/latex/contrib/csquotes/csquotes.sty8
-rw-r--r--macros/latex/contrib/csquotes/csquotes.tex13
-rw-r--r--macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdfbin8832018 -> 8867402 bytes
-rw-r--r--macros/latex/contrib/profcollege/latex/ProfCollege.sty481
-rw-r--r--macros/latex/contrib/se2thesis/README.md14
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdfbin0 -> 1122537 bytes
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex95
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.dtx2451
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.ins100
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.pdfbin0 -> 352914 bytes
14 files changed, 3081 insertions, 131 deletions
diff --git a/macros/latex/contrib/csquotes/README.md b/macros/latex/contrib/csquotes/README.md
index 5534ce2eb1..b1d77bc647 100644
--- a/macros/latex/contrib/csquotes/README.md
+++ b/macros/latex/contrib/csquotes/README.md
@@ -16,7 +16,7 @@ quotes are freely configurable.
## License
-Copyright (c) 2003-2011 Philipp Lehman, 2015-2019,2021 Joseph Wright.
+Copyright (c) 2003-2011 Philipp Lehman, 2015-2019,2021,2022 Joseph Wright.
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 any later version.
diff --git a/macros/latex/contrib/csquotes/csq-compat.def b/macros/latex/contrib/csquotes/csq-compat.def
index aafc40fdd4..3e7a6ead61 100644
--- a/macros/latex/contrib/csquotes/csq-compat.def
+++ b/macros/latex/contrib/csquotes/csq-compat.def
@@ -1,5 +1,5 @@
\ProvidesFile{csq-compat.def}
- [2021-02-22 v5.2l csquotes backwards compatibility (JAW)]
+ [2022-09-09 v5.2m csquotes backwards compatibility (JAW)]
\def\csq@getversion#1{%
\expandafter\csq@getversion@i
diff --git a/macros/latex/contrib/csquotes/csquotes.def b/macros/latex/contrib/csquotes/csquotes.def
index 0b7104a2b7..a310943d57 100644
--- a/macros/latex/contrib/csquotes/csquotes.def
+++ b/macros/latex/contrib/csquotes/csquotes.def
@@ -1,5 +1,5 @@
\ProvidesFile{csquotes.def}
- [2021-02-22 v5.2l csquotes generic definitions (JAW)]
+ [2022-09-09 v5.2m csquotes generic definitions (JAW)]
% Set defaults
@@ -176,6 +176,12 @@
[0.025em]
{\textquotedblleft}
{\textquotedblright}
+\DeclareQuoteStyle{japanese}
+ {「}
+ {」}
+ [0pt]
+ {『}
+ {』}
\DeclareQuoteStyle{latvian}
{\quotedblbase}
{\textquotedblright}
@@ -249,6 +255,18 @@
[0.05em]
{\textquoteright}
{\textquoteright}
+\DeclareQuoteStyle[guillemets]{slovenian}%
+ {\guillemotright}
+ {\guillemotleft}
+ [0.025em]
+ {\guilsinglright}
+ {\guilsinglleft}
+\DeclareQuoteStyle[quotes]{slovenian}%
+ {\quotedblbase}
+ {\textquotedblleft}
+ [0.05em]
+ {\quotesinglbase}
+ {\fixligatures\textquoteleft}
\DeclareQuoteStyle[mexican]{spanish}
{\textquotedblleft}
{\textquotedblright}
@@ -287,6 +305,23 @@
[0.025em]
{\guilsinglright}
{\guilsinglleft}
+\DeclareQuoteStyle[quotes]{turkish}
+ {\textquotedblleft}
+ {\textquotedblright}
+ [0.05em]
+ {\textquoteleft}
+ {\textquoteright}
+\DeclareQuoteStyle[guillemets]{turkish}
+ {\guillemotleft}
+ {\guillemotright}
+ [0.025em]
+ {\guilsinglleft}
+ {\guilsinglright}
+\DeclareQuoteStyle{ukrainian}
+ {\guillemotleft}
+ {\guillemotright}
+ {\quotedblbase}
+ {\textquotedblleft}
% Plain style for PDF strings
@@ -319,6 +354,7 @@
\DeclareQuoteAlias[brazilian]{portuguese}{brazilian}
\DeclareQuoteAlias[portuguese]{portuguese}{portuguese}
\DeclareQuoteAlias[quotes]{serbian}{serbian}
+\DeclareQuoteAlias[guillemets]{slovenian}{slovenian}
\DeclareQuoteAlias[mexican]{spanish}{mexican}
\DeclareQuoteAlias[spanish]{spanish}{spanish}
\DeclareQuoteAlias[quotes]{swedish}{swedish}
@@ -344,10 +380,12 @@
\DeclareQuoteAlias{norwegian}{nynorsk}
\DeclareQuoteAlias{portuguese}{portuges}
\DeclareQuoteAlias{serbian}{serbianc}
+\DeclareQuoteAlias{slovenian}{slovene}
% Language options
\DeclareQuoteOption{austrian}
+\DeclareQuoteOption{croatian}
\DeclareQuoteOption{czech}
\DeclareQuoteOption{danish}
\DeclareQuoteOption{english}
@@ -356,11 +394,13 @@
\DeclareQuoteOption{german}
\DeclareQuoteOption{icelandic}
\DeclareQuoteOption{italian}
+\DeclareQuoteOption{japanese}
\DeclareQuoteOption{latin}
\DeclareQuoteOption{latvian}
\DeclareQuoteOption{norwegian}
\DeclareQuoteOption{polish}
\DeclareQuoteOption{portuguese}
+\DeclareQuoteOption{slovenian}
\DeclareQuoteOption{spanish}
\DeclareQuoteOption{swedish}
@@ -520,6 +560,10 @@
\DeclareQuoteGlyph{TU}{"201F}% = comma quot. mark, double reversed = n/a
\DeclareQuoteGlyph{TU}{"2039}% = angle quot. mark, left-pointing single = \guilsinglleft
\DeclareQuoteGlyph{TU}{"203A}% = angle quot. mark, right-pointing single = \guilsinglright
+\DeclareQuoteGlyph{TU}{"300C}% = LEFT CORNER BRACKET = n/a
+\DeclareQuoteGlyph{TU}{"300D}% = RIGHT CORNER BRACKET = n/a
+\DeclareQuoteGlyph{TU}{"300E}% = LEFT WHITE CORNER BRACKET = n/a
+\DeclareQuoteGlyph{TU}{"300F}% = RIGHT WHITE CORNER BRACKET = n/a
\endinput
diff --git a/macros/latex/contrib/csquotes/csquotes.pdf b/macros/latex/contrib/csquotes/csquotes.pdf
index d58bed53f6..c1b26aaf79 100644
--- a/macros/latex/contrib/csquotes/csquotes.pdf
+++ b/macros/latex/contrib/csquotes/csquotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/csquotes/csquotes.sty b/macros/latex/contrib/csquotes/csquotes.sty
index fbd4a2dda5..4973fbbbe4 100644
--- a/macros/latex/contrib/csquotes/csquotes.sty
+++ b/macros/latex/contrib/csquotes/csquotes.sty
@@ -1,5 +1,5 @@
% Copyright (c) 2003-2011 Philipp Lehman.
-% (c) 2015-2019,2021 Joseph Wright.
+% (c) 2015-2019,2021,2022 Joseph Wright.
%
% Permission is granted to copy, distribute and/or modify this
% software under the terms of the LaTeX Project Public License
@@ -12,7 +12,7 @@
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{csquotes}
- [2021-02-22 v5.2l context-sensitive quotations (JAW)]
+ [2022-09-09 v5.2m context-sensitive quotations (JAW)]
%% Compatibility and requirements
@@ -1008,9 +1008,9 @@
% {<init>}{<endinit>}{<text>}
\long\def\csq@quote@i#1#2#3{%
- \csq@bqgroup#1\csq@oqopen@i#3\csq@qclose@i{#2}}
+ \csq@bqgroup#1\csq@oqopen@i{#3}\csq@qclose@i{#2}}
\long\def\csq@quote@ii#1#2#3{%
- \csq@bqgroup#1\csq@iqopen@i#3\csq@qclose@i{#2}}
+ \csq@bqgroup#1\csq@iqopen@i{#3}\csq@qclose@i{#2}}
% Plain quotes + language switching
diff --git a/macros/latex/contrib/csquotes/csquotes.tex b/macros/latex/contrib/csquotes/csquotes.tex
index 31434cf342..1b3ae93492 100644
--- a/macros/latex/contrib/csquotes/csquotes.tex
+++ b/macros/latex/contrib/csquotes/csquotes.tex
@@ -18,8 +18,8 @@
url={http://www.ctan.org/pkg/csquotes/},
author={Philipp Lehman, Joseph Wright},
email={joseph.wright@morningstar2.co.uk},
- revision={v5.2l},
- date={2021-02-22}}
+ revision={v5.2m},
+ date={2022-09-09}}
\hypersetup{%
pdftitle={The csquotes Package},
@@ -163,6 +163,7 @@ This option controls multilingual support. It requires either the \sty{babel} pa
portuguese & portuguese, brazilian \\
romanian & \\
serbian & quotes, guillemets, german \\
+ slovenian & guillemets, quotes \\
spanish & spanish, mexican \\
swedish & quotes, guillemets, guillemets\* \\
\bottomrule
@@ -1553,7 +1554,13 @@ This revision history is a list of changes relevant to users of this package. Ch
\begin{changelog}
-\begin{release}{5.2j}{2021-02-13}
+\begin{release}{5.2m}{2022-09-09}
+\item Localise font changes inside quotes
+\item Added Turkish and Slovenian styles
+\end{release}
+
+
+\begin{release}{5.2l}{2021-02-13}
\item Fix spacing with \cmd{mktextelp}
\end{release}
diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
index 51a9574018..c617f4e66e 100644
--- a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
+++ b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
index 9636b935d4..8f8525a804 100644
--- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty
+++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
@@ -2,9 +2,9 @@
% licence : Released under the LaTeX Project Public License v1.3c
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}%
-\def\filedate{2022/08/30}%
+\def\filedate{2022/09/10}%
\let\PfCfiledate\filedate%
-\def\fileversion{0.99-y}%
+\def\fileversion{0.99-z}%
\let\PfCfileversion\fileversion%
\ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]
@@ -347,6 +347,89 @@
}
%%%
+% Calculs Croises
+%%%
+\setKVdefault[CalculsCroises]{Largeur=20pt,Solution=false,Inverse=false,Creation=false,Graines=false,Vide=false,Couleur=LightGray,Negatifs=false}
+\defKV[CalculsCroises]{Graine=\setKV[CalculsCroises]{Graines}}%
+
+\newlength\PfCCalculsCroises%
+\NewDocumentCommand\CalculsCroises{o m}{%
+ \useKVdefault[CalculsCroises]%
+ \savecomparemode%
+ \comparestrict%
+ \setKV[CalculsCroises]{#1}%
+ \colorlet{PfCCouleurCC}{\useKV[CalculsCroises]{Couleur}}%
+ \setlength{\PfCCalculsCroises}{\useKV[CalculsCroises]{Largeur}+\tabcolsep}%
+ \ifboolKV[CalculsCroises]{Inverse}{\setKV[CalculsCroises]{Solution}}{}%
+ \ifboolKV[CalculsCroises]{Creation}{%
+ \ifboolKV[CalculsCroises]{Graines}{\PfCGraineAlea{\useKV[CalculsCroises]{Graine}}}{}%
+ \ifboolKV[CalculsCroises]{Negatifs}{%
+ \xdef\PfCCCFoo{-1,-2,-3,-4,-5,-6,-7,-8,-9}%
+ }{%
+ \xdef\PfCCCFoo{1,2,3,4,5,6,7,8,9}%
+ }%
+ \MelangeListe{\PfCCCFoo}{9}%
+ \setsepchar{,}%
+ \readlist*\PfCListeCCNb{\faa}%
+ \readlist*\PfCListeCCOp{#2}%
+ \begin{NiceTabular}{*{6}{m{\useKV[CalculsCroises]{Largeur}}}}
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[1]}}{~}}&\StrCompare{\PfCListeCCOp[1]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[1]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[2]}}{~}}&\StrCompare{\PfCListeCCOp[2]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[2]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[3]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[1]\PfCListeCCOp[1]\PfCListeCCNb[2]\PfCListeCCOp[2]\PfCListeCCNb[3]}}}}\\
+ \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[3]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[3]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[4]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[4]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[5]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[5]$}}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[4]}}{~}}&\StrCompare{\PfCListeCCOp[6]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[6]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[5]}}{~}}&\StrCompare{\PfCListeCCOp[7]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[7]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[6]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[4]\PfCListeCCOp[6]\PfCListeCCNb[5]\PfCListeCCOp[7]\PfCListeCCNb[6]}}}}\\
+ \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[8]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[8]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[9]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[9]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[10]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[10]$}}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[7]}}{~}}&\StrCompare{\PfCListeCCOp[11]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[11]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[8]}}{~}}&\StrCompare{\PfCListeCCOp[12]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[12]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCNb[9]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[7]\PfCListeCCOp[11]\PfCListeCCNb[8]\PfCListeCCOp[12]\PfCListeCCNb[9]}}}}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[1]\PfCListeCCOp[3]\PfCListeCCNb[4]\PfCListeCCOp[8]\PfCListeCCNb[7]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[2]\PfCListeCCOp[4]\PfCListeCCNb[5]\PfCListeCCOp[9]\PfCListeCCNb[8]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCNb[3]\PfCListeCCOp[5]\PfCListeCCNb[6]\PfCListeCCOp[10]\PfCListeCCNb[9]}}}}\\
+ \CodeAfter
+ \tikz\draw (1-|1) rectangle (6-|6);
+ \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+ \tikz\draw (1-|##1) -- (6-|##1);
+ }%
+ \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+ \tikz\draw (##1-|1) -- (##1-|6);
+ }%
+ \end{NiceTabular}
+ }{%
+ \ifboolKV[CalculsCroises]{Vide}{%
+ \begin{NiceTabular}{*{6}{m{\useKV[CalculsCroises]{Largeur}}}}
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{}&\Block[fill=black]{}{}&\Block{}{}&\Block[fill=black]{}{}&\Block{}{}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{}&\Block[fill=black]{}{}&\Block{}{}&\Block[fill=black]{}{}&\Block{}{}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block{}{}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{}\\
+ \CodeAfter
+ \tikz\draw (1-|1) rectangle (6-|6);
+ \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+ \tikz\draw (1-|##1) -- (6-|##1);
+ }%
+ \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+ \tikz\draw (##1-|1) -- (##1-|6);
+ }%
+ \end{NiceTabular}
+ }{%
+ \readlist*\PfCListeCCOp{#2}%
+ \begin{NiceTabular}{*{6}{m{\useKV[CalculsCroises]{Largeur}}}}
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[1]}}{~}}&\StrCompare{\PfCListeCCOp[2]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[2]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[3]}}{~}}&\StrCompare{\PfCListeCCOp[4]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[4]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[5]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[1]\PfCListeCCOp[2]\PfCListeCCOp[3]\PfCListeCCOp[4]\PfCListeCCOp[5]}}}}\\
+ \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[6]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[6]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[7]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[7]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[8]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[8]$}}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[9]}}{~}}&\StrCompare{\PfCListeCCOp[10]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[10]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[11]}}{~}}&\StrCompare{\PfCListeCCOp[12]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[12]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[13]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[9]\PfCListeCCOp[10]\PfCListeCCOp[11]\PfCListeCCOp[12]\PfCListeCCOp[13]}}}}\\
+ \rule{0pt}{\PfCCalculsCroises}\StrCompare{\PfCListeCCOp[14]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[14]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[15]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[15]$}}&\Block[fill=black]{}{~}&\StrCompare{\PfCListeCCOp[16]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[16]$}}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[17]}}{~}}&\StrCompare{\PfCListeCCOp[18]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[18]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[19]}}{~}}&\StrCompare{\PfCListeCCOp[20]}{*}[\PfCTestEtoile]\Block{}{\xintifboolexpr{\PfCTestEtoile==0}{$\times$}{$\PfCListeCCOp[20]$}}&\Block{}{\ifboolKV[CalculsCroises]{Solution}{\num{\PfCListeCCOp[21]}}{~}}&\Block[borders={bottom,right,top},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[17]\PfCListeCCOp[18]\PfCListeCCOp[19]\PfCListeCCOp[20]\PfCListeCCOp[21]}}}}\\
+ \rule{0pt}{\PfCCalculsCroises}\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[1]\PfCListeCCOp[6]\PfCListeCCOp[9]\PfCListeCCOp[14]\PfCListeCCOp[17]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[3]\PfCListeCCOp[7]\PfCListeCCOp[11]\PfCListeCCOp[15]\PfCListeCCOp[19]}}}}&&\Block[borders={left,bottom,right},fill=PfCCouleurCC]{}{\ifboolKV[CalculsCroises]{Inverse}{}{\num{\fpeval{\PfCListeCCOp[5]\PfCListeCCOp[8]\PfCListeCCOp[13]\PfCListeCCOp[16]\PfCListeCCOp[21]}}}}\\
+ \CodeAfter
+ \tikz\draw (1-|1) rectangle (6-|6);
+ \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+ \tikz\draw (1-|##1) -- (6-|##1);
+ }%
+ \xintFor* ##1 in{\xintSeq{2}{5}}\do{%
+ \tikz\draw (##1-|1) -- (##1-|6);
+ }%
+ \end{NiceTabular}
+ }%
+ }%
+ \restorecomparemode%
+}%
+
+%%%
% Shikaku
%%%
\newcounter{PfCShikakuNom}
@@ -795,6 +878,7 @@
\setKV[ClesPixelArt]{#1}%
\xdef\ListeAvantCouleurs{\useKV[ClesPixelArt]{ListeCouleurs}}%
\xdef\ListeAvantNombres{\useKV[ClesPixelArt]{ListeNombres}}%
+ \setsepchar{,}%
\readlist*\ListePANombre{\ListeAvantNombres}%
\foreachitem\compteur\in\ListePANombre{\expandafter\UpdatetoksPANombre\compteur\nil}%
\BuildPixelArt{#2}{\useKV[ClesPixelArt]{Lettres}}{\ListeAvantCouleurs}{\the\toklistePANombre}%
@@ -2104,6 +2188,7 @@
}%
\MelangeListe{\CANSGFoo}{#1}%
\readlist*\SommetsMelanges{\faa}%
+ \readlist*\PtAlea{\faa}%
}%
\newcommand\ExtraitFruit[1]{%
@@ -4361,26 +4446,26 @@ transform canvas={xshift=0em,yshift=0em}},rectangle,rounded corners,ultra thick,
\newcommand\TableMultiplicationCompleteColore{%
\xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}%
- \begin{tabular}{|>{\columncolor{gray!15}\centering\arraybackslash}p{1.5em}|*{\NbColTabMul}{>{\centering\arraybackslash}p{1.5em}|}}%
+ \begin{tabular}{|>{\columncolor{gray!15}\centering}p{15pt}|*{\NbColTabMul}{>{\centering\arraybackslash}p{15pt}|}}%
\hline
$\times$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
- &\cellcolor{gray!15}\fpeval{##1}
+ &\cellcolor{gray!15}\fpeval{##1}%
}
\\
\hline
\xintFor* ##1 in {\xintSeq {0}{10}}\do{%
##1\xintFor* ##2 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
- &\xintifboolexpr{##2<##1}{\cellcolor{\useKV[Tables]{Couleur}!\fpeval{##1*10}}}{\xintifboolexpr{##2>##1}{\cellcolor{\useKV[Tables]{Couleur}!\fpeval{##2*10}}}{}}\fpeval{##2*##1}
- }
+ &\xintifboolexpr{##2<##1}{\cellcolor{\useKV[Tables]{Couleur}!\fpeval{##1*10}}}{\xintifboolexpr{##2>##1}{\cellcolor{\useKV[Tables]{Couleur}!\fpeval{##2*10}}}{}}\fpeval{##2*##1}%
+ }%
\\
\hline
- }
+ }%
\end{tabular}%
-}
+}%
\newcommand\TableAdditionComplete{%
\xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}%
- \begin{tabular}{|>{\columncolor{gray!15}\centering\arraybackslash}p{1.5em}|*{\NbColTabMul}{>{\centering\arraybackslash}p{1.5em}|}}%
+ \begin{tabular}{|>{\columncolor{gray!15}\centering}p{15pt}|*{\NbColTabMul}{>{\centering\arraybackslash}p{15pt}|}}%
\hline
$+$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{%
&\cellcolor{gray!15}\fpeval{##1}
@@ -4437,13 +4522,130 @@ transform canvas={xshift=0em,yshift=0em}},rectangle,rounded corners,ultra thick,
}%
}%
-\setKVdefault[DefiTable]{Solution=false,Math=false,LargeurT=5mm}
+%%%
+% Defi Table
+%%%
+
+\setKVdefault[DefiTable]{Solution=false,Math=false,LargeurT=5mm,Graines=false,Creation=false}
+\defKV[DefiTable]{Graine=\setKV[DefiTable]{Graines}}%
+
+\newcommand\MelangeListeNew[2]{%
+ % #1 Liste à mélanger
+ % #2 Nombre d'éléments à conserver
+ \setsepchar[*]{/}\ignoreemptyitems%
+ \readlist*\ListeInter{#1}%
+ \xdef\faa{}% Liste construite
+ \xdef\fii{}% Liste détruite
+ % on crée les #2 premieres solutions.
+ \xintFor* ##1 in {\xintSeq{1}{#2}}\do{%
+ \xintifboolexpr{\ListeInterlen>1}{%
+ \xdef\Alea{\fpeval{randint(\ListeInterlen)}}%
+ \xdef\faa{\faa \ListeInter[\Alea]/}%
+ \xdef\fii{}%
+ \xintFor* ##2 in {\xintSeq{1}{\ListeInterlen}}\do{%
+ \xintifboolexpr{##2 == \Alea}{%
+ }{%
+ \xdef\fii{\fii \ListeInter[##2]/}%
+ }%
+ }%
+ }{%
+ \xdef\faa{\faa \ListeInter[1]}%
+ }%
+ \readlist*\ListeInter{\fii}%
+ }%
+ \reademptyitems%
+}%
+
+\newcommand\DefiTableNombreLettreduCode[1]{%
+ \xdef\ListeDesCaracteresFoo{a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/à/é/è/ê/ï/î/ô/ö/ù/ç/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/À/É/È/,/$?$/$;$/./$!$/$:$/-}
+ \savecomparemode%
+ \comparestrict%
+ \xdef\PfCFooDepart{}
+ \StrLen{#1}[\LongueurMot]%
+ \xintFor* ##1 in{\xintSeq{1}{\LongueurMot}}\do{%
+ \StrChar{#1}{##1}[\LettreMot]
+ \xdef\PfCFooDepart{\PfCFooDepart \LettreMot/}
+ }%
+ \setsepchar[*]{/}\reademptyitems%
+ \readlist*\ListeDesLettres{\PfCFooDepart}%
+ \xdef\PfCFooArrivee{\ListeDesLettres[1]}%
+ \xintFor* ##1 in{\xintSeq{2}{\LongueurMot}}\do{%
+ \StrCompare{\ListeDesLettres[##1]}{\\}[\PfCRetiensEtoile]
+ \StrCompare{\ListeDesLettres[##1]}{ }[\PfCRetiensPara]
+ \xintifboolexpr{\PfCRetiensEtoile==0 || \PfCRetiensPara==0}{}{%
+ \xdef\PfCTotal{0}%
+ \xintFor* ##2 in{\xintSeq{1}{\fpeval{##1-1}}}\do{%
+ \StrCompare{\ListeDesLettres[##1]}{\ListeDesLettres[##2]}[\PfCRetiens]
+ \xdef\PfCTotal{\fpeval{\PfCTotal+\PfCRetiens}}%
+ }%
+ \xintifboolexpr{\PfCTotal==\fpeval{##1-1}}{\xdef\PfCFooArrivee{\PfCFooArrivee/\ListeDesLettres[##1]}}{}%
+ }%
+ }%
+ %Arrivee = \PfCFooArrivee\par
+ \setsepchar[*]{/}\ignoreemptyitems%
+ \readlist*\ListeDesLettresUniques{\PfCFooArrivee}%
+ %La liste des lettres uniques ainsi créée :\par
+ %\showitems\ListeDesLettresUniques[]%
+ % Il faut retirer les lettres uniques de la liste des caracteres
+ \readlist*\ListeTotaleDesCaracteres{\ListeDesCaracteresFoo}%
+ %\par
+ %La liste totale des caractères est :\par
+ %\showitems\ListeTotaleDesCaracteres[]
+ %\par
+ \xdef\ListeCaracteresUniques{}%
+ \xintFor* ##1 in{\xintSeq{1}{\ListeTotaleDesCaractereslen}}\do{%
+ %Le caractère testé est \ListeTotaleDesCaracteres[##1]. On le compare à :%
+ \xdef\PfCTotal{0}%
+ \xintFor* ##2 in{\xintSeq{1}{\ListeDesLettresUniqueslen}}\do{%
+ \StrCompare{\ListeTotaleDesCaracteres[##1]}{\ListeDesLettresUniques[##2]}[\PfCRetiens]
+ \xdef\PfCTotal{\fpeval{\PfCTotal+\PfCRetiens}}%
+ }%
+ \xintifboolexpr{\PfCTotal==\ListeDesLettresUniqueslen}{\xdef\ListeCaracteresUniques{\ListeCaracteresUniques\ListeTotaleDesCaracteres[##1]/}}{}%
+ }%
+ %La liste des caractères uniques à ajouter
+ \MelangeListeNew{\ListeCaracteresUniques}{\fpeval{42-\ListeDesLettresUniqueslen}}%
+ %\par La liste des éléments à mélanger est :\par
+ \xdef\ListeDesCaracteresAUtiliser{}
+ \xintFor* ##1 in{\xintSeq{1}{\ListeDesLettresUniqueslen}}\do{%
+ \xdef\ListeDesCaracteresAUtiliser{\ListeDesCaracteresAUtiliser \ListeDesLettresUniques[##1]/}%
+ }%
+ \xdef\ListeDesCaracteresAUtiliser{\ListeDesCaracteresAUtiliser \faa}
+ \MelangeListeNew{\ListeDesCaracteresAUtiliser}{42}
+ %Finalement, on utilise ces caractères :\par
+ \ignoreemptyitems%
+ \readlist*\ListeFinaleDesCaracteres{\faa}
+ \xdef\ListeDesProduitsFoo{1/2/3/4/5/6/7/8/9/10/12/14/16/18/20/15/21/24/27/30/28/32/36/40/25/35/45/50/42/48/54/60/49/56/63/70/64/72/80/81/90/100}
+ \MelangeListeNew{\ListeDesProduitsFoo}{42}
+ %Les produits mélangés sont :\par
+ \readlist*\ListeDesProduits{\faa}%
+ \restorecomparemode
+ \reademptyitems
+}
\newcommand\DefiTable[2][]{%
% 1 les clés
% 2 la table de décodage
\useKVdefault[DefiTable]%
\setKV[DefiTable]{#1}%
+ \ifboolKV[DefiTable]{Creation}{
+ \ifboolKV[DefiTable]{Graines}{\PfCGraineAlea{\useKV[DefiTable]{Graine}}}{}%
+ \DefiTableNombreLettreduCode{#2}
+ \begin{center}
+ \begin{tabular}{|>{\columncolor{gray!15}}c|*{10}{c|}}
+ \hline
+ \rowcolor{gray!15}$\times$&\xintFor* ##1 in {\xintSeq {1}{10}}\do{%
+ \xintifForFirst{}{&}##1%
+ }\\\hline%
+ \xintFor* ##1 in{\xintSeq{1}{10}}\do{%
+ ##1\xintFor* ##2 in{\xintSeq{1}{10}}\do{%
+ &\xintFor* ##3 in{\xintSeq{1}{42}}\do{%
+ \xintifboolexpr{\fpeval{##1*##2}==\ListeDesProduits[##3]}{\ListeFinaleDesCaracteres[##3]}{}%
+ }%
+ }\\\hline%
+ }%
+ \end{tabular}%
+ \end{center}
+ }{%
\setsepchar[*]{§* }%
\readlist*\ListeDefiTableCode{#2}%
\begin{NiceTabular}{>{\columncolor{gray!15}}{c}*{10}{c}}[hvlines]
@@ -4463,37 +4665,73 @@ transform canvas={xshift=0em,yshift=0em}},rectangle,rounded corners,ultra thick,
}%
10&\ListeDefiTableCode[1,10]&\ListeDefiTableCode[2,9]&\ListeDefiTableCode[3,8]&\ListeDefiTableCode[4,7]&\ListeDefiTableCode[5,6]&\ListeDefiTableCode[6,5]&\ListeDefiTableCode[7,4]&\ListeDefiTableCode[8,3]&\ListeDefiTableCode[9,2]&\ListeDefiTableCode[10,1]\\
\end{NiceTabular}%
+ }%
}%
\newcommand\DefiTableTexte[3][]{%
\useKVdefault[DefiTable]%
\setKV[DefiTable]{#1}%
- \setsepchar[*]{§*/}%
- \readlist*\ListeDefiTableTableau{#2}%
- \xdef\ListeDefiTableMax{0}%
- \setsepchar{§}%
- \readlist*\ListeDefiTablePhrase{#3}%
- \foreachitem\compteur\in\ListeDefiTableTableau{%
- \xintifboolexpr{\ListeDefiTableMax<\listlen\ListeDefiTableTableau[\compteurcnt]}{\xdef\ListeDefiTableMax{\fpeval{\listlen\ListeDefiTableTableau[\compteurcnt]}}}{}%
- }%
- \begin{NiceTabular}{*{\fpeval{\ListeDefiTableMax}}{>{\centering\arraybackslash}m{\useKV[DefiTable]{LargeurT}}}}
- \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeDefiTableTableaulen}}}\do{%
- \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{%
- \xintifForFirst{}{&}\ifboolKV[DefiTable]{Solution}{%
- \StrMid{\ListeDefiTablePhrase[##1]}{##2}{##2}[\DefiTableMaLettre]%
- \IfStrEq{\DefiTableMaLettre}{*}{\Block[]{2-1}{}}{\Block[borders={bottom}]{2-1}{\StrMid{\ListeDefiTablePhrase[##1]}{##2}{##2}}}%
- }{%
- \IfStrEq{\ListeDefiTableTableau[##1,##2]}{*}{\Block[]{2-1}{}}{\Block[borders={bottom}]{2-1}{}}%
- }%%
- }\\
- \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{%
- \xintifForFirst{}{&}
- }\\
- \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{%
- \xintifForFirst{}{&}\IfStrEq{\ListeDefiTableTableau[##1,##2]}{*}{}{\footnotesize\ifboolKV[DefiTable]{Math}{\ListeDefiTableTableau[##1,##2]}{\num{\ListeDefiTableTableau[##1,##2]}}}%
- }\\
+ \ifboolKV[DefiTable]{Creation}{%
+ \setsepchar[*]{\\* }%
+ \readlist*\ListeDefiTableTableau{#3}%
+ \xdef\ListeDefiTableMax{0}%
+ \xintFor* ##1 in{\xintSeq{1}{\ListeDefiTableTableaulen}}\do{%
+ \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]%
+ \xintifboolexpr{\ListeDefiTableMax<\PfCDTLongueur}{\xdef\ListeDefiTableMax{\fpeval{\PfCDTLongueur}}}{}%%
}%
- \end{NiceTabular}%
+ %\par Le max est \ListeDefiTableMax
+ \begin{NiceTabular}{*{\fpeval{\ListeDefiTableMax}}{>{\centering\arraybackslash}m{\useKV[DefiTable]{LargeurT}}}}
+ \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeDefiTableTableaulen}}}\do{%
+ \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]%
+ \xintFor* ##2 in {\xintSeq {1}{\PfCDTLongueur}}\do{%
+ \xintifForFirst{}{&}%
+ \StrMid{\ListeDefiTableTableau[##1]}{##2}{##2}[\DefiTableMaLettre]%
+ \IfStrEq{\DefiTableMaLettre}{ }{\Block[]{1-1}{}}{\Block[borders={bottom}]{1-1}{\ifboolKV[DefiTable]{Solution}{\StrMid{\ListeDefiTableTableau[##1]}{##2}{##2}}{}}}%
+ }\\
+ \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]%
+ \xintFor* ##2 in {\xintSeq {1}{\PfCDTLongueur}}\do{%
+ \xintifForFirst{}{&}%
+ \StrMid{\ListeDefiTableTableau[##1]}{##2}{##2}[\DefiTableMaLettre]%
+ \IfStrEq{\DefiTableMaLettre}{*}{}{%
+ \xintFor* ##3 in{\xintSeq{1}{42}}\do{%
+ \IfStrEq{\DefiTableMaLettre}{\ListeFinaleDesCaracteres[##3]}{\Block{}{\footnotesize\ListeDesProduits[##3]}}{}%
+ }%
+ }%
+ }\\
+ \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]%
+ \xintFor* ##2 in {\xintSeq {1}{\PfCDTLongueur}}\do{%
+ \xintifForFirst{}{&}
+ }\\
+ }%
+ \end{NiceTabular}%
+ }{%
+ \setsepchar[*]{§*/}%
+ \readlist*\ListeDefiTableTableau{#2}%
+ \xdef\ListeDefiTableMax{0}%
+ \setsepchar{§}%
+ \readlist*\ListeDefiTablePhrase{#3}%
+ \foreachitem\compteur\in\ListeDefiTableTableau{%
+ \xintifboolexpr{\ListeDefiTableMax<\listlen\ListeDefiTableTableau[\compteurcnt]}{\xdef\ListeDefiTableMax{\fpeval{\listlen\ListeDefiTableTableau[\compteurcnt]}}}{}%
+ }%
+ \begin{NiceTabular}{*{\fpeval{\ListeDefiTableMax}}{>{\centering\arraybackslash}m{\useKV[DefiTable]{LargeurT}}}}
+ \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeDefiTableTableaulen}}}\do{%
+ \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{%
+ \xintifForFirst{}{&}\ifboolKV[DefiTable]{Solution}{%
+ \StrMid{\ListeDefiTablePhrase[##1]}{##2}{##2}[\DefiTableMaLettre]%
+ \IfStrEq{\DefiTableMaLettre}{*}{\Block[]{2-1}{}}{\Block[borders={bottom}]{2-1}{\StrMid{\ListeDefiTablePhrase[##1]}{##2}{##2}}}%
+ }{%
+ \IfStrEq{\ListeDefiTableTableau[##1,##2]}{*}{\Block[]{2-1}{}}{\Block[borders={bottom}]{2-1}{}}%
+ }%%
+ }\\
+ \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{%
+ \xintifForFirst{}{&}
+ }\\
+ \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{%
+ \xintifForFirst{}{&}\IfStrEq{\ListeDefiTableTableau[##1,##2]}{*}{}{\footnotesize\ifboolKV[DefiTable]{Math}{\ListeDefiTableTableau[##1,##2]}{\num{\ListeDefiTableTableau[##1,##2]}}}%
+ }\\
+ }%
+ \end{NiceTabular}%
+ }%
}%
%%%
@@ -5443,14 +5681,14 @@ transform canvas={xshift=0em,yshift=0em}},rectangle,rounded corners,ultra thick,
\setKV[ClesMotEmpile]{#1}%
\setcounter{CompteurMotEmpile}{0}%
\setsepchar[*]{,*/}%
- \readlist*\ListeMotsEmpiles{#2}
+ \readlist*\ListeMotsEmpiles{#2}%
\xdef\ListeMotsEmpilesMax{0}%
\colorlet{MotEmpileCouleur}{\useKV[ClesMotEmpile]{Couleur}}%
\foreachitem\compteur\in\ListeMotsEmpiles{%
\StrLen{\ListeMotsEmpiles[\compteurcnt,2]}[\LongueurMot]%
\xintifboolexpr{\ListeMotsEmpilesMax<\fpeval{\ListeMotsEmpiles[\compteurcnt,1]+\LongueurMot}}{\xdef\ListeMotsEmpilesMax{\fpeval{\ListeMotsEmpiles[\compteurcnt,1]+\LongueurMot}}}{}%
}%
- \begin{NiceTabular}{c|*{\fpeval{\ListeMotsEmpilesMax}}{m{0.5em}}}
+ \begin{NiceTabular}{c|*{\fpeval{\ListeMotsEmpilesMax}}{m{0.5em}}}%
\Block{1-\fpeval{\useKV[ClesMotEmpile]{Colonne}+2}}{}\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesMotEmpile]{Colonne}}}}\do{&}&$\downarrow$\xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsEmpilesMax-\useKV[ClesMotEmpile]{Colonne}-1}}}\do{&}\\
\xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsEmpileslen}}}\do{%
\rule[-1.2ex]{0pt}{3.8ex}\stepcounter{CompteurMotEmpile}\Alph{CompteurMotEmpile}&\Block{1-\fpeval{\ListeMotsEmpiles[##1,1]}}{}\xintFor* ##2 in {\xintSeq {1}{\fpeval{\ListeMotsEmpiles[##1,1]}}}\do{%
@@ -5459,11 +5697,11 @@ transform canvas={xshift=0em,yshift=0em}},rectangle,rounded corners,ultra thick,
\StrLen{\ListeMotsEmpiles[##1,2]}[\LongueurMot]%
\xintFor* ##3 in {\xintSeq {1}{\fpeval{\LongueurMot}}}\do{%
\xintifForFirst{}{&}\Block[draw=black]{1-1}{\ifboolKV[ClesMotEmpile]{Solution}{\centering\arraybackslash\StrMid{\ListeMotsEmpiles[##1,2]}{##3}{##3}}{}}%%
- }
+ }%
\\
}%
\CodeAfter\tikz\draw[line width=1.5pt,MotEmpileCouleur](row-2-|col-\fpeval{\useKV[ClesMotEmpile]{Colonne}+2}) rectangle (row-\fpeval{\ListeMotsEmpileslen+2}-|col-\fpeval{\useKV[ClesMotEmpile]{Colonne}+3});
- \end{NiceTabular}
+ \end{NiceTabular}%
}%
%%% Colorilude %%%
@@ -9894,7 +10132,7 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul.
\setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
\ensuremath{%
\Affichage{\SommeA}{\SommeB}{\SommeC}
- }
+ }%
}
\newcommand\AffichageEchange[4][]{%
@@ -9915,8 +10153,8 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul.
\newcommand\DistriEchange[5][]{%
\ensuremath{%
- \useKVdefault[ClesDistributivite]%obligatoire car la macro n'est pas dans un groupe.
- \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
+ \useKVdefault[ClesDistributivite]%
+ \setKV[ClesDistributivite]{#1}%
\ifboolKV[ClesDistributivite]{RAZ}{\xdef\SommeA{0}\xdef\SommeB{0}\xdef\SommeC{0}%
\setcounter{NbCalculDistri}{0}%
}{}%
@@ -10160,8 +10398,8 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul.
\xdef\Multil{\fpeval{#3*#5}}%
%% ils sont red\'efinis pour pouvoir envisager la somme de deux
%% expressions \`a d\'evelopper
- \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
- \stepcounter{NbCalculDistri}%
+ % \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+ %\stepcounter{NbCalculDistri}%
\xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1}{%
\xdef\Multim{\fpeval{#2*#4+#3*#5}}%
\ifboolKV[ClesDistributivite]{Oppose}{%
@@ -10191,7 +10429,8 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul.
\xintifboolexpr{\Multimo==0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
\xintifboolexpr{\Multiko==0}{}{\xintifboolexpr{\Multiko>0}{+}{+(}\Affichage{0}{0}{\Multiko}\xintifboolexpr{\Multiko<0}{)}{}}%
}{%
- \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multij<0}{(\Affichage{\Multij}{0}{0})}{\Affichage{\Multij}{0}{0}}}{\Affichage{\Multij}{0}{0}}%
+ \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multij<0}{%%%%%%%%%%%%%%%%%%%%%
+ (\Affichage{\Multij}{0}{0})}{\Affichage{\Multij}{0}{0}}}{\Affichage{\Multij}{0}{0}}%
\xintifboolexpr{\Multim==0}{}{%
\xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
}%
@@ -14615,7 +14854,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
\ifnum\remainder=0%
\PfCQuartileUn=\fpeval{\ListeCompletelen/4}%
\else%
- \PfCQuartileUn=\fpeval{ceil(\ListeCompletelen/4)+1}%
+ \PfCQuartileUn=\fpeval{ceil(\ListeCompletelen/4)}%
\fi%
\newcount\PfCQunk%
\PfCQunk=0%
@@ -14630,7 +14869,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
\ifnum\remainder=0%
\PfCQuartileTrois=\fpeval{3*\ListeCompletelen/4}%
\else%
- \PfCQuartileTrois=\fpeval{ceil(3*\ListeCompletelen/4)+1}%
+ \PfCQuartileTrois=\fpeval{ceil(3*\ListeCompletelen/4)}%
\fi%
\newcount\PfCQtroisk%
\PfCQtroisk=0%
@@ -14775,7 +15014,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
\ifnum\remainder=0%
\PfCQuartileUn=\fpeval{\EffectifTotal/4}%
\else%
- \PfCQuartileUn=\fpeval{ceil(\EffectifTotal/4)+1}%
+ \PfCQuartileUn=\fpeval{ceil(\EffectifTotal/4)}%
\fi%
\newcount\PfCQunk%
\PfCQunk=0%
@@ -14793,7 +15032,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
\ifnum\remainder=0%
\PfCQuartileTrois=\fpeval{3*\EffectifTotal/4}%
\else%
- \PfCQuartileTrois=\fpeval{ceil(3*\EffectifTotal/4)+1}%
+ \PfCQuartileTrois=\fpeval{ceil(3*\EffectifTotal/4)}%
\fi%
\newcount\PfCQtroisk%
\PfCQtroisk=0%
@@ -17744,7 +17983,6 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
\begin{mplibcode}
drawoptions( dashed dashpattern(on1cm));
typetrace:="3D";
- Figure(-10u,-10u,10u,10u);
Initialisation(5,0,10,\useKV[ClesFormule]{EchelleEspace});
color O,A,B,C;
O=(0,0,0);
@@ -21443,9 +21681,9 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
%%%
\setKVdefault[ClesTableaux]{Virgule=true,Incline=false,Entiers=false,Decimaux=false,Milliards=false,Millions=false,Micro=false,Nano=false,Partie=false,CouleurG=gray!15,CouleurM=gray!15,Couleurm=gray!15,Couleuru=gray!15,Couleurd=gray!15,Classes=false,Nombres=false,Puissances=false,NbLignes=2,Metre=false,Are=false,Capacite=false,Carre=false,Cube=false,Litre=false,Gramme=false,Fleches=false,FlechesB=false,FlechesH=false,Colonnes=false,Prefixes=false,Escalier=false,Taille=5,Largeur=4.75em,Nom=PfCTableau,CodeAfter={},PuissancesSeules=false,Colonne=-1}
-\newcommand\PfCTBstrut{\rule[-1.2ex]{0pt}{3.8ex}} % Top and Bottom strut
-\newcommand\PfCTstrut{\rule{0pt}{3.8ex}} % Top strut
-\newcommand\PfCBstrut{\rule[-1.2ex]{0pt}{0ex}} % Bottom strut
+\newcommand\PfCTBstrut{\rule[-1.2ex]{0pt}{3.8ex}}% Top and Bottom strut
+\newcommand\PfCTstrut{\rule{0pt}{3.8ex}}% Top strut
+\newcommand\PfCBstrut{\rule[-1.2ex]{0pt}{0ex}}% Bottom strut
\newlength\PfCTableauPuissances%
@@ -22463,26 +22701,26 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
\ifboolKV[ClesTableaux]{Carre}{%
\[\renewcommand{\arraystretch}{1.15}%
\begin{NiceTabular}{*{7}{wc{3.5mm}wc{3.5mm}}}%
- \Block[]{1-2}{}
- &&\Block[]{1-2}{}
- &&\Block[]{1-2}{}
- &&\Block[]{1-2}{}
- &&\Block[]{1-2}{}
- &&\Block[]{1-2}{}
+ \Block[]{1-2}{}%
+ &&\Block[]{1-2}{}%
+ &&\Block[]{1-2}{}%
+ &&\Block[]{1-2}{}%
+ &&\Block[]{1-2}{}%
+ &&\Block[]{1-2}{}%
&&\Block[]{1-2}{}\\
- \Block[borders={left,top,right}]{1-2}{km$^2$\PfCTBstrut}&&\Block[borders={left,top,right}]{1-2}{hm$^2$\PfCTBstrut}&&\Block[borders={left,top,right}]{1-2}{dam$^2$\PfCTBstrut}&&\Block[borders={left,top,right}]{1-2}{m$^2$\PfCTBstrut}&&\Block[borders={left,top,right}]{1-2}{dm$^2$\PfCTBstrut}&&\Block[borders={left,top,right}]{1-2}{cm$^2$\PfCTBstrut}&&\Block[borders={left,top,right}]{1-2}{mm$^2$\PfCTBstrut}&\\
+ \Block[borders={left,top,right}]{1-2}{km$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{hm$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{dam$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{m$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{dm$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{cm$^2$\PfCTBstrut}&&\Block[borders={top,right}]{1-2}{mm$^2$\PfCTBstrut}&\\
\ifboolKV[ClesTableaux]{Are}{%
- \Block[borders={left,right,bottom}]{1-2}{}&&\Block[draw=gray!50,borders={left,top,bottom}]{1-1}{}&\Block[borders={top,right,bottom}]{1-1}{\scriptsize ha}&\Block[draw=gray!50,borders={left,top,bottom}]{1-1}{}&\Block[borders={top,right,bottom}]{1-1}{\scriptsize a}&\Block[borders={left,right,bottom}]{1-2}{}&&\Block[borders={left,right,bottom}]{1-2}{}&&\Block[borders={left,right,bottom}]{1-2}{}&&\Block[borders={left,right,bottom}]{1-2}{}&\\
+ \Block[borders={left,right,bottom}]{1-2}{}&&\Block[draw=gray!50,borders={left,top,bottom}]{}{~}&\Block[borders={top,right,bottom}]{}{\scriptsize ha}&\Block[draw=gray!50,borders={left,top,bottom}]{}{~}&\Block[borders={top,right,bottom}]{}{\scriptsize a}&\Block[borders={left,right,bottom}]{1-2}{}&&\Block[borders={left,right,bottom}]{1-2}{}&&\Block[borders={left,right,bottom}]{1-2}{}&&\Block[borders={left,right,bottom}]{1-2}{}&\\
}{\hline}%
\xintFor* ##1 in {\xintSeq {1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
&&&&&&&&&&&&&\\
}%
- \Block[]{1-2}{}
- &&\Block[]{1-2}{}
- &&\Block[]{1-2}{}
- &&\Block[]{1-2}{}
- &&\Block[]{1-2}{}
- &&\Block[]{1-2}{}
+ \Block[]{1-2}{}%
+ &&\Block[]{1-2}{}%
+ &&\Block[]{1-2}{}%
+ &&\Block[]{1-2}{}%
+ &&\Block[]{1-2}{}%
+ &&\Block[]{1-2}{}%
&&\Block[]{1-2}{}\\
\CodeAfter
% on trace les lignes verticales
@@ -22539,26 +22777,26 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
\[\renewcommand{\arraystretch}{1.15}%
\setlength{\tabcolsep}{0.625\tabcolsep}%
\begin{NiceTabular}{*{7}{wc{3.5mm}wc{3.5mm}wc{3.5mm}}}
- \Block[]{1-3}{}
- &&&\Block[]{1-3}{}
- &&&\Block[]{1-3}{}
- &&&\Block[]{1-3}{}
- &&&\Block[]{1-3}{}
- &&&\Block[]{1-3}{}
+ \Block[]{1-3}{}%
+ &&&\Block[]{1-3}{}%
+ &&&\Block[]{1-3}{}%
+ &&&\Block[]{1-3}{}%
+ &&&\Block[]{1-3}{}%
+ &&&\Block[]{1-3}{}%
&&&\Block[]{1-3}{}\\
- \Block[borders={left,top,right}]{1-3}{km$^3$\PfCTBstrut}&&&\Block[borders={left,top,right}]{1-3}{hm$^3$\PfCTBstrut}&&&\Block[borders={left,top,right}]{1-3}{dam$^3$\PfCTBstrut}&&&\Block[borders={left,top,right}]{1-3}{m$^3$\PfCTBstrut}&&&\Block[borders={left,top,right}]{1-3}{dm$^3$\PfCTBstrut}&&&\Block[borders={left,top,right}]{1-3}{cm$^3$\PfCTBstrut}&&&\Block[borders={left,top,right}]{1-3}{mm$^3$\PfCTBstrut}&&\\
+ \Block[borders={left,top,right}]{1-3}{km$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{hm$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{dam$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{m$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{dm$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{cm$^3$\PfCTBstrut}&&&\Block[borders={top,right}]{1-3}{mm$^3$\PfCTBstrut}&&\\
\ifboolKV[ClesTableaux]{Capacite}{%
- \Block[borders={left,right,bottom}]{1-3}{}&&&\Block[borders={left,right,bottom}]{1-3}{}&&&\Block[borders={left,right,bottom}]{1-3}{}&&&\Block[borders={left,right,bottom}]{1-3}{}&&&\Block[draw=gray!50,borders={top,left,bottom}]{}{\scriptsize hL}&\Block[draw=gray!50,borders={top,bottom},l]{}{\scriptsize daL}&\Block[draw=gray!50,borders={top,right,bottom}]{}{\scriptsize L}&\Block[draw=gray!50,borders={top,left,bottom}]{}{\scriptsize dL}&\Block[draw=gray!50,borders={top,bottom}]{}{\scriptsize cL}&\Block[draw=gray!50,borders={top,right,bottom}]{}{\scriptsize mL}&\Block[borders={left,right,bottom}]{1-3}{}&&\\
+ \Block[borders={left,right,bottom}]{1-3}{}&&&\Block[borders={right,bottom}]{1-3}{}&&&\Block[borders={right,bottom}]{1-3}{}&&&\Block[borders={right,bottom}]{1-3}{}&&&\Block[draw=gray!50,borders={top,left,bottom}]{}{\scriptsize hL}&\Block[draw=gray!50,borders={top,bottom},l]{}{\scriptsize daL}&\Block[draw=gray!50,borders={top,right,bottom}]{}{\scriptsize L}&\Block[draw=gray!50,borders={top,left,bottom}]{}{\scriptsize dL}&\Block[draw=gray!50,borders={top,bottom}]{}{\scriptsize cL}&\Block[draw=gray!50,borders={top,right,bottom}]{}{\scriptsize mL}&\Block[borders={right,bottom}]{1-3}{}&&\\
}{\hline}%
\xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
&&&&&&&&&&&&&&&&&&&&\\
}%
- \Block[]{1-3}{}
- &&&\Block[]{1-3}{}
- &&&\Block[]{1-3}{}
- &&&\Block[]{1-3}{}
- &&&\Block[]{1-3}{}
- &&&\Block[]{1-3}{}
+ \Block[]{1-3}{}%
+ &&&\Block[]{1-3}{}%
+ &&&\Block[]{1-3}{}%
+ &&&\Block[]{1-3}{}%
+ &&&\Block[]{1-3}{}%
+ &&&\Block[]{1-3}{}%
&&&\Block[]{1-3}{}\\
\CodeAfter
% on trace les lignes verticales
@@ -22591,7 +22829,7 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
\xintFor* ##1 in{\xintSeq {1}{\TabLongueurNombre}}\do{%
\tikz\node at (\fpeval{##2+\ifboolKV[ClesTableaux]{Capacite}{3.5}{2.5}}-|\fpeval{\ListeNombreAPlacer[##2,2]-0.5+##1}) {\PfCTBstrut\StrMid{\ListeNombreAPlacer[##2,1]}{##1}{##1}};
}%
- }
+ }%
\fi%
% on trace les flèches
\ifboolKV[ClesTableaux]{Fleches}{\setKV[ClesTableaux]{FlechesH,FlechesB}}{}%
@@ -22609,7 +22847,6 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
\useKV[ClesTableaux]{CodeAfter}%
\end{NiceTabular}
\]%
-% \setlength{\tabcolsep}{1.6\tabcolsep}%
}{}%
%
%%% Prise en compte de la cl\'e Litre
@@ -22727,7 +22964,7 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
}%
\newcommand\PfCTableauIncline{%
-\begin{NiceTabular}{wc{1.5em}wc{1.5em}wc{1.5em}wc{1.5em}wc{1.5em}wc{1.5em}wc{1.5em}}
+\begin{NiceTabular}{wc{30pt}wc{30pt}wc{30pt}wc{30pt}wc{30pt}wc{30pt}wc{30pt}}
&&&&&&\\
\Block[borders={bottom}]{}{\si{\kilo\PfCTableauUnite}}&\\
&\Block[borders={left}]{}{}&\\
@@ -22751,12 +22988,12 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
\tikz\draw[out=35,in=90,-stealth,gray] (10-|5.5) to node[midway,right]{\footnotesize$\times\num{\PfCCoefConversion}$}(12-|6.5);
\tikz\draw[out=35,in=90,-stealth,gray] (12-|6.5) to node[midway,right]{\footnotesize$\times\num{\PfCCoefConversion}$}(14-|7.5);
% bas
- \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (15-|7.5) to node[midway,left]{\footnotesize$\div{\PfCCoefConversion}$}(13-|6.5);
- \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (13-|6.5) to node[midway,left]{\footnotesize$\div{\PfCCoefConversion}$}(11-|5.5);
- \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (11-|5.5) to node[midway,left]{\footnotesize$\div{\PfCCoefConversion}$}(9-|4.5);
- \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (9-|4.5) to node[midway,left]{\footnotesize$\div{\PfCCoefConversion}$}(7-|3.5);
- \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (7-|3.5) to node[midway,left]{\footnotesize$\div{\PfCCoefConversion}$}(5-|2.5);
- \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (5-|2.5) to node[midway,left]{\footnotesize$\div{\PfCCoefConversion}$}(3-|1.5);
+ \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (15-|7.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(13-|6.5);
+ \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (13-|6.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(11-|5.5);
+ \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (11-|5.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(9-|4.5);
+ \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (9-|4.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(7-|3.5);
+ \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (7-|3.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(5-|2.5);
+ \tikz\draw[out=215,in=-90,-stealth,gray,transform canvas={yshift=-2mm}] (5-|2.5) to node[midway,left]{\footnotesize$\div\num{\PfCCoefConversion}$}(3-|1.5);
\end{NiceTabular}%
}%
@@ -23196,60 +23433,62 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
%%%
% Tableur
%%%
-\setKVdefault[Tableur]{Colonnes=4,Largeur=3,LargeurUn=3,Bandeau=true,Formule={},Cellule=A1,Ligne=0,Colonne=0,PasL=1,PasC=1,Selection=false}%
+\setKVdefault[Tableur]{Colonnes=4,Largeur=30pt,LargeurUn=30pt,Bandeau=true,Formule={},Cellule=A1,Ligne=0,Colonne=0,PasL=1,PasC=1,Selection=false}%
%Idee de P. Nuns
\defKV[Tableur]{Couleur=\setKV[Tableur]{Selection}}%
%
%Bas\'e sur un code de Christian T\'ell\'ech\'ea.
-\makeatletter
-\newcount\cntlin
-\newcount\cntcol
+\newcount\cntlin%
+\newcount\cntcol%
-\newtoks\t@b
+\makeatletter%
+\newtoks\t@b%
\long\def\ifremain@lines#1\\#2\@nil{%
- \csname @\ifx\@empty#2\@empty second\else first\fi oftwo\endcsname}
+ \csname @\ifx\@empty#2\@empty second\else first\fi oftwo\endcsname}%
\long\def\subst@eol#1\\#2\@nil{\addtot@b{#1\\}%
\ifremain@lines#2\\\@nil{\addtot@b&\subst@eol#2\@nil}{\addtot@b{#2\CodeAfter\xintifboolexpr{\useKV[Tableur]{Ligne}==0 || \useKV[Tableur]{Colonne}==0}{}{%
\tikz\node at (row-\fpeval{\useKV[Tableur]{Ligne}+1+\useKV[Tableur]{PasL}}-|col-\fpeval{\useKV[Tableur]{Colonne}+1+\useKV[Tableur]{PasC}}) {\tiny$\blacksquare$};%
}%
\end{NiceTabular}}}}%
-\long\def\collectcp@body#1\end{\subst@eol#1\@nil\end}
+\long\def\collectcp@body#1\end{\subst@eol#1\@nil\end}%
-\newcommand\addtot@b[1]{\t@b\expandafter{\the\t@b#1}}
-\newcommand\edftot@b[1]{\edef\temp@{#1}\expandafter\addtot@b\expandafter{\temp@}}
+\newcommand\addtot@b[1]{\t@b\expandafter{\the\t@b#1}}%
+\newcommand\edftot@b[1]{\edef\temp@{#1}\expandafter\addtot@b\expandafter{\temp@}}%
\newlength\PfCLongInter%
\newlength\PfCTableurLargeurUn%
\newlength\PfCTableurLargeur%
-\setlength{\PfCTableurLargeurUn}{\useKV[Tableur]{LargeurUn}em}
-\setlength{\PfCTableurLargeur}{\useKV[Tableur]{Largeur}em}
+
+\RequirePackage{printlen}
+
\newenvironment{Tableur}[1][]{%
\useKVdefault[Tableur]%
\setKV[Tableur]{#1}%
-
+ \setlength{\PfCTableurLargeurUn}{\fpeval{\useKV[Tableur]{LargeurUn}}pt}%
+ \setlength{\PfCTableurLargeur}{\fpeval{\useKV[Tableur]{Largeur}}pt}%
\ttfamily%
- \newcolumntype Y{>{\centering\arraybackslash}wc{\PfCTableurLargeurUn}}%
- \newcolumntype X{>{\centering\arraybackslash}wc{\PfCTableurLargeurUn}}%
+ \newcolumntype{Y}{>{\centering\arraybackslash}m{\PfCTableurLargeurUn}}%
+ \newcolumntype{X}{>{\centering\arraybackslash}m{\PfCTableurLargeur}}%
+ \setlength{\PfCLongInter}{-40pt+\fpeval{\useKV[Tableur]{LargeurUn}}pt+\fpeval{(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}}pt+\fpeval{2*\useKV[Tableur]{Colonnes}-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}+2}\arrayrulewidth}%
\ifboolKV[Tableur]{Bandeau}{%
- \setlength{\PfCLongInter}{\fpeval{\useKV[Tableur]{LargeurUn}+(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}-4}em+\fpeval{\useKV[Tableur]{Colonnes}*2-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}+1}\arrayrulewidth}%
- \begin{NiceTabular}{wc{\PfCTableurLargeur}wc{1em}wc{5em}wc{\PfCLongInter}}%
- \Block[draw]{}{}\useKV[Tableur]{Cellule}&\Block[draw]{}{}\centering\arraybackslash\scriptsize$\blacktriangledown$&$f_x$\hfill$\sum$~\scriptsize$\blacktriangledown$\hfill$=$&\Block[draw]{}{}\useKV[Tableur]{Formule}\hfill\scriptsize$\blacktriangledown$\\
+ \begin{NiceTabular}{p{\PfCTableurLargeur}p{10pt}p{50pt}p{\PfCLongInter}}
+ \Block[draw]{}{\useKV[Tableur]{Cellule}}&\Block[draw]{}{\scriptsize$\blacktriangledown$}&\Block{}{$f_x$\hfill$\sum$~\scriptsize$\blacktriangledown$\hfill$=$}&\Block[draw]{}{\useKV[Tableur]{Formule}\hfill\scriptsize$\blacktriangledown$}\\
\end{NiceTabular}%
- \nopagebreak
- \\
- }{}
- \cntlin\z@
+ \nopagebreak%
+ \\%
+ }{}%
+ \cntlin\z@%
\t@b{%
\begin{NiceTabular}{%
>{%
- \global\cntcol\z@\global\advance\cntlin\@ne
- \centering\arraybackslash
- \ifnum\cntlin>\@ne
+ \global\cntcol\z@\global\advance\cntlin\@ne%
+ \centering\arraybackslash%
+ \ifnum\cntlin>\@ne%
\ifboolKV[Tableur]{Selection}{%
- \xintifboolexpr{\cntlin>\useKV[Tableur]{Ligne} && \cntlin<\fpeval{\useKV[Tableur]{Ligne}+\useKV[Tableur]{PasL}+1}}{\textcolor{white}{\number\numexpr\cntlin-1\relax}}{\number\numexpr\cntlin-1\relax}
- }{\number\numexpr\cntlin-1\relax}\fi}
- wc{2em}Y*{\fpeval{\useKV[Tableur]{Colonnes}-1}}{X}}[hvlines]%
+ \xintifboolexpr{\cntlin>\useKV[Tableur]{Ligne} && \cntlin<\fpeval{\useKV[Tableur]{Ligne}+\useKV[Tableur]{PasL}+1}}{\textcolor{white}{\number\numexpr\cntlin-1\relax}}{\number\numexpr\cntlin-1\relax}%
+ }{\number\numexpr\cntlin-1\relax}\fi}%
+ wc{20pt}Y*{\fpeval{\useKV[Tableur]{Colonnes}-1}}{X}}[hvlines]%
\CodeBefore
% on colorie en gris toute la première ligne
\tikz\draw[fill=gray!15](row-1-|col-1) rectangle (row-2-|last);%
@@ -23280,8 +23519,8 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
\addtot@b{&}%
% modif by Pascal Nuns
\ifboolKV[Tableur]{Selection}{%
- \ifnum \cntcol>\fpeval{\useKV[Tableur]{Colonne}-1}%
- \ifnum \cntcol<\fpeval{\useKV[Tableur]{Colonne}+\useKV[Tableur]{PasC}}%
+ \ifnum\cntcol>\fpeval{\useKV[Tableur]{Colonne}-1}%
+ \ifnum\cntcol<\fpeval{\useKV[Tableur]{Colonne}+\useKV[Tableur]{PasC}}%
\edftot@b{{\noexpand\textcolor{white}{\noexpand\bfseries\@Alph{\the\cntcol}}}}%
\else%
\edftot@b{\@Alph{\the\cntcol}}%
@@ -23291,9 +23530,9 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
\fi%
}{\edftot@b{\@Alph{\the\cntcol}}}%
% fin de modif
- \repeat
+ \repeat%
\addtot@b{\\&}%
- \collectcp@body}{\the\t@b}
+ \collectcp@body}{\the\t@b}%
\makeatother
%%%
diff --git a/macros/latex/contrib/se2thesis/README.md b/macros/latex/contrib/se2thesis/README.md
new file mode 100644
index 0000000000..006085d427
--- /dev/null
+++ b/macros/latex/contrib/se2thesis/README.md
@@ -0,0 +1,14 @@
+# se2thesis -- A Thesis Class for the Chair of Software Engineering II at the University of Passau, Germany
+
+The `se2thesis` bundle provides a document class for writing a theses with the
+[Chair of Software Engineering II](https://www.fim.uni-passau.de/en/chair-for-software-engineering-ii/)
+at the [University of Passau](https://www.uni-passau.de), Germany.
+The class is based on Markus Kohm's
+[KOMA-Script](https://ctan.org/pkg/koma-script) classes and provides several
+additions and customisations to these classes.
+While the class provides some basic settings, mostly regrading the type area,
+fonts, and the title page, it still provides large degrees of freedom to its
+users.
+However, the package's documentation also provides recommendations regarding
+several aspects, for example, recommending
+[biblatex](https://ctan.org/pkg/biblatex) for bibliographies.
diff --git a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
new file mode 100644
index 0000000000..ff5b7afc8f
--- /dev/null
+++ b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex
new file mode 100644
index 0000000000..763f62a102
--- /dev/null
+++ b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex
@@ -0,0 +1,95 @@
+\documentclass[%
+ twoside=true,%
+ logofile={logo.png},%
+ thesistype=master,%
+ biblatex=true,%
+ UKenglish,%
+]{se2thesis}
+\listfiles
+\usepackage[ngerman,main=UKenglish]{babel}
+\usepackage{blindtext}
+\usepackage{csquotes}
+\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,%
+ separate-uncertainty=true,%
+ uncertainty-mode=separate,%
+]{siunitx}
+
+\usepackage[newfloat=true]{minted}
+\setminted{%
+ autogobble,%
+ breaklines=true,%
+ fontsize=\footnotesize,%
+ linenos=false,%
+ resetmargins=true,%
+ xleftmargin=1em,%
+ xrightmargin=1em,%
+ frame=single,%
+}
+
+\usepackage{filecontents}
+
+\begin{filecontents*}{\jobname.bib}
+ @book{Knu86,
+ author = {Knuth, Donald E.},
+ year = {1986},
+ title = {The \TeX book},
+ }
+\end{filecontents*}
+\addbibresource{\jobname.bib}
+
+\usepackage{booktabs}
+
+\usepackage{hyperref}
+\usepackage{cleveref}
+
+\author{Stephan Lukasczyk}
+\title{A Master Thesis Example Document}
+\degreeprogramme{Computer Science}
+\supervisor{Prof.\,Dr.~Max Mustermann}
+\advisor{Marianne Musterfrau}
+\department{Faculty of Examples}
+\institute{Chair of Example}
+\location{Passau}
+
+\begin{document}
+
+\frontmatter
+
+\maketitle
+
+\authorshipDeclaration
+
+\begin{abstract}
+ An English abstract to the thesis.
+\end{abstract}
+
+\begin{abstract}[german]
+ Eine deutschsprachige Zusammenfassung der Arbeit.
+\end{abstract}
+
+\begin{acknowledgements}
+ Some acknowledgements.
+\end{acknowledgements}
+
+\tableofcontents
+
+\mainmatter
+
+\blinddocument
+
+\section{Further Examples}
+
+We could reference the \TeX{} book~\cite{Knu86}.
+
+\backmatter
+
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/se2thesis/se2thesis.dtx b/macros/latex/contrib/se2thesis/se2thesis.dtx
new file mode 100644
index 0000000000..9cb97b0a3d
--- /dev/null
+++ b/macros/latex/contrib/se2thesis/se2thesis.dtx
@@ -0,0 +1,2451 @@
+% \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-DarkBlue,%
+ 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.
+%
+% \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}{\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:
+% \begin{function}{logofile}
+% \begin{syntax}
+% |logofile| = \marg{path-to-logo}
+% \end{syntax}
+% Sets the path to the logo graphics for the title page.
+% \end{function}
+%
+% 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.
+%
+% \begin{function}{biblatex}
+% \begin{syntax}
+% |biblatex| = \meta{true,false}
+% \end{syntax}
+% For easier usage, we provide the load-time option |biblatex| that already sets
+% all settings.
+% \end{function}
+% 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}{colormode}
+% \begin{syntax}
+% |colormode| = \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
+% %
+% |colormode=4C|
+% & Define colours in CMYK colour space (\emph{default}). \\
+% %
+% |CMYK|, |cmyk|
+% & Aliases for the previous. \\
+% %
+% |colormode=RGB|
+% & Define colours in RGB colour space. \\
+% %
+% |RGB|, |rgb|
+% & Aliases for the previous. \\
+% %
+% |colormode=BW|
+% & Define colours in black-and-white colour space. \\
+% %
+% |colormode=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 15 supplementary colours:
+% \begin{itemize}
+% \item |UPSE2-DarkGreen| \testclr{UPSE2-DarkGreen},
+% \item |UPSE2-MediumGreen| \testclr{UPSE2-MediumGreen},
+% \item |UPSE2-LightGreen| \testclr{UPSE2-LightGreen},
+% \item |UPSE2-DarkBlue| \testclr{UPSE2-DarkBlue},
+% \item |UPSE2-MediumBlue| \testclr{UPSE2-MediumBlue},
+% \item |UPSE2-LightBlue| \testclr{UPSE2-LightBlue},
+% \item |UPSE2-DarkPurple| \testclr{UPSE2-DarkPurple},
+% \item |UPSE2-MediumPurple| \testclr{UPSE2-MediumPurple},
+% \item |UPSE2-LightPurple| \testclr{UPSE2-LightPurple},
+% \item |UPSE2-DarkOcher| \testclr{UPSE2-DarkOcher},
+% \item |UPSE2-MediumOcher| \testclr{UPSE2-MediumOcher},
+% \item |UPSE2-LightOcher| \testclr{UPSE2-LightOcher},
+% \item |UPSE2-DarkRed| \testclr{UPSE2-DarkRed},
+% \item |UPSE2-MediumRed| \testclr{UPSE2-MediumRed}, and
+% \item |UPSE2-LightRed| \testclr{UPSE2-LightRed}
+% \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 his sans-serif font \emph{Optima}
+% and \emph{Neo Euler} as the default math font;
+% we set \emph{Meslo LGS Nerd Font Mono} as the monospaced font.
+% Palatino and Optima 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 Optima,
+% 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}{fontmode}
+% \begin{syntax}
+% |fontmode| = \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|.
+% \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{Optima}An example text in Optima}
+% \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-09-09} {1.0.0}
+ {A thesis class for the Chair of Software Engineering II}
+% \end{macrocode}
+%
+% 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_@@_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_@@_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}{\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]{336pt}{630pt}
+ \setlength{\marginparsep}{8.5cm}
+ \setlength{\marginparsep}{1em}
+ }{
+ \int_compare:nTF { \l_@@_paper_int=2 }
+ {
+ \areaset[current]{238pt}{445pt}
+ \setlength{\marginparsep}{6.0cm}
+ \setlength{\marginparsep}{0.71em}
+ }{
+ \areaset[current]{291pt}{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-DarkBlue}%
+ \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-DarkBlue}\headmark
+ \group_end:
+ \hspace*{\l_@@_rulespace_dim}%
+ \group_begin:
+ \color{UPSE2-DarkBlue}%
+ \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-DarkBlue}%
+ \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-DarkBlue}%
+ \rule[\l_@@_ruleraise_dim]{\l_@@_rulewidth_dim}{\l_@@_rulethickness_dim}%
+ \group_end:
+ \hspace*{\l_@@_headmarkspace_dim}%
+ \group_begin:
+ \color{UPSE2-DarkBlue}\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_@@_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}
+\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/09/09]
+\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{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/09/09]
+\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{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-09-09} {1.0.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 }
+ {
+ colormode .choice:,
+ colormode / 4C .code:n = {
+ \PassOptionsToPackage{cmyk}{xcolor}
+ \tl_gset:Nn \l_@@_colormode_tl {4C}
+ },
+ colormode / RGB .code:n = {
+ \PassOptionsToPackage{rgb}{xcolor}
+ \tl_gset:Nn \l_@@_colormode_tl {RGB}
+ },
+ colormode / BW .code:n = {
+ \PassOptionsToPackage{gray}{xcolor}
+ \tl_gset:Nn \l_@@_colormode_tl {BW}
+ },
+ colormode / CMYK .meta:n = {colormode=4C},
+ colormode / cmyk .meta:n = {colormode=4C},
+ colormode / rgb .meta:n = {colormode=RGB},
+ colormode / gray .meta:n = {colormode=BW},
+ RGB .meta:n = {colormode=RGB},
+ rgb .meta:n = {colormode=rgb},
+ CMYK .meta:n = {colormode=4C},
+ cmyk .meta:n = {colormode=4C},
+ gray .meta:n = {colormode=BW},
+ }
+\keys_set:nn { seiicolors } { colormode = 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-}{}{%
+ Gray,123,131,133/.08,.02,0,.48;%
+ Orange,229,137,0/0,.40,1.0,.10%
+}
+% \end{macrocode}
+%
+% Define the additional colours.
+% \begin{macrocode}
+\definecolorset[named]{RGB/cmyk}{UPSE2-}{}{%
+ DarkGreen,85,100,85/.6,.2,.6,.35;%
+ MediumGreen,105,150,115/.55,0,.55,.10;%
+ LightGreen,140,175,130/.4,0,.5,.05;%
+ DarkBlue,80,110,150/.70,.40,0,.15;%
+ MediumBlue,105,155,190/.55,.1,0,.1;%
+ LightBlue,135,185,200/.4,0,.10,.05;%
+ DarkPurple,100,80,120/.6,.8,.05,.15;%
+ MediumPurple,130,90,125/.35,.7,.1,.15;%
+ LightPurple,160,135,170/.3,.45,.05,0;%
+ DarkOcher,120,100,80/.35,.45,.65,.25;%
+ MediumOcher,150,130,95/.25,.3,.6,.15;%
+ LightOcher,185,145,100/.1,.25,.6,.1;%
+ DarkRed,180,20,40/.05,1,.8,.05;%
+ MediumRed,210,90,80/0,.75,.6,.1;%
+ LightRed,255,145,125/.05,.5,.45,.05%
+}
+% \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-09-09} {1.0.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 }
+ {
+ fontmode .choice:,
+ fontmode / original .code:n = {
+ \tl_gset:Nn \l_@@_fontmode_tl {original}
+ },
+ fontmode / replacement .code:n = {
+ \tl_gset:Nn \l_@@_fontmode_tl {replacement}
+ },
+ fontmode / auto .code:n = {
+ \tl_gset:Nn \l_@@_fontmode_tl {auto}
+ },
+ original .meta:n = {fontmode=original},
+ replacement .meta:n = {fontmode=replacement},
+ auto .meta:n = {fontmode=auto},
+ }
+\keys_set:nn { seiifonts } { fontmode = 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}
+%
+% The user wants to have the |original| fonts,
+% which are Palatino, Optima, MesloLGS Nerd Font Mono, and Neo Euler.
+% \begin{macrocode}
+ \tl_if_eq:NnT \l_@@_fontmode_tl {original}
+ {
+ \setmainfont{Palatino}[Ligatures=TeX]
+ \setsansfont{Optima}[Ligatures=TeX]
+ \setmonofont{MesloLGS Nerd Font Mono}
+ \setmathfont{Neo Euler}[Ligatures=TeX]
+ }
+% \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}[Ligatures=TeX]
+ \setsansfont{TeX Gyre Heros}[Ligatures=TeX, Scale=0.9]
+ \setmonofont{Fira Code}[Ligatures=TeX]
+ \setmathfont{TeX Gyre Pagella Math}[Ligatures=TeX]
+ \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}[Ligatures=TeX] }
+ { \setmainfont{TeX Gyre Pagella}[Ligatures=TeX] }
+ \IfFontExistsTF { Optima }
+ { \setsansfont{Optima}[Ligatures=TeX] }
+ { \setsansfont{TeXGyre Heros}[Ligatures=TeX] }
+ \IfFontExistsTF{ MesloLGS Nerd Font Mono }
+ { \setmonofont{MesloLGS Nerd Font Mono} }
+ { \setmonofont{Fira Code}[Scale=0.85] }
+ \IfFontExistsTF { Neo Euler }
+ { \setmathfont{Neo Euler}[Ligatures=TeX] }
+ {
+ \setmathfont{TeX Gyre Pagella Math}[Ligatures=TeX]
+ \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
diff --git a/macros/latex/contrib/se2thesis/se2thesis.ins b/macros/latex/contrib/se2thesis/se2thesis.ins
new file mode 100644
index 0000000000..41b570d46c
--- /dev/null
+++ b/macros/latex/contrib/se2thesis/se2thesis.ins
@@ -0,0 +1,100 @@
+\iffalse meta-comment
+
+File: se2thesis.ins 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.
+
+------------------------------------------------------------------------
+
+\fi
+
+\input l3docstrip.tex
+\askforoverwritefalse
+
+% stop DocStrip adding rather wordy text
+\preamble
+Copyright (C) 2022 by Stephan Lukasczyk <tex@lukasczyk.me>
+
+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 work is "maintained" (as per LPPL maintenance status by
+ Stephan Lukasczyk.
+
+This work consists of the files se2thesis.dtx,
+ se2thesis.ins,
+ and the derived files se2thesis.pdf,
+ se2thesis.cls,
+ se2translations-english.trsl,
+ se2translations-german.trsl,
+ se2colors.sty, and
+ se2fonts.sty
+\endpreamble
+\nopostamble
+
+\keepsilent
+
+\generate
+ {%
+ \file{se2thesis.cls}
+ {%
+ \from{se2thesis.dtx}{init}
+ \from{se2thesis.dtx}{class}
+ }
+ }
+\generate
+ {%
+ \file{se2translations-english.trsl}
+ {%
+ \from{se2thesis.dtx}{translations,english}
+ }
+ }
+\generate
+ {%
+ \file{se2translations-german.trsl}
+ {%
+ \from{se2thesis.dtx}{translations,german}
+ }
+ }
+\generate
+ {%
+ \file{se2colors.sty}
+ {%
+ \from{se2thesis.dtx}{init}
+ \from{se2thesis.dtx}{colors}
+ }
+ }
+\generate
+ {%
+ \file{se2fonts.sty}
+ {%
+ \from{se2thesis.dtx}{init}
+ \from{se2thesis.dtx}{fonts}
+ }
+ }
+
+\endbatchfile
+
+%% vim: set ft=tex : \ No newline at end of file
diff --git a/macros/latex/contrib/se2thesis/se2thesis.pdf b/macros/latex/contrib/se2thesis/se2thesis.pdf
new file mode 100644
index 0000000000..fe7fc82742
--- /dev/null
+++ b/macros/latex/contrib/se2thesis/se2thesis.pdf
Binary files differ