-
Notifications
You must be signed in to change notification settings - Fork 1
/
thesistu.dtx
2143 lines (2141 loc) · 80.2 KB
/
thesistu.dtx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% \iffalse meta-comment
%
%% thesistu.dtx
%% Copyright (C) 2016- by Maximilian Hoheiser <[email protected]>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Maximilian Hoheiser.
%
% This work consists of the files thesistu.dtx and thesistu.ins
% and the derived file thesistu.cls.
% This work also consists of the file intro.tex.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{thesistu.dtx}
%</driver>
%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<class>\ProvidesClass{thesistu}
%<*class>
[2016/09/01 v0.1 TU Wien Faculty of Physics thesis template]
%</class>
%
%<*driver>
\documentclass{ltxdoc}
\usepackage[parfill]{parskip}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage[columns=1,totoc=true]{idxlayout}
\usepackage{hypdoc}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{thesistu.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{0}
%
% \CharacterTable
% {Upper-case \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
% Lower-case \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
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
%% \newcommand{\issue}[1]{\href{https://gitlab.cg.tuwien.ac.at/auzinger/thesistu/issues/#1}{Issue \#{}#1}}
%
%
%
% \changes{v0.9}{2014/05/30}{Pre-release version}
% \changes{v1.0}{2014/09/07}{Initial release version}
% \changes{v1.1}{2014/10/07}{Added references to the GitLab environment}
% \changes{v1.3}{2014/11/25}{Added support for a dissertation at the Vienna Phd School of Informatics. \issue{4}}
% \changes{v1.4}{2015/08/01}{Added comma to separate posttitle and changed mainmatter pagestyle to `Ruled'.}
% \changes{v1.5}{2016/01/17}{Updated name of university to `TU Wien'.}
% \changes{v2.0}{2016/09/01}{added setinstitut, setuniversity, setfaculty, added the possibility to set header and logo}
% \changes{v2.1}{2016/12/08}{added appendix, added introduction, added lva in titlepage}
%
% \GetFileInfo{thesistu.dtx}
%
% \DoNotIndex{\DeclareOption,\LoadClass,\PassOptionsToClass,\ProcessOptions,\RequirePackage}
% \DoNotIndex{\f@family}
% \DoNotIndex{\newcommand,\newenvironment,\edef,\let,\renewcommand,\renewenvironment,\set,\xdef}
% \DoNotIndex{\begin,\begingroup,\end,\endgroup}
% \DoNotIndex{\@empty,\@namedef,\@namelet,\@nameuse,\csname,\endcsname}
% \DoNotIndex{\",\\}
% \DoNotIndex{\else,\fi,\ifcsempty,\ifcsstring,\ifdefstrequal,\ifdefstring,\ifdraftdoc,\ifstrempty,\ifstrequal,\ifundef}
% \DoNotIndex{\baselineskip,\bfseries,\bigskip,\centering,\chapter,\chapterstyle,\cleardoublepage,\displaydate,\expandafter,\fontsize,\footruleskip,\global,\graphicspath,\hfill,\hspace,\includegraphics,\languagename,\makeevenfoot,\makeevenhead,\makefootrule,\makeheadposition,\makeoddfoot,\makeoddhead,\makepagestyle,\makerunningwidth,\newdata,\newgeometry,\newlength,\pagestyle,\par,\parindent,\parskip,\raisebox,\relax,\restoregeometry,\rule,\selectfont,\selectlanguage,\setkeys,\setlength,\sfdefault,\sffamily,\smallskip,\space,\ss,\string,\textwidth,\thispagestyle,\vfill,\vspace}
% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
%
% \newcommand{\ispoly}{\textsuperscript{P}}
%
% \title{The \textsf{thesistu} class\thanks{This document
% corresponds to \textsf{thesistu}~\fileversion, dated \filedate.}}
% \author{Maximilian Hoheiser \\ \texttt{[email protected]}}
%
% \maketitle
%
% \begin{abstract}
% This class provides a \LaTeXe\ template for theses at any Faculty at any University gifen by the author, only a Logo of the Faculty and University is needed. With a little effort it can be adapted to fit any Faculty at any Universit.
% In the current version, bachelor and master theses as well as dissertations are supported in both English and German.
% \end{abstract}
%
% \clearpage
% \tableofcontents
% \clearpage
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Introduction}
%
% This class provides a \LaTeXe\ template for all theses at the Faculty of Physics at the TU Wien. It can be adapted to fit any Faculty at any Universit.
% Further information on the document class and accompanying support can be found at \url{https://madmaxt800.github.io/thesistu/}.
% Further guidelines may apply to both the format and structure of certain theses.
% Thesis authors are advised to consult Section~\ref{sec:user} for a documentation of all relevant commands.
% Information for class developers is provided in Section~\ref{sec:class}.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Known Issues}
%
% This class is incompatible with the |minitoc| package as of version 60, due to the incompatibility of the underlying |memoir| class.
% Use the |titletoc| package as a replacement.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Usage for Document Authors}
% \label{sec:user}
%
% This section contains relevant information for authors of theses that are based on the |thesistu| document class.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \subsection{Data}
% \label{sec:user:data}
%
% To allow the generation of the title pages, signature fields, statements, etc., several pieces of information have to be set by the author using the commands in the subsequent sections.
% We discern several categories of data: \textit{(i)} textual data, which is given by a simple text string, \textit{(ii)} persons, which are defined by their names, optional titles, and their gender, as well as, \textit{(iii)} dates and \textit{(iv)} list data, which allow the selection of one argument from a list of permissible arguments.
% Several commands have polylingual capabilities and support different languages (see Section~\ref{sec:user:data:polylingual}). A superscript P, i.e., |\command|\ispoly, indicates such a command.
%
% \subsubsection{Textual Data}
% \label{sec:user:data:text}
%
% \DescribeMacro{\setaddress}
% \DescribeMacro{\setregnumber}
% \DescribeMacro{\settitle}
% \DescribeMacro{\setsubtitle}
% \DescribeMacro{\setcurriculum}
% \DescribeMacro{\setuniversity}
% \DescribeMacro{\setfirstreviewerdata}
% \DescribeMacro{\setsecondreviewerdata}
% \DescribeMacro{\setfaculty}
% \DescribeMacro{\setinstitut}
% \DescribeMacro{\setlecture}
%
%
% All commands in this section are called with one mandatory argument, e.g., as |\command|\marg{text}, where \meta{text} defines the content of the commands. For polylingual commands, given by |\command|\ispoly, one \meta{text} argument has to supplied for each language (see Section~\ref{sec:user:data:polylingual}). The following textual data can be set:
% \begin{center}
% \begin{tabular}{lllc}
% \toprule
% Command & Role & Type & Optional\\
% \midrule
% |\setaddress| & Address of the author & All & No \\
% |\setregnumber| & Registration number of the author & All & No \\
% |\settitle|\ispoly & Title of the thesis & All & No \\
% |\setsubtitle|\ispoly & Subtitle of the thesis & All & Yes \\
% |\setcurriculum|\ispoly & Name of the curriculum & B, M & No \\
% |\setuniversity| & Name of the university & B, M & No \\
% |\setfaculty| & Name of the faculty & B, M & No \\
% |\setinstitut| & Name of the institut & B, M & No \\
% |\setlecture| & Name of the lecture & All & Yes \\
% \midrule
% \multicolumn{4}{l}{Types: Bachelor (B), Master (M), Doctoral (D), PhD School (P), All (All)} \\
% \bottomrule
% \end{tabular}
% \end{center}
%
% \begin{center}
% \begin{tabular}{lllc}
% \toprule
% Command & Role & Type & Optional\\
% \midrule
% |\setfirstreviewerdata| & Affiliation and country & P & No \\
% & of first reviewer & & \\
% |\setsecondreviewerdata| & Affiliation and country & P & No \\
% & of second reviewer & & \\
% \midrule
% \multicolumn{4}{l}{Types: Bachelor (B), Master (M), Doctoral (D), PhD School (P), All (All)} \\
% \bottomrule
% \end{tabular}
% \end{center}
%
% \subsubsection{Persons}
% \label{sec:user:data:person}
%
% \DescribeMacro{\setauthor}
% \DescribeMacro{\setadvisor}
% \DescribeMacro{\setsecondadvisor}
% \DescribeMacro{\setfirstassistant}
% \DescribeMacro{\setsecondassistant}
% \DescribeMacro{\setthirdassistant}
% \DescribeMacro{\setfirstreviewer}
% \DescribeMacro{\setsecondreviewer}
% All commands in this section are called with four mandatory arguments, e.g., as |\command|\marg{pretitle}\marg{name}\marg{posttitle}\marg{gender}, where \meta{name} defines both the first name(s) and family name(s) of the person. A title that is placed before the name is assigned with \meta{pretitle}, while a trailing title is given with \meta{posttitle}. Both \meta{pretitle} and \meta{posttitle} can be left empty, to indicate an absence of such a title; the insertion of appropriate glue between titles and names is handled by the |thesistu| class. The declaration of the persons gender via \meta{gender} allows the use of gender-specific terms in languages that support them, e.g., German. The possible options for \meta{gender} are |male| and |female| (see Section~\ref{sec:user:data:list}). The following persons can be set:
% \begin{center}
% \begin{tabular}{lllc}
% \toprule
% Command & Role & Type & Optional\\
% \midrule
% |\setauthor| & Author of the thesis & All & No \\
% |\setadvisor| & Main advisor of the thesis & All & No \\
% |\setsecondadvisor| & Second advisor of the thesis & P & Yes \\
% |\setfirstassistant| & First advising assistant & B, M & Yes \\
% |\setsecondassistant| & Second advising assistant & B, M & Yes \\
% |\setthirdassistant| & Third advising assistant & B, M & Yes \\
% |\setfirstreviewer| & First thesis reviewer & D, P & No \\
% |\setsecondreviewer| & Second thesis reviewer & D, P & No \\
% \midrule
% \multicolumn{4}{l}{Types: Bachelor (B), Master (M), Doctoral (D), PhD School (P), All (All)} \\
% \bottomrule
% \end{tabular}
% \end{center}
%
% \subsubsection{Dates}
%
% \DescribeMacro{\setdate}
% All commands in this section are called with three madatory arguments, e.g., as |\command|\marg{day}\marg{month}\marg{year}. The syntax is identical to the last three arguments of the |\newdate| command of the |datetime| package, from which these commands derive. The following dates can be set:
% \begin{center}
% \begin{tabular}{lllc}
% \toprule
% Command & Role & Type & Optional\\
% \midrule
% |\setdate| & Signing date & All & No \\
% \midrule
% \multicolumn{4}{l}{Types: Bachelor (B), Master (M), Doctoral (D), PhD School (P), All (All)} \\
% \bottomrule
% \end{tabular}
% \end{center}
%
% \subsubsection{List Data}
% \label{sec:user:data:list}
%
% All commands in this section are called with at least one madatory argument called \meta{list}, e.g., as |\command|\dots\marg{list}\dots, where \meta{list} is given one element from a set of possible arguments.
%
% \DescribeMacro{\setauthor}
% \DescribeMacro{\setadvisor}
% \marginpar{\strut\hfill$\cdots$}
% When setting a person, the person's gender is specified with a list argument (see Section~\ref{sec:user:data:person}):
% \begin{center}
% \begin{tabular}{lllc}
% \toprule
% Command & Options & Description\\
% \midrule
% |\command|\marg{.}\marg{.}\marg{.}\marg{list} & |male| & Specifies a male person. \\
% & |female| & Specifies a female person. \\
% \bottomrule
% \end{tabular}
% \end{center}
%
% \DescribeMacro{\setthesis}
% The thesis type is selected from one of the fundamental types:
% \begin{center}
% \begin{tabular}{lllc}
% \toprule
% Command & Options & Description\\
% \midrule
% |\setthesis|\marg{list} & |bachelor| & Specifies a bachelor's thesis. \\
% & |master| & Specifies a master's thesis. \\
% & |doctor| & Specifies a dissertation. \\
% & |phd-school| & Specifies a disseration at the Vienna \\
% & & PhD school of Informatics. \\
% \bottomrule
% \end{tabular}
% \end{center}
%
%
% \DescribeMacro{\setmasterdegree}
% With a master's curriculum, different degrees can be achieved and the appropriate type has to be chosen based on the curriculum that the author is enroled in:
% \begin{center}
% \begin{tabular}{lllc}
% \toprule
% Command & Options & Description\\
% \midrule
% |\setmasterdegree|\marg{list} & |dipl.| & Specifies the degree \\
% & & \hspace{1ex}`Diplom-Ingenieur(in)'. \\
% & |master| & Specifies the degree \\
% & & \hspace{1ex}`Master of Science'. \\
% & |rer.nat.| & Specifies the degree \\
% & & \hspace{1ex}`Magist(er/ra) der Natur- \\
% & & \hspace{1ex}wissenschaften'. \\
% & |rer.soc.oec.| & Specifies the degree \\
% & & \hspace{1ex}`Magist(er/ra) der Sozial- und \\
% & & \hspace{1ex}Wirtschaftswissenschaften'. \\
% \bottomrule
% \end{tabular}
% \end{center}
%
% \DescribeMacro{\setdoctordegree}
% With a doctorate study, different degrees can be achieved and the appropriate type has to be chosen based on the program that the author is enroled in:
% \begin{center}
% \begin{tabular}{lllc}
% \toprule
% Command & Options & Description\\
% \midrule
% |\setdoctordegree|\marg{list} & |techn.| & Specifies the degree \\
% & & \hspace{1ex}`Doktor(in) der Technischen' \\
% & & \hspace{1ex}Wissenschaften'. \\
% & |rer.nat.| & Specifies the degree \\
% & & \hspace{1ex}`Doktor(in) der Natur- \\
% & & \hspace{1ex}wissenschaften'. \\
% & |rer.soc.oec.| & Specifies the degree \\
% & & \hspace{1ex}`Doktor(in) der Sozial- und \\
% & & \hspace{1ex}Wirtschaftswissenschaften'. \\
% \bottomrule
% \end{tabular}
% \end{center}
%
% \subsubsection{Polylingual Data}
% \label{sec:user:data:polylingual}
%
% \DescribeMacro{\setcurriculum}
% Used as |\setcurriculum|\marg{english}\marg{german}, it sets the name of the curriculum that the student is enroled in.
% The name can be given in English, with \meta{english}, and in German, with \meta{german}.
% Note that the curriculum name does not need to be supplied for all thesis types, since, e.g., doctoral studies do not have a curriculum per se.
% If a title page of one of the languages is not used, the corresponding argument can be left empty.
%
% \DescribeMacro{\settitle}
% Used as |\settitle|\marg{english}\marg{german}, it sets the title of the thesis.
% The title can be given both in an English version, with \meta{english}, and in a German version, with \meta{german}.
% For title pages in a given language, the corresponding title will be used.
% Unused languages can be supplied as empty brackets and it is possible to use the English or German title for both language versions.
%
% \DescribeMacro{\setsubtitle}
% Used as |\setsubtitle|\marg{english}\marg{german}, it sets the subtitle of the thesis.
% The same specifications as for |\settitle| apply.
%
% \DescribeMacro{\setuniversity}
% Use as |\setuniversity|\marg{english}\marg{german}, it sets the university name both in englisch and in german,
% if both the english and the german titlepage are used, both names must be supplied.
%
% \DescribeMacro{\setfaculty}
% Use as |\setfaculty|\marg{englisch}\marg{german},it sets the faculty name both in englisch and in german,
% if bot the englisch and the german titlepage are used, both names mutst be supplied.
%
% \DescribeMacro{\setinstitut}
% Use as |\setinstitut}|\marg{english}\marg{german}, it specifies a name for yout institut, like the |\setinstitut| macro depending
% on which tilepage is used, the german and, or the english name must be supplied.
%
% \changes{v2.1}{2016/12/08}{added appendix, added introduction, added lva in titlepage}
%
% \DescribeMacro{\setlecture}
% Use as |\setlecture}|\marg{english}\marg{german}, it specifies a name for the lecture under which the thesis is written, like the |\setlecture| macro depending
% on which tilepage is used, the german and, or the english name must be supplied.
%
%
% \DescribeMacro{\addtitlepage}
% The titlepage can be generated in the following languages (see Section~\ref{sec:user:layout}):
% \begin{center}
% \begin{tabular}{lllc}
% \toprule
% Command & Options & Description\\
% \midrule
% |\addtitlepage|\marg{list} & |english| & Generates an English title page. \\
% & |naustrian| & Generates a German title page. \\
% \bottomrule
% \end{tabular}
% \end{center}
% Note that a non-English title page is not yet available for a dissertation at the Vienna PhD School.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \subsection{Layout}
% \label{sec:user:layout}
%
% Most of the data that is supplied with the commands of the previous sections is used to generate the front matter of the thesis.
% It consists of obligatory items such as the title page(s) and the statement of originality as well as optional items such as the acknowledgements or the abstract in different languages and also an indroduction.
% In the remainder of this section, the available items of the front matter are given.
%
% \changes{v2.0}{2016/09/22}{added the possibility to set header and logo}
% \DescribeMacro{\setlogo}
% Used as |\setlogo|\marg{UNins}, where \meta{UN} are the first two letters of your university
% and \meta{ins} are the first tree letters of your institut. The Logo-File must be a vektor graphic with the |.eps| format.
% The file must be placed in the main graphics folder and must have the name: |UNins_logo.eps|. To create your own, use the given ones as referenc. And make sure, that you subbmit your new ones to GitHub
% \DescribeMacro{\setheader}
% Used as |\setheader|\marg{UNins}, where \meta{UN} are the first two Letters of your university
% and \meta{ins} are the first tree letters of your institut. The Logo-File must be a vektor graphic with the |.eps| format.
% The file must be placed in the main graphics folder and must have the name: |UNins_header.eps|. To create your own, use the given ones as referenc. And make sure, that you subbmit your new ones to GitHub.
%
% The goal is to have as many logos and headers as possible, so that the author only has to specify one and not create his/her own.
% A list is given and regularly updated which lists the available ones:
% \begin{center}
% \begin{tabular}{lrr}
% \toprule
% Name & University & Institut\\
% \midrule
% TUinf & TU Wien & Informatik\\
% TUifp & TU Wien & Institut f\"ur Festk\"orperphysik\\
% \bottomrule
% \end{tabular}
% \end{center}
%
% \changes{v2.0}{2016/09/21}{added ability to change footer on titlepage}
% The following section describes the inforation that is needet for the fotnote on the titlepage, besides the university name.
%
% \DescribeMacro{\setunizipcode}
% Used as |\setunizipcode|\marg{ZipCode}, where \meta{ZipCode} is the ZipCode of the University in the form of eg:
% \marg{A-1040}, where \meta{A} is the first letter of the country, and \meta{1040} is the actual zipcode.\\
% \DescribeMacro{\setunistreet}
% Used as |\setunistreet|\marg{Steetname Steetnumber}, where \meta{Steetname} ist the name of the steet,
% and \meta{Streetnumber} is the Steetnumber of the university.\\
% \DescribeMacro{\unicity}
% Used as |\setunicity|\marg{City}, where \meta{City} is the City of your universities address.\\
% \DescribeMacro{\setunitelnr}
% Used as |\setunitelnr|{Telephone Number}, where \meta{Telephone Number} is the main telephone number of your university,
% this is not necessary but the layout will look better with the telephone number gifen.\\
% \DescribeMacro{\setuniwebsite}
% Used as |\setuniwebsite|\marg{URL}, where \meta{URL} is the website of your university (without http://).\\
%
% \DescribeMacro{\addtitlepage}
% Used as |\addtitlepage|\marg{lang}, where \meta{lang} is the name of a language as given in the |babel| package (see Section~\ref{sec:user:data:list}). The necessary pieces of information have to be set beforehand (as described in Section~\ref{sec:user:data}). This command is usually used directly after |\begin{document}\frontmatter|.
%
% \DescribeMacro{\addstatementpage}
% Used as |\addstatementpage|, it generates a page with the statement of originality.
%
% \DescribeEnv{acknowledgements}
% \DescribeEnv{acknowledgements*}
% Used as |\begin{acknowledgements}|\meta{text}|\end{acknowledgements}|, this environment generates a chapter with the English acknowledgements. Use the starred version, i.e., |acknowledgements*|, to remove the table of content entry of this environment.
%
% \DescribeEnv{danksagung}
% \DescribeEnv{danksagung*}
% Used as |\begin{danksagung}|\meta{text}|\end{danksagung}|, this environment generates a chapter with the German acknowledgements. Use the starred version, i.e., |danksagung*|, to remove the table of content entry of this environment.
%
% \DescribeEnv{abstract}
% \DescribeEnv{abstract*}
% Used as |\begin{abstract}|\meta{text}|\end{abstract}|, this environment generates a chapter with the English abstract. Use the starred version, i.e., |abstract*|, to remove the table of content entry of this environment.
%
% \DescribeEnv{kurzfassung}
% \DescribeEnv{kurzfassung*}
% Used as |\begin{kurzfassung}|\meta{text}|\end{kurzfassung}|, this environment generates a chapter with the German abstract. Use the starred version, i.e., |kurzfassung*|, to remove the table of content entry of this environment.
%
% \changes{v2.1}{2016/12/08}{added appendix, added introduction, added lva in titlepage}
%
% \DescribeEnv{introduction}
% \DescribeEnv{introduction*}
% Used as |\begin{introduction}|\meta{text}|\end{introduction}|, this environment generates a chapter with the English introduction. Use the starred version, i.e., |introduction*|, to remove the table of content entry of this environment.
%
% \DescribeEnv{einleitung}
% \DescribeEnv{einleitung*}
% Used as |\begin{einleitung}|\meta{text}|\end{einleitung}|, this environment generates a chapter with the German introduction. Use the starred version, i.e., |einleitung*|, to remove the table of content entry of this environment.
%
%
% All the above sections are displayed without chapter header, chapter or section numbering and are listed and are numberd in the table of contents with roman numbers.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Usage for Class Writers}
% \label{sec:class}
%
% To accomodate shifting requirements, the |thesistu| class provides various convenience functions that allow the modification and extension of its functionality.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \subsection{Data}
%
% To compose several parts of the thesis layout, input from the thesis author is required.
% For the |thesistu| class, this is realized by the commands provided in Section~\ref{sec:user:data}.
% Additional data can be defined with the the commands in the remainder of this section.
%
% \DescribeMacro{\CreateData}
% Used as |\CreateData|\marg{name}, it generates a command |\set|\meta{name}.
% Used as |\set|\meta{name}\marg{string}, the newly created command assigns the value \meta{string} to the internal variable |\thesistu@data@|\meta{name}.
% The variable is initialized with an error value to alert the user of the fact that \meta{string} was not supplied via the |\set|\meta{name} command.
% Furthermore, a command |\thesistu@data@|\meta{name}|@def| is created, to increase source code readability when verifying the existance of a specific data item.
% See Section~\ref{sec:impl:data:declarations} for examples.
%
% \DescribeMacro{\CreatePerson}
% Used as |\CreatePerson|\marg{name}, it generates a command |\set|\meta{name}.
% Used as |\set|\meta{name}\marg{pretitle}\marg{personname}\marg{posttitle}\marg{gender}, the newly created command assigns the supplied values to the corresponding internal variables |\thesistu@person@|\meta{name}|@|\textellipsis as given in the table below.
% \begin{center}
% \begin{tabular}{lllc}
% \toprule
% Argument & Internal Variable\\
% \midrule
% & |\thesistu@person@|\meta{name}|@def| \\
% \meta{pretitle} & |\thesistu@person@|\meta{name}|@pretitle| \\
% \meta{personname} & |\thesistu@person@|\meta{name}|@name| \\
% \meta{posttitle} & |\thesistu@person@|\meta{name}|@posttitle| \\
% \meta{gender} & |\thesistu@person@|\meta{name}|@gender| \\
% \bottomrule
% \end{tabular}
% \end{center}
% The command |\thesistu@person@|\meta{name}|@def| is created to increase source code readability when verifying the existance of a specific person.
% Furthermore, the command |\thesistu@person@|\meta{name}|@fullname| returns the person's name together with existing titles and correct whitespace in between.
% The person's gender is either |\thesistu@person@male| or |\thesistu@person@female|, depending on the input.
% See Section~\ref{sec:impl:data:declarations} for examples.
%
% \DescribeMacro{\AddLanguage}
% Used as |\AddLanguage|\marg{lang}, it enables the language \meta{lang} to by used by polylingual expressions.
% \meta{lang} has to be chosed from the languages of the |babel| package that is used by this class.
% Currently, |thesistu| uses two languages, i.e., |english| for English expressions and |naustrian| for German expressions.
%
% \DescribeMacro{\CreatePolylingual}
% Used as |\CreatePolylingual|\oarg{expressions}\marg{name}, it generates a command |\thesistu@polylingual@|\meta{name} that selects the approriate expression based on the current language at the time of use.
% The argument \meta{expressions} is a list of elements of the form \meta{expr$_i$}, where each element defines the expression for a valid language, e.g., \meta{lang$_i$}=\meta{text$_i$}.
% \meta{lang$_i$} has to be chosen from the languages that were defined via |\AddLanguage|.
% As a convention, text that needs to start with an uppercase letter is assigned to a name that starts with an uppercase letter.
% The same holds for uppercase words, e.g.,\\
% |\CreatePolylingual[english=advisor,naustrian=Betreuer]{advisor}|\\
% |\CreatePolylingual[english=Advisor,naustrian=Betreuer]{Advisor}|\\
% |\CreatePolylingual[english=ADVISOR,naustrian=BETREUER]{ADVISOR}|.\\
% See Section~\ref{sec:impl:data:declarations} for examples.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \subsection{Layout}
%
% Several key elements in the layout of the frontmatter are encapsulated to allow a convenient extension of this functionality.
%
% \DescribeMacro{\SignatureFields}
% Used as |\SignatureFields|\oarg{mode}\marg{center}\marg{right}, it creates a place and date description and/or one or two signature fields.
% \meta{mode} can be set to |y|, which adds an entry with date and place to the left, to |h|, which adds the corresponding whitespace, or to |n|, which adds nothing.
% If text is supplied to \meta{center}, it is added below a rule, right to the possible date and place entry.
% If text is supplied to \meta{right}, it is added below a rule, right to the possible signature field created by \meta{center}.
% This command ensures a uniform width and positioning of the signature fields on both the title pages and the statement of originality.
%
% \DescribeMacro{\SignatureBlock}
% Used as |\SignatureBlock|, it generates the signature fields for both author and advisor.
%
% \DescribeMacro{\ReviewerBlock}
% Used as |\ReviewerBlock|, it generates the signature fields for both reviewers.
%
% \DescribeMacro{\AdvisorBlock}
% Used as |\AdvisorBlock|, it generates the name fields for both the advisor and the potential assistants.
%
% \DescribeMacro{\AddTitlePage}
% Used as |\AddTitlePage|, it generates a title page in the current language.
% This command contains the placement of the header graphics, the footer, the appropriate blocks, etc.
%
% \DescribeMacro{\AddStatementPage}
% Used as |\AddStatementPage|, it generates a chapter with the statement of originality together with the author's signature field.
%
% \DescribeEnv{SFFont}
% Alters the sans serif font inside the environment. Called with one mandatory argument as |\begin{SFFont}|\marg{family}, which determines the sans serif font family that should be used, e.g., |phv| for Helvetica.
%
% \StopEventually{}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Implementation}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \subsection{Initialization}
%
% \subsubsection{Class Options}
%
% Pass the options to the underlying memoir class.
%
% \begin{macrocode}
\DeclareOption*{%
\PassOptionsToClass{\CurrentOption}{memoir}%
}%
\ProcessOptions\relax
% \end{macrocode}
%
% \subsubsection{Loaded Class and Packages}
%
% The |thesistu| class is based on the |memoir| class.
% \begin{macrocode}
\LoadClass[a4paper,11pt]{memoir}%
\chapterstyle{veelo}%
% \end{macrocode}
% The following packages are required for the functionality and style of the document class.
% \begin{macrocode}
\RequirePackage[scaled]{helvet}%
\RequirePackage{lmodern}%
\RequirePackage{courier}%
\RequirePackage[T1]{fontenc}%
\RequirePackage[english,naustrian]{babel}%
\RequirePackage[nodayofweek]{datetime}%
\RequirePackage{geometry}%
\RequirePackage{calc}%
\RequirePackage{etoolbox}%
\RequirePackage{graphicx}%
\graphicspath{{graphics/}}%
% \end{macrocode}
%
%To use subfolders for each section in the graphics directory each subfolder hase to be defind in the main thesis.tex file as a search path for latex eg:
% |\graphicspath{{../graphics/chapter01}{../graphics/chapter02/}}| where the .. is used, so that each chapter can be placed in a subfolder relative to the main thesis.tex
% file and still find the correct path for the graphics.
%
% \subsubsection{Low-Level Functionality}
%
% This section provides low-level functionality for macro definitions and macro expansions.
%
% \begin{macro}{\@namexdef}
% Globally defines a control sequence with an expanded argument.
% \begin{macrocode}
\newcommand{\@namexdef}[1]{\expandafter\xdef\csname#1\endcsname}%
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\todo}
% Comment for the final version, to raise errors.
% \begin{macrocode}
\newcommand{\todo}[1]{{\color{red}\textbf{TODO: {#1}}}}
% \end{macrocode}
%\end{macro}
%
% \begin{macro}{\ifestrequal}
% A variant of |\ifstrequal| that fully expands the first two arguments.
% \begin{macrocode}
\newcommand{\ifestrequal}[4]{%
\begingroup
\edef\thesistu@tempa{{#1}}%
\edef\thesistu@tempb{{#2}}%
\expandafter\expandafter\expandafter\ifstrequal
\expandafter\thesistu@tempa\thesistu@tempb{#3}{#4}%
\endgroup
}%
% \end{macrocode}
% \end{macro}
%
% \subsubsection{Fonts}
%
% \begin{macro}{\thesistu@HUGE}
% \begin{macro}{\thesistu@huge}
% \begin{macro}{\thesistu@LARGE}
% \begin{macro}{\thesistu@Large}
% \begin{macro}{\thesistu@large}
% \begin{macro}{\thesistu@normalsize}
% Initializes the font sizes.
% \begin{macrocode}
\newcommand{\thesistu@HUGE}{\fontsize{30}{34}\selectfont}%
\newcommand{\thesistu@huge}{\fontsize{20}{23}\selectfont}%
\newcommand{\thesistu@LARGE}{\fontsize{17}{22}\selectfont}%
\newcommand{\thesistu@Large}{\fontsize{14}{18}\selectfont}%
\newcommand{\thesistu@large}{\fontsize{12}{14.5}\selectfont}%
\newcommand{\thesistu@normalsize}{\fontsize{11}{13.6}\selectfont}%
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{environment}{SFFont}
% Selects the given font family as sans serif font.
% \begin{macrocode}
\newenvironment{SFFont}[1]{%
% \end{macrocode}
% Stores the current sans serif font in |\thesistu@f@family@tmp| and changes to the given sans serif font.
% \begin{macrocode}
\begingroup
\sffamily
\global\let\thesistu@f@family@tmp=\f@family
\endgroup
\renewcommand{\sfdefault}{#1}%
% \end{macrocode}
% In case the outer scope is already sans serif, the new font has to be activated.
% \begin{macrocode}
\ifdefstrequal{\f@family}{\thesistu@f@family@tmp}{\sffamily}{}%
}{%
% \end{macrocode}
% The scope of the font change is the environment itself. Thus, no cleanup code is required in case the outer scope was already sans serif.
% \begin{macrocode}
\renewcommand{\sfdefault}{\thesistu@f@family@tmp}%
}%
% \end{macrocode}
% \end{environment}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \subsection{Data}
%
% \subsubsection{Dates}
%
% \begin{macro}{\setdate}
% Creates the internal storage for the signing date.
% \begin{macrocode}
\newcommand{\setdate}[3]{%
\newdate{thesistu@date@signing}{#1}{#2}{#3}%
}%
% \end{macrocode}
% \end{macro}
%
% \subsubsection{Textual Data}
%
% \begin{macro}{\thesistu@def@data}
% Creates the internal storage for simple data entries.
% \begin{macrocode}
\newcommand{\thesistu@def@data}[2]{%
\@namedef{thesistu@data@#1@def}{}%
\@namedef{thesistu@data@#1}{#2}%
}%
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\thesistu@def@data@invalid}
% Initializes the internal storage with error messages.
% \begin{macrocode}
\newcommand{\thesistu@def@data@invalid}[2]{%
\@namedef{thesistu@data@#1@error}{%
\ClassError{thesistu}{No #2 issued}{Set #1 with #2.}%
}%
\@namedef{thesistu@data@#1}{\@nameuse{thesistu@data@#1@error}}%
}%
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\CreateData}
% Issues the construction of a setter function for a |data| entry given by |\setdata|.
% \begin{macrocode}
\newcommand{\CreateData}[1]{%
\@namedef{set#1}##1{%
\thesistu@def@data{#1}{##1}%
}%
\thesistu@def@data@invalid{#1}{\string\set#1}%
}%
% \end{macrocode}
% \end{macro}
%
% \subsubsection{Persons}
%
% \begin{macro}{\thesistu@person@male}
% \begin{macro}{\thesistu@person@female}
% Two genders are differentiated for each person: |male| and |female|.
% \begin{macrocode}
\newcommand{\thesistu@person@male}{male}%
\newcommand{\thesistu@person@female}{female}%
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ifmale}
% \begin{macro}{\iffemale}
% Convenience macros to determine the gender of a person.
% \begin{macrocode}
\newcommand{\ifmale}[2]{%
\ifcsstring{thesistu@person@#1@gender}{\thesistu@person@male}{#2}{}%
}%
\newcommand{\iffemale}[2]{%
\ifcsstring{thesistu@person@#1@gender}{\thesistu@person@female}{#2}{}%
}%
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\thesistu@def@person}
% \changes{v1.4}{2015/08/01}{Added comma to separate posttitle.}
% Creates the internal storage for a person's name, titles and gender.
% \begin{macrocode}
\newcommand{\thesistu@def@person}[5]{%
\@namedef{thesistu@person@#1@def}{}%
\@namedef{thesistu@person@#1@pretitle}{#2}%
\@namedef{thesistu@person@#1@name}{#3}%
\@namedef{thesistu@person@#1@posttitle}{#4}%
\ifdefstring{\thesistu@person@male}{#5}{%
\@namedef{thesistu@person@#1@gender}{\thesistu@person@male}%
}{}%
\ifdefstring{\thesistu@person@female}{#5}{%
\@namedef{thesistu@person@#1@gender}{\thesistu@person@female}%
}{}%
% \end{macrocode}
% For the full name, additional spaces have to be inserted depending on the presence of pre- or posttitles.
% \begin{macrocode}
\ifstrempty{#3}{%
\ifstrempty{#2}{%
\@namedef{thesistu@person@#1@fullname}{#4}%
}{%
\ifstrempty{#4}{%
\@namedef{thesistu@person@#1@fullname}{#2}%
}{%
\@namedef{thesistu@person@#1@fullname}{#2 #4}%
}%
}%
}{%
\ifstrempty{#2}{%
\ifstrempty{#4}{%
\@namedef{thesistu@person@#1@fullname}{#3}%
}{%
\@namedef{thesistu@person@#1@fullname}{#3, #4}%
}%
}{%
\ifstrempty{#4}{%
\@namedef{thesistu@person@#1@fullname}{#2 #3}%
}{%
\@namedef{thesistu@person@#1@fullname}{#2 #3, #4}%
}%
}%
}%
}%
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\thesistu@def@person@invalid}
% Initializes the internal storage with error messages.
% \begin{macrocode}
\newcommand{\thesistu@def@person@invalid}[2]{%
\@namedef{thesistu@person@#1@error}{%
\ClassError{thesistu}{No #2 issued}{Set #1 with #2.}%
}%
\@namedef{thesistu@person@#1@name}{%
\@nameuse{thesistu@person@#1@error}}%
\@namedef{thesistu@person@#1@pretitle}{%
\@nameuse{thesistu@person@#1@error}}%
\@namedef{thesistu@person@#1@posttitle}{%
\@nameuse{thesistu@person@#1@error}}%
\@namedef{thesistu@person@#1@gender}{%
\@nameuse{thesistu@person@#1@error}}%
\@namedef{thesistu@person@#1@fullname}{%
\@nameuse{thesistu@person@#1@error}}%
}%
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\CreatePerson}
% Issues the construction of a setter function for a |person| given by |\setperson|.
% \begin{macrocode}
\newcommand{\CreatePerson}[1]{%
\@namedef{set#1}##1##2##3##4{%
\thesistu@def@person{#1}{##1}{##2}{##3}{##4}%
}%
\thesistu@def@person@invalid{#1}{\string\set#1}%
}%
% \end{macrocode}
% \end{macro}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \subsubsection{Polylingual Text}
%
% This class supports bi- and polylingual text via a key-value mechanism. See the |\CreatePolylingual| command further down for the actual definition of polylingual expressions.
%
% \begin{macro}{\AddLanguage}
% Constructs the temporary variables and the permanent storage for polylingual text in the given language.
% \begin{macrocode}
\newcommand{\AddLanguage}[1]{%
% \end{macrocode}
% First, the key for the current language, given by its name in the |babel| package, is created. Keys of the |keyval| package are internally stored as |KV@|family|@|keyname, where we use |thesistu| as family name and the argument as key name. The value that is given to this key as part of a function argument is assigned to a temporary storage.
% \begin{macrocode}
\@namedef{KV@thesistu@#1}##1{%
\@namedef{thesistu@current@#1}{##1}%
}%
% \end{macrocode}
% The key value is initialized as empty.
% \begin{macrocode}
\@nameuse{KV@thesistu@#1}{}%
% \end{macrocode}
% The transfer from temporary to permanent storage is achieved by adding code to the already existing transfer routine. This causes each new language to issue the transfer for the previously defined language.
% \begin{macrocode}
\ifundef{\thesistu@allocate@polylingual}{%
% \end{macrocode}
% Define the transfer function, if it has not been defined so far.
% \begin{macrocode}
\newcommand{\thesistu@allocate@polylingual}[1]{\@empty}%
}{}%
% \end{macrocode}
% Store the current transfer function via |\let| to allow recursion.
% \begin{macrocode}
\@namelet{thesistu@allocate@polylingual@#1}%
\thesistu@allocate@polylingual
% \end{macrocode}
% Define the transfer function to permanent storage.
% \begin{macrocode}
\renewcommand{\thesistu@allocate@polylingual}[1]{%
% \end{macrocode}
% Call the transfer routine of the previously defined language.
% \begin{macrocode}
\@nameuse{thesistu@allocate@polylingual@#1}{##1}%
% \end{macrocode}
% To define the permanent storage, |\@namexdef| is used the definition's scope has to be global.
% \begin{macrocode}
\@namexdef{thesistu@##1@#1}{%
\ifcsempty{thesistu@current@#1}{%
% \end{macrocode}
% In draft mode we mark unassigned languages, i.e., polylingual expression that were not defined for a language that is in use when the polylingual expression is called.
% \begin{macrocode}
\ifdraftdoc{%
[Draft: No `#1' text for polylingual `##1'.]%
}\else{%
\relax
}\fi
}{%
% \end{macrocode}
% The use of |\@namexdef| expands the content of the temporary storage before assigning it to the permanent one.
% \begin{macrocode}
\@nameuse{thesistu@current@#1}%
}%
}%
}%
% \end{macrocode}
% At time of usage, the language, which is given as an argument, is checked against the currently active language.
% \begin{macrocode}
\ifundef{\thesistu@selectlanguage@polylingual}{%
% \end{macrocode}
% Define the language selection function, if it has not been defined so far.
% \begin{macrocode}
\newcommand{\thesistu@selectlanguage@polylingual}[1]{\@empty}%
}{}%
% \end{macrocode}
% Store the current selection function via |\let| to allow recursion.
% \begin{macrocode}
\@namelet{thesistu@selectlanguage@polylingual@#1}%
\thesistu@selectlanguage@polylingual
% \end{macrocode}
% Define the selection function.
% \begin{macrocode}
\renewcommand{\thesistu@selectlanguage@polylingual}[1]{%
% \end{macrocode}
% Call the selection routine of the previously defined language.
% \begin{macrocode}
\@nameuse{thesistu@selectlanguage@polylingual@#1}{##1}%
% \end{macrocode}
% The currently active language is given by |\languagename|. If it matches the language, which was supplied as the argument, the content of the current permanent storage is returned.
% \begin{macrocode}
\ifdefstring{\languagename}{#1}{\@nameuse{thesistu@##1@#1}}{}%
}%
}%
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\CreatePolylingual}
% Creates the actual polylingual expressions.
% \begin{macrocode}
\newcommand{\CreatePolylingual}[2][]{%
\begingroup
% \end{macrocode}
% The key-value pairs of the optional argument define the text that is returned for the respective languages. We use |thesistu| as the family name for the keys.
% \begin{macrocode}
\setkeys{thesistu}{#1}%
% \end{macrocode}
% Each key was already assigned a temporary storage, whose content has to be transfered to permanent storage.
% \begin{macrocode}
\thesistu@allocate@polylingual{#2}%
\endgroup
% \end{macrocode}
% The mandatory argument \marg{arg} is used to define the macro that returns the appropriate text for the currently active language.
% \begin{macrocode}
\@namedef{thesistu@polylingual@#2}{%
\thesistu@selectlanguage@polylingual{#2}}%
}%
% \end{macrocode}
% \end{macro}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \subsubsection{Thesis Types}
%
% \begin{macro}{\thesistu@thesis@basetype@undergraduate}
% \begin{macro}{\thesistu@thesis@basetype@graduate}
% Two thesis categories are differentiated: |undergraduate| and |graduate|.
% \begin{macrocode}
\newcommand{\thesistu@thesis@basetype@undergraduate}{%
thesistu@undergraduate}%
\newcommand{\thesistu@thesis@basetype@graduate}{%
thesistu@graduate}%
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ifundergraduate}
% \begin{macro}{\ifgraduate}
% Convenience macros to determine the category of the selected thesis type.
% \begin{macrocode}
\newcommand{\ifundergraduate}[1]{%
\ifestrequal{\thesistu@thesis@basetype}{%
\thesistu@thesis@basetype@undergraduate
}{#1}{}%
}%
\newcommand{\ifgraduate}[1]{%
\ifestrequal{\thesistu@thesis@basetype}{%
\thesistu@thesis@basetype@graduate
}{#1}{}%
}%
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\thesistu@thesis@doctortype@doctor}
% \changes{v1.3}{2014/11/25}{Added to support multiple dissertation types. \issue{4}}
% \begin{macro}{\thesistu@thesis@doctortype@phd}
% \changes{v1.3}{2014/11/25}{Added to support multiple dissertation types. \issue{4}}
% Two doctor thesis categories are differentiated: |doctor| and |phd|, where the latter is for dissertation in the context of the Vienna PhD School of Informatics.
% \begin{macrocode}
\newcommand{\thesistu@thesis@doctortype@doctor}{%
thesistu@doctor}%
\newcommand{\thesistu@thesis@doctortype@phd}{%
thesistu@phd}%
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ifdoctor}
% \changes{v1.3}{2014/11/25}{Added to support multiple dissertation types. \issue{4}}
% \begin{macro}{\ifphd}
% \changes{v1.3}{2014/11/25}{Added to support multiple dissertation types. \issue{4}}
% Convenience macros to determine the category of the selected doctor thesis type. These need to be nested inside |\ifgraduate| conditions.
% \begin{macrocode}
\newcommand{\ifdoctor}[1]{%
\ifestrequal{\thesistu@thesis@doctortype}{%
\thesistu@thesis@doctortype@doctor
}{#1}{}%
}%
\newcommand{\ifphd}[1]{%
\ifestrequal{\thesistu@thesis@doctortype}{%
\thesistu@thesis@doctortype@phd