% \CheckSum{491} % \iffalse meta-comment % % TUD-Script -- Corporate Design of Technische Universität Dresden % ---------------------------------------------------------------------------- % % Copyright (C) Falk Hanisch , 2012-2020 % % ---------------------------------------------------------------------------- % % 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 verändert werden. Die aktuelle % Version dieser Lizenz ist http://www.latex-project.org/lppl.txt und % Version 1.3c oder später ist Teil aller Verteilungen von LaTeX 2005/12/01 % oder später 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-texindy.dtx %<*dtx> % \fi % \ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi \ProvidesFile{tudscr-texindy.dtx}[2019/06/28 v2.06 TUD-Script\space% (texindy style files)% ] % % \iffalse \documentclass[english,ngerman,xindy]{tudscrdoc} \iftutex \usepackage{fontspec} \else \usepackage[T1]{fontenc} \usepackage[ngerman=ngerman-x-latest]{hyphsubst} \fi \usepackage{babel} \usepackage{tudscrfonts} \KOMAoptions{parskip=half-} \usepackage{bookmark} \usepackage[babel]{microtype} \CodelineIndex \RecordChanges \GetFileInfo{tudscr-texindy.dtx} \title{\file{\filename}} \author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} \date{\fileversion\nobreakspace(\filedate)} \begin{document} \maketitle \tableofcontents \DocInput{\filename} \end{document} % % \fi % % \selectlanguage{ngerman} % % \section{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 |TEXPATH| nach den % Stildateien sucht, werden diese zur Laufzeit im Arbeitsverzeichnis erstellt. % Nachfolgend werden die zu erstellenden \app{texindy}-Stildateien beschrieben. % % \StopEventually{\PrintIndex\PrintChanges\PrintToDos} % % \begin{macro}{\@hashchar} % \changes{v2.05}{2016/04/25}{neu}^^A % Das Hash-Zeichen wird bei \cls{tudscrdoc} für die Befehlsdeklarationen in der % Stildatei benötigt. Damit dieses beim Erzeugen der Datei nicht als solches % interpretiert wird, ist dafür ein separates Makro notwendig. % \begin{macrocode} %<*doc> \catcode`\#=12 \newcommand*\@hashchar{#} \catcode`\#=6 % % \end{macrocode} % \end{macro}^^A \@hashchar % % \subsection{Defintion der verwendeten Umgebung} % % \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 nötigen Dateien. Mit dem % \cs{tud@xdy@create} wird angegeben, ob die Stildatei für einen Index oder ein % Glossar erzeugt wird, was prinzipiell nur für die Klasse \cls{tudscrdoc} % notwendig ist. % \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-\LaTeXe-Modul geladen. % \begin{macrocode} \write\tud@write@xdy{(require "texindy.xdy")}% % \end{macrocode} % % \subsection{Befehle zur Gruppierung der Indexeinträge} % % \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 erstellt. % \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} \if@tud@xdy@glo% \write\tud@write@xdy{% "^^J% \space\space:close "\string~n\string~n\string\end{#1}\string~n"^^J% \space\space:hierdepth 4^^J% )% }% \else% \write\tud@write@xdy{% "^^J% \space\space:close "\string~n\string~n\string\end{#1}\string~n"^^J% \space\space:hierdepth 3^^J% )% }% \fi% % % \end{macrocode} % % \subsection{Defintion und Markup der Seitenzahlen} % % Leider lässt sich für Seitenzahlbereiche via |: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} % Bereiche mit mehr als zwei Seitenzahlen werden 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 |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"codeline" ("AlphaExtended" :sep "-" "arabic-numbers")% \space:min-range-length 2^^J% )^^J% (define-location-class-order ("arabic-page-numbers" "codeline"))^^J% % (markup-range :sep "--")% }% % \end{macrocode} % % \subsection{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 |@|"~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 lässt sich dies % momentan nicht umsetzen, da die manuell erstellten RegExp-Regeln durch % \hrfn{http://sourceforge.net/p/xindy/bugs/22/}{\app{texindy} nicht korrekt} % genutzt werden. % \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} % % \subsection{Markup der einzelnen Einträge} % % Für die Änderungsliste im Handbuch werden Untereinträge bis zur vierten 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 von \cls{tudscrdoc} erfolgt die Gruppierung anhand der % angegebenen Versionsnummer. Das bedeutet, das das Markup für die eigentliche % |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 |open-head| und % |close-head|, weshalb für die Änderungsliste etwas getrickst werden muss. % Zwischen Einträgen der ersten Ebene soll äquivalent zu |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. Sollte eine weitere Unterebene exisitieren, % werden entsprechend die Makros \cs{tud@lst@@init}, \cs{tud@lst@@values} und % \cs{tud@lst@@add} sowie \cs{tud@lst@@process} verwendet. % \begin{macrocode} (markup-indexentry-list^^J% \space\space:open\space\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\space"\string~n\@spaces\space\space\string\tud@lst@add{"^^J% \space\space:close "}"^^J% \space\space:depth 3^^J% )^^J% (markup-indexentry-list^^J% \space\space:close "\string~n\@spaces\@spaces\string\tud@lst@@process{"^^J% \space\space:open\space\space"}\string\tud@lst@@init"^^J% \space\space:depth 4^^J% )^^J% (markup-indexentry^^J% \space\space:open% \space\space"\string~n\@spaces\@spaces\string\tud@lst@@add{"^^J% \space\space:close "}"^^J% \space\space:depth 4^^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\efil" :depth 1)% }% \fi% % % \end{macrocode} % % \subsection{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} \write\tud@write@xdy{% (markup-locclass-list% % \space:open "\string\,\string\dotfill\string\,"% % \space:open "\string\pfill\space"% \space:close "\string\relax"% \space:sep ",\space"% )% }% % \end{macrocode} % % \subsection{Attribute für Einträge} % % Es werden für Handbuch und Tutorials 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}, wobei hier eine % Hierarchie verwendet wird. Es werden Einträge mit dem Attribut \emph{usage} % vor \emph{main} und \emph{default} aufgeführt. % \begin{macrocode} \write\tud@write@xdy{% (markup-attribute-group-list :sep ", ")^^J% (define-attributes (("usage") ("main") ("default")))^^J% (markup-locref :attr "usage"% \space:open "\string\usage{"\space:close "}"% )^^J% (markup-locref :attr "main"% \space\space:open "\string\main{"\space\space:close "}"% )% }% % \end{macrocode} % % \iffalse % %<*!doc> % \fi % % \subsection{Querverweise im Index} % % Im Handbuch prüfen, mit \verb=|see=\marg{Eintrag} erzeugte Querverweise im % Index, 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 % passende Typ |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 |: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 \verb=|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 % % \subsection{Erzeugen der Stildateien} % % Damit ist die \app{texindy}-Stildatei fertig und kann mit \cs{tud@xdy@create} % erstellt werden. % \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 % % \Finale % \endinput