summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/tudscr/tudscr-frontmatter.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/tudscr/tudscr-frontmatter.dtx')
-rw-r--r--Master/texmf-dist/source/latex/tudscr/tudscr-frontmatter.dtx977
1 files changed, 977 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/tudscr/tudscr-frontmatter.dtx b/Master/texmf-dist/source/latex/tudscr/tudscr-frontmatter.dtx
new file mode 100644
index 00000000000..5e305fb91e5
--- /dev/null
+++ b/Master/texmf-dist/source/latex/tudscr/tudscr-frontmatter.dtx
@@ -0,0 +1,977 @@
+% \CheckSum{587}
+% \iffalse meta-comment
+% ======================================================================
+%
+% Das Corporate Design der TU Dresden auf Basis der KOMA-Script-Klassen
+%
+% ======================================================================
+% This work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3c of the license.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later and of this work.
+% This work has the LPPL maintenance status "author-maintained".
+% The current maintainer and author of this work is Falk Hanisch.
+% ----------------------------------------------------------------------
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
+% Version 1.3c, verteilt und/oder veraendert werden.
+% Die neuste Version dieser Lizenz ist
+% http://www.latex-project.org/lppl.txt
+% und Version 1.3c ist Teil aller Verteilungen von LaTeX
+% Version 2005/12/01 oder spaeter und dieses Werks.
+% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
+% (allein durch den Autor verwaltet).
+% Der aktuelle Verwalter und Autor dieses Werkes ist Falk Hanisch.
+% ======================================================================
+% \fi
+%
+% \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 \~}
+%
+% \iffalse
+%%% From File: tudscr-frontmatter.dtx
+%<*driver>
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+\ProvidesFile{tudscr-frontmatter.dtx}[%
+ 2014/12/04 v2.02 TUD-KOMA-Script (frontmatter)%
+]
+\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
+\documentclass[english,ngerman]{tudscrdoc}
+\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}}
+\usepackage[T1]{fontenc}
+\usepackage{babel}
+\usepackage{tudscrfonts} % only load this package, if the fonts are installed
+\KOMAoptions{parskip=half-}
+\CodelineIndex
+\RecordChanges
+\GetFileInfo{tudscr-frontmatter.dtx}
+\begin{document}
+ \maketitle
+ \DocInput{\filename}
+\end{document}
+%</driver>
+% \fi
+%
+% \selectlanguage{ngerman}
+%
+% \changes{v2.02}{2014/07/08}{Verwendung \cs{FamilyKeyState}}%^^A
+% \changes{v2.02}{2014/11/05}{Verbesserungen für Kolumnentitel und
+% Inhaltsverzeichnis}%^^A
+%
+% \section{Befehle und Umgebungen für den Vorspann}
+%
+% Im Vorspann des Dokumentes kann der Benutzer eine Zusammenfassung angegeben.
+% Außerdem kann eine Selbstständigkeitserklärung sowie ein Sperrvermerk
+% hinzugefügt werden. Damit für diese das Layout möglichst individuell gewählt
+% werden kann, werden hier entsprechende Optionen und die dafür notwendige
+% Ausgabe definiert. Im weiteren Verlauf der Dokumentation wird der Begriff
+% \enquote{Erklärung} für die unterschiedlichen Elemente verwendet. Die
+% verwendeten Schalter und Befehle zum Setzen der Optionen heißen entweder
+% \cs{tud@abstract@\dots} oder aber \cs{tud@declaration@\dots} je nach Element.
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \iffalse
+%<*class&body>
+% \fi
+%
+% \begin{macro}{\tud@fm@check}
+% \changes{v2.02}{2014/07/18}{neu}%^^A
+% Mit diesem Befehl wird für den Fall, dass eine oder mehrerer Erklräungen auf
+% einer einzelnen Seite gesetzt werden sollen geprüft, ob dies überhaupt
+% möglich ist. Sollte dies nicht der Fall sein, wird eine Warnung ausgegeben.
+% \begin{macrocode}
+\newcommand*\tud@fm@check[2]{%
+ \ifnumless{\@nameuse{tud@#1@level}}{3}{%
+ \@tempswatrue%
+ \ifboolexpr{bool {@tud@#1@fil} and bool {@tud@#1@multi}}{%
+ \setbox0\vbox{%
+ \ifcase\@nameuse{tud@#1@level}\relax\or\or%
+ \vspace*{-\parskip}%
+ {\usekomafont{section}\vspace*{-\baselineskip}}%
+ \fi%
+ #2%
+ }%
+ \ifdim\textheight<\dimexpr\ht0+\dp0\relax%
+ \ClassWarning{\tudcls@name}{%
+ The given content within the `#1'\MessageBreak%
+ environment is too large, so it wasn't possible\MessageBreak%
+ to center the body vertically. Setting the option\MessageBreak%
+ `#1=nofill' would be a solution. You\MessageBreak%
+ could also use multiple `#1' environments%
+ }%
+ \@tempswafalse%
+ \fi%
+ }{}%
+ }{}%
+ #2%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@fm@check
+% \begin{macro}{\tud@fm@set}
+% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}%^^A
+% Dies ist das zentrale Makro zur Ausgabe der einzelnen Erklärungen, welches
+% alle relevanten Optionen\footnote{\opt{titlepage}, \opt{twocolumn},
+% \opt{abstract/declaration=multi}, \opt{abstract/declaration=fill} sowie die
+% Gliederungsebene der Überschrift} unterscheidet und die Erklärungen diesen
+% entsprechend setzt. Verwendet wird der Befehl wie folgt:
+% \cs{tud@fm@set}\marg{Erklärungstyp}\marg{Überschrift}\marg{Inhalt}
+% \begin{macrocode}
+\newcommand*\tud@fm@set[3]{%
+% \end{macrocode}
+% Sollte die Gliederungsebene der Erklärung einem Kapitel entsprechen, wird
+% jede Erklärung immer auf eine neue Seite gesetzt. Die Optionen zum vertikalen
+% Zentrieren wird ignoriert. Auf eine Warnung für den Anwender wird verzichtet.
+% \begin{macrocode}
+%<*book|report>
+ \ifnumless{\@nameuse{tud@#1@level}}{3}{}{%
+ \boolfalse{@tud@#1@multi}%
+ \boolfalse{@tud@#1@fil}%
+ }%
+%</book|report>
+% Im Zweispaltensatz wird der Inhalt der Umgebung einfach ausgegeben, eine
+% vertikale Zentrierung findet nicht statt.
+% \begin{macrocode}
+ \if@twocolumn%
+ \tud@fm@body{#1}{#2}{#3}%
+% \end{macrocode}
+% Beim einspaltigen Satz wird die \opt{titlepage}-Option beachtet.
+% \begin{macrocode}
+ \else%
+% \end{macrocode}
+% Sollte diese aktiv sein, wird jede Erklärung oder Zusammenfassung abhängig
+% von der Einstellung von \opt{abstract/declaration=multi} entweder auf eine
+% neue Seite gesetzt, oder aber auf der aktuellen ausgegeben. Dabei werden
+% diese ggf. noch vertikal auf der Seite ausgerichtet.
+% \begin{macrocode}
+ \if@titlepage%
+ \ifbool{@tud@#1@multi}{}{\clearpage}%
+ \ifbool{@tud@#1@fil}{%
+ \ifcase\@nameuse{tud@#1@level}\relax\or\or%
+ \vspace*{-\parskip}%
+ {\usekomafont{section}\vspace*{-2\baselineskip}}%
+ \fi%
+ \if@tempswa\vspace*{\z@ \@plus 1fil}\fi%
+ }{}%
+ \tud@fm@body{#1}{#2}{#3}%
+ \ifbool{@tud@#1@fil}{\vspace*{\z@ \@plus 2fil}}{}%
+% \end{macrocode}
+% Bei deaktivierter \opt{titlepage}-Option werden die Inhalte jeder erzeugten
+% Erklärung direkt nacheinander ausgegeben. Die Erklärung oder Zusammenfassung
+% wird dabei wie ein Zitat ausgegeben, sollte dessen Überschrift nicht
+% in Form eines Abschnitts gesetzt werden. Der Inhalt wird entweder in der
+% normalen \env{quotation}-Umgebung oder aber~-- wenn entsprechend das Paket
+% \pkg{quoting} geladen wurde~-- in der \env{quoting}-Umgebung gesetzt. Die
+% entsprechende Umgebung wird hierfür im Makro \cs{tud@quoting} gespeichert.
+% \begin{macrocode}
+ \else%
+ \ifnum\@nameuse{tud@#1@level}<2\begin{\tud@quoting}\fi%
+ \tud@fm@body{#1}{#2}{#3}%
+ \ifnum\@nameuse{tud@#1@level}<2\end{\tud@quoting}\fi%
+ \fi%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@fm@set
+% \begin{macro}{\tud@fm@body}
+% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}%^^A
+% \begin{macro}{\tud@fm@vcenter}
+% \changes{v2.02}{2014/07/18}{Mit \pkg{scrlayer-scrpage} entfernt}%^^A
+% Dieser Befehl formatiert den im dritten Argument gespeicherten Inhalt der
+% Erklärung. Sollte das Paket \pkg{multicol} Verwendung finden, wird hier die
+% entsprechende Umgebung gestartet. Für das Setzen der Überschrift und der
+% Kolumnentitel wird \cs{tud@fm@head} verwendet, welches abhängig von den
+% gewählten Optionen die Gliederungsebene der Überschrift setzt. Die optional
+% gewählte vertikale Ausrichtung des Inhaltes wird seit Version~v2.02 nicht
+% mehr von \cs{tud@fm@vcenter} sondern hier direkt ausgeführt.
+% \begin{macrocode}
+\newcommand*\tud@fm@body[3]{%
+ \ifnum\tud@multicols>1\relax%
+ \begin{multicols}{\tud@multicols}[{\tud@fm@head{#1}{#2}}]%
+ \else%
+% \end{macrocode}
+% Für die Verwendung einer kleinen, zentrierten Überschrift wird vorher ein
+% Abstand eingefügt. Dies ist jedoch nur notwendig, wenn \env{multicols} nicht
+% verwendet wird.
+% \begin{macrocode}
+ \ifbool{@tud@#1@multi}{%
+ \ifcase\@nameuse{tud@#1@level}\relax\or%
+ \vspace{\dimexpr\bigskipamount-\parskip\relax}%
+ \fi%
+ }{}%
+ \tud@fm@head{#1}{#2}%
+ \fi%
+ #3\par%
+ \ifnum\tud@multicols>1\relax%
+ \end{multicols}%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@fm@vcenter
+% \end{macro}^^A \tud@fm@body
+% \begin{macro}{\tud@fm@head}
+% \changes{v2.02}{2014/07/18}{an \pkg{scrlayer-scrpage} angepasst}%^^A
+% \changes{v2.02}{2014/10/09}{Bugfix für Kolumnentitel}%^^A
+% Dieses Makro dient zur Festlegung der Gliederungsebene der Überschrift der
+% Erklärung. Die gewählte Gliederungsebene ist in \cs{tud@\meta{Typ}@level}
+% gespeichert. Verwendet wird das Makro folgendermaßen:
+% \cs{tud@fm@head}\marg{Erklärungstyp}\marg{Überschrift}\marg{Inhalt}. Damit
+% die ggf. aktive Option \opt{abstract/declaration=toc} funktionieren kann,
+% wird für die Level, in denen keine Standardüberschrift verwendet wird, mit
+% dem Befehl \cs{phantomsection} aus dem Paket \pkg{hyperref}~-- wenn es
+% tatsächlich geladen wurde~-- ein Anker für einen Hyperlink erzeugt. Ist
+% \cs{if@tud@\meta{Typ}@toc} wahr, so entspricht der erzeugte Eintrag ins
+% Inhaltsverzeichnis für \cls{tudscrartcl} normalerweise dem eines Abschnitts,
+% der für \cls{tudscrbook} und \cls{tudscrreprt} dem eines Kapitels.%
+% \footnote{sonst sieht das Inhaltsverzeichnis recht bescheiden aus}
+% Mit der Eintellung \val{tocleveldown} kann der Eintrag um eine Ebene
+% \begin{macrocode}
+\newcommand*\tud@fm@head[2]{%
+ \ifcase\@nameuse{tud@#1@level}\relax%
+ \if@titlepage\endgraf\fi%
+ \csname phantomsection\endcsname%
+ \or%
+ \if@titlepage\endgraf\fi%
+ \csname phantomsection\endcsname%
+ \@afterindentfalse%
+ \begingroup%
+ \centering%
+ \normalfont\sectfont\nobreak#2%
+ \@endparpenalty\@M%
+ \endgraf%
+ \endgroup%
+ \nopagebreak%
+ \vskip\dimexpr\bigskipamount-\parskip\relax%
+ \@afterheading%
+ \or%
+ \section*{#2}%
+ \ifx\@mkboth\@gobbletwo\else\markright{\MakeMarkcase{#2}}\fi%
+%<*book|report>
+ \or%
+ \chapter*{#2}%
+ \@mkdouble{\MakeMarkcase{#2}}%
+%</book|report>
+ \fi%
+ \ifbool{@tud@#1@markboth}{%
+ \markboth{\MakeMarkcase{#2}}{\MakeMarkcase{#2}}%
+ }{}%
+ \ifbool{@tud@#1@toc}{%
+ \ifbool{@tud@#1@toc@leveldown}{%
+%<*book|report>
+ \addsectiontocentry{}{#2}%
+%</book|report>
+%<*article>
+ \addsubsectiontocentry{}{#2}%
+%</article>
+ }{%
+%<*book|report>
+ \addchaptertocentry{}{#2}%
+%</book|report>
+%<*article>
+ \addsectiontocentry{}{#2}%
+%</article>
+ }
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@fm@head
+% \begin{macro}{\tud@fm@next}
+% \changes{v2.02}{2014/07/19}{mit \pkg{scrlayer-scrpage} eingeführt}%^^A
+% Dieser Befehl sorgt für die Trennung einzelner Abschnitte innerhalb der
+% Umgebungen \env{abstract} und \env{declarations}. Dabei werden bei aktiver
+% vertikaler Ausrichtung die entsprchenden Abstände dazwischen eingefügt.
+% \begin{macrocode}
+\newcommand*\tud@fm@next[2]{%
+ \TUD@parameter@set[#1]{#2}%
+ \if@twocolumn%
+ \ifbool{@tud@#1@multi}{\par}{\newpage}
+ \else%
+ \if@titlepage%
+ \ifbool{@tud@#1@fil}{%
+ \vspace*{\z@ \@plus 1fil}%
+ \ifbool{@tud@#1@multi}{}{%
+ \vspace*{\z@ \@plus 1fil}%
+ \clearpage%
+ \ifcase\@nameuse{tud@#1@level}\relax\or\or%
+ \vspace*{-\parskip}%
+ {\usekomafont{section}\vspace*{-2\baselineskip}}%
+ \fi%
+ \vspace*{\z@ \@plus 1fil}%
+ }%
+ }{\ifbool{@tud@#1@multi}{}{\clearpage}}%
+ \else%
+ \ifnum\@nameuse{tud@#1@level}<2
+ \end{\tud@quoting}
+ \begin{\tud@quoting}
+ \fi%
+ \fi%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@fm@next
+% \begin{macro}{\tud@fm@pagestyle}
+% \changes{v2.02}{2014/07/19}{neu}%^^A
+% Dieser Befehl sorgt für die Auswahl des Seitenstiles über die Parameter von
+% \env{abstract} und \env{declarations}.
+% \begin{macrocode}
+\newcommand*\tud@fm@pagestyle[2]{%
+ \if@titlepage%
+ \ifcsdef{ps@#2}{\renewcommand*\tud@ps{#2}}{%
+ \ClassError{\tudcls@name}{`#2' is no valid pagestyle}{}%
+ }%
+ \else%
+ \ClassWarning{\tudcls@name}{%
+%<*article>
+ The key `pagestyle' can only be used with\MessageBreak%
+ activated option `titlepage'%
+%</article>
+%<*book|report>
+ The key `pagestyle' can only be used either with\MessageBreak%
+ activated option `titlepage' or with chapter\MessageBreak%
+ headings (`#1=chapter')%
+%</book|report>
+ }%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@fm@pagestyle
+% \begin{macro}{\tud@fm@level@wrn}
+% \changes{v2.02}{2014/07/19}{entfernt}%^^A
+% \begin{macro}{\tud@fm@option@wrn}
+% \changes{v2.02}{2014/07/19}{entfernt}%^^A
+% \begin{macro}{\tud@fm@multi@wrn}
+% \changes{v2.02}{2014/07/19}{entfernt}%^^A
+% Die Befehle für die Warnungen an den Benutzer bei nicht beachteten oder nicht
+% umsetzbaren Einstellungen wurden mit der Version~v2.02 entfernt, da Sie als
+% wenig sinnvoll erachtet wurden.
+% \end{macro}^^A \tud@fm@multi@wrn
+% \end{macro}^^A \tud@fm@option@wrn
+% \end{macro}^^A \tud@fm@level@wrn
+% \begin{macro}{\tud@quoting}
+% \begin{macro}{\tud@endquoting}
+% \changes{v2.02}{2014/07/19}{entfernt}%^^A
+% Mit diesem Befehl kann das empfehlenswerte Paket \pkg{quoting} unterstützt
+% werden. Sollte dieses geladen werden, wird für das Setzen der Zusammenfassung
+% bei einem Titelkopf die \env{quoting}-Umgebung genutzt.
+% \begin{macrocode}
+\newcommand*\tud@quoting{quotation}
+\AfterPackage{quoting}{\renewcommand*\tud@quoting{quoting}}
+% \end{macrocode}
+% \end{macro}^^A \tud@endquoting
+% \end{macro}^^A \tud@quoting
+%
+% \iffalse
+%</class&body>
+%<*class&option>
+% \fi
+%
+% \begin{macro}{\tud@fm@switch}
+% \changes{v2.02}{2014/11/05}{neu}%^^A
+% Das aus \KOMAScript{} bekannte Verhalten für die Zusammenfassung wird für die
+% beiden Klassen \cls{tudscrartcl} und \cls{tudscrreprt} adaptiert. Dazu werden
+% boolesche Schlüssel bei der Definiton der beiden Optionen \opt{abstract} und
+% \opt{declaration} eingefügt. Außerdem werden zusätzliche Werte zur Auswahl
+% einer Gliederungsebene für die gesetzten Überschriften wie \cs{section} oder
+% \cs{chapter}\footnote{nicht für \cls{tudscrartcl}} oder bereitgestellt,
+% welche auch für die Buchklasse \cls{tudscrbook} zur Verfügung stehen. Das
+% Setzen von Einträgen ins Inhaltsverzeichnis lässt sich ebenfalls anpassen.
+%
+% Des Weiteren werden mehrere Schlüssel für die Anordnung und Positionierung
+% von Zusammenfassung bzw. Erklärungen bereitgestellt. Diese dienen dem Setzen
+% der Optionen \opt{abstract/declaration} mit den Werten \val{single/multi},
+% \val{toc/notoc}, \val{fill/nofill} sowie \val{leveldown}.
+% \begin{macrocode}
+\newcommand*\tud@fm@switch{%
+ {section}{2},{sect}{2},{sec}{2},{addsec}{2},%
+%<*article>
+ {new}{2},{std}{2},{heading}{2},%
+%</article>
+%<*book|report>
+ {chapter}{3},{chap}{3},{addchap}{3},%
+ {new}{3},{std}{3},{heading}{3},%
+%</book|report>
+ {totoc}{4},{toc}{4},{totoclevelup}{4},{toclevelup}{4},{levelup}{4},%
+ {totocleveldown}{5},{tocleveldown}{5},{leveldown}{5},%
+ {nottotoc}{6},{notoc}{6},%
+ {markboth}{7},{mark}{7},%
+ {nomarkboth}{8},{nomark}{8},%
+ {one}{9},{simple}{9},{single}{9},%
+ {multi}{10},{multiple}{10},{all}{10},{two}{10},{both}{10},{double}{10},%
+ {nofil}{11},{nofill}{11},{novfil}{11},{novfill}{11},%
+ {fil}{12},{fill}{12},{vfil}{12},{vfill}{12}%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@fm@switch
+%
+% \subsection{Erweiterung der Umgebung für eine Zusammenfassung}
+%
+% Die \env{abstract}-Umgebung wird um mehrere Optionen erweitert. So kann
+% in den neuen \cls{tudscr}-Klassen die Sprache der Zusammenfassung leicht
+% eingestellt und auch zwei Zusammenfassungen auf eine Seite gesetzt werden.
+% \begin{macro}{\tud@abstract@level}
+% \begin{macro}{\if@tud@abstract@toc}
+% \begin{macro}{\if@tud@abstract@toc@locked}
+% Der Befehl \cs{tud@abstract@level} beschreibt die Gliederungsebene der
+% Überschrift der Zusammenfassung numerisch und wird über die Schlüssel der
+% Option \opt{abstract} gesetzt. Über \opt{abstract=toc/notoc} wird festgelegt,
+% ob die Zusammenfassung einen eigenen Eintrag ins Inhaltsverzeichnis bekommt.
+% Da unterschiedliche Gliederungsebenen der Überschriften möglich sind, wird das
+% Standardverhalten in Abhängigkeit dieser gewählt. Initial erscheint für
+% \cls{tudscrreprt} und \cls{tudscrartcl}~-- wie in \KOMAScript{} auch~-- keine
+% Überschrift und kein Eintrag im Inhaltsverzeichnis. In \cls{tudscrbook} wird
+% standardmäßig eine Überschrift in Form eines Kapitels mit Eintrag ins
+% Inhaltsverzeichnis gesetzt.
+% \begin{macrocode}
+%<*report|article>
+\newcommand*\tud@abstract@level{0}
+\newbool@lock{@tud@abstract@toc}
+%</report|article>
+%<*book>
+\newcommand*\tud@abstract@level{3}
+\newbool@lock[true]{@tud@abstract@toc}
+%</book>
+% \end{macrocode}
+% \end{macro}^^A \if@tud@abstract@toc@locked
+% \end{macro}^^A \if@tud@abstract@toc
+% \end{macro}^^A \tud@abstract@level
+% \begin{macro}{\if@tud@abstract@toc@leveldown}
+% \changes{v2.02}{2014/11/05}{neu}%^^A
+% Dieser Schalter bestimmt, ob der Eintrag in das Inhaltsverzeichnis in der
+% obersten Gliederungsebene~-- \cs{chapter} für die Klassen \cls{tudscrbook}
+% und \cls{tudscrreprt} sowie \cs{section} für \cls{tudscrartcl}~-- oder in der
+% darunterliegenden erfolgt.
+% \begin{macrocode}
+\newif\if@tud@abstract@toc@leveldown
+% \end{macrocode}
+% \end{macro}^^A \if@tud@abstract@toc@leveldown
+% \begin{macro}{\if@tud@abstract@markboth}
+% \changes{v2.02}{2014/11/05}{neu}%^^A
+% Dieser Schalter setzt rechten und linken Kolumnentitel automatisch auf die
+% verwendete Überschrift.
+% \begin{macrocode}
+\newif\if@tud@abstract@markboth
+% \end{macrocode}
+% \end{macro}^^A \if@tud@abstract@markboth
+% \begin{macro}{\if@tud@abstract@multi}
+% Is dieser Schalter aktiviert, wird eine durch \cs{nextabstract} angegebene
+% zweite~-- wahrscheinlich in einer Fremdsprache verfasste~-- Zusammenfassung
+% auf die gleiche Seite wie die erste zu setzen. Gesetzt wird der Schalter über
+% die Option \opt{abstract=single/multi}.
+% \begin{macrocode}
+\newif\if@tud@abstract@multi
+% \end{macrocode}
+% \end{macro}^^A \if@tud@abstract@multi
+% \begin{macro}{\if@tud@abstract@fil}
+% Mit diesem Schalter wird bestimmt, ob eine Zusammenfassung auf einer Seite
+% vertikal zentriert wird. Er wird mit \opt{abstract=fill/nofill} gesetzt und
+% ist normalerweise aktiviert.
+% \begin{macrocode}
+\newif\if@tud@abstract@fil
+\@tud@abstract@filtrue
+% \end{macrocode}
+% \end{macro}^^A \if@tud@abstract@fil
+% \begin{option}{abstract}
+% Alle Klassen unterstützen die Werte, welche in \cs{tud@fm@switch} definiert
+% wurden. Die beiden Klassen \cls{tudscrartcl} und\ cls{tudscrreprt} adaptieren
+% außerdem das aus \KOMAScript{} bekannte Verhalten über die booleschen Werte
+% aus \cs{TUD@numkey@bool}.
+% \begin{macrocode}
+%<*report|article>
+\TUD@key{abstract}[true]{%
+ \edef\@tempb{\TUD@numkey@bool,\tud@fm@switch}%
+%</report|article>
+%<*book>
+\TUD@key{abstract}[chapter]{%
+ \edef\@tempb{\tud@fm@switch}%
+%</book>
+ \TUD@set@numkey{abstract}{@tempa}{\@tempb}{#1}%
+% \end{macrocode}
+% Bei der Einstellungen der Überschriftgliederungsebene wird außerdem das
+% Standardverhalten für einen Eintrag ins Inhaltsverzeichnis festgelegt, was
+% allerdings vom Anwender jederzeit überschrieben werden kann.
+% \begin{macrocode}
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed%
+ \ifcase \@tempa\relax%
+%<*report|article>
+ \def\tud@abstract@level{0}%
+ \stdbool@lock{@tud@abstract@toc}{false}%
+%</report|article>
+ \or%
+%<*report|article>
+ \def\tud@abstract@level{1}%
+ \stdbool@lock{@tud@abstract@toc}{false}%
+%</report|article>
+ \or%
+ \def\tud@abstract@level{2}%
+ \stdbool@lock{@tud@abstract@toc}{true}%
+ \or%
+%<*book|report>
+ \def\tud@abstract@level{3}%
+ \stdbool@lock{@tud@abstract@toc}{true}%
+%</book|report>
+% \end{macrocode}
+% Neben den Einstellungen für die Art der Gliederungsebene der Überschrift für
+% die Zusammenfassung können außerdem noch die Optionen gesetzt werden, ob
+% versucht werden soll, eine mögliche Zusammenfassung in einer anderen Sprache
+% auf die gleiche Seite wie die erste zu setzen (\opt{abstract=multi}) und ob
+% die Zusammenfassung einen Eintrag ins Inhaltsverzeichnis bekommen soll.
+% \begin{macrocode}
+ \or%
+ \setbool@lock{@tud@abstract@toc}{true}%
+ \@tud@abstract@toc@leveldownfalse%
+ \or%
+ \setbool@lock{@tud@abstract@toc}{true}%
+ \@tud@abstract@toc@leveldowntrue%
+ \or%
+ \setbool@lock{@tud@abstract@toc}{false}%
+ \or%
+ \@tud@abstract@markbothtrue%
+ \or%
+ \@tud@abstract@markbothfalse%
+ \or%
+ \@tud@abstract@multifalse%
+ \or%
+ \@tud@abstract@multitrue%
+ \or%
+ \@tud@abstract@filfalse%
+ \or%
+ \@tud@abstract@filtrue%
+ \fi%
+ \fi%
+}
+% \end{macrocode}
+% \end{option}^^A abstract
+%
+% \iffalse
+%</class&option>
+%<*class&body>
+% \fi
+%
+% \begin{environment}{abstract}
+% Die \env{abstract}-Umgebung wird komplett überarbeitet. Um alle gewünschten
+% Optionen\footnote{\opt{titlepage}, \opt{twocolumn}, \opt{abstract@multi},
+% \opt{abstract@fil} sowie Gliederungsebene der Überschrift} beachten zu
+% können, wird auf die Möglichkeiten der Definition mit \cs{NewEnviron} aus dem
+% Paket \pkg{environ} zurückgegriffen. Damit ist es möglich, gezielt auf den
+% Inhalt der Umgebung selbst mit dem Befehl \cs{BODY} zuzugreifen. Dieser
+% Mechanismus wird innerhalb von \cs{tud@abstractbody} verwendet.
+% \begin{macrocode}
+%<*report|article>
+\csundef{abstract}
+\csundef{endabstract}
+%</report|article>
+\NewEnviron{abstract}[1][]{%
+% \end{macrocode}
+% Sollten Überschriften in Form von Kapiteln gewählt worden sein, so wird
+% temporär die \opt{titlepage}-Option aktivert, da alle weiteren notwendigen
+% Einstellungen dieser entsprechen. Bei aktiver \opt{titlepage}-Option wird
+% anschließend der aktuelle Seitenstil gesichert, um diesen nach der Umgebung
+% wiederherstellen zu können.
+% \begin{macrocode}
+ \ifnumless{\@nameuse{tud@abstract@level}}{3}{}{\@titlepagetrue}%
+ \if@titlepage%
+ \tud@currentpagestyle@set%
+ \clearpage\def\tud@ps{empty}%
+ \fi%
+% \end{macrocode}
+% Als nächstes werden die Optionen verarbeitet. Sollte nach Abarbeitung der
+% Optionen für \env{abstract} festgestellt werden, dass eine spezielle
+% Spaltenanzahl gewünscht ist, so wird~-- für den Fall, dass das Paket
+% \pkg{multicol} geladen ist~-- diese gesetzt. Sonst wird die angegbene Anzahl
+% der Spalten ignoriert und eine Warnung ausgegeben. Bei aktiver Option
+% \opt{titlepage} kann über den Parameter \opt{pagestyle} der Seitenstil
+% innerhalb der Umgebung geändert werden. Dieser wird automatisch auf
+% \val{headings} gesetzt, wenn beidseitige Kolumnentitel verwendet werden.
+% \begin{macrocode}
+ \TUD@parameter@set[abstract]{#1}%
+ \if@tud@abstract@markboth\def\tud@ps{headings}\fi%
+ \tud@multicols@check%
+ \if@titlepage\tud@ps@select\fi%
+ \tud@fm@check{abstract}{\tud@fm@set{abstract}{\abstractname}{\BODY}}%
+% \end{macrocode}
+% Nach der Umgebung wird bei aktiver \opt{titlepage}-Option der ursprüngliche
+% Seitenstil zurückgesetzt.
+% \begin{macrocode}
+}[%
+ \if@titlepage%
+ \aftergroup\tud@currentpagestyle@reset%
+ \clearpage%
+ \fi%
+]
+% \end{macrocode}
+% \end{environment}^^A abstract
+% \begin{parameter}{language}
+% \begin{parameter}{columns}
+% \begin{parameter}{pagestyle}
+% \changes{v2.02}{2014/07/19}{neu}%^^A
+% \begin{parameter}{markboth}
+% \changes{v2.02}{2014/11/05}{neu}%^^A
+% \begin{parameter}{abstract}
+% \begin{parameter}{option}
+% Als Schlüssel für die \env{abstract}-Umgebung können Sprache, Anzahl der
+% Spalten oder auch die zur Umgebung gehörigen Klassenoptionen angegeben werden.
+% \begin{macrocode}
+\TUD@parameter{abstract}{%
+ \TUD@parameter@define{language}{\selectlanguage{#1}}%
+ \TUD@parameter@define{columns}{\def\tud@multicols{#1}}%
+ \TUD@parameter@define{pagestyle}{\tud@fm@pagestyle{abstract}{#1}}%
+ \TUD@parameter@define{markboth}[true]{%
+ \ifstr{#1}{true}{\@tud@abstract@markbothtrue}{%
+ \ifstr{#1}{on}{\@tud@abstract@markbothtrue}{%
+ \ifstr{#1}{yes}{\@tud@abstract@markbothtrue}{%
+ \ifstr{#1}{false}{\@tud@abstract@markbothfalse}{%
+ \ifstr{#1}{no}{\@tud@abstract@markbothfalse}{%
+ \ifstr{#1}{off}{\@tud@abstract@markbothfalse}{%
+ \@tud@abstract@markbothfalse%
+ \manualmark\markboth{#1}{#1}%
+ }}}}}}%
+ }%
+ \TUD@parameter@define{abstract}{\TUDoption{abstract}{#1}}%
+ \TUD@parameter@define{option}{\TUDoption{abstract}{#1}}%
+% \end{macrocode}
+% Für die Optionsangabe ohne Schlüssel und Wert kann eine Anzahl an Spalten
+% oder eine alternative Sprache angegeben werden. Hierfür ist der Befehl
+% \cs{tud@environmenthandler} definiert, welcher auch von \env{tudpage}-Umgebung
+% verwendet wird
+% \begin{macrocode}
+ \TUD@parameter@sethandler{\tud@environmenthandler{#1}}%
+}
+% \end{macrocode}
+% \end{parameter}^^A option
+% \end{parameter}^^A abstract
+% \end{parameter}^^A markboth
+% \end{parameter}^^A pagestyle
+% \end{parameter}^^A columns
+% \end{parameter}^^A language
+% \begin{macro}{\nextabstract}
+% Um einzelne Abschnitte innerhalb einer Zusammenfassung trennen zu können, ist
+% dieser Befehl notwendig.
+% \begin{macrocode}
+\newcommand*\nextabstract[1][]{%
+ \ifnum\tud@multicols>1\relax%
+ \end{multicols}%
+ \else%
+ \ifbool{@tud@abstract@multi}{%
+ \ifcase\@nameuse{tud@abstract@level}\relax\or%
+ \vspace{\dimexpr\bigskipamount-\parskip\relax}%
+ \fi%
+ }{}%
+ \fi%
+ \tud@fm@next{abstract}{#1}%
+ \ifnum\tud@multicols>1\relax%
+ \begin{multicols}{\tud@multicols}[{\tud@fm@head{abstract}{\abstractname}}]%
+ \else%
+ \tud@fm@head{abstract}{\abstractname}%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \nextabstract
+%
+% \iffalse
+%</class&body>
+%<*class&option>
+% \fi
+%
+% \subsection{Befehle für Selbstständigkeitserklärung und Sperrvermerk}
+%
+% Die Befehle für Selbstständigkeitserklärung und Sperrvermerk werden
+% äquivalent zur \env{abstract}-Umgebung mit den gleichen Optionen
+% ausgestattet.
+% \begin{macro}{\tud@declaration@level}
+% \begin{macro}{\if@tud@declaration@toc}
+% \begin{macro}{\if@tud@declaration@toc@locked}
+% \begin{macro}{\if@tud@declaration@toc@leveldown}
+% \changes{v2.02}{2014/11/05}{}%^^A
+% \begin{macro}{\if@tud@declaration@markboth}
+% \changes{v2.02}{2014/11/05}{neu}%^^A
+% \begin{macro}{\if@tud@declaration@multi}
+% \begin{macro}{\if@tud@declaration@fil}
+% Siehe die Option \opt{abstract}.
+% \begin{macrocode}
+%<*report|article>
+\newcommand*\tud@declaration@level{1}
+\newbool@lock{@tud@declaration@toc}
+%</report|article>
+%<*book>
+\newcommand*\tud@declaration@level{3}
+\newbool@lock[true]{@tud@declaration@toc}
+%</book>
+\newif\if@tud@declaration@toc@leveldown
+\newif\if@tud@declaration@markboth
+\newif\if@tud@declaration@multi
+\@tud@declaration@multitrue
+\newif\if@tud@declaration@fil
+\@tud@declaration@filtrue
+% \end{macrocode}
+% \end{macro}^^A \if@tud@declaration@fil
+% \end{macro}^^A \if@tud@declaration@multi
+% \end{macro}^^A \if@tud@declaration@markboth
+% \end{macro}^^A \if@tud@declaration@toc@leveldown
+% \end{macro}^^A \if@tud@declaration@toc@locked
+% \end{macro}^^A \if@tud@declaration@toc
+% \end{macro}^^A \tud@declaration@level
+% \begin{option}{declaration}
+% Siehe die Option \opt{abstract}.
+% \begin{macrocode}
+%<*report|article>
+\TUD@key{declaration}[true]{%
+%</report|article>
+%<*book>
+\TUD@key{declaration}[chapter]{%
+%</book>
+ \edef\@tempb{\TUD@numkey@bool,\tud@fm@switch}%
+ \TUD@set@numkey{declaration}{@tempa}{\@tempb}{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed%
+ \ifcase \@tempa\relax%
+ \def\tud@declaration@level{0}%
+ \stdbool@lock{@tud@declaration@toc}{false}%
+ \or%
+ \def\tud@declaration@level{1}%
+ \stdbool@lock{@tud@declaration@toc}{false}%
+ \or%
+ \def\tud@declaration@level{2}%
+ \stdbool@lock{@tud@declaration@toc}{true}%
+ \or%
+%<*book|report>
+ \def\tud@declaration@level{3}%
+ \stdbool@lock{@tud@declaration@toc}{true}%
+%</book|report>
+ \or%
+ \stdbool@lock{@tud@declaration@toc}{true}%
+ \@tud@declaration@toc@leveldownfalse%
+ \or%
+ \stdbool@lock{@tud@declaration@toc}{true}%
+ \@tud@declaration@toc@leveldowntrue%
+ \or%
+ \stdbool@lock{@tud@declaration@toc}{false}%
+ \or%
+ \@tud@declaration@markbothtrue%
+ \or%
+ \@tud@declaration@markbothfalse%
+ \or%
+ \@tud@declaration@multifalse%
+ \or%
+ \@tud@declaration@multitrue%
+ \or%
+ \@tud@declaration@filfalse%
+ \or%
+ \@tud@declaration@filtrue%
+ \fi%
+ \fi%
+}
+% \end{macrocode}
+% \end{option}^^A declaration
+%
+% \iffalse
+%</class&option>
+%<*class&body>
+% \fi
+%
+% \begin{environment}{declarations}
+% \begin{macro}{\if@tud@declarations}
+% Die \env{declarations}-Umgebung wird ähnlich zur \env{abstract}-Umgebung
+% definiert. Prinzipiell funktioniert diese genauso, inklusive der Parameter.
+% Der Schalter \cs{if@tud@declarations} wird verwendet, um die weiteren Befehle
+% \cs{declaration}, \cs{confirmation} und \cs{blocking} innerhalb und außerhalb
+% dieser Umgebung verwenden zu können.
+% \begin{macrocode}
+\newif\if@tud@declarations
+\NewEnviron{declarations}[1][]{%
+ \ifnumless{\@nameuse{tud@declaration@level}}{3}{}{\@titlepagetrue}%
+ \if@titlepage%
+ \tud@currentpagestyle@set%
+ \clearpage\def\tud@ps{empty}%
+ \fi%
+ \@tud@declarationstrue%
+ \TUD@parameter@set[declaration]{#1}%
+ \if@tud@declaration@markboth\def\tud@ps{headings}\fi%
+ \tud@multicols@check%
+ \if@titlepage\tud@ps@select\fi%
+ \tud@fm@check{declaration}{\BODY}%
+}[%
+ \if@titlepage%
+ \aftergroup\tud@currentpagestyle@reset%
+ \clearpage%
+ \fi%
+]
+% \end{macrocode}
+% \end{macro}^^A \if@tud@declarations
+% \end{environment}^^A declarations
+% \begin{parameter}{language}
+% \begin{parameter}{columns}
+% \changes{v2.02}{2014/07/19}{neu}%^^A
+% \begin{parameter}{pagestyle}
+% \changes{v2.02}{2014/07/19}{neu}%^^A
+% \begin{parameter}{markboth}
+% \changes{v2.02}{2014/11/05}{neu}%^^A
+% \begin{parameter}{supporter}
+% \begin{parameter}{place}
+% \begin{parameter}{closing}
+% \begin{parameter}{company}
+% \begin{parameter}{declaration}
+% \begin{parameter}{option}
+% Dies sind die möglichen Schlüssel für die Befehle \cs{declaration},
+% \cs{confirmation} und \cs{blocking}. Die Schlüssel \opt{declaration} bzw.
+% \opt{option} dienen zum Setzen der Werte, welche auch als Klassenoptionen
+% gesetzt werden können.
+% \begin{macrocode}
+\TUD@parameter{declaration}{%
+ \TUD@parameter@define{language}{\selectlanguage{#1}}%
+ \TUD@parameter@define{columns}{\def\tud@multicols{#1}}%
+ \TUD@parameter@define{pagestyle}{\tud@fm@pagestyle{declaration}{#1}}%
+ \TUD@parameter@define{markboth}[true]{%
+ \ifstr{#1}{true}{\@tud@declaration@markbothtrue}{%
+ \ifstr{#1}{on}{\@tud@declaration@markbothtrue}{%
+ \ifstr{#1}{yes}{\@tud@declaration@markbothtrue}{%
+ \ifstr{#1}{false}{\@tud@declaration@markbothfalse}{%
+ \ifstr{#1}{no}{\@tud@declaration@markbothfalse}{%
+ \ifstr{#1}{off}{\@tud@declaration@markbothfalse}{%
+ \@tud@declaration@markbothfalse%
+ \manualmark\markboth{#1}{#1}%
+ }}}}}}%
+ }%
+ \TUD@parameter@define{company}{\def\@company{#1}}%
+ \TUD@parameter@define{supporter}{\def\@supporter{#1}}%
+ \TUD@parameter@define{place}{\def\@place{#1}}%
+ \TUD@parameter@define{closing}{\def\@confirmationclosing{#1}}%
+ \TUD@parameter@define{declaration}{\TUDoption{declaration}{#1}}%
+ \TUD@parameter@define{option}{\TUDoption{declaration}{#1}}%
+% \end{macrocode}
+% Für die Optionsangabe ohne Schlüssel und Wert kann eine Anzahl an Spalten
+% oder eine alternative Sprache angegeben werden. Hierfür ist der Befehl
+% \cs{tud@environmenthandler} definiert, welcher auch von \env{tudpage}-Umgebung
+% verwendet wird
+% \begin{macrocode}
+ \TUD@parameter@sethandler{\tud@environmenthandler{#1}}%
+}
+% \end{macrocode}
+% \end{parameter}^^A option
+% \end{parameter}^^A declaration
+% \end{parameter}^^A company
+% \end{parameter}^^A closing
+% \end{parameter}^^A place
+% \end{parameter}^^A supporter
+% \end{parameter}^^A markboth
+% \end{parameter}^^A pagestyle
+% \end{parameter}^^A columns
+% \end{parameter}^^A language
+% \begin{macro}{\declaration}
+% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}%^^A
+% Dieser Befehl dient zur Ausgabe von sowohl Selbstständigkeitserklärung als
+% auch Sperrvermerk. Über das optionale Argument kann ohne Schlüssel die
+% gewünschte Sprache eingestellt werden. Zusätzlich können Optionen als
+% Schlüssel-Wert-Paare angegeben werden.
+% \begin{macrocode}
+\newcommand*\declaration[1][]{%
+ \ifbool{@tud@declarations}{%
+ \begingroup%
+ \TUD@parameter@set[declaration]{#1}%
+ \tud@fm@confirmation%
+ \tud@fm@blocking
+ \endgroup%
+ }{%
+ \begin{declarations}[#1]%
+ \tud@fm@confirmation%
+ \tud@fm@blocking%
+ \end{declarations}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \declaration
+% \begin{macro}{\confirmation}
+% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}%^^A
+% \begin{macro}{\tud@fm@confirmation}
+% \changes{v2.02}{2014/07/18}{neu}%^^A
+% Mit diesem Befehl kann die Selbstständigkeitserklärung ausgegeben werden. Das
+% optionale Argument bestimmt, wer als Unterstützer angegeben wird. Außerdem
+% sind Schlüssel-Wert-Paare als Option nutzbar.
+% \begin{macrocode}
+\newcommand*\confirmation[1][]{%
+% \end{macrocode}
+% Damit das optionale Argument ohne Schlüssel für die Unterstützer verwendet
+% werden kann, wird der Handler umdefiniert.
+% \begin{macrocode}
+ \TUD@parameter@sethandler[declaration]{\def\@supporter{##1}}%
+ \ifbool{@tud@declarations}{%
+ \begingroup%
+ \TUD@parameter@set[declaration]{#1}%
+ \tud@fm@confirmation%
+ \endgroup%
+ }{%
+ \begin{declarations}[#1]%
+ \tud@fm@confirmation%
+ \end{declarations}%
+ }%
+% \end{macrocode}
+% Der Handler wird auf das ursprüngliche Verhalten zurückgesetzt.
+% \begin{macrocode}
+ \TUD@parameter@sethandler[declaration]{\tud@environmenthandler{##1}}%
+}
+% \end{macrocode}
+% Dies ist der eigentliche Inhalt des Befehls \cs{confirmation}.
+% \begin{macrocode}
+\newcommand*\tud@fm@confirmation{%
+ \tud@fm@check{declaration}{%
+ \tud@fm@set{declaration}{\confirmationname}{%
+ \confirmationtext\vskip0pt\@confirmationclosing%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@fm@confirmation
+% \end{macro}^^A \confirmation
+% \begin{macro}{\blocking}
+% \changes{v2.02}{2014/05/16}{neu, \cs{restriction} umbenannt}%^^A
+% \changes{v2.02}{2014/07/18}{an \pkg{scrlayer-scrpage} angepasst}%^^A
+% \begin{macro}{\tud@fm@blocking}
+% \changes{v2.02}{2014/07/18}{neu}%^^A
+% Für den Sperrvermerk wird äquivalent zu \cs{confirmation} verfahren. Das
+% optionale Argument ohne Schlüssel setzt hier die Firma für den Sperrvermerk.
+% \begin{macrocode}
+\newcommand*\blocking[1][]{%
+ \TUD@parameter@sethandler[declaration]{\def\@company{##1}}%
+ \ifbool{@tud@declarations}{%
+ \begingroup%
+ \TUD@parameter@set[declaration]{#1}%
+ \tud@fm@blocking%
+ \endgroup%
+ }{%
+ \begin{declarations}[#1]%
+ \tud@fm@blocking%
+ \end{declarations}%
+ }%
+ \TUD@parameter@sethandler[declaration]{\tud@environmenthandler{##1}}%
+}
+% \end{macrocode}
+% Dies ist der eigentliche Inhalt des Befehls \cs{blocking}.
+% \begin{macrocode}
+\newcommand*\tud@fm@blocking{%
+ \tud@fm@check{declaration}{%
+ \tud@fm@set{declaration}{\blockingname}{\blockingtext}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@fm@blocking
+% \end{macro}^^A \blocking
+%
+% \iffalse
+%</class&body>
+% \fi
+%
+% \Finale
+%
+\endinput