summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/tudscr/tudscr-misc.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-07-30 23:12:46 +0000
committerKarl Berry <karl@freefriends.org>2016-07-30 23:12:46 +0000
commit6b200dd5c2335baa8c78037d8f1c75d1295187f4 (patch)
tree45201aff662870ef1d337d24f7ce584320a633bf /Master/texmf-dist/source/latex/tudscr/tudscr-misc.dtx
parent4e2bc5d88938c53a614ca1efafe6680e25d24c76 (diff)
tudscr (26jul16)
git-svn-id: svn://tug.org/texlive/trunk@41776 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/tudscr/tudscr-misc.dtx')
-rw-r--r--Master/texmf-dist/source/latex/tudscr/tudscr-misc.dtx1137
1 files changed, 1027 insertions, 110 deletions
diff --git a/Master/texmf-dist/source/latex/tudscr/tudscr-misc.dtx b/Master/texmf-dist/source/latex/tudscr/tudscr-misc.dtx
index 711cb08cda5..eac483dd61f 100644
--- a/Master/texmf-dist/source/latex/tudscr/tudscr-misc.dtx
+++ b/Master/texmf-dist/source/latex/tudscr/tudscr-misc.dtx
@@ -1,4 +1,4 @@
-% \CheckSum{106}
+% \CheckSum{907}
% \iffalse meta-comment
%
% ============================================================================
@@ -18,13 +18,13 @@
%
% ----------------------------------------------------------------------------
%
-% 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.
+% 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.
%
% ============================================================================
%
@@ -51,15 +51,17 @@
%<*driver>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\ProvidesFile{tudscr-misc.dtx}[%
- 2015/06/12 v2.04 TUD-KOMA-Script (miscellaneous)%
+ 2016/07/20 v2.05 TUD-KOMA-Script (miscellaneous)%
]
\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
-\documentclass[english,ngerman]{tudscrdoc}
+\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}
@@ -72,65 +74,292 @@
%
% \selectlanguage{ngerman}
%
-% \changes{v2.02}{2014/06/23}{Unterstützung für \pkg{titlepage} entfernt}^^A
-% \changes{v2.02}{2014/07/08}{Optionen nutzen \cs{FamilyKeyState}}^^A
+% \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 die Hauptklassen}
+% \section{Verschiedenes für das \TUDScript-Bundle}
%
% Alles, wofür sich eine separate Datei nicht lohnt, landet hier.
%
-% \StopEventually{\PrintIndex\PrintChanges}
+% \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]{}
+%</execute&(class&!inherit|package&fonts)>
+%<*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}}%
+ }%
+}
+%</body>
+% \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%
+%</class>
+}
+% \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
+%</body>
%<*class&option>
% \fi
%
-% \subsection{Fußnoten in Überschriften}
+% \subsection{Papierformat und Schriftgröße}
%
-% \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.
+% 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@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%
+\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@bookmarks
-% \end{option}^^A symbolheadings
+% \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&option>
-%<*class&body>
+%<*class&execute&!inherit>
% \fi
%
-% \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{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}
-%<book|report>\newcounter{symbolheadings}[chapter]%
-%<article>\newcounter{symbolheadings}%
+\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{counter}^^A symbolheadings
+% \end{macro}^^A \tud@x@scr@@paper
+% \end{macro}^^A \tud@x@scr@paper
%
% \iffalse
-%</class&body>
+%</class&execute&!inherit>
%<*class&option>
% \fi
%
@@ -154,19 +383,17 @@
% \fi
%
% \begin{macro}{\tudbookmark}
-% \begin{macro}{\tud@footnote@unhyper}
-% \begin{macro}{\tud@footnote@rehyper}
-% \changes{v2.02}{2014/11/13}{entfernt}^^A
+% \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@footnote@unhyper} auf den Originalzustand
-% zurückgesetzt.
+% Fußnoten mit dem Befehl \cs{tud@x@hyperref@realfootnotes} auf den originalen
+% Zustand zurückgesetzt.
% \begin{macrocode}
\newcommand*\tudbookmark[1][]{\@gobbletwo}
-\newcommand*\tud@footnote@unhyper{}
+\newcommand*\tud@x@hyperref@realfootnotes{}
\AfterPackage{hyperref}{%
\renewcommand*\tudbookmark[3][]{%
\relax%
@@ -175,7 +402,7 @@
\ifblank{#1}{\pdfbookmark{#2}{#3}}{\pdfbookmark[#1]{#2}{#3}}%
\fi%
}%
- \renewcommand*\tud@footnote@unhyper{%
+ \renewcommand*\tud@x@hyperref@realfootnotes{%
\let\Hy@saved@footnotemark\@footnotemark%
\let\Hy@saved@footnotetext\@footnotetext%
\let\@footnotemark\H@@footnotemark%
@@ -184,105 +411,795 @@
\pdfstringdefDisableCommands{\let\NoCaseChange\@firstofone}%
}
% \end{macrocode}
-% \end{macro}^^A \tud@footnote@rehyper
-% \end{macro}^^A \tud@footnote@unhyper
+% \end{macro}^^A \tud@x@hyperref@realfootnotes
% \end{macro}^^A \tudbookmark
-% \begin{macro}{\maketitle}
-% \begin{macro}{\tableofcontents}
-% Für den Titel und das Inhaltsverzeichnis werden Outline-Einträge erzeugt.
+% \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}
-\pretocmd{\maketitle}{%
- \if@tud@bookmarks%
- \ifdef{\bookmarksetup}{\bookmarksetup{startatroot}}{}%
- \fi%
-%<*book|report>
- \tudbookmark[0]{\titlepagename}{title}%
-%</book|report>
-%<*article>
- \tudbookmark[1]{\titlepagename}{title}%
-%</article>
-}{}{\tud@patch@wrn{maketitle}}
-\pretocmd{\tableofcontents}{%
- \if@tud@bookmarks%
- \ifdef{\bookmarksetup}{\bookmarksetup{startatroot}}{}%
+\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[%
+%<book|report> 0%
+%<article> 1%
+ ]{\coverpagename}{cover}%
+ \else%
+ \tudbookmark[%
+%<book|report> 0%
+%<article> 1%
+ ]{\titlepagename}{title}%
\fi%
-%<*book|report>
- \tudbookmark[0]{\contentsname}{toc}%
-%</book|report>
-%<*article>
- \tudbookmark[1]{\contentsname}{toc}%
-%</article>
-}{}{\tud@patch@wrn{tableofcontents}}
+}{}{\tud@patch@wrn{titlepage}}
+%</book|report|article>
+% \end{macrocode}
+% Dies geschieht außerdem auch für die Titelköpfe.
+% \begin{macrocode}
+\pretocmd{\tud@make@titlehead}{%
+ \tud@x@bookmark@startatroot%
+ \tudbookmark[%
+%<book|report> 0%
+%<article|poster> 1%
+ ]{\titlename}{title}%
+}{}{\tud@patch@wrn{tud@make@titlehead}}
+\pretocmd{\@maketitle}{%
+ \tud@x@bookmark@startatroot%
+ \tudbookmark[%
+%<book|report> 0%
+%<article|poster> 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
-% \end{macro}^^A \maketitle
+%
+% \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}{%
- \ClassWarning{\TUDClassName}{%
- It is not recommended to use package `tocloft'.\MessageBreak%
- Loading the package will certainly lead to problems\MessageBreak%
- with table of contents and any list of floats. You\MessageBreak%
- should use the appropriate options of KOMA-Script%
+ \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&body>
+%<*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{%
+%<book|report> \newcounter{symbolheadings}[chapter]
+%<article|poster> \newcounter{symbolheadings}
+}
+% \end{macrocode}
+% \end{counter}^^A symbolheadings
+%
+% \iffalse
+%</class&option>
+%<*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
+%</body>
%<*execute>
% \fi
%
% \subsection{Durchreichen von Optionen und Standardoptionen}
%
% Durchreichen aller Klassenoptionen an die \KOMAScript-Klasse bzw. an die
-% genutzte \TUDScript-Elternklasse.
+% genutzte \TUDScript-Elternklasse. Für Klassen wird vor dem Durchreichen noch
+% geprüft, ob ein spezielles Papierformat angegeben wurde.
% \begin{macrocode}
-%<*class&!inherit>
-\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\TUDClassName@KOMA}}
-%</class&!inherit>
+%<class&!inherit>\DeclareOption*{\tud@x@scr@paper}
%<*class&inherit>
-\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\TUDClassName@Parent}}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\TUD@Class@Parent}}
%</class&inherit>
-%<*package&fonts>
-\DeclareOption*{\KOMAoptions{\CurrentOption}}
-%</package&fonts>
-%<*package&poster>
-\DeclareOption*{\TUDoptions{\CurrentOption}}
-%</package&poster>
+%<package&fonts>\DeclareOption*{\KOMAoptions{\CurrentOption}}
+%<package&comp>\DeclareOption*{\TUDoptions{\CurrentOption}}
% \end{macrocode}
-% Es werden die Standardoptionen ausgeführt. Die Ausführung selbst wird durch
-% den Befehl \cs{TUD@noworlater} innerhalb von \cs{TUD@key} auf das Ende der
-% \KOMAScript-Klasse verzögert.
+% Es werden die Standardoptionen ausgeführt. Für die Klasse \cls{tudscrposter}
+% werden die Farben aktiviert.
% \begin{macrocode}
%<*class&!inherit>
-\TUDExecuteOptions{cd=true,cdfont=true,tudbookmarks=true}
+\TUDExecuteOptions{%
+%<book|report|article> cd=true,relspacing=true,tudbookmarks=true%
+%<poster> cd=bicolor,relspacing=true,tudbookmarks=false,cdfont=ultrabold%
+}
%</class&!inherit>
-% \end{macrocode}
-% Für das Paket \pkg{tudscrfonts} werden die Schriften aktiviert.
-% \begin{macrocode}
-%<*package&fonts>
-\TUDExecuteOptions{cdfont=true}
-%</package&fonts>
-%<*package&poster>
-\TUDExecuteOptions{cdstyle=bicolor}
-%</package&poster>
+%<*package&tutorial>
+\KOMAoptions{headings=small}
+\TUDoptions{cdfoot=true}
+\TUDExecuteOptions{ToDo=true}
+%</package&tutorial>
\TUDProcessOptions\relax
% \end{macrocode}
% Die korrespindierende \KOMAScript-Klasse bzw. \TUDScript-Elternklasse wird
% geladen.
% \begin{macrocode}
%<*class&!inherit>
-\LoadClass{\TUDClassName@KOMA}[2015/04/23]
+\LoadClass{\TUD@Class@KOMA}[2015/04/23]
%</class&!inherit>
%<*class&inherit>
-\LoadClass{\TUDClassName@Parent}
+\LoadClass{\TUD@Class@Parent}
%</class&inherit>
% \end{macrocode}
%
% \iffalse
%</execute>
+%</!xindy>
+%<*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
+%</doc>
+% \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}%
+ }%
+}
+%</doc>
+% \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
+%<doc>\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%
+ )%
+ }%
+%</doc>
+% \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%
+%</doc>
+ (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%
+%</doc>
+ \write\tud@write@xdy{%
+ (markup-locclass-list%
+%<!doc> \space:open "\string\,\string\dotfill\string\,"%
+%<doc> \space:open "\string\pfill\space"%
+ \space:close "\string\relax"%
+ )%
+ }%
+%<doc> \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%
+ )
+%</doc>
+ }%
+% \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 }%
+%</!doc>
+% \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)%
+ }%
+%</!doc&class>
+% \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%
+%</doc>
+% \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>
+%<*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>
+%<*!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
+%</class>
+% \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
+%</!doc>
+% \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}
+%<doc>\tud@xdy@create[theglossary]{gls}
+%<doc>}{}
+\endgroup
+% \end{macrocode}
+% \end{macro}^^A \if@tud@xdy@glo
+% \end{macro}^^A \tud@write@xdy
+% \end{macro}^^A \tud@xdy@create
+%
+% \iffalse
+%</xindy>
% \fi
%
% \Finale