From 0948049e9079ec6f512bf68a247495f36237d06e Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sat, 10 Sep 2022 03:01:32 +0000 Subject: CTAN sync 202209100301 --- macros/latex/contrib/csquotes/README.md | 2 +- macros/latex/contrib/csquotes/csq-compat.def | 2 +- macros/latex/contrib/csquotes/csquotes.def | 46 +- macros/latex/contrib/csquotes/csquotes.pdf | Bin 294724 -> 304739 bytes macros/latex/contrib/csquotes/csquotes.sty | 8 +- macros/latex/contrib/csquotes/csquotes.tex | 13 +- .../contrib/profcollege/doc/ProfCollege-doc.pdf | Bin 8832018 -> 8867402 bytes .../contrib/profcollege/latex/ProfCollege.sty | 481 +++- macros/latex/contrib/se2thesis/README.md | 14 + .../se2thesis/se2thesis-master-thesis-example.pdf | Bin 0 -> 1122537 bytes .../se2thesis/se2thesis-master-thesis-example.tex | 95 + macros/latex/contrib/se2thesis/se2thesis.dtx | 2451 ++++++++++++++++++++ macros/latex/contrib/se2thesis/se2thesis.ins | 100 + macros/latex/contrib/se2thesis/se2thesis.pdf | Bin 0 -> 352914 bytes 14 files changed, 3081 insertions(+), 131 deletions(-) create mode 100644 macros/latex/contrib/se2thesis/README.md create mode 100644 macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf create mode 100644 macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex create mode 100644 macros/latex/contrib/se2thesis/se2thesis.dtx create mode 100644 macros/latex/contrib/se2thesis/se2thesis.ins create mode 100644 macros/latex/contrib/se2thesis/se2thesis.pdf (limited to 'macros/latex') 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 Binary files a/macros/latex/contrib/csquotes/csquotes.pdf and b/macros/latex/contrib/csquotes/csquotes.pdf 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 @@ % {}{}{} \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 Binary files a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf and b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf 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] @@ -346,6 +346,89 @@ \day=\the\PfCrappeljour\relax% } +%%% +% 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 %%% @@ -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 Binary files /dev/null and b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf 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} +% +% \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} +% +% \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} +% +% \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} +% +% \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} +% +% \end{macrocode} +% +% \begin{macrocode} +% +% \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} +% +% \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} +% +% \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 + +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 Binary files /dev/null and b/macros/latex/contrib/se2thesis/se2thesis.pdf differ -- cgit v1.2.3