forked from SchnitzlerJ/latex-templates
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ustutt.dtx
2730 lines (2730 loc) · 76.8 KB
/
ustutt.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
%
% Copyright (C) 2019--2020 by Philipp Tempel <[email protected]>
% -------------------------------------------------------
%
% This file 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.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{ustutt.dtx}
%</driver>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<*article>
\ProvidesClass{ustuttartcl}
[2020/02/14 v1.2.0 University of Stuttgart LaTeX class for articles]
%</article>
%<*book>
\ProvidesClass{ustuttbook}
[2020/02/14 v1.2.0 University of Stuttgart LaTeX class for books]
%</book>
%<*thesis>
\ProvidesClass{ustuttthesis}
[2020/02/14 v1.2.0 University of Stuttgart LaTeX class for theses]
%</thesis>
%<*class>
\typeout{}
\typeout{University of Stuttgart LaTeX template class created and maintained}
\typeout{ by Philipp Tempel <[email protected]>.}
\typeout{ Institute for Control Engineering of Machine Tools and Manufacturing}
\typeout{ Units, ISW, Seidenstrasse 36, D-70174 Stuttgart, Germany.}
%<article>\typeout{ Document class for articles, version v1.2.0 (2020/01/27)}
%<book>\typeout{ Document class for books, version v1.2.0 (2020/01/27)}
%<thesis>\typeout{ Document class for theses, version v1.2.0 (2020/01/27)}
\typeout{}
%</class>
%
%<*driver>
\documentclass{ltxdoc}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\usepackage{hyperref}
\begin{document}
\DocInput{ustutt.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 \~}
%
%
% \changes{v1.0}{2019/12/07}{Initial version}
%
% \GetFileInfo{ustutt.dtx}
%
% \DoNotIndex{\newcommand,\newenvironment,\PassOptionsToPackage,\PassOptionsToClass,\RequirePackage,\ExecuteOptions,\DeclareOption,\DeclareBoolOption,\DeclareStringOption,\DeclareComplementaryOption,\xspace}
%
%
% \title{The \textsf{ustutt*} classes\thanks{This document
% corresponds to \textsf{ustutt}~\fileversion, dated \filedate.}}
% \author{Philipp Tempel \\ \texttt{[email protected]}}
%
% \maketitle
%
% \section{Introduction}
%
% Put text here.
%
% \section{Usage}
%
% Put text here.
%
% \StopEventually{\PrintChanges\PrintIndex}
%
% \section{Implementation}
%
% \subsection{Setup Tasks}
%
% Some tasks have to be performed before we can initialize options to the class
% or load all necessary packages. This is what's going on here.
%
% The package is a toolbox of programming facilities geared primarily towards
% LaTeX class and package authors. It provides LaTeX frontends to some of the
% new primitives provided by e-TeX as well as some generic tools which are not
% strictly related to e-TeX but match the profile of this package. Note that the
% initial versions of this package were released under the name elatex. The
% package provides functions that seem to offer alternative ways of implementing
% some LaTeX kernel commands; nevertheless, the package will not modify any part
% of the LaTeX kernel.
% \begin{macrocode}
\RequirePackage{etoolbox}
% \end{macrocode}
%
% xparse – A generic document command parser
% The package provides a high-level interface for producing document-level
% commands. In that way, it offers a replacement for LaTeX2e’s |\newcommand|
% macro, with significantly improved functionality.
% The package is distributed as part of the l3packages bundle.
% \begin{macrocode}
\RequirePackage{xparse}
% \end{macrocode}
%
% The package defines commands that switch according to the prevailing 'draft'
% or 'final' options; each command takes two arguments, the first for the
% 'true', the second for the 'false' case. Commands are: |\ifdraft| determines
% whether we're operating in draft ('true') or final mode; |\ifoptiondraft|
% determines whether a 'draft' option has been given; and |\ifoptionfinal|
% determines whether a 'final' option has been given.
% \begin{macrocode}
\RequirePackage{ifdraft}
% \end{macrocode}
%
% The pgfkeys package (part of the pgf distribution) is a well-designed way of
% defining and using large numbers of keys for key-value syntaxes. However,
% pgfkeys itself does not offer means of handling LaTeX class and package
% options. This package adds such option handling to pgfkeys, in the same way
% that kvoptions adds the same facility to the LaTeX standard keyval package.
% \begin{macrocode}
\RequirePackage{pgfkeys}
\RequirePackage{pgfopts}
% \end{macrocode}
%
% The package generalises the macro patching commands provided by Philipp
% Lehmann’s etoolbox.
% \begin{macrocode}
\RequirePackage{xpatch}
% \end{macrocode}
%
% With chngcntr currently not working in TeXlive 2018, we need to add this.
%
% @TODO Remove once there is a chngcntr update
% \begin{macrocode}
\let\counterwithout\relax
\let\counterwithin\relax
% \end{macrocode}
%
% \subsection{Definition of Class Options}
%
% This is where the fun part begins, as we are now defining our class options.
%
% Configure the |pgfopts|-package
% \begin{macrocode}
\pgfkeys{%
/ustutt/.is family,%
/ustutt/.cd,%
.search also={%
/ustutt/color,%
},%
}
% \end{macrocode}
%
% User can define, which type of document this is in case we are not typesetting
% a thesis document
% \begin{macrocode}
\def\ustutt@type{}
%<*article|book>
\pgfkeys{
% Change path
/ustutt/type/.cd,
% Define `type' as choice of options
.is choice,
% A typical report thing
report/.code={%
\def\ustutt@type{report}%
},
% Offprint of some sort
offprint/.code={%
\def\ustutt@type{offprint}%
},
% Exams document
exam/.code={%
\def\ustutt@type{exam}%
},
% Student assignment
assignment/.code={%
\def\ustutt@type{assignment}%
},
% No default value
.initial={},%
}
%</article|book>
%<*thesis>
\pgfkeys{
% Change path
/ustutt/type/.cd,
% Define `type' as choice just to be consistent among all classes
.is choice,
% Thesis document itself
thesis/.code={%
\def\ustutt@type{thesis}%
},
% Scientific proposals for students
proposal/.code={%
\def\ustutt@type{proposal},%
},%
}
%</thesis>
% \end{macrocode}
%
% With debug option enabled, frames will be drawn on all pages. This is mostly
% just needed for developers
% \begin{macrocode}
\newif\ifustutt@debug
\ustutt@debugfalse
\pgfkeys{
/ustutt/debug/.cd,
.is if=ustutt@debug,
}
% \end{macrocode}
%
% Enforce no widows and orphans in document with a simple switch
% \begin{macrocode}
\newif\ifustutt@nowidow
\ustutt@nowidowfalse
\pgfkeys{
/ustutt/nowidow/.cd,
.is if=ustutt@nowidow,%
}
% \end{macrocode}
%
% Author gender can be selected, applies to the theses' titlepages where we
% distinguish (only in German, of course) between e.g., a male "Doktoringenieur"
% and a female "Doktoringenieurin". Of course, options |gender=male| and
% |gender=female| must be exclusive to one another.
% \begin{macrocode}
\newif\ifustutt@male
\ustutt@maletrue
\pgfkeys{
% Change path
/ustutt/gender/.cd,%
.is choice,%
% `Male' is the default choice
male/.code={%
\ustutt@maletrue%
},
% `Female' is option complementary to `male'
female/.code={%
\ustutt@malefalse%
},
}
% \end{macrocode}
%
% Major the student is enrolled in.
% \begin{macrocode}
%<*thesis>
\pgfkeys{
% Change path
/ustutt/degree/.cd,%
.is choice,%
% Doctorate's degree
doctorate/.code={%
\def\ustutt@degree{doctorate}%
},%
% Master's degree
master/.code={%
\def\ustutt@degree{master}%
},%
% Bachelor's degree
bachelor/.code={%
\def\ustutt@degree{bachelor}%
},%
}
%</thesis>
% \end{macrocode}
%
% Declare whether thesis was accepted and ready for print (use draft/final to
% switch between draft and final version of either the submission or publishing
% version). This will later on adffect some options of typesetting.
% \begin{macrocode}
%<*thesis>
\newif\ifustutt@accepted
\ustutt@acceptedfalse
\pgfkeys{
/ustutt/accepted/.cd,
.is if=ustutt@accepted,
}
%</thesis>
% \end{macrocode}
%
% Let the user choose fancy headings for chapter openings (only in book-like
% classes) or the conventional style
% \begin{macrocode}
%<*book|thesis>
\newif\ifustutt@fancychapter
\ustutt@fancychapterfalse
\pgfkeys{
/ustutt/fancychapter/.cd,
.is if=ustutt@fancychapter,
}
%</book|thesis>
% \end{macrocode}
%
% Let the user choose fancy footer page numbers
% \begin{macrocode}
\newif\ifustutt@fancyfooter
\ustutt@fancyfooterfalse
\pgfkeys{
/ustutt/fancyfooter/.cd,
.is if=ustutt@fancyfooter,
}
% \end{macrocode}
%
% Pass any other options not known to the underlying koma script class
% \begin{macrocode}
\pgfkeys{
/ustutt/.cd,
.unknown/.code={%
\let\currname\pgfkeyscurrentname%
\let\currval\pgfkeyscurrentvalue%
\ifx#1\pgfkeysnovalue%
%<article> \PassOptionsToClass{\currname}{scrartcl}
%<book|thesis> \PassOptionsToClass{\currname}{scrbook}
\else%
%<article> \PassOptionsToClass{\expandafter\currname\expandafter=\currval}{scrartcl}
%<book|thesis> \PassOptionsToClass{\expandafter\currname\expandafter=\currval}{scrbook}
\fi%
},
}
% \end{macrocode}
%
% Execute default options
% \begin{macrocode}
%<*class>
\pgfkeys{
/ustutt/.cd,
debug=false,
% Please, by all means, don't hate on me for this default!
gender=male,%
color=rgb,
english,
ngerman,
draft,
paper=a4paper,
cleardoublepage=empty,%
%<article> oneside,%
%<article> open=any,%
%<book> twoside,%
%<book> open=right,%
%<thesis> type=thesis,%
%<thesis> accepted=false,%
%<thesis> twoside,%
%<thesis> open=right,%
}
%</class>
% \end{macrocode}
%
% Process options passed to the class
% \begin{macrocode}
\ProcessPgfOptions{/ustutt}
% \ProcessOptions\relax
% \end{macrocode}
%
%
% \subsection{Package Options}
%
% To keep our concerns separated, we first define all package options, and then
% load all packages. Definition of package options is done alphabetically
% \begin{macrocode}
\PassOptionsToPackage{%
% General configuration of biblatex
backend=biber,%
backref=false,%
giveninits=true,%
autocite=inline,%
sorting=nyt,%
sortcites=true,%
style=ipa-authoryear,%
%
% Configuration of text citations
mincitenames=1,%
maxcitenames=2,%
%
% Configuration of bibliography
maxbibnames=10,%
doi=false,%
isbn=false,%
url=false,%
% natbib compatibility mode (\citep and \citet still work)
natbib=true,
}{biblatex}
% \end{macrocode}
%
%
% Babelbib
% \begin{macrocode}
\PassOptionsToPackage{%
fixlanguage,%
}{babelbib}
% \end{macrocode}
%
%
% Cleveref
% \begin{macrocode}
\PassOptionsToPackage{%
capitalise,%
}{cleveref}
% \end{macrocode}
%
%
% Graphicx
% \begin{macrocode}
\PassOptionsToPackage{%
final,%
}{graphicx}
% \end{macrocode}
%
%
% \begin{macrocode}
\PassOptionsToPackage{%
% do bibliographical back references
backref=false,
% set base URL for document
baseurl={http://www.isw.uni-stuttgart.de/},
% make bookmarks
bookmarks=true,
% put section numbers in bookmarks
bookmarksnumbered=true,
% open up bookmark tree
bookmarksopen=false,
% level to which bookmarks are open
bookmarksopenlevel=1,
% to specity which 'toc' file to mimic
bookmarkstype=toc,
% allow links to break ove rlines
breaklinks=true,
% to produce CJK bookmarks
CJKbookmarks=false,
% color links
colorlinks=true,
% provide details of anchors defined; same as verbose
debug=false,
% destinations are named by the fist \label after the anchor creation
destlabel=false,
% use small caps instead of color for links
frenchlinks=false,
% make figures hyper links
hyperfigures=false,
% set up hyperlinked footnotes
hyperfootnotes=true,
% set up hyperlinked indices
hyperindex=true,
% use guessable names for links
hypertexnames=true,
% redefine LaTeX internals
implicit=true,
% make page number, not text, be link on TOC, LOF, and LOT
linktocpage=false,
% Color all links in TOC
linktoc=all,
% use LaTeX-computed names for links
naturalnames=false,
% allow nesting of links
nesting=false,
% put an anchor on every page
pageanchor=true,
% backreference by page number
pagebackref=false,
% width of PDF link border
pdfborder={0, 0, 1},
% position the document window in the center of the screen
pdfcenterwindow=false,
% display document title instead of file name in title bar
pdfdisplaydoctitle=true,
% resize document window to fit document size
pdffitwindow=false,
% set default mode of PDF display
pdfpagemode=UseOutlines,
% page at which PDF document opens
pdfstartpage=1,
% starting view of PDF document
pdfstartview=Fit,
% raise up links (for HyperTeX backend)
raiselinks=false,
% set page size by special driver commands
setpagesize=true,
% Unicode encoded pdf strings
unicode=true,
% be chatty
verbose=false,
}{hyperref}
% \end{macrocode}
%
% Set layout of PDF document in case it is twosided
% \begin{macrocode}
\if@twoside%
\PassOptionsToPackage{%
pdfpagelayout=TwoColumnRight,%
}{hyperref}%
% \end{macrocode}
% Set layout of PDF document in case it is onesided
% \begin{macrocode}
\else
\PassOptionsToPackage{%
pdfpagelayout=OneColumn,%
}{hyperref}%
\fi
% \end{macrocode}
% We need to explicitely tell hyperref that we are in draft or final mode
%
% @see \url{https://en.wikibooks.org/wiki/LaTeX/Print_version\#Problems_with_draft_mode}
%
% Draft case
% \begin{macrocode}
\ifdraft{%
\PassOptionsToPackage{%
final=false,%
draft=true,%
}{hyperref}%
% \end{macrocode}
% Final case
% \begin{macrocode}
}{%
\PassOptionsToPackage{%
draft=false,%
final=true,%
}{hyperref}%
}
% \end{macrocode}
%
%
% showkeys
% \begin{macrocode}
\PassOptionsToPackage{%
% to stop the redefinition of \ref and \pageref, and related commands from the
% varioref package
notref,%
% to stop the redefinition of \cite and related commands from the harvard and
% natbib packages.
notcite,%
% Print the keys in a distinguishing colour. The default value is a light grey.
color,%
}{showkeys}
% \end{macrocode}
%
%
% Load the |geometry| package but not set any pagination parameters, just load
% itself and make |\newgeometry| available.
% \begin{macrocode}
\RequirePackage[pass]{geometry}
% \end{macrocode}
%
%
% \begin{macrocode}
\PassOptionsToClass{
%<book|thesis> chapterprefix=true,%
% half a line vertical space between paragraphs; there must be at least 1 em free
% space in the last line of a paragraph
parskip=half-,
% The bibliography will be represented by an entry at the table of contents, but
% will not be numbered.
toc=bibliography,
% The lists of floating environments i.e., the list of figures and the list of
% tables, will be represented by entries at the table of contents, but will not
% be numbered.
toc=listof,
version=last,%
numbers=noenddot,%
% use geometry package and pass it calculated page dimensions
usegeometry,
fontsize=12pt,%
DIV=calc,%
captions=tableheading,%
%<article>}{scrartcl}
%<book|thesis>}{scrbook}
% \end{macrocode}
%
% When a thesis becomes accepted and goes to the publisher, we need a different
% font size by default because the publisher will want an A4 document that is
% going to be printed on A5. As such, 12pt font size isn't enough and it must
% be upped to 14pt
% \begin{macrocode}
%<*doctorate>
\ifustutt@accepted
\PassOptionsToClass{%
fontsize=14pt,%
}{scrbook}
\else
\PassOptionsToClass{%
fontsize=12pt,%
}{scrbook}
\fi
%</doctorate>
% \end{macrocode}
%
%
% scrlayer-scrpage
% \begin{macrocode}
\PassOptionsToPackage{%
automark,%
headsepline=0.20pt,%
headtopline=0.00pt,%
footsepline=0.20pt,%
draft=false,% To remove rulers inserted by the package
}{scrlayer-scrpage}
% \end{macrocode}
%
%
% Url
% \begin{macrocode}
\PassOptionsToPackage{%
obeyspaces,%
hyphens,%
spaces%
}{url}
% \end{macrocode}
%
%
% These are probably the most commonly used and SO-suggested options to |xcolor|
% pacakge, so we'll just pop them right in here.
% \begin{macrocode}
\PassOptionsToPackage{%
usenames,%
dvipsnames,%
svgnames,%
table,%
hyperref,%
}{xcolor}
% \end{macrocode}
%
%
% \subsection{Package Loading}
%
% This is the first time this template is actually doing something: loading
% packages.
%
% For simplicity, we'll derive everything from the standard koma script
% classes.
% \begin{macrocode}
%<article>\LoadClass{scrartcl}
%<book|thesis>\LoadClass{scrbook}
\RequirePackage{scrlayer-scrpage}
% \end{macrocode}
%
% Now we can load all our much-needed packages
%
% Load the language class
% \begin{macrocode}
\RequirePackage{babel}
% \end{macrocode}
%
% This package provides expandable checks for the current language based on macro \languagename or hyphenation patterns.
% The package is part of the oberdiek bundle.
% \begin{macrocode}
\RequirePackage{iflang}
% \end{macrocode}
%
% This package (once part of the exsheets package), provides a framework for
% providing multilingual features to a LaTeX package. The packge has its own
% basic dictionaries for English, Dutch, French, German and Spanish; it aims to
% use translation material for English, Dutch, French, German, Italian, Spanish,
% Catalan, Turkish, Croatian, Hungarian, Danish and Portuguese from babel or
% polyglossia if either is in use in the document. (Additional languages from
% the multilingual packages may be possible: ask the author.)
% \begin{macrocode}
\RequirePackage{translations}
% \end{macrocode}
%
% The |translator| package is a \LaTeX package that provides a flexible
% mechanism for translating individual words into different languages. For
% example, it can be used to translate a word like ``figure'' into, say, the
% German word ``Abbildung''. Such a translation mechanism is useful when the
% author of some package would like to localize the package such that texts are
% correctly translated into the language preferred by the user. The |translator|
% package is \textit{not} intended to be used to automatically translate more
% than a few words.
% \begin{macrocode}
\RequirePackage{translator}
% \end{macrocode}
%
% The xspace package provides a single command that looks at what comes after it
% in the command stream, and decides whether to insert a space to replace one
% "eaten" by the TeX command decoder. The decision is based on what came after
% any space, not on whether there was a space (which is unknowable): so if the
% next thing proves to be punctuation, the chances are there was no space, but if
% it's a letter, there's probably a need for space. This technique is not
% perfect, but works in a large proportion of cases. The package is part of the
% latex-tools bundle in the LaTeX required distribution.
% \begin{macrocode}
\RequirePackage{xspace}
% \end{macrocode}
%
% Fontspec is a package for X3LaTeX and LuaLaTeX. It provides an automatic and
% unified interface to feature-rich AAT and OpenType fonts through the NFSS in
% LaTeX running on X3TeX or LuaTeX engines. The package requires the l3kernel
% and xparse bundles from the LaTeX 3 development team.
% \begin{macrocode}
\RequirePackage{fontspec}
% \end{macrocode}
%
% This package provides a useful macro to manage widow lines.
% \begin{macrocode}
\ifustutt@nowidow
\RequirePackage[all]{nowidow}
\fi
% \end{macrocode}
%
% The package supports the Text Companion fonts, which provide many text symbols
% (such as baht, bullet, copyright, musicalnote, onequarter, section, and yen),
% in the TS1 encoding. Note that the package has been adopted as part of the
% LaTeX distribution; the reference here is to the original package, which is now
% little used (if at all).
% \begin{macrocode}
\RequirePackage{textcomp}
% \end{macrocode}
%
% Latin modern font package
% \begin{macrocode}
\RequirePackage{lmodern}
% \end{macrocode}
%
% Adds infix expressions to perform arithmetic on the arguments of the LaTeX
% commands |\setcounter|, |\addtocounter|, |\setlength|, and |\addtolength|.
% Since many packages start their arithmetic by storing an argument in a
% register, the package has wide applicability. This package is part of the
% latex-tools bundle in the LaTeX required distribution.
% \begin{macrocode}
\RequirePackage{calc}
% \end{macrocode}
%
% Provides support for setting the spacing between lines in a document. Package
% options include singlespacing, onehalfspacing, and doublespacing.
% Alternatively, the spacing can be changed as required with the
% |\singlespacing|, |\onehalfspacing|, and |\doublespacing| commands. Other size
% spacings are also available.
% \begin{macrocode}
\RequirePackage{setspace}
% \end{macrocode}
%
% This package was developed as a general solution to the problem of including
% graphics in \LaTeX 2.09; as such there are obsolete copies to be found on the
% web (though no longer on the archive). These old versions should not be used
% with current LaTeX. The current 'preferred' solution is the LaTeX graphicx
% package, but the graphics bundle does contain a version of epsfig for use with
% current LaTeX.
% \begin{macrocode}
\RequirePackage{epsfig}
% \end{macrocode}
%
% The package builds upon the graphics package, providing a key-value interface
% for optional arguments to the |\includegraphics| command. This interface
% provides facilities that go far beyond what the graphics package offers on its
% own. For extended documentation, see epslatex. The package is part of the
% latex-graphics bundle, which is one of the collections in the LaTeX 'required'
% set of packages.
% \begin{macrocode}
\RequirePackage{graphicx}
% \end{macrocode}
% Let us also add two common directories as grahpics paths so there is no need
% to prefix the common folder |figures| or |images| in any |\includegraphics|
% \begin{macrocode}
\graphicspath{{figures/}{images/}}
% \end{macrocode}
%
% PGFPlots draws high-quality function plots in normal or logarithmic scaling
% with a user-friendly interface directly in TeX. The user supplies axis labels,
% legend entries and the plot coordinates for one or more plots and PGFPlots
% applies axis scaling, computes any logarithms and axis ticks and draws the
% plots, supporting line plots, scatter plots, piecewise constant plots, bar
% plots, area plots, mesh-- and surface plots and some more. Pgfplots is based
% on PGF/TikZ (PGF); it runs equally for LaTeX/TeX/ConTeXt.
% \begin{macrocode}
\RequirePackage{tikz}
\RequirePackage{pgfplots}
\RequirePackage{tikzscale}
\usepgfplotslibrary{external}
\pgfplotsset{compat=newest}
% \end{macrocode}
%
% Tune the output format of dates according to language. This package provides
% ten output formats of the commands |\today|, |\printdate|, |\printdate|-TeX,
% and |\daterange| (partly language dependent). Formats available are: ISO
% (yyyy-mm-dd), numeric (e.g., dd.\,mm.~yyyy), short (e.g.,dd.\,mm.\,yy), TeX
% (yyyy/mm/dd), original (e.g., dd.\@ mmm yyyy), short original (e.g., dd.\@ mmm
% yy), as well as numerical formats with Roman numerals for the month. The
% commands |\printdate| and |\printdate|-TeX print any date. The command
% |\daterange| prints a date range and leaves out unnecessary year or month
% entries. This package supports German (old and new rules), Austrian, US
% English, British English, French, Danish, Swedish, and Norwegian.
% \begin{macrocode}
\RequirePackage{isodate}
% \end{macrocode}
%
% The package starts from the basic facilities of the color package, and
% provides easy driver-independent access to several kinds of color tints,
% shades, tones, and mixes of arbitrary colors. It allows a user to select a
% document-wide target color model and offers complete tools for conversion
% between eight color models. Additionally, there is a command for alternating
% row colors plus repeated non-aligned material (like horizontal lines) in
% tables. Colors can be mixed like |\color{red!30!green!40!blue}|.
% \begin{macrocode}
\RequirePackage{xcolor}
% \end{macrocode}
%
% The package defines new commands |\Centering|, |\RaggedLeft|, and
% |\RaggedRight| and new environments Center, FlushLeft, and FlushRight, which
% set ragged text and are easily configurable to allow hyphenation (the
% corresponding commands in LaTeX, all of whose names are lower-case, prevent
% hyphenation altogether).
% \begin{macrocode}
\RequirePackage{ragged2e}
% \end{macrocode}
%
% This package provides the command |\marginnote| that may be used instead of
% |\marginpar| at almost every place where |\marginpar| cannot be used, e.g.,
% inside floats, footnotes, or in frames made with the framed package.
% \begin{macrocode}
\RequirePackage{marginnote}
% \end{macrocode}
%
% Enumerate and itemize within paragraphs. Provides enumerate and itemize
% environments that can be used within paragraphs to format the items either as
% running text or as separate paragraphs with a preceding number or symbol. Also
% provides compacted versions of enumerate and itemize.
% \begin{macrocode}
\RequirePackage{paralist}
% \end{macrocode}
%
% The package provides four commands for vertically scaling and stretching
% objects. Its primary function is the ability to scale/stretch and shift one
% object to conform to the size of a specified second object. This feature can
% be useful in both equations and schematic diagrams. Additionally, the scaling
% and stretching commands offer constraints on maximum width and/or minimum
% aspect ratio, which are often used to preserve legibility or for the sake of
% general appearance.
% \begin{macrocode}
\RequirePackage{scalerel}
% \end{macrocode}
%
% Set the font size relative to the current font size. The basic command of the
% package is |\relsize|, whose argument is a number of |\magsteps| to change
% size; from this are defined commands |\larger|, |\smaller|, |\textlarger|,
% etc.
% \begin{macrocode}
\RequirePackage{relsize}
% \end{macrocode}
%
% The caption package provides many ways to customise the captions in floating
% environments like figure and table, and cooperates with many other packages.
% Facilities include rotating captions, sideways captions, continued captions
% (for tables or figures that come in several parts). A list of compatibility
% notes, for other packages, is provided in the documentation. The package also
% provides the "caption outside float" facility, in the same way that simpler
% packages like capt-of do. The package supersedes caption2.
% \begin{macrocode}
\RequirePackage{caption}
% \end{macrocode}
% The package provides a means of using facilities analagous to those of the
% caption package, when writing captions for subfigures and the like. The
% package is distributed with caption.
% \begin{macrocode}
\RequirePackage{subcaption}
% \end{macrocode}
%
% The package provides the principal packages in the AMS-LaTeX distribution. It
% adapts for use in LaTeX most of the mathematical features found in AMS-TeX; it
% is highly recommended as an adjunct to serious mathematical typesetting in
% LaTeX. If you require more than these basic math symbols, please consider the
% |ustuttmath| package shipped with this class package. In either case, we'll
% load |amsmath| here as it must be loaded before |cleveref|.
% \begin{macrocode}
\PassOptionsToPackage{%
% Center tags vertically (default)
centertags,%
% Place the subscripts and superscripts of summation symbols above and below
% (default)
sumlimits,%
% Like sumlimits, but for integral symbols.
intlimits,%
% Like sumlimits, but for certain 'operator names' such as det, inf, lim, max,
% min, that traditionally have subscripts placed underneath when they occur in a
% displayed equation (default)
namelimits,%
% Place equation numbers on the right.
reqno,%
}{amsmath}
\RequirePackage{amsmath}
% \end{macrocode}
%
% Control layout of itemize, enumerate, description. This package provides user
% control over the layout of the three basic list environments: enumerate,
% itemize and description. It supersedes both enumerate and mdwlist (providing
% well-structured replacements for all their funtionality), and in addition
% provides functions to compute the layout of labels, and to 'clone' the
% standard environments, to create new environments with counters of their own.
% \begin{macrocode}
\RequirePackage{enumitem}
% \end{macrocode}
%
% Generate English ordinal numbers. The command |\nth| generates English ordinal
% numbers of the form 1st, 2nd, 3rd, 4th, etc. LaTeX package options may specify
% that the ordinal mark be superscripted, and that negative numbers may be
% treated; Plain TeX users have no access to package options, so need to
% redefine macros for these changes.
% \begin{macrocode}
\RequirePackage{nth}
% \end{macrocode}
%
% The package enhances the quality of tables in LaTeX, providing extra commands
% as well as behind-the-scenes optimisation. Guidelines are given as to what
% constitutes a good table in this context. From version 1.61, the package
% offers longtable compatibility.
% \begin{macrocode}
\RequirePackage{booktabs}
% \end{macrocode}
%
% Show label, ref, cite and bib keys. The showkeys package modifies the
% |\label|, |\ref|, |\pageref|, |\cite| and |\bibitem| commands so that the
% 'internal' key is printed, without affecting the appearance of the rest of the
% text, so far as is possible (the keys typically appear in the margin). The
% package is part of the tools bundle in the LaTeX required distribution.
% \begin{macrocode}
\ifdraft{%
\RequirePackage{showkeys}%
% Override the default format of the label just so that it will not run away
% from the margin width.
\providecommand*\showkeyslabelformat[1]{%
\fbox{%
\makebox[0.90\marginparwidth]{\normalfont\small\ttfamily#1}%
}%
}%
}{}
% \end{macrocode}
%
% Defines commands |\counterwithin| (which sets up a counter to be reset when
% another is incremented) and |\counterwithout| (which unsets such a
% relationship).
% \begin{macrocode}
\RequirePackage{chngcntr}
% \end{macrocode}
%
% LaTeX's built-in two-column code finishes off a document exactly where the
% text stops; this will typically leave an isolated left-hand column, or a
% right-hand column shorter than the left-hand one. This package modifies the
% LaTeX output routine to make the two columns as nearly of the same length as
% possible. Only used with two-column layout (or, in general, multicols)
% \begin{macrocode}
\RequirePackage{flushend}
% \end{macrocode}
%
% Interpretes quotation marks " and ' and correctly typesets them. Some
% LaTeX-Editors however provide an option for automatically replacing the
% correct LaTeX code for quotes, which should be preferred.
% \begin{macrocode}
\RequirePackage{csquotes}
% \end{macrocode}
%
% Use biblatex, which is the (highly configurable) successor of bibtex and biber
% biber is still used though to sort the bibliography in the background.
% \begin{macrocode}
\RequirePackage{biblatex}
% \end{macrocode}
%
% The command |\url| is a form of verbatim command that allows linebreaks at
% certain characters or combinations of characters, accepts reconfiguration, and
% can usually be used in the argument to another command. (The |\urldef| command
% provides robust commands that serve in cases when |\url| doesn't work in an
% argument.) The command is intended for email addresses, hypertext links,
% directories/paths, etc., which normally have no spaces, so by default the
% package ignores spaces in its argument. However, a package option "allows
% spaces", which is useful for operating systems where spaces are a common part
% of file names.
% \begin{macrocode}
\RequirePackage{url}
% \end{macrocode}
% The hyperref package is used to handle cross-referencing commands in LaTeX to
% produce hypertext links in the document. The package provides backends for the
% |\special| set defined for HyperTeX DVI processors; for embedded pdfmark
% commands for processing by Acrobat Distiller (dvips and Y\&Y's dvipsone); for
% Y\&Y's dviwindo; for PDF control within pdfTeX and dvipdfm; for TeX4ht; and
% for VTeX's pdf and HTML backends. The package is distributed with the backref
% and nameref packages, which make use of the facilities of hyperref. The
% package depends on the author's kvoptions, ltxcmdsand refcount packages.
% \begin{macrocode}
\tikzifexternalizing{}{%