% \CheckSum{907} % \iffalse meta-comment % % ============================================================================ % % TUD-KOMA-Script % Copyright (c) Falk Hanisch , 2012-2016 % % ============================================================================ % % 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 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 % in der Version 1.3c, verteilt und/oder veraendert werden. Die aktuelle % Version dieser Lizenz ist http://www.latex-project.org/lppl.txt und % Version 1.3c oder spaeter ist Teil aller Verteilungen von LaTeX 2005/12/01 % oder spaeter und dieses Werks. Dieses Werk hat den LPPL-Verwaltungs-Status % "author-maintained", wird somit 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-misc.dtx %<*driver> \ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi \ProvidesFile{tudscr-misc.dtx}[% 2016/07/20 v2.05 TUD-KOMA-Script (miscellaneous)% ] \RequirePackage[ngerman=ngerman-x-latest]{hyphsubst} \documentclass[english,ngerman,xindy]{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-} \usepackage{microtype} \usepackage{bookmark} \CodelineIndex \RecordChanges \GetFileInfo{tudscr-misc.dtx} \begin{document} \maketitle \DocInput{\filename} \end{document} % % \fi % % \selectlanguage{ngerman} % % \changes{v2.02}{2014/06/23}{Paket \pkg{titlepage} nicht weiter unterstützt}^^A % \changes{v2.02}{2014/07/08}{\cs{FamilyKeyState} wird von Optionen genutzt}^^A % \changes{v2.05}{2015/07/06}{Bugfix für \pkg{multicol}}^^A % % \section{Verschiedenes für das \TUDScript-Bundle} % % Alles, wofür sich eine separate Datei nicht lohnt, landet hier. % % \StopEventually{\PrintIndex\PrintChanges\PrintToDos} % % \iffalse %<*!xindy> % \fi % % \subsection{Sukkzessives Abarbeiten von Layoutoptionen im Dokument} % % Werden mit \cs{TUDoptions} nach \cs{begin\{document\}} mehrere Layoutoptionen % gleichzeitig angegeben, muss dafür Sorge getragen werden, dass diese in der % korrekten Reihenfolge abgearbeitet werden. % % Das Makro \cs{TUD@SpecialOptionAtDocument} kann innerhalb von \cs{TUD@key} % verwendet werden, um einen im obligatorischen Argument angegebenen Schalter % zu aktivieren. Dabei wird über \cs{tud@atdocument@hook} garantiert, dass der % Befehl \cs{tud@atdocument@process}, welcher für die Abarbeitung der einzelnen % Makros in der richtigen Reihenfolge verantwortlich ist, lediglich einmal über % \cs{AtEndOfFamilyOptions} ausgeführt wird. % \ToDo{% % Problem bei \cs{TUDoptions} mit \cs{AtEndOfFamilyOptions} beheben % }[v2.06] % \ToDo{Überarbeiten: \cs{AtEndOfOuterFamilyOptions}}[v3.22] % % \begin{macro}{\TUD@SpecialOptionAtDocument} % \changes{v2.05}{2016/06/14}{neu}^^A % \begin{macro}{\tud@atdocument@hook} % \changes{v2.05}{2016/06/14}{neu}^^A % \begin{macrocode} %<*execute&(class&!inherit|package&fonts)> \newcommand*\TUD@SpecialOptionAtDocument[1]{} % %<*body> \newcommand*\tud@atdocument@hook{} \let\tud@atdocument@hook\relax \AtBeginDocument{% \renewcommand*\TUD@SpecialOptionAtDocument[1]{% \ifx\tud@atdocument@hook\relax% \gdef\tud@atdocument@hook{\global\let\tud@atdocument@hook\relax}% \AtEndOfFamilyOptions{% \tud@atdocument@hook% \tud@atdocument@process% }% \fi% \gappto\tud@atdocument@hook{\global\booltrue{@#1}}% }% } % % \end{macrocode} % \end{macro}^^A \tud@atdocument@hook % \end{macro}^^A \TUD@SpecialOptionAtDocument % % \iffalse %<*body> % \fi % % \begin{macro}{\tud@atdocument@process} % \changes{v2.05}{2016/06/14}{neu}^^A % \begin{macro}{\if@tud@font@set} % \changes{v2.05}{2016/06/14}{neu}^^A % \begin{macro}{\if@tud@font@math@set} % \changes{v2.05}{2016/06/14}{neu}^^A % \begin{macro}{\if@tud@font@skip@set} % \changes{v2.05}{2016/06/14}{neu}^^A % \begin{macro}{\if@tud@x@scr@headings@reset} % \changes{v2.05}{2016/06/14}{neu}^^A % \begin{macro}{\if@tud@layout@process} % \changes{v2.05}{2016/06/14}{neu}^^A % \begin{macro}{\if@tud@cdgeometry@process} % \changes{v2.05}{2016/06/14}{neu}^^A % \begin{macro}{\if@tud@cdgeometry@@process} % \changes{v2.05}{2016/06/14}{neu}^^A % Das Makro \cs{tud@atdocument@process} wird im Dokument ausgeführt, wenn % mindestens eine Option gesetzt wurde, welche \cs{TUD@SpecialOptionAtDocument} % verwendet. Je nachdem, welche Schalter insgesamt aktiviert wurden, werden die % dazugehörigen Befehle für die Einstellungen von Schriften, Layout und/oder % Satzspiegel in der richtigen Reihenfolge ausgeführt. % \begin{macrocode} \newif\if@tud@font@set \newif\if@tud@font@math@set \newif\if@tud@font@skip@set \newif\if@tud@x@scr@headings@reset \newif\if@tud@layout@process \newif\if@tud@cdgeometry@process \newif\if@tud@cdgeometry@@process \newcommand*\tud@atdocument@process{% \if@tud@font@set% \tud@font@set% \global\@tud@font@setfalse% \global\@tud@font@math@setfalse% \global\@tud@font@skip@setfalse% \global\@tud@layout@processfalse% \fi% \if@tud@font@math@set% \tud@font@math@set% \global\@tud@font@math@setfalse% \fi% \if@tud@font@skip@set% \tud@font@skip@set% \global\@tud@font@skip@setfalse% \fi% %<*class> \if@tud@x@scr@headings@reset% \tud@x@scr@headings@reset% \global\@tud@x@scr@headings@resetfalse% \global\@tud@layout@processfalse% \fi% \if@tud@layout@process% \tud@layout@process% \global\@tud@layout@processfalse% \fi% \if@tud@cdgeometry@process% \tud@cdgeometry@process% \global\@tud@cdgeometry@processfalse% \global\@tud@cdgeometry@@processfalse% \fi% \if@tud@cdgeometry@@process% \tud@cdgeometry@@process% \global\@tud@cdgeometry@@processfalse% \fi% % } % \end{macrocode} % \end{macro}^^A \if@tud@cdgeometry@@process % \end{macro}^^A \if@tud@cdgeometry@process % \end{macro}^^A \if@tud@layout@process % \end{macro}^^A \if@tud@x@scr@headings@reset % \end{macro}^^A \if@tud@font@skip@set % \end{macro}^^A \if@tud@font@math@set % \end{macro}^^A \if@tud@font@set % \end{macro}^^A \tud@atdocument@process % % \iffalse % %<*class&option> % \fi % % \subsection{Papierformat und Schriftgröße} % % Insbesondere für Poster aber auch für alle anderen \TUDScript-Klassen wird % überprüft, ob nach einer Änderung des Standardpapierformates auch die % Schriftgröße durch den Anwender angepasst wurde. Diese wird jedoch nicht auf % Plausibilität geprüft, da der Aufwand hierfür relativ hoch wäre. Vielmehr % wird davon ausgegangen, dass die explizite Angabe der Schriftgröße bewusst % und dem Papierformat sowie den verwendeten Textspalten entsprechend erfolgt. % % Die nachfolgend definierten Optionen und Befehle orientieren sich dabei stark % an internen \KOMAScript-Makros. % \ToDo{% % Wie mit \opt{layout} von \pkg{geometry} umgehen? Wann Papierformat prüfen? % Vielleicht mit \cs{KOMAoptionOf\{paper\}} prüfen? Oder ganz raus? % }[v2.06] % % \begin{option}{paper} % \changes{v2.05}{2015/07/24}{neu}^^A % \begin{macro}{\if@tud@x@scr@paper@set} % \changes{v2.05}{2015/07/24}{neu}^^A % Da die \KOMAScript-Option \opt{paper} eine Menge an Einstellmöglichkeiten % bietet, müssen die relevanten hier abgefangen werden. % \begin{macrocode} \newif\if@tud@x@scr@paper@set \TUD@key{paper}{% \tud@lowerstring{\@tempa}{#1}% % \end{macrocode} % Sowohl ISO/DIN-Formate\dots % \begin{macrocode} \def\@tempb##1##2\@nil{% \@tempswafalse% \if ##1a\@tempswatrue% \else\if ##1b\@tempswatrue% \else\if ##1c\@tempswatrue% \else\if ##1d\@tempswatrue% \fi\fi\fi\fi% \if@tempswa% \ifnumber{##2}{}{\@tempswafalse}% \fi% }% \expandafter\@tempb\@tempa\@nil% % \end{macrocode} % \dots als auch frei gewählte Papierformate werden erkannt. % \begin{macrocode} \if@tempswa\else% \def\@tempb##1:##2:##3\@nil{% \edef\@tempc{##1}% \ifx\@tempc\@empty\@tempswafalse\else% \edef\@tempc{##2}% \ifx\@tempc\@empty\@tempswafalse\else\@tempswatrue\fi% \fi% }% \expandafter\@tempb\@tempa::\@nil% \fi% % \end{macrocode} % Die Standardpapiergröße spielt allerdings keine Rolle für eine Warnung. % \begin{macrocode} \@tud@x@scr@paper@setfalse% \if@tempswa% \ifstr{\@tempa}{a4}{}{\@tud@x@scr@paper@settrue}% \FamilyKeyStateProcessed% \else% \FamilyKeyStateUnknownValue% \fi% } % \end{macrocode} % \end{macro}^^A \if@tud@x@scr@paper@set % \end{option}^^A paper % \begin{option}{fontsize} % \changes{v2.05}{2015/07/24}{neu}^^A % \begin{macro}{\if@tud@fontsize@set} % \changes{v2.05}{2015/07/24}{neu}^^A % Bei der Schriftgröße ist das bloße Erkennen und Weiterreichen der Option an % die Klasse ausreichend. % \begin{macrocode} \newif\if@tud@fontsize@set \TUD@key{fontsize}{% \@tud@fontsize@settrue% \PassOptionsToClass{fontsize=#1}{\TUD@Class@KOMA}% \FamilyKeyStateProcessed% } % \end{macrocode} % \end{macro}^^A \if@tud@fontsize@set % \end{option}^^A fontsize % Die Schlüssel sollen lediglich beim Laden der Dokumentklasse die angegebenen % Optionen abfangen. Wurde das Papierformat jedoch nicht die Schriftgröße % geändert, wird nun eine Warnung erzeugt. % \ToDo{% % Warnung überarbeiten erst zu Dokumentbeginn prüfen, \opt{layout} beachten!% % }[v2.06] % \begin{macrocode} \AtEndOfClass{% \RelaxFamilyKey{TUD}{paper}% \RelaxFamilyKey{TUD}{fontsize}% \ifboolexpr{bool {@tud@x@scr@paper@set} or bool {@landscape}}{% \if@tud@fontsize@set\else% \ClassWarningNoLine{\TUD@Class@Name}{% You've set a paper size, which is different from\MessageBreak% default (paper=a4, paper=portrait). Therefore you\MessageBreak% should additionally specify an explicit font size.\MessageBreak% See the manual for further information.% }% \fi% }{}% } % \end{macrocode} % % \iffalse % %<*class&execute&!inherit> % \fi % % \begin{macro}{\tud@x@scr@paper} % \changes{v2.05}{2015/07/24}{neu}^^A % \begin{macro}{\tud@x@scr@@paper} % \changes{v2.05}{2015/07/24}{neu}^^A % Um die Änderung des Papierformats auch über die \LaTeX-Standardoptionen wie % beispielsweise \opt{a5paper} abfangen zu können, müssen auch die äquivalent % zu \KOMAScript{} ausgewertet werden. % \begin{macrocode} \newcommand*\tud@x@scr@paper{% \expandafter\tud@x@scr@@paper\CurrentOption paper\tud@x@scr@@paper% } \newcommand*\tud@x@scr@@paper{} \def\tud@x@scr@@paper #1#2paper#3\tud@x@scr@@paper{% \@tempswafalse% \ifstr{#3}{paper}{\ifnumber{#2}{% \ifstr{#1}{a}{\@tempswatrue}{% \ifstr{#1}{b}{\@tempswatrue}{% \ifstr{#1}{c}{\@tempswatrue}{% \ifstr{#1}{d}{\@tempswatrue}{% }}}}% }{}}{}% \if@tempswa\TUDExecuteOptions{#3=#1#2}\fi% \PassOptionsToClass{\CurrentOption}{\TUD@Class@KOMA}% } % \end{macrocode} % \end{macro}^^A \tud@x@scr@@paper % \end{macro}^^A \tud@x@scr@paper % % \iffalse % %<*class&option> % \fi % % \subsection{Sprungmarken} % % \begin{option}{tudbookmarks} % \begin{macro}{\if@tud@bookmarks} % Wird das Paket \pkg{hyperref} geladen, so kann die Option \opt{tudbookmarks} % genutzt werden, um zu steuern, ob für Titel und Inhaltsverzeichnis % automatisch ein Eintrag für die Sprungmarken erzeugt werden soll. % \begin{macrocode} \newif\if@tud@bookmarks \TUD@ifkey{tudbookmarks}{@tud@bookmarks} % \end{macrocode} % \end{macro}^^A \if@tud@bookmarks % \end{option}^^A tudbookmarks % % \iffalse % %<*class&body> % \fi % % \begin{macro}{\tudbookmark} % \begin{macro}{\tud@x@hyperref@realfootnotes} % Die Befehle zum Eintragen der Sprungmarken. Im Dokument kann auch der Befehl % \cs{tudbookmark} vom Anwender genutzt werden, um manuell weitere Lesezeichen % zu erzeugen. % % Für die Titelseite werden~-- wie auch durch das Paket \pkg{hyperref}~-- die % Fußnoten mit dem Befehl \cs{tud@x@hyperref@realfootnotes} auf den originalen % Zustand zurückgesetzt. % \begin{macrocode} \newcommand*\tudbookmark[1][]{\@gobbletwo} \newcommand*\tud@x@hyperref@realfootnotes{} \AfterPackage{hyperref}{% \renewcommand*\tudbookmark[3][]{% \relax% \if@tud@bookmarks% \phantomsection% \ifblank{#1}{\pdfbookmark{#2}{#3}}{\pdfbookmark[#1]{#2}{#3}}% \fi% }% \renewcommand*\tud@x@hyperref@realfootnotes{% \let\Hy@saved@footnotemark\@footnotemark% \let\Hy@saved@footnotetext\@footnotetext% \let\@footnotemark\H@@footnotemark% \let\@footnotetext\H@@footnotetext% }% \pdfstringdefDisableCommands{\let\NoCaseChange\@firstofone}% } % \end{macrocode} % \end{macro}^^A \tud@x@hyperref@realfootnotes % \end{macro}^^A \tudbookmark % \begin{macro}{\tud@x@bookmark@startatroot} % \changes{v2.05}{2015/08/05}{neu}^^A % Wird das Paket \pkg{bookmark} geladen, können die erzeugten Outlines gezielt % auf der obersten Ebene erzeugt werden. % \begin{macrocode} \newcommand*\tud@x@bookmark@startatroot{\relax} \AfterPackage{bookmark}{% \renewcommand*\tud@x@bookmark@startatroot{% \if@tud@bookmarks\bookmarksetup{startatroot}\fi% }% } % \end{macrocode} % \end{macro}^^A \tud@x@bookmark@startatroot % \begin{environment}{titlepage} % \changes{v2.05}{2015/08/05}{neu}^^A % \begin{macro}{\@maketitle} % \changes{v2.05}{2015/08/05}{neu}^^A % \begin{macro}{\tud@make@titlehead} % \changes{v2.05}{2015/08/05}{neu}^^A % Ist die Option \opt{tudbookmarks} aktiviert, werden für Umschlag- und % Titelseite PDF"=Lesezeichen bzw. Outline-Einträge erzeugt. % \begin{macrocode} %<*book|report|article> \apptocmd{\titlepage}{% \tud@x@bookmark@startatroot% \if@tud@cover% \tudbookmark[% % 0% %
1% ]{\coverpagename}{cover}% \else% \tudbookmark[% % 0% %
1% ]{\titlepagename}{title}% \fi% }{}{\tud@patch@wrn{titlepage}} % % \end{macrocode} % Dies geschieht außerdem auch für die Titelköpfe. % \begin{macrocode} \pretocmd{\tud@make@titlehead}{% \tud@x@bookmark@startatroot% \tudbookmark[% % 0% % 1% ]{\titlename}{title}% }{}{\tud@patch@wrn{tud@make@titlehead}} \pretocmd{\@maketitle}{% \tud@x@bookmark@startatroot% \tudbookmark[% % 0% % 1% ]{\titlename}{title}% }{}{\tud@patch@wrn{@maketitle}} % \end{macrocode} % \end{macro}^^A \tud@make@titlehead % \end{macro}^^A \@maketitle % \end{environment}^^A titlepage % \begin{macro}{\tableofcontents} % \begin{macro}{\listoffigures} % \begin{macro}{\listoftables} % Für die Verzeichnisse geschieht dies auch. Für das Inhaltsverzeichnis ist % hierfür etwas mehr Aufwand notwendig. Für dieses wird im Normalfall keine % PDF-Outline erzeugt. Deshalb ist hier ein wenig Trickserei notwendig, um zwar % einen Outline-Eintrag für das Inhaltsverzeichnis zu erzeugen, dieses dabei % aber nicht in sich selbst einzutragen. % \begin{macrocode} \BeforeTOCHead[toc]{% \tud@x@bookmark@startatroot% \let\@tempc\relax% \iftocfeature{toc}{totoc}{}{% \if@tud@bookmarks% \setuptoc{toc}{totoc}% \tud@cmd@store{addtocontents}% \def\@tempc{% \unsettoc{toc}{totoc}% \tud@cmd@restore{addtocontents}% }% \let\addtocontents\@gobbletwo% \fi% }% } \AfterTOCHead[toc]{\@tempc} \BeforeTOCHead[lof]{\tud@x@bookmark@startatroot} \BeforeTOCHead[lot]{\tud@x@bookmark@startatroot} % \end{macrocode} % \end{macro}^^A \listoftables % \end{macro}^^A \listoffigures % \end{macro}^^A \tableofcontents % % \subsection{Bugfixing für das Paket \pkg{tocloft}} % % Das Paket \pkg{tocloft} verursacht allerlei Probleme. Wird es geladen, so % erscheint eine entsprechende Warnung. % \begin{macrocode} \BeforePackage{tocloft}{% \ClassWarningNoLine{\TUD@Class@Name}{% It is absolutely not recommended to use package\MessageBreak% `tocloft'. Loading the package will certainly lead\MessageBreak% to problems with table of contents and any list of\MessageBreak% floats. You should use the appropriate options of\MessageBreak% the KOMA-Script classes% }% } % \end{macrocode} % % \iffalse % %<*class&option> % \fi % % \subsection{Fußnoten in Überschriften} % % \begin{option}{footnotes} % \changes{v2.02}{2014/06/27}{neu}^^A % \begin{macro}{\if@tud@symbolheadings} % \changes{v2.02}{2014/06/27}{neu}^^A % Die \KOMAScript-Option \opt{footnotes} wird um den Schlüssel % \val{symbolheadings} erweitert, mit welchem eingestellt werden kann, ob in den % Überschriften Symbole für die Fußnoten anstelle von Zahlen verwendet werden % sollen. % \ToDo{\opt{footnotes=symbolheadings} komplett überarbeiten}[v2.06] % \begin{macrocode} \newif\if@tud@symbolheadings \TUD@key{footnotes}{% \TUD@set@numkey{footnotes}{@tempa}{% {nosymbolheadings}{0},{numberheadings}{0},% {symbolheadings}{1}% }{#1}% \ifx\FamilyKeyState\FamilyKeyStateProcessed% \ifcase\@tempa\relax% nosymbolheadings \@tud@symbolheadingsfalse% \or% symbolheadings \@tud@symbolheadingstrue% \fi% \fi% } % \end{macrocode} % \end{macro}^^A \if@tud@symbolheadings % \end{option}^^A footnotes % \begin{counter}{symbolheadings} % \changes{v2.02}{2014/06/27}{neu}^^A % Dieser Zähler wird bei aktivierter Option \opt{footnotes=symbolheadings} für % die Symboleauswahl von Fußnoten in Überschirften inkrementiert. % \begin{macrocode} \AtEndOfClass{% % \newcounter{symbolheadings}[chapter] % \newcounter{symbolheadings} } % \end{macrocode} % \end{counter}^^A symbolheadings % % \iffalse % %<*body> % \fi % % \begin{macro}{\tud@x@textcase@uclcnotmath} % \changes{v2.02}{2014/06/27}{\pkg{textcase}: Ignorieren von Fußnoten im % Argument des Befehls \cs{MakeTextUppercase}}^^A % \changes{v2.03}{2015/01/21}{\pkg{textcase}: Ignorieren des Befehls % \cs{@mkboth} im Argument des Befehls \cs{MakeTextUppercase}}^^A % \begin{macro}{\@uclcnotmath} % Damit Fußnoten nicht automatisch in Majuskeln gesetzt werden, wird der % interne Befehl \cs{@uclcnotmath} aus dem Paket \pkg{textcase} angepasst. % \begin{macrocode} \CheckCommand*\@uclcnotmath[4]{% \begingroup #1% \def\({$}\let\)\(% \def\NoCaseChange##1{\noexpand\NoCaseChange{\noexpand##1}}% \@nonchangecase\label \@nonchangecase\ref \@nonchangecase\ensuremath \def\cite##1##{\toks@{\noexpand\cite##1}\@citex}% \def\@citex##1{\NoCaseChange{\the\toks@{##1}}}% \def\reserved@a##1##2{\let#2\reserved@a}% \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}% \protected@edef\reserved@a{% \endgroup \noexpand\@skipmath#3#4$\valign$% }% \reserved@a% } \newcommand*\tud@x@textcase@uclcnotmath{% \def\footnote##1##{\toks@{\noexpand\footnote##1}\@footnote}% \def\@footnote##1{\NoCaseChange{\the\toks@{##1}}}% \def\@mkboth##1##2{\NoCaseChange{\@mkboth{##1}{##2}}}% } \patchcmd{\@uclcnotmath}{\@nonchangecase\ensuremath}{% \@nonchangecase\ensuremath\tud@x@textcase@uclcnotmath% }{}{\tud@patch@wrn{@uclcnotmath}} % \end{macrocode} % \end{macro}^^A \@uclcnotmath % \end{macro}^^A \tud@x@textcase@uclcnotmath % % \iffalse % %<*execute> % \fi % % \subsection{Durchreichen von Optionen und Standardoptionen} % % Durchreichen aller Klassenoptionen an die \KOMAScript-Klasse bzw. an die % genutzte \TUDScript-Elternklasse. Für Klassen wird vor dem Durchreichen noch % geprüft, ob ein spezielles Papierformat angegeben wurde. % \begin{macrocode} %\DeclareOption*{\tud@x@scr@paper} %<*class&inherit> \DeclareOption*{\PassOptionsToClass{\CurrentOption}{\TUD@Class@Parent}} % %\DeclareOption*{\KOMAoptions{\CurrentOption}} %\DeclareOption*{\TUDoptions{\CurrentOption}} % \end{macrocode} % Es werden die Standardoptionen ausgeführt. Für die Klasse \cls{tudscrposter} % werden die Farben aktiviert. % \begin{macrocode} %<*class&!inherit> \TUDExecuteOptions{% % cd=true,relspacing=true,tudbookmarks=true% % cd=bicolor,relspacing=true,tudbookmarks=false,cdfont=ultrabold% } % %<*package&tutorial> \KOMAoptions{headings=small} \TUDoptions{cdfoot=true} \TUDExecuteOptions{ToDo=true} % \TUDProcessOptions\relax % \end{macrocode} % Die korrespindierende \KOMAScript-Klasse bzw. \TUDScript-Elternklasse wird % geladen. % \begin{macrocode} %<*class&!inherit> \LoadClass{\TUD@Class@KOMA}[2015/04/23] % %<*class&inherit> \LoadClass{\TUD@Class@Parent} % % \end{macrocode} % % \iffalse % % %<*xindy> % \fi % % \subsection{Stildateien für \texorpdfstring{\app{texindy}}{texindy}} % % Für die Dokumentationsklassen und -pakete wird zur Sortierung \app{texindy} % verwendet. Da das Programm die die Dateien nicht in einem \val{TEXPATH} nach % den Stildateien sucht, werden diese zur Laufzeit im Arbeitsverzeichnis % erstellt. Nachfolgend wird die zu erstellenden \app{texindy}-Stildatei kurz % beschrieben. % \begin{macro}{\@hashchar} % \changes{v2.05}{2016/04/25}{neu}^^A % Das Hash-Zeichen. % \begin{macrocode} %<*doc> \catcode`\#=12 \newcommand*\@hashchar{#} \catcode`\#=6 % % \end{macrocode} % \begin{macro}{\tud@lst@def} % \changes{v2.05}{2016/04/25}{neu}^^A % \begin{macro}{\tud@lst@values} % \changes{v2.05}{2016/04/25}{neu}^^A % \begin{macro}{\if@tud@lst@multi} % \changes{v2.05}{2016/04/25}{neu}^^A % \begin{macro}{\tud@lst@init} % \changes{v2.05}{2016/04/25}{neu}^^A % \begin{macro}{\tud@lst@add} % \changes{v2.05}{2016/04/25}{neu}^^A % \begin{macro}{\tud@lst@process} % \changes{v2.05}{2016/04/25}{neu}^^A % Für die Änderungsliste in \cls{tudscrdoc} wird bei der Beschreibung von % Einträgen nur dann eine dritte Ebene verwendet, wenn es einem Eintrag mehrere % Angaben existieren. Sollte nur eine Anmerkung vorhanden sein, wird diese % direkt in der zweiten Ebene nach dem Eintrag selbst ausgegeben. % \begin{macrocode} %<*doc> \newcommand*\tud@lst@def{% \newcommand*\tud@lst@values{}% \newif\if@tud@lst@multi% \newcommand*\tud@lst@init{% \let\tud@lst@values\relax% \@tud@lst@multifalse% }% \newcommand*\tud@lst@add[1]{% \ifx\tud@lst@values\relax\else% \@tud@lst@multitrue% \fi% \listadd\tud@lst@values{##1}% }% \newcommand*\tud@lst@process{% \def\tud@reserved{}% \if@tud@lst@multi% \def\tud@reserved{\subsubitem}% \efill% \fi% \forlistloop\tud@reserved{\tud@lst@values}% }% } % % \end{macrocode} % \end{macro}^^A \tud@lst@process % \end{macro}^^A \tud@lst@add % \end{macro}^^A \tud@lst@init % \end{macro}^^A \if@tud@lst@multi % \end{macro}^^A \tud@lst@values % \end{macro}^^A \tud@lst@def % \end{macro}^^A \@hashchar % \begin{macro}{\tud@xdy@create} % \changes{v2.05}{2016/04/24}{neu}^^A % \begin{macro}{\tud@write@xdy} % \changes{v2.05}{2016/04/24}{neu}^^A % \begin{macro}{\if@tud@xdy@glo} % \changes{v2.05}{2016/04/25}{neu}^^A % Dies sind die Hilfsmakros für die Erzeugung der notwendigen Dateien. % \begin{macrocode} \begingroup %\ifdef{\tudxdyflag}{% \newcommand*\tud@write@xdy{} \newwrite\tud@write@xdy \newif\if@tud@xdy@glo \newcommand*\tud@xdy@create[2][theindex]{% \IfFileExists{\@currname-#2.xdy}{}{% \ifstr{#1}{theglossary}{\@tud@xdy@glotrue}{\@tud@xdy@glofalse}% \openout\tud@write@xdy=\@currname-#2.xdy\relax% % \end{macrocode} % Als erstes wird Standard-\LaTeX-Modul geladen. % \begin{macrocode} \write\tud@write@xdy{(require "texindy.xdy")}% % \end{macrocode} % % \subsubsection{Defintion der verwendeten Umgebung} % % Für die Klasse \cls{tudscrdoc} sind zwei sehr ähnliche Stildateien notwendig. % Die beiden unterschieden sich lediglich in der verwendeten Umgebung. % \begingroup% % \makeatletter% % \@bsphack\scan@allowedfalse\@esphack% % \makeatother% % \begin{macrocode} %<*doc> \write\tud@write@xdy{% (markup-index^^J% \space\space:open^^J% "\string\begin{#1}^^J% \space\space% \string\providecommand*\string\lettergroupDefault[1]{\@percentchar^^J% \@spaces\string\par% \string\centerline{\string\textbf{\string\textsf{Symbole}}}% \string\par\@percentchar^^J% \@spaces\string\nopagebreak\@percentchar^^J% \space\space}\@percentchar^^J% \space\space% \string\providecommand*\string\lettergroup[1]{\@percentchar^^J% \@spaces\string\par% \string\centerline{\string\textbf{\string\textsf{\@hashchar1}}}% \string\par\@percentchar^^J% \@spaces\string\nopagebreak\@percentchar^^J% \space\space}\@percentchar^^J% \space\space\string\makeatletter\@percentchar^^J% \space\space\string\scan@allowedfalse\@percentchar% }% % \end{macrocode} % Für die Änderungsliste erfolgt die GRuppierung anhand der Versionsnummer. Da % diese auf der ersten Ebene angegeben ist (\cs{item}) muss das Ganze mit einem % terminierten Befehl erfolgen. Hierfür wird \cs{@lettergroup} definiert. % Außerdem werden mit \cs{tud@lst@def} die benötigten Befehle zur selektiven % Anzeige der Änderungseinträge definiert. % \begin{macrocode} \if@tud@xdy@glo% \write\tud@write@xdy{% \space\space\string\newcommand*\string\@lettergroup{}\@percentchar^^J% \space\space% \string\def\string\@lettergroup\@hashchar1\string\relax% {\string\lettergroup{\@hashchar1}}\@percentchar^^J% \space\space\string\tud@lst@def\@percentchar% }% \fi% % \end{macrocode} % Der Abschluss der Umgebungsdefinition. % \begin{macrocode} \write\tud@write@xdy{% "^^J% \space\space:close "\string~n\string~n\string\end{#1}\string~n"^^J% \space\space:hierdepth 3^^J% )% }% % % \end{macrocode} % % \subsubsection{Defintion und Markup der Seitenzahlen} % % Leider lässt sich für Seitenzahlbereiche via \val{:attr} (noch) kein Markup % für angehängte \enquote{f.} sowie \enquote{ff.} einstellen. Diese würden % deshalb bei kursiven oder fetten Seitenzahlen trotzdem in normaler Schrift % erscheinen, weshalb auf die Auszeichnung folgender Seiten verzichtet wird. % \begin{macrocode} %^^A \write\tud@write@xdy{(require "ff-ranges.xdy")}% % \end{macrocode} % Seitenbereiche werden sofort zusammengefasst, wobei als Trennzeichen ein % Halbgeviertstrich verwendet wird. Für \cls{tudscrdoc} werden die Seitenzahlen % beim Einbinden der einzelnen \file{dtx}-Dateien mit einem alphanumerischen % Präfix versehen, wofür eine eigene \val{location-class} erstellt wird. % \begin{macrocode} \write\tud@write@xdy{% (define-location-class^^J% \space\space"arabic-page-numbers" ("arabic-numbers")% \space:min-range-length 1^^J% )^^J% %<*doc> (define-alphabet "AlphaExtended"^^J% \space(^^J% \space\space"A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M"^^J% \space\space"N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"^^J% \space\space"a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m"^^J% \space\space"n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"^^J% \space\space"?"^^J% \space)^^J% )^^J% (define-location-class^^J% \space\space"part" ("AlphaExtended" :sep "-" "arabic-numbers")% \space:min-range-length 1^^J% )^^J% % (markup-range :sep "--")% }% % \end{macrocode} % % \subsubsection{Markup des Füllbereichs zwischen Eintrag und Seitenzahlen} % % Punkte zwischen Eintrag und Seitenzahl. Das schließende \cs{relax} wird für % die smarte Definition des Befehls \cs{cleversee} benötigt, welcher nach den % beiden obligatorischen Argument die nachfolgenden Seitenzahlen sucht und % dabei durch \cs{relax} begrenzt wird. Für die Klasse \cls{tudscrdoc} wird in % der Änderungsliste der Hyperlink für die Seitenzahl respektive die Codezeile % direkt erzeugt. % \begin{macrocode} %<*doc> \if@tud@xdy@glo% \write\tud@write@xdy{% (markup-locclass-list% \space:open "\string\pfill\string\hypersourceref{" :close "}\string\relax"% )% }% \else% % \write\tud@write@xdy{% (markup-locclass-list% % \space:open "\string\,\string\dotfill\string\,"% % \space:open "\string\pfill\space"% \space:close "\string\relax"% )% }% % \fi% % \end{macrocode} % % \subsubsection{Ignorieren von bestimmten Anteilen bei der Sortierung} % % Alle Argumente in eckigen Klammern werden ignoriert. Dies wird bei einigen % Indexbefehlen genutzt, um die nicht beachteten RegExp-Regeln auszugleichen, % siehe den nächsten Absatz. In der Klasse \cls{tudscrdoc} werden außerdem ein % oder mehrere vorangestellte \val{@}-Zeichen ignoriert. % \begin{macrocode} \write\tud@write@xdy{% (merge-rule "\@backslashchar[(.*)\@backslashchar]" "" :eregexp)% %<*doc> ^^J% (merge-rule% \space"\string^(@+)([\string^@~n]*)"% \space"\string\2\string~e\string\1"% \space:eregexp :again% )^^J% (merge-rule% \space"(.*)(@@@@)([\string^@~n]*)"% \space"\string\1@@@\string\3\string~e"% \space:again :eregexp% )^^J% (merge-rule% \space"(.*)(@@@)([\string^@~n]*)"% \space"\string\1@@\string\3\string~e"% \space:again :eregexp% )^^J% (merge-rule% \space"(.*)(@@)([\string^@~n]*)"% \space"\string\1@\string\3\string~e"% \space:eregexp :again% )^^J% (merge-rule% \space"(.*?)(@)([\string^@~n]*)"% \space"\string\1\string~b\string\3"% \space:eregexp :again% ) % }% % \end{macrocode} % Innerhalb ausgewählter Auszeichnungs- und Textbefehle sollten die Befehle % selbst, nicht jedoch die Argumente verworfen werden. Leider werden die % manuell erstellten RegExp-Regeln durch \app{texindy} zu spät genutzt % (\url{http://sourceforge.net/p/xindy/bugs/22/}). % \begin{macrocode} %<*!doc> %^^A \write\tud@write@xdy{% %^^A (merge-rule "\\hologo\{(.*)\}" "/1" :eregexp)^^J% %^^A (merge-rule "\\texttt\{(.*)\}" "/1" :eregexp)^^J% %^^A (merge-rule "\\textsbn\{(.*)\}" "/1" :eregexp)^^J% %^^A (merge-rule "\\textsbs\{(.*)\}" "/1" :eregexp)^^J% %^^A }% % % \end{macrocode} % % \subsubsection{Markup der einzelnen Einträge} % % Für die Änderungsliste werden Untereinträge bis zur fünften Ebene unterstützt. % \begin{macrocode} %<*!doc&class> \write\tud@write@xdy{% (markup-indexentry :open "~n \string\subsubsubitem " :depth 3)% }% % % \end{macrocode} % Für die Änderungsliste erfolgt die Gruppierung anhand der Versionsnummer. Das % bedeutet, das das Markup für die eigentliche \val{letter-group} unterdrückt % und die erste Ebene dafür verwendet wird. % \begin{macrocode} %<*doc> \if@tud@xdy@glo% \write\tud@write@xdy{% (markup-letter-group% \space:open-head "\string~n\space\space\string\@gobble{"% \space:close-head "}"% )^^J% % \end{macrocode} % Leider gibt es für die Eintragsebenen keine Schlüssel \val{open-head} und % \val{close-head}, weshalb für die Änderungsliste etwas getrickst werden muss. % Zwischen Einträgen der ersten Ebene soll äquivalent zu \val{letter-group} % etwas Abstand eingefügt werden. % \begin{macrocode} (markup-indexentry-list% \space:sep "\string~n\string~n\space\space\string\indexspace\string~n"% \space:depth 0% )^^J% % \end{macrocode} % Da jeder Eintrag in der Änderungsliste aus mindestens drei Ebenen besteht, % wird vor der ersten Ebene der Beginn des Markupbefehls gesetzt\dots % \begin{macrocode} (markup-indexentry\@spaces\space\space% :open "\string~n\space\space\string\@lettergroup\space"\space:depth 0% )^^J% % \end{macrocode} % \dots und vor Beginn der zweiten Ebene mit \cs{relax} terminiert. % \begin{macrocode} (markup-indexentry-list :open "\string\relax" :depth 1)^^J% % \end{macrocode} % Anschließend werden die zweite sowie die dritte Ebene mit \cs{item} und % \cs{subitem} ausgezeichnet. % \begin{macrocode} (markup-indexentry\@spaces\space\space% :open "\string~n\space\space\string\item\space" :depth 1% )^^J% (markup-indexentry-list :open "\string\efill" :depth 2)^^J% (markup-indexentry\@spaces\space\space% :open "\string~n\@spaces\string\subitem\space" :depth 2% )^^J% % \end{macrocode} % Im Implemetierungsteil soll eine einzelne Änderungsnotiz für einen Eintrag % direkt danach ausgegeben werden. Exisitieren für diesen jedoch mehrere % Anmerkungen, so sollen diese in der nächsten Ebene ausgegeben werden. Da die % Anzahl aller Anmerkungen zu einem einzelnen Eintrag zu Beginn noch unbekannt % ist, werden alle dazugehörigen Änderungsnotizen zunächst mit \cs{tud@lst@add} % in der~-- zuvor mit dem Makro \cs{tud@lst@init} initialisierten~-- Liste % \cs{tud@lst@values} gesammelt und diese am Ende des jeweiligen Eintrags durch % \cs{tud@lst@process} ausgewertet. % \begin{macrocode} (markup-indexentry-list^^J% \space\space:open \space"\string\tud@lst@init"^^J% \space\space:close "\string~n \@spaces\space\string\tud@lst@process"^^J% \space\space:depth 3^^J% )^^J% (markup-indexentry^^J% \space\space:open \space"\string~n\@spaces\space\string\tud@lst@add{"^^J% \space\space:close "}"^^J% \space\space:depth 3^^J% )% }% % \end{macrocode} % Für den Index aller Eintragstypen ist nur auf zu leere \cs{hbox} zu achten. % \begin{macrocode} \else% \write\tud@write@xdy{% (markup-indexentry-list :open "\string\efill" :depth 1)% }% \fi% % % \end{macrocode} % % \subsubsection{Attribute für Einträge} % % Es werden die Attribute \emph{declare} mit der Abkürzung \emph{!} sowie % \emph{important} mit der Abkürzung \emph{?} und \emph{default} definiert, % welche hierarchisch gleichgestellt sind. % % \iffalse %<*!doc> % \fi % % \begin{macrocode} \write\tud@write@xdy{% (define-attributes (("declare" "!" "important" "?" "default")))^^J% % \end{macrocode} % Eine Alternative wäre, diese in der Hierarchie zu unterscheiden, allerdings % war eine Bildung von zufriedenstellenden Seitenbereichen dabei nicht möglich % und wurde deshalb verworfen. % \begin{macrocode} %^^A (markup-attribute-group-list :sep ", ")^^J% %^^A (define-attributes (("declare" "!") ("important" "?")("default")))^^J% % \end{macrocode} % Einträge, die als wichtig oder als Deklaration festgelegt wurden, könnten % auch für normale Indexeinträge zur Bereichsbildung verwendet werden. % Allerdings führt dies auch zur Erzeugung redundanter Einträge, falls es sich % bei den Sondereinträgen bereits um einen Seitenbereich handelt. % \begin{macrocode} %^^A (merge-to "declare" "default")^^J% %^^A (merge-to "!" "default")^^J% %^^A (merge-to "important" "default")^^J% %^^A (merge-to "?" "default")^^J% % \end{macrocode} % Hier erfolgt die Definition der Auszeichnugen der Attribute. Deklarationen % werden fett gedruckt, wichtige Einträge erscheinen kursiv. Außerdem wird ein % entsprechnder Link auf die Seite eingefügt. % \begin{macrocode} (markup-locref% \space:attr "declare"\space\space% \space:open "\string\textbf{\string\hyperpage{"% \space:close "}}"% )^^J% (markup-locref% \space:attr "!"\@spaces\@spaces% \space:open "\string\textbf{\string\hyperpage{"% \space:close "}}"% )^^J% (markup-locref% \space:attr "important"% \space:open "\string\textsl{\string\hyperpage{"% \space:close "}}"% )^^J% (markup-locref% \space:attr "?"\@spaces\@spaces% \space:open "\string\textsl{\string\hyperpage{"% \space:close "}}"% )^^J% (markup-locref% \space:attr "default"\space\space% \space:open "\string\hyperpage{"\@spaces\@spaces% \space:close "}"% )% }% % \end{macrocode} % % \iffalse % %<*doc> % \fi % % Für \cls{tudscrdoc} erfolgen die Auszeichnungen für den Index im Stile von % \pkg{doc} mit den Attribute \emph{main} und \emph{usage}. % \begin{macrocode} \if@tud@xdy@glo\else% \write\tud@write@xdy{% (define-attributes (("main" "usage" "default")))^^J% (markup-locref :attr "main"% \space\space:open "\string\main{"\space\space:close "}"% )^^J% (markup-locref :attr "usage"% \space:open "\string\usage{"\space:close "}"% )% }% \fi% % \end{macrocode} % % \iffalse % %<*!doc> % \fi % % \subsubsection{Querverweise im Index} % % Mit \val{see}\marg{Eintrag} erzeugte Querverweise im Index prüfen, ob % außerdem noch Seitenzahlangaben existent sind. % \begin{macrocode} \write\tud@write@xdy{% (markup-crossref-list :class "see"^^J% \space\space:open "\string\cleversee{" \@spaces:sep "; " :close "}"^^J% )^^J% (markup-crossref-list :class "seealso"^^J% \space\space:open "\string\cleverseealso{" :sep "; " :close "}"^^J% )% }% % \end{macrocode} % % \iffalse %<*class> % \fi % % Um Querverweise ohne Prüfung des Zieleintrags erzeugen zu können, wird der % Typ \val{seeunverified} definiert. % \begin{macrocode} \write\tud@write@xdy{% (define-crossref-class "seeunverified" :unverified)^^J% (markup-crossref-list :class "seeunverified"^^J% \space\space:open "\string\cleversee{" \@spaces:sep "; " :close "}"^^J% )% }% % \end{macrocode} % Dieser Querverweistyp wird speziell im allgemeinen Index verwendet, um auf % einen Spezialindex zu verweisen. Dabei dient \val{:unverified} zum % Unterdrücken von Warnungen durch \app{texindy} aufgrund eines fehlenden % Ziels für den Querverweis. % \begin{macrocode} \write\tud@write@xdy{% (define-crossref-class "seeidx" :unverified)^^J% (markup-crossref-list :class "seeidx"^^J% \space\space:open "\string\seeidx{"\@spaces\@spaces:sep "; "% \space:close "}{}"^^J% )% }% % \end{macrocode} % Damit die Makros \cs{cleversee} und \cs{cleverseealso} sowie \cs{seeidx} auf % nachfolgende Seitenzahlen suchen können, müssen diese vor selbigen im Index % aufgerufen werden. % \begin{macrocode} \write\tud@write@xdy{% (define-location-class-order^^J% \space\space(^^J% \@spaces"see" "seealso" "seeidx" "seeunverified"^^J% \@spaces"roman-page-numbers" "arabic-page-numbers" "alpha-page-numbers"^^J% \@spaces"Roman-page-numbers" "Alpha-page-numbers"^^J% \space\space)^^J% )% }% % \end{macrocode} % % \iffalse % % \fi % % Werden mit \val{see}\marg{Eintrag!Untereintrag} gezielte Querverweise auf % Untereinträge im Index erstellt, so werden diese nicht standardmäßig mit % einem Komma sondern mit \enquote{\,\textbar\,} getrennt. % \begin{macrocode} \write\tud@write@xdy{% (markup-crossref-layer-list :class "see"% \@spaces\space:sep "\string\,\string\textbar\string\,"% )^^J% (markup-crossref-layer-list :class "seealso"% \space:sep "\string\,\string\textbar\string\,"% )% }% % \end{macrocode} % % \iffalse % % \fi % % Damit ist die \app{texindy}-Stildatei fertig und kann mit \cs{tud@xdy@create} % erstellt werden. % \endgroup % \begin{macrocode} \closeout\tud@write@xdy% }% } \tud@xdy@create{ind} %\tud@xdy@create[theglossary]{gls} %}{} \endgroup % \end{macrocode} % \end{macro}^^A \if@tud@xdy@glo % \end{macro}^^A \tud@write@xdy % \end{macro}^^A \tud@xdy@create % % \iffalse % % \fi % % \Finale % \endinput