diff options
Diffstat (limited to 'macros/latex/contrib/tudscr/source')
50 files changed, 45469 insertions, 0 deletions
diff --git a/macros/latex/contrib/tudscr/source/doc/examples/dissertation.tex b/macros/latex/contrib/tudscr/source/doc/examples/dissertation.tex new file mode 100644 index 0000000000..d5ba74a3bb --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/dissertation.tex @@ -0,0 +1,38 @@ +\documentclass[% + english,ngerman,% + BCOR=6mm,cdgeometry=no,DIV=13% +]{tudscrreprt} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{isodate} +\usepackage{blindtext} +\begin{document} +\faculty{Juristische Fakultät} +\department{Fachrichtung Strafrecht} +\institute{Institut für Kriminologie} +\chair{Lehrstuhl für Kriminalprognose} +\date{18.02.2015} +\author{Mickey Mouse} +\title{% + Entwicklung eines optimalen Verfahrens zur Eroberung des + Geldspeichers in Entenhausen +} +\thesis{diss} +\graduation[Dr. jur.]{Doktor der Rechte} +\dateofbirth{2.1.1990} +\placeofbirth{Dresden} +\defensedate{15.03.2015} +\referee{Dagobert Duck \and Mac Moneysac} +\maketitle +\TUDoption{abstract}{section,multiple} +\begin{abstract}[pagestyle=empty.tudheadings] +\blindtext +\nextabstract[english] +\blindtext +\end{abstract} +\end{document} diff --git a/macros/latex/contrib/tudscr/source/doc/examples/document.tex b/macros/latex/contrib/tudscr/source/doc/examples/document.tex new file mode 100644 index 0000000000..9751d1c3d6 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/document.tex @@ -0,0 +1,20 @@ +\documentclass[ngerman]{tudscrreprt} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage[math]{blindtext} +\begin{document} +\faculty{Juristische Fakultät} +\department{Fachrichtung Strafrecht} +\institute{Institut für Kriminologie} +\chair{Lehrstuhl für Kriminalprognose} +\date{18.02.2015} +\author{Mickey Mouse} +\title{Der Geldspeicher in Entenhausen} +\maketitle +\blinddocument +\end{document} diff --git a/macros/latex/contrib/tudscr/source/doc/examples/evaluation.tex b/macros/latex/contrib/tudscr/source/doc/examples/evaluation.tex new file mode 100644 index 0000000000..c93670d7e6 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/evaluation.tex @@ -0,0 +1,47 @@ +\documentclass[ngerman]{tudscrartcl} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{isodate} +\usepackage{tudscrsupervisor} +\usepackage{enumitem}\setlist{noitemsep} +\begin{document} +\faculty{Juristische Fakultät}\department{Fachrichtung Strafrecht} +\institute{Institut für Kriminologie}\chair{Lehrstuhl für Kriminalprognose} +\date{16.10.2015} +\author{Mickey Mouse} +\title{% + Entwicklung eines optimalen Verfahrens zur Eroberung des + Geldspeichers in Entenhausen +} +\thesis{diploma}\graduation[Dipl.-Ing.]{Diplomingenieur} +\matriculationnumber{12345678}\matriculationyear{2010} +\dateofbirth{2.1.1990}\placeofbirth{Dresden} +\referee{Dagobert Duck} +\evaluationform[pagestyle=empty]{% + Als Ziel dieser Arbeit sollte identifiziert werden, warum das Thema + gerade so omnipräsent ist und wie sich dieser Effekt abschwächen + ließe. Zusätzlich waren Methoden zu entwickeln, mit denen ein + ähnlicher Vorgang zukünftig vermieden werden könnte. +}{% + Die Arbeit gliedert sich in mehrere Kapitel auf unzähligen Seiten. + In den ersten beiden Kapiteln wird dies und das besprochen. Im + darauffolgenden auch noch jenes. Im vorletzten Kapitel wird alles + betrachtet und im letzten erfolgt Zusammenfassung und Ausblick. +}{% + Die dargestellten Ergebnisse der vorliegenden Arbeit genügen den in + der Aufgabenstellung formulierten Arbeitsschwerpunkten. Sowohl + Form, Ausdruck und Terminologie als auch Struktur befriedigen die + Anforderungen an eine wissenschaftliche Arbeit. Die einzelnen + Kapitel können hinsichtlich ihrer inhaltlichen Tiefe in Relation zu + dem dazu benötigten Umfang als ausgewogen betrachtet werden. Die + verwendeten Grafiken und Tabellen sind sehr gut aufbereitet und + tragen insgesamt zum besseren Verständnis bei. Fachliche + Begrifflichkeiten werden sehr sauber verwendet, orthografische + Mängel sind keine zu finden. +}{1,0 (sehr gut)} +\end{document} diff --git a/macros/latex/contrib/tudscr/source/doc/examples/mathswap-example.tex b/macros/latex/contrib/tudscr/source/doc/examples/mathswap-example.tex new file mode 100644 index 0000000000..fd3e58d804 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/mathswap-example.tex @@ -0,0 +1,38 @@ +\documentclass[english,ngerman]{tudscrartcl}% andere Klassen möglich +\usepackage[T1]{fontenc} +\ifpdftex{\usepackage[ngerman=ngerman-x-latest]{hyphsubst}}{} +\usepackage{babel} +\usepackage{microtype} + +\usepackage{mathswap} +\begin{document} + +\mathswapoff +\(4.523,58\) +\mathswapon + +\(4.523,58\) + +\(4,523.58\) + +\begingroup + \commaswap{\,} + \dotswap{,} + \(4,523.58\) +\endgroup + +\begingroup + \selectlanguage{english}% + \(4,523.58\)\newline + \(4.523,58\) +\endgroup + +\begingroup + \selectlanguage{english}% + \commaswap{.} + \dotswap{\,} + \(4.523,58\) +\endgroup + +\end{document} + diff --git a/macros/latex/contrib/tudscr/source/doc/examples/mathtype-example.tex b/macros/latex/contrib/tudscr/source/doc/examples/mathtype-example.tex new file mode 100644 index 0000000000..532bf94bbd --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/mathtype-example.tex @@ -0,0 +1,66 @@ +\documentclass[ngerman]{tudscrartcl}% andere Klassen sind möglich +\usepackage[T1]{fontenc} +\ifpdftex{\usepackage[ngerman=ngerman-x-latest]{hyphsubst}}{} +\usepackage{babel} +\usepackage{microtype} + +\usepackage{amsmath} +\begin{document} + +\begin{equation*} +\begin{gathered} +M_{EM} = \frac{M_{Rad}}{i_g \cdot i_A} - M_{VM} \\ +\textrm{für } +\begin{aligned} +0\leq M_{VM}\leq M_{VMmax} \\ +M_{EMmin}\leq M_{EM}\leq M_{EMmax} +\end{aligned} +\end{gathered} +\end{equation*} + +\begin{equation*} +\begin{gathered} +M_\mathrm{EM} = \frac{M_\mathrm{Rad}}{i_g \cdot i_A} - M_\mathrm{VM} \\ +\textrm{für } +\begin{aligned} +0\leq M_\mathrm{VM}\leq M_\mathrm{VM_{max}} \\ +M_\mathrm{EM_{min}}\leq M_\mathrm{EM}\leq M_\mathrm{EM_{max}} +\end{aligned} +\end{gathered} +\end{equation*} + +\newcommand*{\ind}[1]{\ensuremath{\kern.03em_\mathrm{#1}}} +\newcommand*{\M}[1]{\ensuremath{M\ind{#1}}} + +\begin{equation*} +\begin{gathered} +\M{EM} = \frac{\M{Rad}}{i_g \cdot i_A} - \M{VM} \\ +\textrm{für } +\begin{aligned} +0\leq \M{VM}\leq \M{VM_{max}} \\ +\M{EM_{min}}\leq \M{EM}\leq \M{EM_{max}} +\end{aligned} +\end{gathered} +\end{equation*} + +\makeatletter +\renewcommand*{\M}[1]{\@ifnextchar[{\o@M{#1}}{\n@M{#1}}} +\newcommand*{\n@M}{} +\newcommand*{\o@M}{} +\def\n@M#1{\ensuremath{M\ind{#1}}} +\def\o@M#1[#2]{\ensuremath{M\ind{#1_{#2}}}} +\makeatother + +\begin{equation*} +\begin{gathered} +\M{EM} = \frac{\M{Rad}}{i_g \cdot i_A} - \M{VM} \\ +\textrm{für } +\begin{aligned} +0\leq \M{VM}\leq \M{VM}[max] \\ +\M{EM}[min]\leq \M{EM}\leq \M{EM}[max] +\end{aligned} +\end{gathered} +\end{equation*} + +\end{document} + diff --git a/macros/latex/contrib/tudscr/source/doc/examples/notice.tex b/macros/latex/contrib/tudscr/source/doc/examples/notice.tex new file mode 100644 index 0000000000..51ceaf2836 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/notice.tex @@ -0,0 +1,47 @@ +\documentclass[ngerman]{tudscrreprt} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{isodate} +\usepackage{tudscrsupervisor} +\usepackage{enumitem}\setlist{noitemsep} +\begin{document} +\faculty{Juristische Fakultät}\department{Fachrichtung Strafrecht} +\institute{Institut für Kriminologie}\chair{Lehrstuhl für Kriminalprognose} +\title{% + Entwicklung eines optimalen Verfahrens zur Eroberung des + Geldspeichers in Entenhausen +}\date{16.10.2015} +\contactperson{% + Dagobert Duck\emailaddress{dagobert.duck@tu-dresden.de} + \office{Dingens-Bau, Zimmer~08}\telephone{+49 351 463-12345} +\and% + Mac Moneysac\emailaddress{mac.moneysac@tu-dresden.de} + \office{Dingens-Bau, Zimmer~15}\telephone{+49 351 463-54321} +} +\noticeform[Angebot für eine Studien-/Diplomarbeit,pagestyle=empty]{% + Momentan ist das besagte Thema in aller Munde. Insbesondere wird es + gerade in vielen~-- wenn nicht sogar in allen~-- Medien diskutiert. + Es ist momentan noch nicht abzusehen, ob und wann sich diese + Situation ändert. Eine kurzfristige Verlagerung aus dem Fokus der + Öffentlichkeit wird nicht erwartet. + + Als Ziel dieser Arbeit soll identifiziert werden, warum das Thema + gerade so omnipräsent ist und wie dieser Effekt abgeschwächt werden + könnte. Zusätzlich sind Methoden zu entwickeln, mit denen sich ein + ähnlicher Vorgang zukünftig vermeiden lässt. + \begin{center} + \medskip\includegraphics[width=.7\linewidth]{DDC-21} + \renewcommand*{\figureformat}{\figurename} + \captionof{figure}{Thematisch passendes Bild} + \end{center} +}{% + \item Recherche \& Analyse + \item Entwicklung eines Konzeptes \& Anwendung der entwickelten Methodik + \item Dokumentation und grafische Aufbereitung der Ergebnisse +} +\end{document} diff --git a/macros/latex/contrib/tudscr/source/doc/examples/poster.tex b/macros/latex/contrib/tudscr/source/doc/examples/poster.tex new file mode 100644 index 0000000000..61cb19989d --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/poster.tex @@ -0,0 +1,46 @@ +\RequirePackage{fix-cm} +\documentclass[% + ngerman,% + paper=A1,fontsize=22pt,% + cdfoot=5ex,ddcfoot% +]{tudscrposter} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{blindtext} +\usepackage{multicol} +\begin{document} +\faculty{Juristische Fakultät}\department[]{Fachrichtung Strafrecht} +\institute{Institut für Kriminologie}\chair[]{Lehrstuhl für Kriminalprognose} +\title{% + Entwicklung eines optimalen Verfahrens zur Eroberung des + Geldspeichers in Entenhausen +}\date{18.02.2015} +\contactperson{% + Mickey Mouse\emailaddress{mickey.mouse@tu-dresden.de}% + \office{Büro 58}\telephone{463--xxxxx}% +} +\professor{Prof. Dr. Kater Karlo} +\maketitle +\begin{abstract}%[columns=2] +\noindent\blindtext +\end{abstract} + +\begin{multicols}{2}[\section*{Test}] +\blindtext[3] +\end{multicols} +\bigskip + +\begin{center} +\includegraphics[width=.7\linewidth]{TUD-black} +\end{center} + +\begin{multicols}{2}[\section*{Test}] +\blindmathtrue +\blindtext[1] +\end{multicols} +\end{document} diff --git a/macros/latex/contrib/tudscr/source/doc/examples/poster_print.tex b/macros/latex/contrib/tudscr/source/doc/examples/poster_print.tex new file mode 100644 index 0000000000..fe192bf297 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/poster_print.tex @@ -0,0 +1,2 @@ +\PassOptionsToClass{cd=on}{tudscrposter} +\input{poster.tex} diff --git a/macros/latex/contrib/tudscr/source/doc/examples/task.tex b/macros/latex/contrib/tudscr/source/doc/examples/task.tex new file mode 100644 index 0000000000..114a6cbfd9 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/task.tex @@ -0,0 +1,47 @@ +\documentclass[ngerman]{tudscrreprt} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{isodate} +\usepackage{tudscrsupervisor} +\usepackage{enumitem}\setlist{noitemsep} +\begin{document} +\faculty{Juristische Fakultät}\department{Fachrichtung Strafrecht} +\institute{Institut für Kriminologie}\chair{Lehrstuhl für Kriminalprognose} +\title{% + Entwicklung eines optimalen Verfahrens zur Eroberung des + Geldspeichers in Entenhausen +} +\thesis{master}\graduation[M.Sc.]{Master of Science} +\author{% + Mickey Mouse\matriculationnumber{12345678}% + \dateofbirth{2.1.1990}\placeofbirth{Dresden}% + \course{Klinische Prognostik}\discipline{Individualprognose}% +\and% + Donald Duck\matriculationnumber{87654321}% + \dateofbirth{1.2.1990}\placeofbirth{Berlin}% + \course{Statistische Prognostik}\discipline{Makrosoziologische Prognosen}% +}\matriculationyear{2010}\issuedate{1.4.2015}\duedate{1.10.2015} +\supervisor{Dagobert Duck \and Mac Moneysac}\professor{Prof. Dr. Kater Karlo} +\referee{Prof. Dr. Kater Karlo}\chairman{Prof. Dr. Primus von Quack} +\taskform[pagestyle=empty]{% + Momentan ist das besagte Thema in aller Munde. Insbesondere wird es + gerade in vielen~-- wenn nicht sogar in allen~-- Medien diskutiert. + Es ist momentan noch nicht abzusehen, ob und wann sich diese + Situation ändert. Eine kurzfristige Verlagerung aus dem Fokus + der Öffentlichkeit wird nicht erwartet. + + Als Ziel dieser Arbeit soll identifiziert werden, warum das Thema + gerade so omnipräsent ist und wie dieser Effekt abgeschwächt werden + könnte. Zusätzlich sind Methoden zu entwickeln, mit denen sich ein + ähnlicher Vorgang zukünftig vermeiden lässt. +}{% + \item Recherche \& Analyse + \item Entwicklung eines Konzeptes \& Anwendung der entwickelten Methodik + \item Dokumentation und grafische Aufbereitung der Ergebnisse +} +\end{document} diff --git a/macros/latex/contrib/tudscr/source/doc/examples/thesis.tex b/macros/latex/contrib/tudscr/source/doc/examples/thesis.tex new file mode 100644 index 0000000000..5d88a8c2bd --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/thesis.tex @@ -0,0 +1,37 @@ +\documentclass[ngerman,BCOR=4mm]{tudscrreprt} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{isodate} +\begin{document} +\faculty{Juristische Fakultät} +\department{Fachrichtung Strafrecht} +\institute{Institut für Kriminologie} +\chair{Lehrstuhl für Kriminalprognose} +\date{18.02.2015} +\title{% + Entwicklung eines optimalen Verfahrens zur Eroberung des + Geldspeichers in Entenhausen +} +\subject{master} +\graduation[M.Sc.]{Master of Science} +\author{% + Mickey Mouse% + \matriculationnumber{12345678}% + \dateofbirth{2.1.1990}% + \placeofbirth{Dresden}% +\and% + Donald Duck% + \matriculationnumber{87654321}% + \dateofbirth{1.2.1990}% + \placeofbirth{Berlin}% +} +\matriculationyear{2010} +\supervisor{Dagobert Duck \and Mac Moneysac} +\professor{Prof. Dr. Kater Karlo} +\maketitle +\end{document} diff --git a/macros/latex/contrib/tudscr/source/doc/examples/treatise-example.tex b/macros/latex/contrib/tudscr/source/doc/examples/treatise-example.tex new file mode 100644 index 0000000000..83d092306e --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/examples/treatise-example.tex @@ -0,0 +1,442 @@ +\documentclass[english,ngerman]{tudscrreprt} +\usepackage{babel} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{scrhack} +\usepackage{tudscrsupervisor} + +\AfterPackage*{hyperref}{% +\usepackage[% + acronym,% Abkürzungen + symbols,% Formelzeichen + nomain,% kein Glossar + nogroupskip,% + toc,% + section=chapter,% + nostyles,% + translate=babel,% +% mit Tex Live einfach verwendbar + xindy={language=german-din}, +]{glossaries} +\makeglossaries +}% Ende von AfterPackage + +\AfterPackage*{glossaries}{% +\newglossarystyle{acrotabu}{% + \renewenvironment{theglossary}{% + \begin{tabu}{@{}lX<{\strut}l@{}}% 'spread 0pt' defekt in v2.9 + }{% + \end{tabu}\par\bigskip% + }% + \renewcommand*{\glossaryheader}{}% + \renewcommand*{\glsgroupheading}[1]{}% + \renewcommand*{\glsgroupskip}{}% + \renewcommand*{\glossentry}[2]{% + \glsentryitem{##1}% Entry number if required + \glstarget{##1}{\sffamily\bfseries\glossentryname{##1}} & + \glsentrydesc{##1} & + ##2\tabularnewline + } +} + +\newcommand*{\newformulasymbol}[5][]{% + \newglossaryentry{#2}{% + type=symbols,% + name={#3},% + description={\nopostdesc},% + symbol={\ensuremath{#4}},% + user1={\ensuremath{\mathrm{#5}}},% + sort={#2},% + #1% + }% +} + +\defglsentryfmt[symbols]{% + \ifmmode% + \glssymbol{\glslabel}% + \else% + \glsgenentryfmt~\glsentrysymbol{\glslabel}% + \fi% +} +\newglossarystyle{symblongtabu}{% + \renewenvironment{theglossary}{% + \begin{longtabu}[l]{ccX<{\strut}l}% 'spread 0pt' defekt in v2.9 + }{% + \end{longtabu}% + }% + \renewcommand*{\glsgroupheading}[1]{}% + \renewcommand*{\glsgroupskip}{}% + \renewcommand*{\glossaryheader}{% + \toprule + \bfseries Symbol & \bfseries Einheit & + \bfseries Bezeichnung & \bfseries Seite(n) + \tabularnewline\midrule\endhead% + \bottomrule\endfoot% + }% + \renewcommand*{\glossentry}[2]{% + \glsentryitem{##1}% Entry number if required + \glstarget{##1}{\glossentrysymbol{##1}} & + \glsentryuseri{##1} & + \glossentryname{##1} & + ##2\tabularnewline% + }% +} +}% Ende von AfterPackage + +\usepackage{csquotes} +\usepackage[backend=biber,style=alphabetic]{biblatex} + +\usepackage{filecontents} +\begin{filecontents}{\jobname-temp.bib} +@book{goossens94, + author = {Goossens, Michel and Mittelbach, Frank + and Samarin, Alexander}, + title = {The LaTeX Companion}, + date = {1994}, + publisher = {Addison-Wesley}, + location = {Reading, Massachusetts}, + language = {english}, +} +@book{knuth84, + author = {Knuth, Donald E.}, + title = {The \TeX book}, + date = {1984}, + maintitle = {Computers \& Typesetting}, + volume = {A}, + publisher = {Addison-Wesley}, + location = {Reading, Massachusetts}, + language = {english}, +} +@manual{hanisch14, + author = {Hanisch, Falk}, + title = {Ein \LaTeX"=Bundle für Dokumente im neuen Corporate + Design der Technischen Universität Dresden}, + date = {2014}, + subtitle = {Benutzerhandbuch}, + location = {Dresden}, + language = {german}, +} +\end{filecontents} +\addbibresource{\jobname-temp.bib} + +\usepackage{caption} +\captionsetup{font=sf,labelfont=bf,labelsep=space} +\usepackage{floatrow} +\floatsetup{font=sf} +\floatsetup[table]{style=plaintop} +\captionsetup{singlelinecheck=off,format=hang,justification=raggedright} +\DeclareCaptionSubType[alph]{figure} +\DeclareCaptionSubType[alph]{table} +\captionsetup[subfloat]{labelformat=brace,list=off} + +\usepackage{booktabs} +\usepackage{array} +\usepackage{tabularx} +\usepackage{tabulary} +\usepackage{tabu} +\usepackage{longtable} + +\usepackage{quoting} + +\usepackage[babel]{microtype} + +\usepackage{enumitem} +\setlist[itemize]{noitemsep} + +\usepackage{ellipsis} +\let\ellipsispunctuation\relax + +\usepackage{xfrac} + +\usepackage{isodate} + +\usepackage[colorlinks,linkcolor=blue]{hyperref} + +\begin{document} + +\faculty{Juristische Fakultät} +\department{Fachrichtung Strafrecht} +\institute{Institut für Kriminologie} +\chair{Lehrstuhl für Kriminalprognose} +\title{% + Entwicklung eines optimalen Verfahrens zur Eroberung des + Geldspeichers in Entenhausen +} +\thesis{master} +\graduation[M.Sc.]{Master of Science} +\author{% + Mickey Mouse% + \matriculationnumber{12345678}% + \dateofbirth{2.1.1990}% + \placeofbirth{Dresden}% + \course{Klinische Prognostik}% + \discipline{Individualprognose}% +\and% + Donald Duck% + \matriculationnumber{87654321}% + \dateofbirth{1.2.1990}% + \placeofbirth{Berlin}% + \course{Statistische Prognostik}% + \discipline{Makrosoziologische Prognosen}% +} +\matriculationyear{2010} +\supervisor{Dagobert Duck \and Mac Moneysac} +\professor{Prof. Dr. Kater Karlo} +\date{10.09.2014} +\makecover +\maketitle + +\newcommand{\taskcontent}{% + Momentan ist das besagte Thema in aller Munde. Insbesondere wird es + gerade in vielen~-- wenn nicht sogar in allen~-- Medien diskutiert. + Es ist momentan noch nicht abzusehen, ob und wann sich diese Situation + ändert. Eine kurzfristige Verlagerung aus dem Fokus der Öffentlichkeit + wird nicht erwartet. + + Als Ziel dieser Arbeit soll identifiziert werden, warum das Thema + gerade so omnipräsent ist und wie dieser Effekt abgeschwächt werden + könnte. Zusätzlich sind Methoden zu entwickeln, mit denen sich ein + ähnlicher Vorgang zukünftig vermeiden lässt. +} +\taskform[pagestyle=empty]{\taskcontent}{% + \item Recherche + \item Analyse + \item Entwicklung eines Konzeptes + \item Anwendung der entwickelten Methodik + \item Dokumentation und grafische Aufbereitung der Ergebnisse +} + +\TUDoption{abstract}{multiple,section} +\begin{abstract} + Dies ist der deutschsprachige Teil der Zusammenfassung, in dem die + Motivation sowie der Inhalt der nachfolgenden wissenschaftlichen + Abhandlung kurz dargestellt werden. +\nextabstract[english] + This is the english part of the summary, in which the motivation and + the content of the following academic treatise are briefly presented. +\end{abstract} + +\declaration[company=FIRMA] + +\tableofcontents +\listoffigures +\listoftables + +\printacronyms[style=acrotabu] +\printsymbols[style=symblongtabu] + +\setchapterpreamble{% + \renewcommand*{\dictumwidth}{.4\textwidth}% + \dictum[Johann Wolfgang von Goethe]{% + Es irrt der Mensch, solang er strebt.% + }% + \bigskip +} +\chapter{Einleitung} +Nachdem nun der Vorspann und~-- bis auf das Literaturverzeichnis am +Ende des Dokumentes auf Seite~\pageref{sec:bibliography}~-- alle +Verzeichnisse erfolgreich ausgegeben wurden, wird nun die Verwendung +der weiteren Umgebungen und Befehle demonstriert, welche im Tutorial +\texturn{treatise.pdf} vorgestellt wurden. + +\section{Die Verwendung von Akronymen und Symbolen} +\newacronym{apsp}{APSP}{All-Pairs Shortest Path} +\newacronym{spsp}{SPSP}{Single-Pair Shortest Path} +\newacronym{sssp}{SSSP}{Single-Source Shortest Path} + +In der Graphentheorie wird häufig die Lösung des Problems des kürzesten +Pfades zwischen zwei Knoten gesucht. Dieses Problem wird häufig auch +mit \gls{spsp} bezeichnet. Es lässt sich auf die Variationen \gls{sssp} +und \gls{apsp} erweitern. Für die Lösung von \gls{spsp}, \gls{sssp} +oder \gls{apsp} kommen unterschiedliche Algorithmen zum Einsatz. + +\newformulasymbol{l}{Länge}{l}{m} +\newformulasymbol{m}{Masse}{m}{kg} +\newformulasymbol{a}{Beschleunigung}{a}{\sfrac{m}{s^2}} +\newformulasymbol{t}{Zeit}{t}{s} +\newformulasymbol{f}{Frequenz}{f}{s^{-1}} +\newformulasymbol{F}{Kraft}{F}{m \cdot kg \cdot s^{-2} = \sfrac{J}{m}} + +Die Einheiten für die \gls{f} sowie die \gls{F} werden aus den +SI"=Einheiten der Basisgrößen \gls{l}, \gls{m} und \gls{t} abgeleitet. +Und dann gibt es noch die Grundgleichung der Mechanik, welche für den +Fall einer konstanten Kraftwirkung in die Bewegungsrichtung einer +Punktmasse lautet: +\[\gls{F} = \gls{m} \cdot \gls{a}\] + +\section{Referenzen und das Literaturverzeichnis} +Das Literaturverzeichnis wird auf Basis der nachfolgend verwendeten +Zitate erstellt und ist auf Seite~\pageref{sec:bibliography} zu finden. +In diesem Textabschnitt werden die zwei bekannten \LaTeX-Bücher +\cite{knuth84} und \cite{goossens94} sowie das Anwenderhandbuch +\cite{hanisch14} zitiert. + +\section{Grafiken und Tabellen in Gleitumgebungen} +Es folgt die Demonstration von Gleitumgebungen, welche sowohl für +Grafiken als auch Tabellen verwendet werden sollten. Im vorliegenden +Beispiel kann unter Umständen der Eindruck entstehen, dass diese Seite +etwas zu überladen mit Gleitobjekten ist. Dies liegt nicht an der +Verwendung der Gleitobjekte sondern vielmehr am zu geringen Textvolumen +und den eingeschränkten Möglichkeiten von \LaTeX{}, diese an geeigneten +Stellen zu platzieren. + +\subsection{Abbildungen als Gleitobjekte und das Einbinden von Grafiken} +In \autoref{fig:example} wird dargestellt, wie eine Grafik im PDF"~Format +in ein Dokument eingebunden und auf diese verwiesen werden kann. Ein +Querverweis auf ein Gleitobjekt sollte im Fließtext am besten mit Befehl +\texttt{\textbackslash autoref\{\emph{<Label>}\}} erstellt werden. +Hierfür ist ein entsprechender Anker am zu referenzierenden Objekt nötig, +welcher mit dem Makro \texttt{\textbackslash label} erzeugt wird. Dabei +ist entscheidend, dass dieser Anker erst \emph{nach} der Beschriftung des +Objektes, welche mit \texttt{\textbackslash caption} zu erstellen ist, +definiert werden sollte. + +\begin{figure} +\centering +\includegraphics{TUD-black} +\caption{Beispielgrafik}\label{fig:example} +\end{figure} + +\subsection{Untergleitobjekte} +Nachdem nun schon eine gleitende Abbildung und zwei gleitende Tabellen +erstellt wurden, folgt jetzt noch eine gleitende Abbildung mit zwei +Unterabbildungen. Durch die drei gesetzten Anker kann im Fließtext +sowohl auf \autoref{fig:logos} als auch auf \autoref{fig:tud} sowie +\autoref{fig:ddc} verwiesen werden. + +\begin{figure} +\ffigbox[\FBwidth]% + {\begin{subfloatrow}% + \ffigbox[\FBwidth]% + {\fbox{\includegraphics[height=2cm]{TUD-black}}}% + {\caption{Eine Abbildung}\label{fig:tud}}% + \ffigbox[\FBwidth]% + {\fbox{\includegraphics[height=2cm]{DDC-21}}}% + {\caption{Eine weitere Abbildung}\label{fig:ddc}}% + \end{subfloatrow}}% + {\caption{Eine Gleitumgebung mit zwei Abbildungen}\label{fig:logos}}% +\end{figure} + +\subsection{Tabellen als Gleitobjekte} +Tabellen sollten in der \texttt{table}"=Gleitumgebung gesetzt werden. +Welche Umgebung für die Tabelle selbst dabei genutzt wird ist dabei +nicht relevant. Es können sowohl die normale \texttt{tabular}"=Umgebung +als auch die Umgebungen \texttt{tabularx}, \texttt{tabulary} sowie +\texttt{tabu} für variable Spaltenbreiten bei einer fest vorgegebenen +Tabellenbreite oder jede andere Tabellenumgebung genutzt werden. +Nachfolgend wird dies an mehreren Beispielen demonstriert. + +\subsubsection{Eine gleitende tabularx-Tabelle} +Es wird eine Tabelle mithilfe der \texttt{tabularx}"=Umgebung erstellt. +Zu sehen ist diese in \autoref{tab:tabularx}. Für diese werden zuvor +neue Spaltentypen definiert. + +\newcolumntype{Y}{>{\hspace{0pt}}X} +\newcolumntype{D}{>{\raggedright}Y} +\newcolumntype{E}{>{\centering}Y} +\newcolumntype{F}{>{\raggedleft}Y} + +\begin{table} +\begin{tabularx}{\textwidth}{@{}DEFY@{}} +\toprule +\textbf{Linksbündig} & \textbf{Zentriert} & +\textbf{Rechtsbündig} & \textbf{Blocksatz} \tabularnewline +\midrule +Ein linksbündiger Blindtext zur Demonstration einer S"~Spalte & +Ein zentrierter Blindtext zur Demonstration einer T"~Spalte & +Ein rechtsbündiger Blindtext zur Demonstration einer U"~Spalte & +Ein längerer Blindtext im Blocksatz zur besseren Demonstration +einer Y"~Spalte\tabularnewline +\bottomrule +\end{tabularx} +\caption{Eine \texttt{tabularx}"=Tabelle}\label{tab:tabularx} +\end{table} + +\subsubsection{Eine gleitende tabulary-Tabelle} +Es wird eine Tabelle mithilfe der \texttt{tabulary}"=Umgebung erstellt. +Zu sehen ist diese in \autoref{tab:tabulary}. + +\begin{table} +\begin{tabulary}{\textwidth}{@{}LCRJ@{}} +\toprule +\textbf{Linksbündig} & \textbf{Zentriert} & +\textbf{Rechtsbündig} & \textbf{Blocksatz} \tabularnewline\midrule +Ein linksbündiger Blindtext zur Demonstration einer L"~Spalte & +Ein zentrierter Blindtext zur Demonstration einer C"~Spalte & +Ein rechtsbündiger Blindtext zur Demonstration einer R"~Spalte & +Ein wesentlich längerer und absolut inhaltsleerer Blindtext im +Blocksatz für eine um einiges bessere Demonstration einer J"~Spalte +\tabularnewline\bottomrule +\end{tabulary} +\caption{Eine \texttt{tabulary}"=Tabelle}\label{tab:tabulary} +\end{table} + +\subsubsection{Eine gleitende tabu-Tabelle} +In \autoref{tab:tabu} ist eine weitere Tabelle mit variabler Breite der +Spalten und festgelegter Gesamtbreite zu sehen, welche in der Umgebung +\texttt{tabu} gesetzt wurde. Auch für diese wird zuerst ein neuer +Spaltentyp definiert, der die Unzulänglichkeiten der Umgebung reduziert. +Mit \texttt{\textbackslash ttabbox} aus dem Paket \texttt{floatrow} wird +die Beschriftung auf die Breite der Tabelle begrenzt. + +\makeatletter +\newcolumntype{Z}{} +\renewcommand*{\NC@rewrite@Z}[1][]{% + \NC@find>{\hspace{0pt}}X[#1]<{\@finalstrut\@arstrutbox}% +} +\makeatother + +\begin{table} +\ttabbox{% + \begin{tabu} to .8\textwidth {@{}Z[3,l]Z[3,c]Z[3,r]Z[2,j]@{}} + \toprule + \textbf{Linksbündig} & \textbf{Zentriert} & + \textbf{Rechtsbündig} & \textbf{Blocksatz} \tabularnewline\midrule + Ein linksbündiger Blindtext zur Demonstration einer Z[l]"~Spalte & + Ein zentrierter Blindtext zur Demonstration einer Z[c]"~Spalte & + Ein rechtsbündiger Blindtext zur Demonstration einer Z[r]"~Spalte & + Ein Blindtext im Blocksatz innerhalb einer Z"~Spalte + \tabularnewline\bottomrule + \end{tabu}% +}{% + \caption[Eine \texttt{tabu}"=Tabelle]{% + Eine \texttt{tabu}"=Tabelle in Verbindung mit dem Befehl + \texttt{\textbackslash ttabbox}, welcher vom Paket \texttt{floatrow} + für Beschriftungen in Objektbreite bereitgestellt wird% + }% + \label{tab:tabu}% +} +\end{table} + +\section{Zitate} +Bei der Verwendung von wörtlichen Zitaten sollten diese als solche +gekennzeichnet werden. +\enquote{Dies ist ein zugegebenermaßen nicht sehr sinnvolles Zitat.} +\cite[58]{hanisch14} +Für eine möglichst gut nachvollziehbare Referenz sollte nicht nur +das Werk selber sondern zumindest die Seitenzahl und gegebenenfalls +der Absatz der originalen Textstelle angegeben werden. +\begin{quoting} +\enquote{% + Dies ist ein noch sinnloseres Zitat. Allerdings wird zumindest die + Wirkung der Umgebung \texttt{quoting} bei der Absatzauszeichnung + deutlich. + + Wie zu sehen ist, wird der zweite Absatz~-- wie jeder weitere~-- + aufgrund der Option \texttt{parskip=false} eingezogen. +} +\cite[sinngemäß nach][\pno{} 12, zweiter Absatz]{hanisch14} +\end{quoting} +Ebenfalls sollten sinngemäße Zitate mit einer möglichst genauen Referenz +angegeben werden. Dies kann im Laufe der Arbeit auch für einen selbst von +Vorteil sein, wenn beispielsweise die originale Textpassage noch einmal +analysiert werden soll. + +\printbibliography[heading=bibintoc]\label{sec:bibliography}% + +\end{document} + diff --git a/macros/latex/contrib/tudscr/source/doc/sub-tudscr.tex b/macros/latex/contrib/tudscr/source/doc/sub-tudscr.tex new file mode 100644 index 0000000000..6c70d57083 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/sub-tudscr.tex @@ -0,0 +1,17 @@ +%\AtBeginDocument{\TUDoptions{ToDo=no}} +\includeonly{% +% tudscr-preface, +% tudscr-introduction, +% tudscr-mainclasses, +% tudscr-poster, +% tudscr-supervisor, +% tudscr-bundle, +% tudscr-examples, +% tudscr-packages, +% tudscr-hints, +% tudscr-installation, + tudscr-obsolete, +% tudscr-additional, + tudscr-index, +} +\input{tudscr} diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-additional.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-additional.tex new file mode 100644 index 0000000000..03ebd6ba85 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-additional.tex @@ -0,0 +1,52 @@ +\chapter{Identifikation von \TUDScript} +Im \TUDScript-Bundle gibt es neben den Klassen selbst auch noch zusätzliche +Pakete. Ein Teil dieser Pakete~-- genauer \Package{tudscrsupervisor} und +\Package{tudscrcomp}~-- sind ausschließlich mit den \TUDScript-Klassen nutzbar, +andere wiederum~-- die beiden Pakete für Belange des \CDs \Package{tudscrfonts} +(Schriften) und \Package{tudscrcolor} (Farben) sowie die davon vollkommen +unabhängigen Pakete \Package{mathswap} und \Package{twocolfix}~-- können mit +allen existierenden \hologo{LaTeXe}"=Dokumentklassen genutzt werden. Sämtliche +Klassen und Pakete aus dem \TUDScript-Bundle enthalten Befehle, welche diese +als Bestandteil identifizieren. + +\begin{Declaration}[v2.04]{\Macro{TUDScript}} +\printdeclarationlist% +% +Diese Anweisung setzt das Logo respektive die Wortmarke \enquote{\TUDScript{}} +in serifenloser Schrift und mit leichter Sperrung des in Versalien gesetzten +Teils. Dieser Befehl wird von allen Klassen und Paketen des \TUDScript-Bundles +mit \Macro*{DeclareRobustCommand}. +\end{Declaration} + +\begin{Declaration}[v2.04]{\Macro{TUDScriptClassName}} +\printdeclarationlist% +% +Die Bezeichnung der jeweiligen, im Dokument verwendeten \TUDScript-Klasse ist +im Makro \Macro{TUDScriptClassName} abgelegt. Soll also in Erfahrung gebracht +werden, ob~-- und wenn ja, welche~-- \TUDScript-Klasse verwendet wird, so kann +einfach auf diese Anweisung getestet werden. \KOMAScript{} stellt zusätzlich +noch die beiden Anweisungen \Macro*{KOMAClassName} und \Macro*{ClassName} +bereit, welche den Namen der zugrundeliegenden \KOMAScript-Klasse sowie die +durch diese ersetzte Standardklasse enthalten. +\end{Declaration} + +\begin{Declaration}[v2.04]{\Macro{TUDScriptVersion}} +\begin{Declaration}[v2.05]{\Macro{TUDScriptVersionNumber}} +\printdeclarationlist% +% +In \Macro{TUDScriptVersion} ist die Hauptversion von \TUDScript in der Form +\begin{quoting} +\PName{Datum}~\PName{Version}~\PValue{TUD-Script} +\end{quoting} +abgelegt. Die Version ist für alle Klassen und Pakete des \TUDScript-Bundles +gleich und kann nach dem Laden einer Klasse oder eines Paketes abgefragt +werden. Beispielsweise wurde diese Anleitung mit \enquote{\TUDScriptVersion{}} +erstellt. + +Eventuell will der Anwender auf die aktuell verwendete Version von \TUDScript +prüfen, um gegebenenfalls eigene Anpassungen in Abhängigkeit der verwendeten +Version vorzunehmen. Hierfür kann \Macro{TUDScriptVersionNumber} verwendet +werden. Darin ist alleinig die Versionsnummer enthalten. Die für das Handbuch +verwendete Version lautet \enquote{\TUDScriptVersionNumber{}}. +\end{Declaration} +\end{Declaration} diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-bundle.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-bundle.tex new file mode 100644 index 0000000000..c97773482c --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-bundle.tex @@ -0,0 +1,417 @@ +\setchapterpreamble{% + \tudhyperdef'{sec:bundle}% + \begin{abstract} + Zusätzlich zu den bisher im Anwenderhandbuch vorgestellten Klassen und + Paketen werden im \TUDScript-Bundle weitere Paket bereitgestellt. Diese + sind nicht zwingend an die Verwendung einer der \TUDScript-Klassen + angewiesen sondern können prinzipiell mit jeder \hologo{LaTeXe}"=Klasse + genutzt werden.% + \end{abstract} +} +\chapter{Zusätzliche Pakete im \TUDScript-Bundle} +% +\section{Das Paket \Package{tudscrcolor} -- Farben im \CD}% +\index{Farben|(}% +\index{Layout!Farben|?(}% +% +\begin{Bundle*}{\Package{tudscrcolor}} +Zur Verwendung der Farben des \CDs wird das Paket \Package{tudscrcolor} +genutzt. Falls dieses nicht in der Präambel geladen wird~-- um beispielsweise +zusätzliche Optionen aufzurufen~-- binden die \TUDScript"=Klassen dieses +automatisch ein. + +Für das \CD sind mehrere Farben vorgesehen. Die prägnanteste aller ist die +Hausfarbe \Color{HKS41}, danach folgen die Farben für Auszeichnungen der ersten +(\Color{HKS44}) und der zweiten Kategorie (\Color{HKS36}, \Color{HKS33}, +\Color{HKS57}, \Color{HKS65}) sowie eine Ausnahmefarbe (\Color{HKS07}). +Diese Farben dürfen sowohl in ihrer Grundform als auch in helleren Tönen mit +einer Abstufung in 10\,\%"~Schritten verwendet werden. Das ohnehin verwendete +Paket \Package{xcolor} stellt genau diese Funktionalität zur Verfügung. Jede +der Farben kann sowohl mit \Color*{HKS\PName{Zahl}}() als auch über ein +Pseudonym \Color*{cd\PName{Farbe}}() genutzt werden. +% +\begin{Example*} +Die Grundfarbe \Color{HKS44} soll in der auf 20\% reduzierten, helleren +Abstufung genutzt werden. Innerhalb eines Befehls, der als Argument eine +gültige Farbe erwartet, muss lediglich \PValue{HKS44!20} angegeben werden. +Dies wird hier exemplarisch mit der folgenden \colorbox{HKS44!20}{% + Box \Macro{colorbox}[% + \PParameter{HKS44!20}\PParameter{Box}% + ](\Package{xcolor})'none'% +} +demonstriert. +\end{Example*} +% +Bei der farbigen Gestaltung des \CDs (\Option{cd=color}) ist der Hintergrund +von Umschlagseite, Titel sowie Teilen in \Color{HKS41} und die Schrift auf +selbigen in \Color{HKS41}[!30] gehalten. Der Hintergrund von Kapitelseiten +erscheint in \Color{HKS41}[!10], die Schrift in \Color{HKS41}. Bei geringerem +Farbeinsatz werden lediglich die Schriften der Gliederungsseiten auf +\Color{HKS41} gesetzt. + +Sollen bestimmte Optionen an das Paket \Package{xcolor} weitergereicht werden, +gibt es dafür zwei Möglichkeiten. Diese kann entweder vor dem Laden der Klasse +direkt an \Package{xcolor} übergeben werden% +\footnote{% + \Macro{PassOptionsToPackage}[\Parameter{Paketoptionen}\PParameter{xcolor}] + vor dem Laden der genutzten Dokumentklasse mit + \Macro*{documentclass}[\OParameter{Klassenoptionen}\Parameter{Klasse}]% +} +oder es wird \Package{tudscrcolor} mit der entsprechenden Option geladen.% +\footnote{% + \Macro*{usepackage}[\OParameter{Paketoptionen}\PParameter{tudscrcolor}]; + \Package{tudscrcolor} reicht \PName{Paketoptionen} an \Package{xcolor} weiter% +} +\newcommand*\cdcolorcalc{} +\newcommand*\cdcolorname{} +\newcommand*\cdcolorvalue{} +\newcommand*\cdcolortext{} +\newcommand*\cdcolor[2][0]{% + \noindent% + \begin{tikzpicture}[% + every node/.style={% + rectangle, minimum height=.1\linewidth, minimum width=7em% + }% + ]% + \def\cdcolorcalc##1##2{% + \pgfmathparse{100-##1*10}% + \xdef\cdcolorname{HKS##2!\pgfmathresult}% + \xdef\cdcolorvalue{\pgfmathresult}% + \pgfmathparse{10+##1*10}% + }% + \foreach \x in {0,1,...,9}{% + \cdcolorcalc{\x}{#2}% + \ifnum\x<#1% + \def\cdcolortext{white}% + \else% + \def\cdcolortext{black}% + \fi% + \node [fill=\cdcolorname,rotate=90] at (.\x\linewidth,0)% + {\textcolor{\cdcolortext}{HKS#2!\pgfmathprintnumber\cdcolorvalue}};% + }% + \end{tikzpicture}% +} + +\subsection{Generelle Farbdefinitionen} +\minisec{Primäre Hausfarbe} +\begin{Declaration}{\Color{HKS41}[cddarkblue]} +\printdeclarationlist% +\cdcolor[6]{41} +\end{Declaration} + +\minisec{Sekundäre Hausfarbe (Geschäftsausstattung)} +\begin{Declaration}{\Color{HKS92}[cdgray]} +\printdeclarationlist% +\cdcolor[4]{92} +\end{Declaration} + +\minisec{Auszeichnungsfarbe 1.\,Kategorie} +\begin{Declaration}{\Color{HKS44}[cdblue]} +\printdeclarationlist% +\cdcolor[4]{44} +\end{Declaration} + +\minisec{Auszeichnungsfarbe 2.\,Kategorie} +\begin{Declaration}{\Color{HKS36}[cdindigo]} +\begin{Declaration}{\Color{HKS33}[cdpurple]} +\begin{Declaration}{\Color{HKS57}[cddarkgreen]} +\begin{Declaration}{\Color{HKS65}[cdgreen]} +\printdeclarationlist% +\cdcolor[4]{36}\vskip\medskipamount +\cdcolor[4]{33}\vskip\medskipamount +\cdcolor[2]{57}\vskip\medskipamount +\cdcolor{65} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\minisec{Ausnahmefarbe} +\begin{Declaration}{\Color{HKS07}[cdorange]} +\printdeclarationlist% +\cdcolor{07} +\end{Declaration} + + +\subsection{Zusätzliche Farbdefinitionen} +Das Paket \Package{tudscrcolor} definiert im Normalfall lediglich die zuvor +beschriebenen Grundfarben \Color{HKS41}, \Color{HKS92}, \Color{HKS44}, +\Color{HKS36}, \Color{HKS33}, \Color{HKS57}, \Color{HKS65} sowie \Color{HKS07}. +Alle anderen farblichen Abstufungen können mit den beschrieben Möglichkeiten +des Paketes \Package{xcolor} generiert werden. + +\begin{Declaration}{\Option{oldcolors}} +\printdeclarationlist% +% +In den letzten Jahren sind viele verschiedene Klassen und Pakete für das \TUDCD +entstanden. Innerhalb dieser existieren abweichende Farbdefinitionen. Um eine +Migration von den benannten Klassen und Paketen auf \TUDScript zu ermöglichen, +existiert die Paketoption \Option{oldcolors}. Wird diese genutzt, so werden +zusätzliche Farben nach dem Schema \Color*{HKS41K\PName{Zahl}}() und +\Color*{HKS41-\PName{Zahl}}() definiert, wobei der hinten angestellte +Zahlenwert aus der 10er"~Reihe kommen muss. +\end{Declaration} + + + +\subsection{Umstellung des Farbmodells} +\index{Farben!Farbmodell}% +% +Normalerweise verwendet \Package{tudscrcolor} das CMYK"=Farbmodell. Außerdem +wird weiterhin noch der RGB"=Farbraum unterstützt. Eine Umschaltung des +Farbmodells ist beispielsweise für gewisse Funktionen des Paketes +\Package{tikz} notwendig. + +\begin{Declaration}{\Option{RGB}} +\printdeclarationlist% +% +Mit dieser Option werden bereits beim Laden des Paketes \Package{tudscrcolor} +die Farben nicht nach dem CMYK"=Farbmodell sondern im RGB"=Farbraum global +definiert. +\end{Declaration} + +\begin{Declaration}{\Macro{setcdcolors}[\Parameter{Farbmodell}]} +\printdeclarationlist% +% +Mit diesem Befehl kann innerhalb des Dokumentes das verwendete Farbmodell +angepasst werden. Damit ist es möglich, lokal innerhalb einer Umgebung den +Farbmodus zu ändern und so nur in bestimmten Situationen beispielsweise aus dem +CMYK"=Farbmodell in den RGB"=Farbraum zu wechseln. Unterstützte Werte für +\PName{Farbmodell} sind \PValue{CMYK} und \PValue{RGB} beziehungsweise +\PValue{rgb}. +\end{Declaration} + +\smallskip\noindent +\Attention{% + Die Darstellung der Farben kann im jeweiligen Farbmodus + (\PValue{CMYK} oder \PValue{RGB}) je nach verwendeter Bildschirm-, Drucker- + und Softwarekonfiguration verschieden ausfallen. Die Farbwerte entstammen dem + Handbuch zum \CD und sind lediglich Näherungswerte. Abweichungen vom + gedruckten HKS"~Farbregister und selbst ermittelten Werten sind technisch + nicht zu vermeiden. +}% +\index{Farben|)}% +\index{Layout!Farben|?)}% +\end{Bundle*} + + + +\section{Das Paket \Package{tudscrfonts} -- Schriften im \CD} +\begin{Bundle*}[v2.02]{\Package{tudscrfonts}} +\printchangedatlist% +% +Dieses Paket stellt die Schriften des \CDs für \hologo{LaTeXe}"=Klassen bereit, +welche \emph{nicht} zum \TUDScript-Bundle gehören. Das Paket unterstützt einen +Großteil der normalerweise für die \TUDScript-Klassen bereitgestellten Optionen +und Befehle für die Schriftauswahl. Um Dopplungen in der Dokumentation zu +vermeiden, wird an dieser Stelle auf eine abermalige Erläuterung der im Paket +\Package{tudscrfonts} verfügbaren Optionen und Befehle verzichtet. Diese werden +im Folgenden lediglich noch einmal genannt, die dazugehörigen Erläuterungen +sind in \fullref{sec:fonts} zu finden. + +Die nutzbaren Paketoptionen sind für den Fließtext \Option{cdfont}~-- ohne die +Einstellungsmöglichkeiten für den Querbalken des \CDs (\Option{cdhead})~-- und +für die mathematischen Schriften \Option{cdmath} sowie \Option{slantedgreek}. +Für die Auswahl der Schreibmaschinenschriften ist \Option{ttfont} verfügbar. +Weiterhin wird die Option \Option{relspacing} bereitgestellt. Alle genannten +Optionen können entweder direkt als Klassenoption oder als Paketoptionen im +optionalen Argument von +\Macro*{usepackage}[\OParameter{Paketoptionen}\PParameter{tudscrfonts}] +angegeben werden. Zusätzlich ist nach dem Laden des Paketes die Optionenwahl +mit \Macro{TUDoption} respektive \Macro{TUDoptions} möglich. + +Die in \autoref{sec:fonts} beschriebenen Textschalter und "~kommandos zur +expliziten Auswahl einzelner Schnitte der Hausschrift des \CDs sowie die +Befehle für griechische Buchstaben werden ebenso bereitgestellt. +\ChangedAt{v2.06:\OpenSans als neue Hausschrift standardmäßig aktiviert} +Soll nicht \OpenSans sondern die alten Schriftfamilien \Univers und \DIN +genutzt werden, ist eine Installation dieser notwendig. Hinweise hierzu sind +unter \autoref{sec:install:fonts} zu finden. Um diese zu aktivieren, sei auf +\Option{tudscrver=2.05} und \Option{cdoldfont} verwiesen. + +\ChangedAt{% + v2.04:Unterstützung der Klassen \Class{tudposter} und \Class{tudmathposter};% + v2.05:Neues Schriftpaket \Package{fix-tudscrfonts} für Dokumentklassen + im \CD der \TnUD, welche nicht zu \TUDScript gehören% +} +Ursprünglich war das Paket \Package{tudscrfonts} für die Verwendung zusammen +mit einer der Klassen \Class{tudbook}, \Class{tudbeamer}, \Class{tudletter}, +\Class{tudfax}, \Class{tudhaus}, \Class{tudform} und seit der Version~v2.04 +auch \Class{tudmathposter} sowie \Class{tudposter} vorgesehen. Allerdings +traten bei der Verwendung des Paketes mit einer dieser Klassen einige kleinere +Unzulänglichkeiten auf. Deshalb wird seit der Version~v2.05 empfohlen, für +diese Klassen das Paket \Package{fix-tudscrfonts} zu verwenden. +\end{Bundle*} + + + +\section{Das Paket \Package{fix-tudscrfonts} -- Schriftkompatibilität} +\begin{Bundle*}[v2.05]{\Package{fix-tudscrfonts}} +\printchangedatlist% +% +Dieses Paket ist für die alleinige Verwendung mit einer der folgenden Klassen +vorgesehen: +\begin{itemize} +\item \Class{tudbook} +\item \Class{tudbeamer} +\item \Class{tudletter} +\item \Class{tudfax} +\item \Class{tudhaus} +\item \Class{tudform} +\item \Class{tudmathposter} +\item \Class{tudposter} +\end{itemize} +% +\ChangedAt{v2.06:\OpenSans als neue Hausschrift standardmäßig aktiviert} +Für das \TUDCD wird vom \TUDScript-Bundle standardmäßig \OpenSans als +Schriftfamilie verwendet. Diese unterscheidet sich stark von den ursprünglich +durch die gerade genannten Klassen genutzten Schriftfamilien. Wird nun das +Paket \Package{fix-tudscrfonts} zusammen mit einer dieser Klassen verwendet, +hat dies den Vorteil, dass auch bei diesen die aktuelle Hausschrift verwendet +wird und der stark verbesserte Mathematiksatz zum Tragen kommen. +\Attention{% + In diesem Fall kann sich das Ausgabeergebnis im Vergleich zu der Varianten + mit den alten Schriften ändern. Zum Setzen von Dokumenten mit den alten + Schriftfamilien \Univers und \DIN müssen diese installiert werden. Hinweise + hierzu sind unter \autoref{sec:install:fonts} zu finden. Um diese zu + aktivieren, sei auf \Option{tudscrver=2.05} und \Option{cdoldfont} verwiesen. +}% + +Um alle notwendigen Einstellung korrekt und ohne unnötige Warnungen vornehmen +zu können, muss das Paket \Package{fix-tudscrfonts} bereits \emph{vor} der +Dokumentklasse geladen werden, wobei die gleichen Paketoptionen wie für das +Paket \Package{tudscrfonts} verwendet werden können: +% +\begin{Code}[escapechar=§] +\RequirePackage§\OParameter{Paketoptionen}§{fix-tudscrfonts} +\documentclass§\OParameter{Klassenoptionen}\Parameter{Dokumentklasse}§ +§\dots§ +\begin{document} +§\dots§ +\end{document} +\end{Code} +% +Dabei wird spätestens zum Ende der Präambel das Paket \Package{tudscrfonts} +geladen. Alternativ kann dies auch durch den Benutzer in der Dokumentpräambel +erfolgen. +\end{Bundle*} + + +\section{Das Paket \Package{mathswap}} +\index{Mathematiksatz|(}% +\index{Zifferngruppierung|(}% +% +\begin{Bundle*}{\Package{mathswap}} +Die Verwendung von Dezimal- und Tausendertrennzeichen im mathematischen Satz +sind regional sehr unterschiedlich. In den meisten englischsprachigen Ländern +wird der Punkt als Dezimaltrennzeichen und das Komma zur Zifferngruppierung +verwendet, im restlichen Europa wird dies genau entgegengesetzt praktiziert. +Dieses Paket soll dazu dienen, beliebige formatierte Zahlen in ihrer Ausgabe +anzupassen. Dafür werden die Zeichen Punkt (\ .\ ) und Komma (\ ,\ ) als +aktive Zeichen im Mathematikmodus definiert. + +Ähnliche Funktionalitäten werden bereits durch die Pakete \Package{icomma} und +\Package{ziffer} bereitgestellt. Bei \Package{icomma} muss jedoch beim +Verfassen des Dokumentes durch den Autor beachtet werden, ob das verwendete +Komma einem Dezimaltrennzeichen entspricht ($t=1,\!2$) oder einem normalen +Komma im Mathematiksatz ($z=f(x,y)$), wo ein gewisser Abstand nach dem Komma +durchaus gewünscht ist. Das Paket \Package{ziffer} liefert dafür die gewünschte +Funktionalität,% +\footnote{kein Leerraum nach Komma, wenn direkt danach eine Ziffer folgt} +ist allerdings etwas unflexibel, was den Umgang mit den Trennzeichen anbelangt. +Als Alternative zu diesem Paket kann außerdem \Package{ionumbers} verwendet +werden. + +Das Paket \Package{mathswap} sorgt dafür, dass Trennzeichen direkt vor einer +Ziffer erkannt und nach bestimmten Vorgaben ersetzt werden. Sollte sich jedoch +zwischen Trennzeichen und Ziffer Leerraum befinden, wird dieser als solcher +auch gesetzt. Für ein Beispiel zur Verwendung des Paketes sei auf das Tutorial +\Tutorial{mathswap} in \autoref{sec:tut} hingewiesen. + +\begin{Declaration}{\Macro{commaswap}[\Parameter{Trennzeichen}]} +\begin{Declaration}{\Macro{dotswap}[\Parameter{Trennzeichen}]} +\printdeclarationlist% +% +Die beiden Befehle \Macro{commaswap} und \Macro{dotswap} sind die zentrale +Benutzerschnittstelle des Paketes. Das Makro \Macro{commaswap} definiert das +Trennzeichen oder den Inhalt, wodurch ein Komma ersetzt werden soll, auf +welches direkt danach eine Ziffer folgt. Normalerweise setzt \hologo{LaTeX} +nach einem Komma im mathematischen Satz zusätzlich einen horizontalen Abstand. +Bei der Ersetzung durch \Macro{commaswap} entfällt dieser. Die Voreinstellung +für \Macro{commaswap} ist deshalb auf ein Komma (,) gesetzt. Mit dem Makro +\Macro{dotswap} kann definiert werden, wodurch der Punkt im mathematischen +Satz ersetzt werden soll, wenn auf diesen direkt anschließend eine Ziffer +folgt. Da der Punkt im deutschsprachigem Raum zur Gruppierung von Ziffern +genutzt wird, ist hierfür standardmäßig ein halbes geschütztes Leerzeichen +definiert (\Macro*{,}). +\end{Declaration} +\end{Declaration} + +\begin{Declaration}[v2.02]{\Macro{mathswapon}} +\begin{Declaration}[v2.02]{\Macro{mathswapoff}} +\printdeclarationlist% +% +\ChangedAt*{v2.02:Funktionalität im Dokument umschaltbar}% +Die Funktionalität von \Package{mathswap} kann innerhalb des Dokumentes mit +diesen beiden Befehlen an- und abgeschaltet werden. Beim Laden des Paketes ist +es standardmäßig aktiviert. +\end{Declaration} +\end{Declaration} +\index{Mathematiksatz|)}% +\index{Zifferngruppierung|)}% +\end{Bundle*} + + + +\section{Das Paket \Package{twocolfix}} +\begin{Bundle*}{\Package{twocolfix}} +\index{Satzspiegel!zweispaltig|?}% +% +Der \hologo{LaTeXe}"=Kernel enthält einen Fehler, der Kapitelüberschriften im +zweispaltigen Layout höher setzt, als im einspaltigen. Der +\hrfn{http://www.latex-project.org/cgi-bin/ltxbugs2html?pr=latex/3126}{Fehler} +ist zwar schon länger bekannt, allerdings bisher noch nicht in den +\hologo{LaTeXe}"=Kernel übernommen worden. Das Paket \Package{twocolfix} behebt +das Problem. Eine Integration dieses Bugfixes in \KOMAScript{} wurde bereits +bei Markus Kohm angefragt, jedoch von ihm bis jetzt +\hrfn{http://www.komascript.de/node/1681}{nicht weiter verfolgt}. +\end{Bundle*} + + +\addsec*{Zukünftige Arbeiten} +Diese Dinge sollen langfristig in das \TUDScript-Bundle eingearbeitet werden: + +%\chapter{Das Paket \Package{tudscrletter} -- Briefe im \CD} +%\begin{Bundle*}{\Package{tudscrletter}} +\ToDo[imp]{% + Paket \Package*{tudscrletter} für Briefe im \CD, + \url{https://komascript.de/node/2200}% +}[v2.07] +Es soll das Paket \Package*{tudscrletter}<tudscr> für Briefe im \TUDCD +entstehen. Auch Klassen für Fax und Hausmitteilungen sollen dabei abfallen. +%\end{Bundle*} + +%\chapter{Das Paket \Package{tudscrbeamer} -- Präsentationen im \CD} +%\begin{Bundle*}{\Package{tudscrbeamer}} +\ToDo[imp]{Paket \Package*{tudscrbeamer} für Präsentationen im \CD}[v2.08] +Mit \Package*{tudscrbeamer}<tudscr> soll ein Paket entstehen, mit dem sich +\hologo{LaTeX}"=Beamer"=Präsentationen im Stil des \TUDCDs mit den +Einstellungsmöglichkeiten von \TUDScript erstellen lassen. Aktuell können +hierfür die Pakete aus dem \hrfn{https://github.com/tud-cd/tud-cd/}{% + GitHub-Repository~\Distribution*{tud-cd}% +} genutzt werden. +%\end{Bundle*} + +%\chapter{Das Paket \Package{tudscrlayout} -- Seitenstil und Satzspiegel im \CD} +%\begin{Bundle*}{\Package{tudscrlayout}} +\ToDo[imp]{% + Paket \Package*{tudscrlayout} \url{https://github.com/tud-cd/tud-cd/issues/6} + für Satzspiegel, evtl. auch für die Klasse über \Option*{cdgeometry=forced} +}[v2.09] +Außerdem ist ein Paket \Package*{tudscrlayout}<tudscr> vorstellbar, welches +den durch das \CD vorgegebene Satzspiegel aktiviert ohne den Seitenstil selbst +zu verwenden, um beispielsweise bereits mit dem Kopf der \TnUD bedrucktes +Papier nutzen zu können. Ebenfalls wäre es denkbar, für andere Klassen die +\PageStyle{tudheadings}"=Seitenstile verfügbar zu machen ohne dabei den +Satzspiegel des \CDs umzusetzen. Dies hat jedoch nur geringe Priorität. +%\end{Bundle*} diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-examples.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-examples.tex new file mode 100644 index 0000000000..ba3dfbce1c --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-examples.tex @@ -0,0 +1,146 @@ +\setchapterpreamble{% + \tudhyperdef'{sec:exmpl}% + \begin{abstract} + \hypersetup{linkcolor=red} + Dieses Kapitel soll den Einstieg und den ersten Umgang mit \TUDScript + erleichtern. Dafür werden einige Minimalbeispiele gegeben, die einzelne + Funktionalitäten darstellen. Diese sind so reduziert ausgeführt, dass sie + sich dem Anwender direkt erschließen sollten. + \end{abstract} +} +\chapter{Minimalbeispiele} +\index{Minimalbeispiel|!(}% +% +\section{Dokument} +\index{Minimalbeispiel!Dokument}% +% +Hier wird gezeigt, wie die Präambel eines minimalen \hologo{LaTeXe}"=Dokumentes +gestaltet werden sollte. Dieser Ausschnitt kann prinzipiell als Grundlage für +ein neu zu erstellendes Dokument verwendet werden. Lediglich das Einbinden des +Paketes \Package{blindtext} mit \Macro*{usepackage}[\PParameter{blindtext}] und +die Verwendung des daraus stammenden Befehls \Macro*{blinddocument} können +weggelassen werden. +\IncludeExample{document} + +\section{Dissertation} +\tudhyperdef*{sec:exmpl:dissertation}% +\index{Minimalbeispiel!Dissertation}% +% +Eine Abschlussarbeit oder ähnliches könnte wie hier gezeigt begonnen werden. +\IncludeExample{dissertation} + +\section{Abschlussarbeit (kollaborativ)} +\tudhyperdef*{sec:exmpl:thesis}% +\index{Minimalbeispiel!Abschlussarbeit}% +\index{Minimalbeispiel!Kollaboratives Schreiben}% +% +Alle zusätzlichen Angaben außerhalb des Argumentes von \Macro{author} werden +für beide Autoren gleichermaßen übernommen.% +\footnote{In diesem Beispiel \Macro{matriculationyear}} +Die Angaben innerhalb des Argumentes von \Macro{author} werden den jeweiligen, +mit \Macro{and} getrennten Autoren zugeordnet.% +\footnote{% + In diesem Beispiel \Macro{matriculationnumber}, \Macro{dateofbirth} und + \Macro{placeofbirth}% +} +Ohne die Verwendung von \Macro{and} kann natürlich auch nur ein Autor +aufgeführt werden. Außerdem sei auf die Verwendung von \Macro{subject} anstelle +von \Macro{thesis} mit einem speziellen Wert aus \autoref{tab:thesis} +hingewiesen. +\IncludeExample{thesis} + +\begin{Bundle}{\Package{tudscrsupervisor}} +\section{Aufgabenstellung (kollaborativ)} +\tudhyperdef*{sec:exmpl:task}% +\index{Minimalbeispiel!Aufgabenstellung}% +\index{Minimalbeispiel!Kollaboratives Schreiben}% +% +Eine Aufgabenstellung für eine wissenschaftliche Arbeit ist mithilfe der +Umgebung \Environment{task}|?| oder dem Befehl \Macro{taskform}|?| aus dem +Paket \Package{tudscrsupervisor} folgendermaßen dargestellt werden. +\IncludeExample{task} + +\section{Gutachten} +\tudhyperdef*{sec:exmpl:evaluation}% +\index{Minimalbeispiel!Gutachten}% +% +Nach dem Laden des Paketes \Package{tudscrsupervisor} kann ein Gutachten für +eine wissenschaftliche Arbeit mit der \Environment{evaluation}|?|"=Umgebung +oder dem Befehl \Macro{evaluationform}|?| erstellt werden. +\IncludeExample{evaluation} + +\section{Aushang} +\tudhyperdef*{sec:exmpl:notice}% +\index{Minimalbeispiel!Aushang}% +% +Das Paket \Package{tudscrsupervisor} stellt die Umgebung \Environment{notice}|?| +für das Anfertigen allgemeiner Aushänge sowie den Befehl \Macro{noticeform}|?| +für die Ausschreibung wissenschaftlicher Arbeiten bereit. +\IncludeExample{notice} +\end{Bundle} + +\begin{Bundle}{\Class{tudscrposter}} +\section{Poster} +\tudhyperdef*{sec:exmpl:poster}% +\index{Minimalbeispiel!Poster}% +% +Mit der Klasse \Class{tudscrposter}|?| lässt sich ein Poster im \TUDCD +erstellen. Dabei ist die Angabe des gewünschten Papierformates sowie der +passenden Schriftgröße zu beachten. +\IncludeExample{poster} +\index{Minimalbeispiel|!)}% +\end{Bundle} + + + + +\setchapterpreamble{% + \tudhyperdef'{sec:tut}% + \begin{abstract} + \hypersetup{linkcolor=red} + In diesem Kapitel werden weiterführende Anwendungsbeispiele bereitgestellt. + Diese Tutorials sind nicht unmittelbar im Handbuch enthalten sondern werden + als externe Dateien bereitgehalten, welche direkt via Hyperlink geöffnet + werden können. + \end{abstract} +} +\chapter{Tutorials} +\addsec*{Leitfaden für eine wissenschaftlichen Arbeit} +\index{Tutorials|!(}% +% +Die meisten Anwender der \TUDScript-Klassen sind Studenten oder angehörige der +\TnUD, die ihre ersten Schritte mit \hologo{LaTeXe} beim Verfassen einer +wissenschaftlichen Arbeit oder ähnlichem machen. Während der Einstiegsphase in +\hologo{LaTeXe} kann ein Anfänger sehr schnell aufgrund der großen Anzahl an +empfohlenen Pakete sowie der teilweise diametral zueinander stehenden Hinweise +überfordert sein. Mit dem Tutorial \Tutorial{treatise}|!| soll versucht werden, +ein wenig Licht ins Dunkel zu bringen. Es erhebt jedoch keinerlei Anspruch, +vollständig oder perfekt zu sein. Einige der darin vorgestellten Möglichkeiten +lassen sich mit Sicherheit auch anders, einfacher und/oder besser lösen. +Dennoch ist es gerade für Neulinge~-- vielleicht auch für den einen oder +anderen \hologo{LaTeX}"=Veteran~-- als Leitfaden für die Erstellung einer +wissenschaftlichen Arbeit gedacht. + +\addsec*{Ein Beitrag zum mathematischen Satz in \hologo{LaTeXe}} +\index{Mathematiksatz}% +% +Das Tutorial \Tutorial{mathtype}|!| richtet sich an alle Anwender, die in ihrem +\hologo{LaTeX}"=Dokument mathematische Formeln setzen wollen. In diesem wird +ausführlich darauf eingegangen, wie mit wenigen Handgriffen ein typografisch +sauberer Mathematiksatz zu bewerkstelligen ist. + +\addsec*{Änderung der Trennzeichen im Mathematikmodus} +\index{Mathematiksatz}% +\index{Zifferngruppierung}% +% +Sollen beim Verfassen eines \hologo{LaTeX}"=Dokumentes Daten in einem +Zahlenformat importiert werden, welches nicht den Gepflogenheiten der +Dokumentsprache entspricht, kommt es meist zu unschönen Ergebnissen bei der +Ausgabe. Einfachstes Beispiel sind Daten, in denen als Dezimaltrennzeichen ein +Punkt verwendet wird, wie es im englischsprachigen Raum der Fall ist. Sollen +diese in einem Dokument deutscher Sprache eingebunden werden, müssten diese +normalerweise allesamt angepasst und das ursprüngliche Dezimaltrennzeichen +durch ein Komma ersetzt werden. Dieser Schritt wird mit dem \TUDScript-Paket +\Package{mathswap} automatisiert. Wie dies genau funktioniert, wird im Tutorial +\Tutorial{mathswap}|!| erläutert. +\index{Tutorials|!)}% diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-hints.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-hints.tex new file mode 100644 index 0000000000..87ea1b6056 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-hints.tex @@ -0,0 +1,940 @@ +\setchapterpreamble{\tudhyperdef'{sec:tips}} +\chapter{Praktische Tipps \& Tricks} +\newcommand*\TaT{\hyperref[sec:tips]{Tipps \& Tricks}:\xspace} +\section{\hologo{LaTeX}-Editoren} +\tudhyperdef*{sec:tips:editor}% +% +Hier werden die gängigsten Editoren zum Erzeugen von \hologo{LaTeX}"=Dateien +genannt. Ich persönlich bin mittlerweile sehr überzeugter Nutzer von +\Application{\hologo{TeX}studio}, da dieser viele Unterstützungs- und +Assistenzfunktionen bietet. Neben diesen gibt es noch weitere, gut nutzbare +\hologo{LaTeX}"=Editoren. Unabhängig von der Auswahl des Editors, sollte dieser +auf jeden Fall eine Unicode"=Unterstützung~(UTF"~8) enthalten: +% +\begin{itemize} +\item \Application{\hologo{TeX}maker} +\item \Application{Kile} +\item \Application{\hologo{TeX}works} +\item \Application{\hologo{TeX}lipse}~-- Plug"~in für \Application{Eclipse} +\item \Application{\hologo{TeX}nicCenter} +\item \Application{WinEdt} +\item \Application{LEd}~-- früher \hologo{LaTeX}~Editor +\item \Application{\hologo{LyX}}~-- grafisches Front"~End für \hologo{LaTeX} +\end{itemize} +% +Für \Application{\hologo{TeX}studio} wird im \GitHubRepo* das Archiv +\hrfn{\Download{TeXstudio/tudscr4texstudio.zip}}{\File{tudscr4texstudio.zip}} +bereitgestellt, welches Dateien zur Erweiterung der automatischen +Befehlsvervollständigung für \TUDScript enthält. Diese müssen unter Windows in +\Path{\%APPDATA\%\textbackslash texstudio} beziehungsweise unter unixoiden +Betriebssystemen in \Path{.config/texstudio} eingefügt werden. + +Möchten Sie das grafische \hologo{LaTeX}"~Frontend~\Application{\hologo{LyX}} +für das Erstellen eines Dokumentes mit den \TUDScript-Klassen nutzen, so werden +dafür spezielle Layout"~Dateien benötigt, um die Klassendateien verwenden zu +können. Diese sind zusammen mit einem \Application{\hologo{LyX}}"~Dokument als +Archiv +\hrfn{\Download{LyX/tudscr4lyx.zip}}{\File{tudscr4lyx.zip}} +im \GitHubRepo* verfügbar. Die Layout"~Dateien müssen dafür im +\Application{\hologo{LyX}}"=Installationspfad in den passenden Unterordner +kopiert werden. Dieser ist bei Windows +\Path{% + \%PROGRAMFILES(X86)\%\textbackslash{}LyX~2.1\textbackslash{}% + Resources\textbackslash{}layouts% +} +beziehungsweise bei unixoiden Betriebssystemen \Path{/usr/share/lyx/layouts}. +Anschließend muss LyX über den Menüpunkt \emph{Werkzeuge} neu konfiguriert +werden. + + + +\section{Literaturverwaltung in \hologo{LaTeX}} +\ChangedAt{v2.02:\TaT Literaturverwaltung} +% +Die simpelste Variante, eine \hologo{LaTeX}"=Literaturdatenbank zu verwalten, +ist dies mit dem Editor manuell zu erledigen. Wesentlich komfortabler ist es +jedoch, die Referenzverwaltung mit einer darauf spezialisierten Anwendung zu +bewerkstelligen. Dafür gibt es zwei sehr gute Programme: +% +\begin{itemize} +\item \Application{Citavi} +\item \Application{JabRef} +\end{itemize} +% +Das Programm \Application{Citavi} ermöglicht den Import von bibliografischen +Informationen aus dem Internet. Allerdings sind diese teilweise unvollständig +oder mangelhaft. Mit \Application{JabRef} hingegen muss die Literaturdatenbank +manuell erstellt werden. Allerdings lassen sich einzelne Einträge aus +\File*{.bib}"~Dateien importieren. Beide Anwendungen unterstützen den Export +beziehungsweise die Erstellung von Datenbanken im Stil von \Package{biblatex}. +Für \Application{JabRef} muss diese durch den Anwender explizit aktiviert +werden.\footnote{Optionen/Einstellungen/Erweitert/BibLaTeX"~Modus} +Zur Verwendung der beiden Programme in Verbindung mit \Package{biblatex} und +\Application{biber} gibt es ein gutes Tutorial unter diesem +\href{http://www.suedraum.de/latex/stammtisch/degenkolb_latex_biblatex_folien-final.pdf}{Link}. + + + +\section{Worttrennungen in deutschsprachigen Texten} +\tudhyperdef*{sec:tips:hyphenation} +\ChangedAt{v2.02:\TaT Worttrennungen} +% +Die möglichen Trennstellen von Wörtern werden von \hologo{LaTeXe} mithilfe +eines Algorithmus berechnet. Dieser ist jedoch in seiner ursprünglichen Form +für die englische Sprache konzipiert worden. Für deutschsprachige Texte wird +die Worttrennung~-- insbesondere bei zusammengeschriebenen Wörtern~-- mit dem +Paket \Package{hyphsubst} entscheidend verbessert. Dafür wird ein um vielerlei +Trennungsmuster ergänztes Wörterbuch aus dem Paket \Package{dehyph-exptl} +genutzt. + +In jedem Fall wird ein Sprachpaket wie beispielsweise \Package{babel} oder +\Package{polyglossia} benötigt, wobei letzteres für den Einsatz mit +\Engine{LuaLaTeX} oder \Engine{XeLaTeX} konzipiert ist. Bei der Verwendung +einer dieser beiden Unicode"=Textsatzsysteme~-- in Verbindung mit einem der zwei +genannten Sprachpakete werden~-- die Trennmuster automatisch aktiviert. + +Für \Engine{pdfLaTeX} lassen sich diese mit dem Paket \Package{hyphsubst} +aktivieren. Damit auch Wörter mit Umlauten richtig getrennt werden, ist +zusätzlich die Verwendung des Paketes \Package{fontenc} mit beispielsweise der +\PValue{T1}"~Schriftkodierung erforderlich. Der Beginn einer Dokumentpräambel +könnte folgendermaßen aussehen: +% +\begin{quoting}[rightmargin=0pt] +\begin{Code}[escapechar=§] +\documentclass[ngerman,§\PName{Klassenoptionen}§]§\Parameter{Dokumentklasse}§ +\usepackage[T1]{fontenc} +\ifpdftex{\usepackage[ngerman=ngerman-x-latest]{hyphsubst}}{} +\usepackage{babel} +§\dots§ +\end{Code} +\end{quoting} +% +Eine Anmerkung noch zur Trennung von Wörtern mit Bindestrichen. Normalerweise +sind die beiden von \hologo{LaTeXe} verwendeten Zeichen für Bindestrich und +Trennstrich identisch. Leider wird der Trennungsalgorithmus von \hologo{LaTeXe} +bei Wörtern, welche bereits einen Bindestrich enthalten, außer Kraft gesetzt. +In der Folge werden~-- in der deutschen Sprache durchaus öfter anzutreffende~-- +Wortungetüme wie die \enquote{Donaudampfschifffahrts-Gesellschafterversammlung} +normalerweise nur direkt nach dem angegebenen Bindestrich getrennt. + +Allerdings gibt es die Möglichkeit, das genutzte Zeichen für den Trennstrich +zu ändern. Dafür ist das Laden der \PValue{T1}"~Schriftkodierung mit dem Paket +\Package{fontenc} zwingend erforderlich. Wenn von der verwendeten Schrift +nichts anderes eingestellt ist, liegen sowohl Binde- als auch Trennstrich auf +Position~\PValue{45} der Zeichentabelle. In der \PValue{T1}"~Schriftkodierung +befindet sich auf der Position~\PValue{127} glücklicherweise für gewöhnlich das +gleiche Zeichen noch einmal. Dies ist jedoch von der verwendeten Schrift +abhängig. Wird der Ausdruck \Macro*{defaulthyphenchar}[\PValue{=127}] in der +Dokumentpräambel verwendet, kann dieses Zeichen für den Trennstrich genutzt +werden. Bei den Schriften des \TUDCDs ist dies bereits automatisch eingestellt. + +Sollte trotz aller Maßnahmen dennoch einmal ein bestimmtes Wort falsch getrennt +werden, so kann die Worttrennung dieses Wortes manuell und global geändert +werden. Dies wird mit \Macro{hyphenation}[\PParameter{Sil-ben-tren-nung}] +gemacht. Es ist zu beachten, dass dies für alle Flexionsformen des Wortes +erfolgen sollte. Für eine lokale/temporäre Worttrennung kann mit Befehlen aus +dem Paket \Package{babel} gearbeitet werden. Diese sind: + +\vskip\medskipamount\noindent +\begingroup +\newcommand*\listhyphens[2]{#1 & \PValue{#2} \tabularnewline}% +\begin{tabular}{@{}ll} + \textbf{Beschreibung} & \textbf{Befehl} \tabularnewline + \listhyphens{ausschließliche Trennstellen}{\textbackslash-} + \listhyphens{zusätzliche Trennstellen}{"'-} + \listhyphens{Umbruch ohne Trennstrich}{"'"'} + \listhyphens{Bindestrich ohne Umbruch}{"'\textasciitilde} + \listhyphens{Bindestrich, der weitere Trennstellen erlaubt}{"'=} +\end{tabular} +\endgroup + + + +\section{Lokale Änderungen von Befehlen und Einstellungen} +\index{Befehlsdeklaration!Geltungsbereich}% +\ChangedAt{v2.02:\TaT Lokale Änderungen} +% +Ein zentraler Bestandteil von \hologo{LaTeX} ist die Verwendung von Gruppen +oder Gruppierungen. Innerhalb dieser bleiben alle vorgenommenen Änderungen an +Befehlen, Umgebungen oder Einstellungen lokal. Dies kann sehr nützlich sein, +wenn beispielsweise das Verhalten eines bestimmten Makros einmalig oder +innerhalb von selbst definierten Befehlen oder Umgebungen geändert werden, im +Normalfall jedoch die ursprüngliche Funktionalität behalten soll. +\begin{Example} +\index{Schriftauszeichnung}% +Der Befehl \Macro{emph} wird von \hologo{LaTeX} für Hervorhebungen im Text +bereitgestellt und führt normalerweise zu einer kursiven oder~-- falls kein +Schriftschnitt mit echten Kursiven vorhanden ist~-- kursivierten oder auch +geneigten Auszeichnung. Soll nun in einem bestimmten Abschnitt die Auszeichnung +mit fetter Schrift erfolgen, kann der Befehl \Macro{emph} innerhalb einer +Gruppierung geändert und verändert werden. Wird diese beendet, verhält sich der +Befehl wie gewohnt. +\begin{Code} +In diesem Text wird genau ein \emph{Wort} hervorgehoben. + +\begingroup + \renewcommand*{\emph}[1]{\textbf{#1}}% + In diesem Text wird genau ein \emph{Wort} hervorgehoben. +\endgroup + +In diesem Text wird genau ein \emph{Wort} hervorgehoben. +\end{Code} +\end{Example} +Eine Gruppierung kann entweder mit \Macro*{begingroup} und \Macro*{endgroup} +oder einfach mit einem geschweiften Klammerpaar \PParameter{\dots} definiert +werden. + + + +\section{Bezeichnung der Gliederungsebenen durch \Package{hyperref}} +\tudhyperdef*{sec:tips:references} +\index{Querverweise}% +\ChangedAt{v2.02:\TaT Bezeichnungen der Gliederungsebenen} +% +Das Paket \Package{hyperref} stellt für Querverweise unter anderem den Befehl +\Macro{autoref}[\Parameter{label}](\Package{hyperref})'none' zur Verfügung. Mit +diesem wird~-- im Gegensatz zur Verwendung von \Macro{ref}~-- bei einer +Referenz nicht nur die Nummerierung selber sondern auch das entsprechende +Element wie Kapitel oder Abbildung vorangestellt. Zur Benennung des +referenzierten Elementes wird sequentiell geprüft, ob das Makro +\Macro*{\PName{Element}\PValue{autorefname}} oder +\Macro*{\PName{Element}\PValue{name}} existiert. Soll die Bezeichnung eines +Elementes geändert werden, muss der entsprechende Bezeichner angepasst werden. +% +\begin{Example} +Bezeichnungen von Gliederungsebenen können folgendermaßen verändert werden. +\begin{Code} +\renewcaptionname{ngerman}{\sectionautorefname}{Unterkapitel} +\renewcaptionname{ngerman}{\subsectionautorefname}{Abschnitt} +\end{Code} +\end{Example} + + + +\section{URL-Umbrüche im Literaturverzeichnis mit \Package{biblatex}} +\index{Literaturverzeichnis}% +\ChangedAt{v2.02:\TaT URL-Umbrüche im Literaturverzeichnis} +% +Wird das Paket \Package{biblatex} verwendet, kann es unter Umständen dazu +kommen, das eine URL nicht vernünftig umbrochen wird. Ist dies der Fall, +können die Zähler \Counter{biburlnumpenalty}(\Package{biblatex})'none', +\Counter{biburlucpenalty}(\Package{biblatex})'none' und +\Counter{biburllcpenalty}(\Package{biblatex})'none' erhöht werden. Das +Manipulieren eines Zähler kann mit \Macro*{setcounter}[\Parameter{Zähler}] oder +lokal mit \Macro*{defcounter}[\Parameter{Zähler}] aus dem Paket +\Package{etoolbox} erfolgen. Die möglichen Werte liegen zwischen 0~und~10\,000, +wobei es bei höheren Zählerwerten zu mehr URL"~Umbrüchen an +Ziffern~(\Counter{biburlnumpenalty}(\Package{biblatex})'none'), +Groß-~(\Counter{biburlucpenalty}(\Package{biblatex})'none') und +Kleinbuchstaben~(\Counter{biburllcpenalty}(\Package{biblatex})'none') kommt. +Genaueres in der Dokumentation zu \Package{biblatex}. + + + +\section{Zeilenabstände in Überschriften} +\tudhyperdef*{sec:tips:headings}% +% +Mit dem Paket \Package{setspace} kann der Zeilenabstand beziehungsweise der +Durchschuss innerhalb des Dokumentes geändert werden. Sollte dieser erhöht +worden sein, können die Abstände bei mehrzeiligen Überschriften als zu groß +erscheinen. Um dies zu korrigieren kann mit dem Befehl +\Macro{addtokomafont}[% + \PParameter{disposition}\PParameter{% + \Macro{setstretch}[\PParameter{1}](\Package{setspace})'none'% + }% +](\Package{koma-script})'none' +der Zeilenabstand aller Überschriften auf einzeilig zurückgeschaltet werden. +Soll dies nur für eine bestimmte Gliederungsebene erfolgen, so ist der +Parameter \PValue{disposition} durch das dazugehörige Schriftelement zu +ersetzen. + + + +\section{Warnung wegen zu geringer Höhe der Kopf-/Fußzeile} +\tudhyperdef*{sec:tips:headline}% +% +Wird das Paket \Package{setspace} verwendet, kann es passieren, dass nach der +Änderung des Zeilenabstandes \emph{innerhalb} des Dokumentes eine oder beide +der folgenden Warnungen erscheinen: +% +\begin{quoting} +\begin{Code} +scrlayer-scrpage Warning: \headheight to low. +scrlayer-scrpage Warning: \footheight to low. +\end{Code} +\end{quoting} +% +Dies liegt an dem durch den vergrößerten Zeilenabstand erhöhten Bedarf für die +Kopf- und Fußzeile, die Höhen können in diesem Fall direkt mit der Verwendung +von \Macro{recalctypearea}(\Package{typearea})'none' angepasst werden. +Allerdings ändert das den Satzspiegel im Dokument, was eine andere und durchaus +berechtigte Warnung von \Package{typearea} zur Folge hat. Falls die Änderung +des Durchschusses wirklich nötig ist, sollte dies in der Präambel des +Dokumentes einmalig passieren. Dann entfallen auch die Warnungen. + + + +\section{Einrückung von Tabellenspalten verhindern}% +\tudhyperdef*{sec:tips:table} +\index{Tabellen}% +% +Normalerweise wird in einer Tabelle vor \emph{und} nach jeder Spalte durch +\hologo{LaTeXe} etwas horizontaler Raum mit \Macro*{hskip}\Length{tabcolsep} +eingefügt.% +\footnote{% + Der Abstand zweier Spalten beträgt folglich \PValue{2}\Length{tabcolsep}.% +} +Dies geschieht auch \emph{vor} der ersten und \emph{nach} der letzten Spalte. +Diese optische Einrückung an den äußeren Rändern kann unter Umständen stören, +insbesondere bei Tabellen, die willentlich~-- beispielsweise mit den Paketen +\Package{tabularx}, \Package{tabulary} oder auch \Package{tabu}~-- über die +komplette Seitenbreite aufgespannt werden. + +Das Paket \Package{tabularborder} versucht, dieses Problem automatisiert zu +beheben, ist jedoch nicht zu allen \hologo{LaTeXe}"=Paketen für den +Tabellensatz kompatibel, unter anderem auch nicht zu den drei zuvor genannten. +Allerdings lässt sich dieses Problem manuell lösen. + +Bei der Deklaration einer Tabelle kann mit~\PValue{@}\PParameter{\dots} vor und +nach dem Spaltentyp angegeben werden, was anstelle von \Length{tabcolsep} vor +beziehungsweise nach der eigentlichen Spalte eingeführt werden soll. Dies kann +für das Entfernen der Einrückungen genutzt werden, indem an den entsprechenden +Stellen~\PValue{@\PParameter{}} bei der Angabe der Spaltentypen vor der ersten +und nach der letzten Tabellenspalte verwendet wird. +% +\begin{Example} +Eine Tabelle mit zwei Spalten, wobei bei einer die Breite automatisch berechnet +wird, soll über die komplette Textbreite gesetzt werden. Dabei soll der Rand +vor der ersten und nach der letzten entfernt werden. +\begin{Code}[escapechar=§] +\begin{tabularx}{\textwidth}{@{}lX@{}} +§\dots§ & §\dots§ \tabularnewline +§\dots§ +\end{tabularx} +\end{Code} +\end{Example} + + + + +\section{Unterdrückung des Einzuges eines Absatzes} +\index{Absatzauszeichnung}% +% +Werden zur Absatzauszeichnung im Dokument~-- wie es aus typografischer Sicht +zumeist sinnvoll ist~-- Einzüge und keine vertikalen Abstände verwendet +(\KOMAScript-Option \Option*{parskip=false}(\Package{koma-script})'none'), kann +es vorkommen, dass ein ganz bestimmter Absatz~-- beispielsweise der nach einer +zuvor genutzten Umgebung folgende~-- ungewollt eingerückt ist. Dies kann sehr +einfach manuell behoben werden, indem direkt zu Beginn des Absatzes das Makro +\Macro{noindent} aufgerufen wird. Soll das Einrücken von Absätzen nach ganz +bestimmten Umgebungen oder Befehlen automatisiert unterbunden werden, ist das +Paket \Package{noindentafter} zu empfehlen. + + + +\section{Unterbinden des Zurücksetzens von Fußnoten}% +\tudhyperdef*{sec:tips:counter}% +\index{Fußnoten}% +% +Mit \Macro{counterwithin} und \Macro{counterwithout} können +\hologo{LaTeX}"=Zähler so umdefiniert werden, dass sie bei der Änderung eines +anderen Zählers zurückgesetzt werden oder nicht. Mit der Angabe von +\Macro*{counterwithout*}[% + \PParameter{footnote}\PParameter{chapter}% +]'none' wird das Zurücksetzen des Fußnotenzählers durch neue Kapitel +deaktiviert, womit sich über Kapitel fortlaufende Fußnoten +realisieren lassen. +%Mehr ist der Dokumentation von \Package*{chngcntr} zu finden. + + + +\section{Warnung beim Erzeugen des Inhaltsverzeichnisses} +\index{Inhaltsverzeichnis}% +\ChangedAt{v2.02:\TaT Warnung beim Erzeugen des Inhaltsverzeichnisses} +\ChangedAt{v2.02:\TaT Hinweis auf Rand bei mehrzeiligen Einträgen ergänzt} +% +Wird mit \Macro{tableofcontents}(\Package{koma-script})'none' das +Inhaltsverzeichnis für ein Dokument mit einer dreistelligen Seitenanzahl +erstellt, so erscheinen unter Umständen viele Warnungen mit der Meldung: +% +\begin{quoting} +\begin{Code} +overfull \hbox +\end{Code} +\end{quoting} +% +Die Seitenzahlen im Verzeichnis werden in einer Box mit einer festen Breite +von~\PValue{1.55em} gesetzt, welche im Makro \Macro*{@pnumwidth} hinterlegt ist +und im Zweifel vergrößert werden sollte. Dabei ist auch der rechte Rand für +mehrzeilige Einträge im Verzeichnis \Macro*{@tocrmarg} zu vergrößern, welcher +mit~\PValue{2.55em} voreingestellt ist. Die Werte sollten nur minimal geändert +werden: +% +\begin{quoting} +\begin{Code} +\makeatletter +\renewcommand*{\@pnumwidth}{1.7em}\renewcommand*{\@tocrmarg}{2.7em} +\makeatother +\end{Code} +\end{quoting} + + + +\section{Leer- und Satzzeichen nach \hologo{LaTeX}-Befehlen}% +\tudhyperdef*{sec:tips:xspace}% +\index{Typografie}% +% +Normalerweise \enquote{schluckt} \hologo{LaTeX} die Leerzeichen nach einem +Makro ohne Argumente. Dies ist jedoch nicht immer~-- genau genommen in den +seltensten Fällen~-- erwünscht. Für dieses Handbuch ist beispielsweise der +Befehl \Macro*{TUD} definiert worden, um \enquote{\TUD{}} nicht ständig +ausschreiben zu müssen. Um sich bei der Verwendung des Befehl innerhalb eines +Satzes für den Erhalt eines folgenden Leerzeichens das Setzen der geschweiften +Klammer nach dem Befehl zu sparen (\Macro*{TUD}[\PParameter{}]), kann +\Macro{xspace}(\Package{xspace})'none' aus dem Paket \Package{xspace} genutzt +werden. Damit wird ein folgendes Leerzeichen erhalten. Der Befehl \Macro*{TUD} +ist wie folgt definiert: +% +\begin{quoting} +\begin{Code} +\newcommand*{\TUD}{Technische Universit\"at Dresden\xspace} +\end{Code} +\end{quoting} +% +Das Paket \Package{xpunctuate} erweitert die Funktionalität nochmals. Damit +können auch Abkürzungen so definiert werden, dass ein versehentlicher Punkt +ignoriert wird: +% +\begin{quoting} +\begin{Code} +\newcommand*{\zB}{z.\,B\xperiod} +\end{Code} +\end{quoting} + + + +\section{Finden von unbekannten \hologo{LaTeX}-Symbolen} +\index{Symbole}% +% +Für \hologo{LaTeX} stehen jede Menge Symbole zur Verfügung, die allerdings +nicht immer einfach zu finden sind. In der Zusammenfassung +\hrfn{http://mirrors.ctan.org/info/symbols/comprehensive/symbols-a4.pdf}% +{\File{symbols-a4.pdf}} +werden viele Symbole aus mehreren Paketen aufgeführt. Alternativ kann +\hrfn{http://detexify.kirelabs.org/classify.html}{Detexify} verwendet werden. +Auf dieser Webseite wird das gesuchte Symbol einfach gezeichnet, die dazu +ähnlichsten werden zurückgegeben. + + + +\section{Das Setzen von Auslassungspunkten} +\tudhyperdef*{sec:tips:dots}% +\index{Typografie}% +\ChangedAt{v2.02:\TaT Das Setzen von Auslassungspunkten} +% +Auslassungspunkte werden mit \hologo{LaTeXe} mit den Befehlen \Macro{dots} oder +\Macro{textellipsis} gesetzt. Für gewöhnlich folgt diesen \emph{immer} ein +Leerzeichen, was nicht in jedem Fall gewollt ist. Das Paket \Package{ellipsis} +schafft hier Abhilfe, wobei die Option \Option*{xspace} führt dazu, dass nach +der Verwendung eines der beiden Befehle automatisch ein Leerzeichen gesetzt +wird. +% +\begin{quoting} +\begin{Code} +\usepackage[xspace]{ellipsis} +\end{Code} +\end{quoting} +% +Im Ursprung ist es für das Setzen englischsprachiger Texte gedacht, wo zwischen +Auslassungspunkten und Satzzeichen ein Leerzeichen gesetzt wird. Im Deutschen +ist dies anders: +% +\begin{quoting} +\enquote{% + Um eine Auslassung in einem Text zu kennzeichnen, werden drei Punkte gesetzt. + Vor und nach den Auslassungspunkten wird jeweils ein Wortzwischenraum + gesetzt, wenn sie für ein selbständiges Wort oder mehrere Wörter stehen. Bei + Auslassung eines Wortteils werden sie unmittelbar an den Rest des Wortes + angeschlossen. Am Satzende wird kein zusätzlicher Schlusspunkt gesetzt. + Satzzeichen werden ohne Zwischenraum angeschlossen.% +}~[Duden, 23. Aufl.] +\end{quoting} +% +Um dieses Verhalten zu erreichen, sollte noch Folgendes in der Präambel +eingefügt werden: +% +\begin{quoting} +\begin{Code} +\let\ellipsispunctuation\relax +\newcommand*{\qdots}{[\dots{}]\xspace} +\end{Code} +\end{quoting} +% +Der Befehl \Macro*{qdots} wird definiert, um Auslassungspunkte in eckigen +Klammern (\POParameter{\dots}) setzen zu können, wie sie für das Kürzen von +wörtlichen Zitaten häufig verwendet werden. + + + +\section{Lokalisierung für das Setzen von Einheiten mit \Package{siunitx}} +\tudhyperdef*{sec:tips:siunitx}% +\index{Einheiten}% +% +Wenn \Package{siunitx} in einem deutschsprachigen Dokument genutzt soll +werden, muss zumindest die richtige Lokalisierung mit +\Macro{sisetup}[\PParameter{locale = DE}](\Package{siunitx})'none' angegeben +werden. Sollen auch die Zahlen richtig formatiert sein, müssen weitere +Einstellungen vorgenommen werden. Die meiner Meinung nach besten sind die +folgenden. +% +\begin{quoting} +\begin{Code} +\sisetup{% + locale = DE,% + input-decimal-markers={,},input-ignore={.},% + group-separator={\,},group-minimum-digits=3% +} +\end{Code} +\end{quoting} +% +Das Komma kommt als Dezimaltrennzeichen zum Einsatz. Des Weiteren werden Punkte +innerhalb der Zahlen ignoriert und eine Gruppierung von jeweils drei Ziffern +vorgenommen. Alternativ zu diesem Paket kann übrigens auch \Package{units} +verwendet werden. + + + +\section{Fehlermeldung beim Laden eines Paketes mit Optionen} +\ChangedAt{v2.05:\TaT Fehler beim Laden eines Paketes mit Optionen} +% +Es kann unter Umständen passieren, dass beim Laden eines Paketes mit bestimmten +Optionen via \Macro*{usepackage}[\OParameter{Paketoptionen}\Parameter{Paket}] +folgender Fehler ausgegeben wird: +% +\begin{quoting} +\begin{Code}[escapechar=§] +! LaTeX Error: Option clash for package <§\dots§>. +\end{Code} +\end{quoting} +% +Mit großer Sicherheit wird das angeforderte Paket bereits durch die verwendete +Dokumentklasse oder ein anderes Paket geladen. Normalerweise genügt es, die +gewünschten Optionen durch +\Macro{PassOptionsToPackage}[\Parameter{Paketoptionen}\Parameter{Paket}] +bereits vor dem Laden der Dokumentklasse mit \Macro*{documentclass} an das +betreffende Paket weiterzureichen. + + + +\section{Probleme bei der Verwendung von \Package{auto-pst-pdf}} +\tudhyperdef*{sec:tips:auto-pst-pdf} +\ChangedAt{v2.02:\TaT Hinweise zum Paket \Package{auto-pst-pdf}} +% +Bei der Verwendung von \Engine{pdfLaTeX} liest das Paket \Package{auto-pst-pdf} +die Präambel ein und erstellt anschließend über den PostScript"=Pfad +\Path{latex\,>\,dvips\,>\,ps2pdf} eine PDF"~Datei, welche lediglich alle in den +vorhandenen \Environment{pspicture}(\Package{pstricks})'none'"=Umgebungen +erstellten Grafiken enthält. Das Paket \Package{ifpdf} stellt das Makro +\Macro{ifpdf}(\Package{ifpdf})'none' bereit, mit welchem unterschieden werden +kann, ob \Engine{pdfLaTeX} als Textsatzsystem verwendet wird. Abhängig davon +können unterschiedliche Quelltexte ausgeführt werden, was genutzt wird, um die +nachfolgend beschriebenen Probleme zu beheben. +% +\begin{quoting} +\begin{Code} +\usepackage{ifpdf} +\end{Code} +\end{quoting} + +\minisec{Die gleichzeitige Verwendung von \Package{floatrow}} +Das Paket \Package{floatrow} stellt Befehle bereit, mit denen die Beschriftung +von Gleitobjekten sehr bequem gesetzt werden können. Diese Setzen ihren Inhalt +erst in einer Box, um deren Breite zu ermitteln und diese anschließend +auszugeben. In Kombination mit \Package{auto-pst-pdf} führt das zu einer +doppelten Erstellung der gewünschten Abbildung. Um dies zu vermeiden, müssen +die durch \Package{floatrow} bereitgestellten Befehle \enquote{unschädlich} +gemacht werden. Die fraglichen Befehlen akzeptieren allerdings bis zu drei +optionale Argumente \emph{vor} den beiden obligatorischen, was für die +Benutzerschnittstelle für die (Re-)Definition durch \hologo{LaTeXe} +normalerweise nicht vorgesehen ist. Deshalb wird das Paket \Package{xparse} +geladen, mit welchem dies möglich wird. Genaueres dazu ist der dazugehörigen +Paketdokumentation zu entnehmen. Mit folgendem Quelltextauszug lassen sich die +\Package{floatrow}"=Befehle zusammen mit der +\Environment{pspicture}(\Package{pstricks})'none'"=Umgebung wie gewohnt +verwenden. +% +\begin{quoting} +\begin{Code} +\usepackage{floatrow} +\usepackage{xparse} +\ifpdf\else + \RenewDocumentCommand{\fcapside}{ooo+m+m}{#4#5} + \RenewDocumentCommand{\ttabbox}{ooo+m+m}{#4#5} + \RenewDocumentCommand{\ffigbox}{ooo+m+m}{#4#5} +\fi +\end{Code} +\end{quoting} + +\minisec{Die parallele Nutzung von \Package{tikz} und \Package{todonotes}} +Mit dem Paket \Package{tikz}~-- und auch allen anderen Paketen die +selbiges nutzen wie beispielsweise \Package{todonotes}~-- gibt es in Verbindung +mit \Package{auto-pst-pdf} ebenfalls Probleme. Lösen lässt sich dieses Dilemma, +indem die fraglichen Pakete lediglich geladen werden, wenn \Engine{pdfLaTeX} +aktiv ist. +% +\begin{quoting}[rightmargin=0pt] +\begin{Code} +\ifpdf + \usepackage{tikz}%\dots gegebenenfalls weitere auf tikz basierende Pakete +\fi +\end{Code} +\end{quoting} + + + +\section{Automatisiertes Einbinden von \Application{Inkscape}-Grafiken } +\tudhyperdef*{sec:tips:svg}% +\ChangedAt{v2.05:\TaT \Macro*{includesvg} aus Paket \Package{svg} verwenden} +\index{Grafiken}% +% +Das Einbinden von \Application{Inkscape}"=Grafiken in \hologo{LaTeX}"=Dokumente +wird auf \CTAN[pkg/svg-inkscape]{\Package*{svg-inkscape}'none'} erläutert. Ein +daraus abgeleiteter und verbesserter Ansatz wird durch das Paket \Package{svg} +bereitgestellt. Mit diesem Paket ist ein \textbf{automatisierter} Export der +\Application{Inkscape}"=Grafiken direkt bei der Kompilierung mit \Engine{LaTeX} +und dem anschließenden Einbinden in das Dokument möglich. Hierfür wird der +Befehl \Macro*{includesvg}[\OParameter{Parameter}\Parameter{SVG-Datei}] durch +das Paket definiert. + +Dabei erfolgt der externe Aufruf von \Application{Inkscape} über Kommandozeile +beziehungsweise Terminal mit \File{inkscape.exe}. Damit dieser auch tatsächlich +durchgeführt wird, ist die Ausführung einer \Engine*{LaTeX}"~Engine mit der +Option \Path{-{}-shell-escape} beziehungsweise \Path{-{}-enable-write18} +zwingend notwendig. Außerdem muss der Pfad zur Datei \File{inkscape.exe} dem +System bekannt sein.% +\footnote{% + Der Pfad zu \File{inkscape.exe} in der Umgebungsvariable \Path{PATH} des + Betriebssystems enthalten sein.% +} +Für weiterführende Informationen sei auf die Dokumentation des Pakets +\Package{svg} verwiesen. + + + +\section{Änderung des Papierformates} +\index{Papierformat}% +% +Es kann vorkommen, dass innerhalb eines Dokumentes kurzzeitig das Papierformat +geändert werden soll, um beispielsweise eine Konstruktionsskizze in der +digitalen PDF"~Datei einzubinden. Dabei ist es mit der \KOMAScript-Option +\Option{paper=\PSet}(\Package{typearea})'none' sowohl möglich, lediglich die +Ausrichtung in ein Querformat zu ändern, als auch die Größe des Papierformates +selber. +% +\begin{Example} +Ein Dokument im A4"~Format soll kurzzeitig auf ein A3"=Querformat geändert +werden. Das folgende Minimalbeispiel zeigt, wie dies mit \KOMAScript-Mitteln +über die Optionen \Option*{paper=landscape}(\Package{typearea})'none' und +\Option*{paper=A3}(\Package{typearea})'none' geändert werden kann. +\begin{Code} +\documentclass[paper=a4,pagesize]{tudscrreprt} +\usepackage[T1]{fontenc} +\usepackage[ngerman]{babel} +\usepackage{blindtext} + +\begin{document} +\chapter{Überschrift Eins} +\Blindtext + +\cleardoublepage +\storeareas\PotraitArea% speichert den aktuellen Satzspiegel +\KOMAoptions{paper=A3,paper=landscape,DIV=current} +\chapter{Überschrift Zwei} +\Blindtext + +\cleardoublepage +\PotraitArea% lädt den gespeicherten Satzspiegel +\chapter{Überschrift Drei} +\Blindtext +\end{document} +\end{Code} +\end{Example} + + + + +\section{Beschnittzugabe und Schnittmarken} +\tudhyperdef*{sec:tips:crop}% +\index{Beschnittzugabe|!}% +\index{Schnittmarken|!}% +\ChangedAt{v2.05:\TaT Beschnittzugabe und Schnittmarken} +% +Beim Plotten von Postern oder anderen farbigen Druckerzeugnissen besteht +oftmals das Problem, dass ein randloses Drucken nur schwer realisierbar ist. +Deshalb wird zu oftmals damit beholfen, dass der Druck des fertigen Dokumentes +auf einem größeren Papierbogen erfolgt und anschließend auf das gewünschte +Zielformat zugeschnitten wird, womit das Problem des nicht bedruckbaren Randes +entfällt. Dies kann über zwei verschiedene Wege realisiert werden. + +Der einfachste Weg ist die Verwendung des Paketes \Package{crop}. Mit diesem +kann das Dokument ganz normal im gewünschten Zielformat erstellt werden. Vor +dem Druck wird dieses Paket geladen und einfach das gewünschte Format des +Papierbogens angegeben. +% +\begin{quoting}[rightmargin=0pt] +\begin{Code}[escapechar=§] +\RequirePackage{fix-cm} +\documentclass[% + paper=a1, + fontsize=36pt +]{tudscrposter} +\usepackage[T1]{fontenc} +§\dots§ +\usepackage{graphicx} +\usepackage[b1,center,cam]{crop} +\begin{document} +§\dots§ +\end{document} +\end{Code} +\end{quoting} +% +Alternativ dazu kann für die \TUDScript-Klassen auf die Funktionalität des +Paketes \Package{geometry} zurückgegriffen werden. Dieses Paket stellt den +Befehl \Macro{geometry}(\Package{geometry})'none' bereit, in dessen Argument mit +\Key{\Macro{geometry}(\Package{geometry})}{paper=\PName{Papierformat}}|default| +das Papierformat festgelegt werden kann. Wird zusätzlich noch der Parameter +\Key{\Macro{geometry}(\Package{geometry})}{layout=\PName{Zielformat}}|default| +angegeben, so wird damit das gewünschte Zielformat definiert. Dabei sollte mit +\Key{\Macro{geometry}(\Package{geometry})}% +{layoutoffset=\PName{Längenwert}}|default| +dieser Bereich gegebenenfalls etwas eingerückt werden. Die Angabe von +\Key{\Macro{geometry}(\Package{geometry})}{showcrop=\PBoolean}|default| +generiert außerdem noch visuelle Schnittmarken. +% +\begin{quoting}[rightmargin=0pt] +\begin{Code}[escapechar=§] +\RequirePackage{fix-cm} +\documentclass[% + paper=a1, + fontsize=36pt +]{tudscrposter} +\usepackage[T1]{fontenc} +§\dots§ +\geometry{paper=b1,layout=a1,layoutoffset=1in,showcrop} +\begin{document} +§\dots§ +\end{document} +\end{Code} +\end{quoting} +% +Für genauere Erläuterungen sowie weitere Einstellmöglichkeiten sei auf die +Dokumentation von \Package{crop} beziehungsweise \Package{geometry} verwiesen. +Mit der \TUDScript-Option \Option{bleedmargin}(\Class{tudscrposter}) können +zusätzlich ie farbigen Bereiche der \PageStyle{tudheadings}"~Seitenstile +erweitert werden, um ein \enquote{Zuschneiden in die Farbe} zu ermöglichen. + + + + + +\section{Vermeiden des Skalierens einer PDF-Datei beim Druck} +\ChangedAt{v2.04:\TaT Vermeiden des Skalierens einer PDF"~Datei beim Druck} +% +Beim Erzeugen eines Druckauftrages einer PDF"~Datei kann es unter Umständen +dazu führen, dass diese durch den verwendeten PDF"~Betrachter unnötigerweise +vorher skaliert wird und dabei die Seitenränder vergrößert werden. Um dieses +Verhalten für Dokumente, die mit \Engine{pdfLaTeX} erzeugt werden, zu +unterdrücken, gibt es zwei Möglichkeiten: +% +\begin{enumerate} +\item Wenn im Dokument ohnehin das Paket \Package{hyperref} verwendet wird, + ist der simple Aufruf von + \Macro{hypersetup}[% + \PParameter{pdfprintscaling=None}% + ](\Package{hyperref})'none' + ausreichend. +\item Der Low"~Level"~Befehl + \Macro*{pdfcatalog}[\PParameter{/ViewerPreferences<{}</PrintScaling/None>{}>}] + besitzt das gleiche Verhalten und lässt sich auch ohne \Package{hyperref} + nutzen. +\end{enumerate} +% +Weitere Informationen sind unter \url{http://www.komascript.de/node/1897} +zu finden. + + + +\section{Platzierung von Gleitobjekten} +\tudhyperdef*{sec:tips:floats}% +\index{Gleitobjekte!Platzierung|?}% +% +Mit den beiden Paketen \Package{flafter} sowie \Package{placeins} gibt es die +Möglichkeit, den für \hologo{LaTeX} zur Verfügung stehenden Raum für die +Platzierung von Gleitobjekten einzuschränken. Darüber hinaus kann diese auch +durch die im Folgenden aufgezählten Befehle beeinflusst werden. Die Makros +lassen sich mit \Macro*{renewcommand*}[\Parameter{Makro}\Parameter{Wert}] +sehr einfach ändern. + +\begin{Declaration}{\Macro*{floatpagefraction}}[0\floatpagefraction] +\begin{Declaration}{\Macro*{dblfloatpagefraction}}[0\dblfloatpagefraction] +\printdeclarationlist% +% +Der Wert gibt die relative Größe eines Gleitobjektes bezogen auf die +eingestellte Texthöhe (\Length*{textheight}) an, die mindestens erreicht sein +muss, damit für dieses gegebenenfalls vor dem Beginn eines neuen Kapitels eine +separate Seite erzeugt wird. Dabei wird einspaltiges +(\Macro*{floatpagefraction}) und zweispaltiges (\Macro*{dblfloatpagefraction}) +Layout unterschieden. Der Wert für beide Befehle sollte im Bereich +von~\PValue{0.5}\dots\PValue{0.8} liegen. +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro*{topfraction}}[0\topfraction] +\begin{Declaration}{\Macro*{dbltopfraction}}[0\dbltopfraction] +\printdeclarationlist% +% +Diese Werte geben den maximalen Seitenanteil für Gleitobjekte, die am oberen +Seitenrand platziert werden, für einspaltiges und zweispaltiges Layout an. Er +sollte im Bereich von \PValue{0.5}\dots\PValue{0.8} liegen und größer als +\Macro*{floatpagefraction} beziehungsweise \Macro*{dblfloatpagefraction} sein. +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro*{bottomfraction}}[0\bottomfraction] +\printdeclarationlist% +% +Dies ist der maximale Seitenanteil für Gleitobjekte, die am unteren Seitenrand +platziert werden. Er sollte zwischen~\PValue{0.2} und~\PValue{0.5} betragen. +\end{Declaration} + +\begin{Declaration}{\Macro*{textfraction}}[0\textfraction] +\printdeclarationlist% +% +Dies ist der Mindestanteil an Fließtext, der auf einer Seite mit Gleitobjekten +vorhanden sein muss, wenn diese nicht auf einer separaten Seite ausgegeben +werden. Er sollte in einem Bereich von~\PValue{0.1}\dots\PValue{0.3} liegen. +\end{Declaration} + +\begin{Declaration}{\Counter*{totalnumber}}[\arabic{totalnumber}] +\begin{Declaration}{\Counter*{topnumber}}[\arabic{topnumber}] +\begin{Declaration}{\Counter*{dbltopnumber}}[\arabic{dbltopnumber}] +\begin{Declaration}{\Counter*{bottomnumber}}[\arabic{bottomnumber}] +\printdeclarationlist% +% +Außerdem gibt es noch Zähler, welche die maximale Anzahl an Gleitobjekten pro +Seite insgesamt (\Counter*{totalnumber}) sowie am oberen (\Counter*{topnumber}) +und am unteren Seitenrand (\Counter*{bottomnumber}) sowie im zweispaltigen +Satz beide Spalten überspannend (\Counter*{dbltopnumber}) festlegen. Die Werte +können mit \Macro*{setcounter}[\Parameter{Zähler}\Parameter{Wert}] geändert +werden. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Length*{@fptop}} +\begin{Declaration}{\Length*{@fpsep}} +\begin{Declaration}{\Length*{@fpbot}} +\begin{Declaration}{\Length*{@dblfptop}} +\begin{Declaration}{\Length*{@dblfpsep}} +\begin{Declaration}{\Length*{@dblfpbot}} +\printdeclarationlist% +% +Sind vor Beginn eines Kapitels noch Gleitobjekte verblieben, so werden diese +durch \hologo{LaTeX} normalerweise auf einer separaten vertikal zentriert Seite +ausgegeben. Dabei bestimmen diese Längen jeweils den Abstand vor dem ersten +Gleitobjekt zum oberen Seitenrand (\Length*{@fptop}, \Length*{@dblfptop}), +zwischen den einzelnen Objekten (\Length*{@fpsep}, \Length*{@dblfpsep}) sowie +zum unteren Seitenrand (\Length*{@fpbot}, \Length*{@dblfpbot}). Soll dies nicht +geschehen, können die Längen durch den Anwender geändert werden. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +% +\begin{Example} +Alle Gleitobjekte auf einer dafür speziell gesetzten Seite sollen direkt zu +Beginn dieser ausgegeben werden. In der Dokumentpräambel lässt sich für dieses +Unterfangen Folgendes nutzen: +\begin{Code} +\makeatletter +\setlength{\@fptop}{0pt} +\setlength{\@dblfptop}{0pt}% twocolumn +\makeatother +\end{Code} +\end{Example} + + + +\section{Warnung bei der Schriftgrößenwahl} +\tudhyperdef*{sec:tips:fontsize}% +\ChangedAt{v2.04:\TaT Warnung bei der Schriftgrößenwahl} +% +Die im Dokument verwendete Schriftgröße kann bei den \KOMAScript-Klassen sehr +einfach über die Option~\Option{fontsize}(\Package{koma-script})'none' +eingestellt werden, wobei diese immer als Klassenoption angegeben werden +sollte. Bei relativ großen und kleinen Schriftgrößen kann dabei eine Warnung in +der Gestalt +% +\begin{quoting}[rightmargin=0pt] +\begin{Code}[escapechar=§] +LaTeX Font Warning: Font shape `§\dots§' in size <xx> not available +\end{Code} +\end{quoting} +% +auftreten. Dies daran, dass zum Zeitpunkt des Ladens einer Klasse immer nach +den Computer-Modern"=Standardschriften gesucht wird, unabhängig davon, ob im +Nachhinein ein anderes Schriftpaket geladen wird. Diese sind de"~facto nicht +in alle Größen skalierbar. Um die Warnungen zu beseitigen, sollte das Paket +\Package{fix-cm} mit \Macro*{RequirePackage} \emph{vor} der Dokumentklasse +geladen werden: +% +\begin{quoting}[rightmargin=0pt] +\begin{Code}[escapechar=§] +\RequirePackage{fix-cm} +\documentclass§\OParameter{Klassenoptionen}\Parameter{Klasse}§ +\usepackage[T1]{fontenc} +§\dots§ +\begin{document} +§\dots§ +\end{document} +\end{Code} +\end{quoting} +% +Damit werden die Warnungen behoben. + + + +\section{Fehlermeldung: ! No room for a new \textbackslash write} +\tudhyperdef*{sec:tips:write} +\ChangedAt{v2.02:\TaT Fehler beim Schreiben von Hilfsdateien} +% +Für das Erstellen und Schreiben externer Hilfsdateien steht \hologo{LaTeXe} nur +eine begrenzte Anzahl sogenannter Ausgabe-Streams zur Verfügung. Allein für +jedes zu erstellende Verzeichnis reserviert \hologo{LaTeX} selbst jeweils einen +neuen Stream. Auch einige bereits zuvor in diesem Handbuch vorgestellte, sehr +hilfreiche Pakete~-- wie beispielsweise \Package{hyperref}, \Package{biblatex}, +\Package{glossaries}, \Package{todonotes} oder auch \Package{filecontents}~-- +benötigen eigene Hilfsdateien und öffnen für das Erstellen dieser einen +Ausgabe-Stream oder mehr. Lädt der Anwender mehrere, in eine Hilfsdatei +schreibende Pakete, kann es zur der Fehlermeldung +% +\begin{quoting} +\begin{Code} +! No room for a new \write . +\end{Code} +\end{quoting} +% +kommen. Abhilfe schafft hier das Paket \Package{scrwfile}<koma-script>, welches +einige Änderungen am \hologo{LaTeX}"=Kernel vornimmt, um die Anzahl der +benötigten Hilfsdateien für das Schreiben aller Verzeichnisse zu reduzieren. Es +muss einfach in der Präambel eingebunden werden. Sollten mit diesem Paket +unerwarteter Weise Probleme auftreten, ist dessen Anleitung im \scrguide zu +finden. Eine weitere Möglichkeit, das beschriebene Problem der geringen Menge +an Ausgabe-Streams zu umgehen, stellt das Paket \Package{morewrites} dar. +Allerdings ist dessen Verwendung nicht in allen Fällen von Erfolg gekrönt. + + + diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-index.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-index.tex new file mode 100644 index 0000000000..08f7671baf --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-index.tex @@ -0,0 +1,97 @@ +\CrossIndex{Optionen}{options}% +\CrossIndex*{Befehle}{macros}% +\CrossIndex{Bezeichner}{terms}% +\CrossIndex{Seitenstile,Schriftelemente,Farben}{elements}% +\CrossIndex*{Längen}{misc}% +\CrossIndex{Zähler}{misc}% +\CrossIndex*{Klassen,Pakete,Dateien}[Index der Dateien etc.]{files}% +\CrossIndex*{Änderungen,Changelog,Version}[Änderungsliste]{changelog}% +% +\SeeRef*{Distribution}{\Distribution{Mac\hologo{TeX}}} +\SeeRef*{Distribution}{\Distribution{\hologo{TeX}~Live}} +\SeeRef*{Distribution}{\Distribution{\hologo{MiKTeX}}} +% +\index{Abbildungen|see{Grafiken}}% +\index{Abschlussarbeit|see{Typisierung}}% +\index{Aktualisierung|see{Update}}% +\index{Aufzählungen|see{Listen}}% +\index{Autorenangaben|see{Titel}}% +\index{Bindekorrektur|see{Satzspiegel}}% +\index{Cover|see{Umschlagseite}}% +\index{Dezimaltrennzeichen|see{Zifferngruppierung}}% +\index{doppelseitiger Satz|see{Satzspiegel}}% +\index{Dresden-concept-Logo@\DDC-Logo|see{Layout}}% +\index{Drittlogo|see{Layout}}% +\index{Fachreferent|see{Referent}}% +\index{Farben|see{Layout}}% +\index{Fußzeile|see{Layout}}% +\index{Installation|see{Update}}% +\index{Gliederung|see{Layout!Überschriften}}% +\index{Grafiken|see{Gleitobjekte}}% +\index{Kapitelseiten|see{Layout}}% +\index{Kapitelüberschriften|see{Layout}}% +\index{Klassenoptionen|see{Optionen}}% +\index{Kolumnentitel|see{Layout}}% +\index{Kopfzeile|see{Layout}}% +\index{Kurzfassung|see{Zusammenfassung}}% +\index{Layout!Seitenränder|see{Satzspiegel}}% +\index{Layout!Titel|see{Titel}}% +\index{Layout!Umschlagseite|see{Umschlagseite}}% +\index{Leerraum|see{Absatzauszeichnung}}% +\index{Leerseiten|see{Vakatseiten}}% +\index{Lokalisierung|see{Bezeichner}}% +\index{Makros|see{Befehle}}% +\index{Mathematiksatz|see{Einheiten}}% +\index{Mathematiksatz|see{Griechische Buchstaben}}% +\index{Mathematiksatz|see{Zifferngruppierung}}% +\index{Nutzerinstallation|see{Installation}}% +\index{Outline-Eintrag|see{Lesezeichen}}% +\index{Parameter|see{Befehle}}% +\index{Professor|see{Hochschullehrer}}% +\index{Querbalken|see{Layout}}% +\index{Seitenränder|see{Satzspiegel}}% +\index{Seitenstile|see{Layout}}% +\index{Silbentrennung|see{Worttrennung}}% +\index{Sprachunterstützung|see{Bezeichner}}% +\index{Sprachunterstützung|see{Worttrennung}}% +\index{Sprungmarken|see{Lesezeichen}}% +\index{Tabellen|see{Gleitobjekte}}% +\index{Tausendertrennzeichen|see{Zifferngruppierung}}% +\index{Teileseiten|see{Layout}}% +\index{Teileüberschriften|see{Layout}}% +\index{Titel!Umschlagseite|see{Umschlagseite}}% +\index{Überfüllung|see{Beschnittzugabe}}% +\index{Umgebungen|see{Befehle}}% +\index{Trennmuster|see{Worttrennung}}% +\index{Vektorgrafiken|see{Grafiken}}% +\index{Versalien|see{Schriftauszeichnung}}% +\index{zweiseitiger Satz|see{Satzspiegel}}% +\index{zweispaltiger Satz|see{Satzspiegel}}% +\index{Zweitlogo|see{Layout}}% + + +\setchapterpreamble{% + \addparttocentry{}{\indexname}% + \begin{abstract} + \noindent Die Formatierung der Einträge in allen aufgeführten Indexen ist + folgendermaßen aufzufassen: \textbf{Zahlen in fetter Schrift} verweisen auf + die \textbf{Erklärung} zu einem Stichwort, wobei in der digitalen Fassung + dieses Handbuchs dieser Eintrag selbst ein Hyperlink zu seiner Erläuterung + ist. Seitenzahlen in normaler Schriftstärke hingegen deuten auf zusätzliche + Informationen, wobei diese für \textit{kursiv hervorgehobene Zahlen} als + besonders \textit{wichtig} erachtet werden. + + Bei Einträgen für \hyperref[idx:options]{Klassen- und Paketoptionen}, + \hyperref[idx:macros]{Umgebungen und Befehlen} sowie + \hyperref[idx:elements]{Seitenstilen, Schriftelementen und Farben} + respektive \hyperref[idx:misc]{Längen und Zählern}, zu denen keine direkte + \textbf{Erklärung} existiert~-- und diese dementsprechend auch nicht als + Hyperlink dargestellt sind~-- handelt es sich um zusätzliche Hinweise für + Elemente, die nicht durch \TUDScript sondern von anderen Klassen oder + Paketen zur Verfügung gestellt werden, welche im Suffix des entsprechenden + Eintrages angegeben werden. + \end{abstract} +} +\chapter*{\indexname} +\PrintIndex +\PrintChangelog diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-installation.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-installation.tex new file mode 100644 index 0000000000..2dd8d79199 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-installation.tex @@ -0,0 +1,567 @@ +\setchapterpreamble{\tudhyperdef'{sec:install:ext}} +\chapter{Weiterführende Installationshinweise} +% +\noindent\Attention{% + Hier werden unterschiedliche Varianten erläutert, wie \TUDScript in der + Version~\vTUDScript{} genutzt werden kann, falls eine frühere Variante als + \textbf{lokale Nutzerinstallation} verwendet wurde. +} + +\bigskip\noindent +Bis zur Version~v2.01 wurde \TUDScript ausschließlich über das \Forum zur +lokalen Nutzerinstallation angeboten. In erster Linie hat das historische +Hintergründe und hängt mit der Entstehungsgeschichte von \TUDScript zusammen. +Eine lokale Nutzerinstallation bietet einen~-- eher zu vernachlässigenden~-- +Vorteil. Treten bei der Verwendung von \TUDScript Probleme auf, können diese im +Forum gemeldet und diskutiert werden. Ist für ein solches Problem tatsächlich +eine Fehlerkorrektur respektive Aktualisierung von \TUDScript nötig, kann diese +schnell und unkompliziert über das \GitHubRepo bereitgestellt und durch den +Anwender sofort genutzt werden. + +Dies hat allerdings für alle Anwender, welche das Forum relativ wenig oder gar +nicht besuchen, den großen Nachteil, dass Sie nicht von Aktualisierungen, +Verbesserungen und Fehlerkorrekturen neuer Versionen profitieren können. Auch +alle nachfolgenden Bugfixes und Aktualisierungen des \TUDScript-Bundles müssen +durch den Anwender manuell durchgeführt werden. Daher wird die Verbreitung via +\CTAN[pkg/tudscr] präferiert, sodass \TUDScript stets in der gerade aktuellen +Version verfügbar ist~-- eine durch den Anwender aktuell gehaltene +\hologo{LaTeX}"=Distribution vorausgesetzt. Der einzige Nachteil bei diesem +Ansatz ist, dass die Verbreitung eines Bugfixes und die anschließende +Bereitstellung durch die verwendete Distribution für gewöhnlich bis zu zwei +Tagen dauert. + +Die gängigen \hologo{LaTeX}"=Distributionen durchsuchen im Regelfall zuerst das +lokale \Path{texmf}"=Nutzerverzeichnis nach Klassen und Paketen und erst daran +anschließend den \Path{texmf}"=Pfad der Distribution selbst. Dabei spielt es +keine Rolle, in welchem Pfad die neuere Version einer Klasse oder eines Paketes +liegt. Sobald im Nutzerverzeichnis die gesuchte Datei gefunden wurde, wird die +Suche beendet. +\Attention{% + In der Konsequenz bedeutet dies, dass sämtliche Aktualisierungen über CTAN + nicht zum Tragen kommen, falls \TUDScript als lokale Nutzerversion + installiert wurde. +} + +Deshalb wird Anwendern empfohlen, eine gegebenenfalls vorhandene lokale +Nutzerinstallation von \TUDScript zu deinstallieren, falls diese nicht +\emph{bewusst} installiert wurde. Die Deinstallation wird in +\autoref{sec:local:uninstall} erläutert. Nach dieser können Updates des +\TUDScript-Bundles durch die Aktualisierungsfunktion der Distribution erfolgen. + +Wie das \TUDScript-Bundle trotzdem als lokale Nutzerversion installiert oder +aktualisiert werden kann, ist in \autoref{sec:local:install} beziehungsweise +\autoref{sec:local:update} zu finden. Der Anwender sollte in diesem Fall +allerdings genau wissen, was er damit bezweckt, da er in diesem Fall für die +Aktualisierung von \TUDScript selbst verantwortlich ist. + +\minisec{Nutzung der veralteten Schriftfamilien} +\ChangedAt{v2.06}% +% +Soll ein Dokument noch mit den veralteten Schriftfamilien \Univers und \DIN +gesetzt werden, so ist eine lokale Installation der Type1-Schriften notwendig, +welche in \autoref{sec:install:fonts} beschrieben wird. Zusätzlich sei auf die +beiden Optionen \Option*{tudscrver=2.05} und \Option*{cdoldfont} hingewiesen. +Für die Nutzung der \OpenSans wird lediglich die aktuelle Version des Paketes +\Package{opensans} benötigt, welches auf \CTAN[pkg/opensans] zu finden ist. + + +\section{Lokale Deinstallation des \TUDScript-Bundles} +\tudhyperdef*{sec:local:uninstall}% +\index{Deinstallation}% +% +Über die Kommandozeile beziehungsweise das Terminal kann mit +% +\begin{quoting} +\Path{kpsewhich --all tudscrbase.sty} +\end{quoting} +% +überprüft werden, ob eine lokale Nutzerinstallation von \TUDScript vorhanden +ist. Es werden alle Pfade ausgegeben, in denen die Datei \File*{tudscrbase.sty} +gefunden wird. Erscheint nur der Distributionspfad, ist die \TUDScript-Version +von CTAN aktiv und der Anwender kann mit dem \TUDScript-Bundle arbeiten. + +Wird \emph{nur} das lokale Nutzerverzeichnis oder gar kein Verzeichnis +gefunden, so wird höchstwahrscheinlich eine veraltete Distribution +verwendet. In diesem Fall wird eine Aktualisierung dieser \emph{unbedingt} +empfohlen. Sollte dies nicht möglich sein, \emph{muss} \TUDScript als lokale +Nutzerversion installiert (\autoref{sec:local:install}) beziehungsweise~-- +falls ein Pfad ausgegeben wurde~-- aktualisiert (\autoref{sec:local:update}) +werden. + +Sollte neben dem Pfad der Distribution noch mindestens ein weiterer Pfad +angezeigt werden, so ist eine lokale Nutzerversion installiert. In +diesem Fall hat der Anwender drei Möglichkeiten: +% +\begin{enumerate} +\item Entfernen der lokalen Nutzerinstallation (skriptbasiert) +\item Entfernen der lokalen Nutzerinstallation (manuell) +\item Aktualisierung der lokalen Nutzerversion (\autoref{sec:local:update}) +\end{enumerate} +% +Um die lokale Nutzerinstallation zu entfernen, kann für Windows +\hrfn{\Download{uninstall/tudscr\_uninstall.bat}}{\File{tudscr\_uninstall.bat}} +sowie für unixartige Betriebssysteme +\hrfn{\Download{uninstall/tudscr\_uninstall.sh}}{\File{tudscr\_uninstall.sh}} +verwendet werden. Nach der Ausführung des jeweiligen Skriptes kann mit dem zu +Beginn gezeigten Aufruf in der Kommandozeile respektive Terminal geprüft +werden, ob die Deinstallation erfolgreich war. Wird immer noch mindestens ein +lokaler Pfad ausgegeben, sollte \TUDScript manuelle deinstalliert werden, was +nachfolgend beschrieben wird. + +Nur die Deinstallation aller lokalen Nutzerinstallationen von \TUDScript +ermöglicht die Verwendung der jeweils aktuellen CTAN"=Version. Hierfür ist~-- +unter der Annahme, dass das automatisierte Deinstallieren mithilfe der zuvor +genannten Skripte zur Deinstallation nicht erfolgreich war~-- etwas Handarbeit +durch den Anwender vonnöten. Der in der Kommandozeile respektive im Terminal mit +% +\begin{quoting} +\Path{kpsewhich --all tudscrbase.sty} +\end{quoting} +% +gefundene~-- zum Ordner der Distribution \emph{zusätzliche}~-- Pfad hat die +folgende Struktur: +% +\begin{quoting} +\Path{\PName{Installationspfad}/tex/latex/tudscr/tudscrbase.sty} +\end{quoting} +% +Um die Nutzerinstallation vollständig zu entfernen, muss als erstes zu +\Path{\PName{Installationspfad}} navigiert werden. Anschließend ist in diesem +Pfad Folgendes durchzuführen: +% +\settowidth\tempdim{\Path{tex/latex/tudscr/}}% +\begin{description}[labelwidth=\tempdim,labelsep=1em] +\item[\Path{tex/latex/tudscr/}]\File*{.cls}- und \File*{.sty}"~Dateien löschen +\item[\Path{tex/latex/tudscr/}]Ordner \Path{logo} vollständig löschen +\item[\Path{doc/latex/}] Ordner \Path{tudscr} vollständig löschen +\item[\Path{source/latex/}] Ordner \Path{tudscr} vollständig löschen +\end{description} +% +Zum Abschluss ist in der Kommandozeile beziehungsweise im Terminal der Befehl +\Path{texhash} aufzurufen. Damit wurde die lokale Nutzerversion entfernt und es +wird von nun an die Version von \TUDScript genutzt, welche durch die verwendete +Distribution bereitgestellt wird. + + + +\section{Lokale Installation des \TUDScript-Bundles} +\tudhyperdef*{sec:local:install}% +\index{Installation!Nutzerinstallation|(}% +% +Eine lokale Nutzerinstallation von \TUDScript sollte ausschließlich durch +Anwender ausgeführt werden, die genau wissen, aus welchen Gründen dies +geschehen soll. Hierfür werden die passenden Skripte angeboten. Für eine lokale +Nutzerinstallation des \TUDScript-Bundles unter Windows für die Distributionen +\Distribution{\hologo{TeX}~Live} oder \Distribution{\hologo{MiKTeX}} werden die +Dateien aus +\hrfn{\Download{\vTUDScript/TUD-Script\_\vTUDScript\_Windows.zip}}% +{\File*{TUD-Script\_\vTUDScript\_Windows.zip}} +benötigt. Für unixoide Betriebssysteme sind es die Dateien aus +\hrfn{\Download{\vTUDScript/TUD-Script\_\vTUDScript\_Unix.zip}}% +{\File*{TUD-Script\_\vTUDScript\_Unix.zip}}. + +Beim Ausführen des spezifischen Installationsskripts~-- für Windows +\File{tudscr\_\vTUDScript\_install.bat} respektive für unixoide Betriebssysteme +\File{tudscr\_\vTUDScript\_install.sh}~-- werden alle Dateien in das lokale +Nutzerverzeichnis der jeweiligen Distribution installiert, falls kein anderes +Verzeichnis explizit angegeben wird. +\Attention{% + In jedem Fall sollte vor der Ausführung des Installationsskripts ein Update + der \hologo{LaTeX}"=Distribution durchgeführt werden. Dies gilt insbesondere + bei der Nutzung von \Distribution{\hologo{MiKTeX}}. Andernfalls wird es unter + Umständen im Installationsprozess oder bei der Nutzung von \TUDScript zu + Problemen kommen. +} + +Alternativ zur Nutzung der bereitgestellte Skripte kann auch einfach der Inhalt +des Archivs +\hrfn{\Download{\vTUDScript/tudscr\_\vTUDScript.zip}}% +{\File{tudscr\_\vTUDScript.zip}} +in das lokale \Path{texmf}"=Nutzerverzeichnis kopiert und abschließend in der +Kommandozeile respektive im Terminal \Path{texhash} aufgerufen werden. + + + +\section{Lokales Update des \TUDScript-Bundles} +\tudhyperdef*{sec:local:update}% +\index{Update|!}% +% +\subsection{Update des \TUDScript-Bundles ab Version~v2.02} +Ein Update und die lokale Installation unterscheiden sich ab der Version~v2.06 +nicht voneinander, das Vorgehen ist absolut identisch zu der Beschreibung in +\autoref{sec:local:install}. +\Attention{% + Die lokale Aktualisierung auf Version~\vTUDScript{} funktioniert allerdings + nur, wenn \TUDScript bereits mindestens in der Version~v2.02 entweder als + lokale Nutzerversion oder über die Distribution installiert ist.% +} + +\subsection{Update des \TUDScript-Bundles ab Version~v2.00} +% +Mit der Version~v2.02 gab es einige tiefgreifende Änderungen. Deshalb wird für +vorausgehende Versionen~-- sprich v2.00 und v2.01~-- kein dediziertes Update +angeboten. Die Aktualisierung kann durch den Anwender entweder~-- wie in +\autoref{sec:local:install} erläutert~-- mit einer skriptbasierten oder mit +einer manuellen Neuinstallation erfolgen. +\index{Installation!Nutzerinstallation|)}% + + +\subsection{Update des \TUDScript-Bundles von Version v1.0} +% +Ist \TUDScript in der veralteten \emph{Version~v1.0} installiert, so wird vor +der Aktualisierung dringlichst zu einem vollständigen Entfernen dieser Version +geraten. Andernfalls werden nach einem Update bei der Verwendung massive +Probleme und Fehler auftreten. Zur Deinstallation werden die Skripte +\hrfn{\Download{uninstall/tudscr_uninstall.bat}}{\File{tudscr\_uninstall.bat}} +respektive +\hrfn{\Download{uninstall/tudscr_uninstall.sh}}{\File{tudscr\_uninstall.sh}} +bereitgestellt. Die aktuelle Version~\vTUDScript{} kann nach der vollständigen +Deinstallation aller veralteten Versionen wie in \autoref{sec:install:fonts} +beschrieben installiert werden. + +Im Vergleich zur \emph{Version~v1.0} hat sich an der Benutzerschnittstelle +nicht sehr viel verändert, ein Umstieg auf die Version~\vTUDScript{} dürfte +keine Schwierigkeiten bereiten. Treten danach dennoch Probleme auf, sollte der +Anwender als erstes die Beschreibung des Paketes \Package{tudscrcomp}'full' +lesen, welches eine Schnittstelle zur Nutzung alter und ursprünglich nicht mehr +vorgesehener Befehle sowie Optionen bereitstellt. Allerdings werden einige von +diesen auch durch das Paket \Package{tudscrcomp} nicht mehr bereitgestellt. +Aufgeführt sind diese in \autoref{sec:obsolete}. Sollten trotz aller Hinweise +dennoch Fehler oder Probleme beim Umstieg auf die neue \TUDScript-Version +auftreten, ist eine Meldung im \Forum oder im \GitHubRepo[issues] die beste +Möglichkeit, um Hilfe zu erhalten. + + + +\section{Installation veralteter Schriftfamilien} +\tudhyperdef*{sec:install:fonts}% +\index{Installation!Schriftinstallation|!(}% + +Bis Anfang des Jahres~2018 nutzte das \TUDCD als Hausschrift nicht \OpenSans +sondern die Schriftfamilien \Univers und \DIN. Diese lassen sich auch weiterhin +mit \TUDScript verwenden, um alte Dokumente kompilieren zu können. Hierfür sei +auf die Optionen \Option*{tudscrverv=2.05} und \Option*{cdoldfont} hingewiesen. +Da es sich bei diesen um lizenzierte Schriften handelt, müssen diese beim +Universitätsmarketing auf \hrfn{https://tu-dresden.de/cd/}{Anfrage} mit dem +Hinweis auf die Verwendung von \hologo{LaTeX} bestellt und nach Erhalt der +notwendigen Archive \File{Univers\_PS.zip} und \File{DIN\_Bd\_PS.zip} für +Windows (\autoref{sec:install:win}) beziehungsweise unixoide Betriebssysteme +(\autoref{sec:install:unix}) installiert werden. Ohne einen triftigen Grund +sollte jedoch in jedem Fall die \OpenSans genutzt werden, insbesondere für neu +erstellte Dokumente. + +Das \TUDScript-Bundle unterstützt besagte Schriften auch im OpenType-Format, +welche ebenfalls über das Universitätsmarketing auf +\href{https://tu-dresden.de/cd/}{Anfrage} bestellt werden müssen. Die in den +Archiven \File{Univers\_8\_TTF\/.zip} und \File{DIN\_TTF\/.zip} enthaltenen +Schriften lassen sich~-- sobald diese für das Betriebssystem installiert +wurden~-- mit dem Paket \Package{fontspec} verwenden. In \fullref{sec:fonts} +sind weitere Hinweise zur Verwendung des Paketes \Package{fontspec} zu finden. + +Im \GitHubRepo* sind die zur Schriftinstallation benötigten +\hrfn{https://github.com/tud-cd/tudscr/releases/tag/fonts}{Skripte} +ebenso zu finden wie die +\hrfn{https://github.com/tud-cd/tudscr/releases/tag/oldfonts}{Skripte} +für die Klassen von Klaus Bergmann. Die unterschiedlichen Installationsskripte +begründen sich insbesondere dadurch, dass bei der Installation für das +\TUDScript-Bundle sowohl die Metriken als auch das Kerning der Schriften für +Fließtext und den Mathematikmodus angepasst werden. Sollen die so verbesserten +Schriften für die Klassen von Klaus Bergmann verwendet werden, kann dies mit +dem Paket \Package{fix-tudscrfonts} erfolgen, was allerdings das Ergebnis der +erzeugten Ausgabe beeinflusst, weshalb die Installationsskripte in +unterschiedlichen Varianten weiterhin vorgehalten werden. + +\minisec{Erforderliche Pakete bei der Schriftinstallation} +Für die Installation der Schriften sind die Pakete \Package*{fontinst}, +\Package*{cmbright}, \Package*{hfbright}, \Package*{cm-super} und +\Package*{iwona} von \emph{essentieller} Bedeutung und daher \emph{zwingend} +notwendig. Das Vorhandensein dieser wird durch die jeweiligen +Schriftinstallationsskripte geprüft und die Installation beim Fehlen eines oder +mehrerer Pakete mit einer entsprechenden Warnung abgebrochen. + +\minisec{Anmerkung zu \hologo{MiKTeX}} +Vor der Installation der Schriften für \TUDScript sollte unbedingt ein Update +von \Distribution{\hologo{MiKTeX}}|?| durchgeführt werden. Außerdem ist es sehr +ratsam, die Installation von \Distribution{\hologo{MiKTeX}}|?| in der +Mehrbenutzervariante mit Administratorrechten durchzuführen, da die +Einzelbenutzervariante relativ unregelmäßig und nicht immer nachvollziehbar zu +Problemen führen kann. + +Möglicherweise sind einige der für den Schriftinstallationsprozess notwendigen +Pakete noch nicht installiert. Ist die automatische Nachinstallation fehlender +Pakete aktiviert, so reicht es im Normalfall das Installationsskript zu +starten. Andernfalls müssen diese Pakete manuell durch den Benutzer über den +\Distribution{\hologo{MiKTeX}}"=Paketmanager hinzugefügt werden. + +Das Installationsskript scheitert außerdem bei einigen Anwendern~-- aufgrund +eingeschränkter Nutzerzugriffsrechte~-- beim Eintragen der Schriften in die +Map"~Datei. Dies muss gegebenenfalls durch den Anwender über die Kommandozeile +% +\begin{quoting} +\Path{initexmf -{}-edit-config-file updmap} +\end{quoting} +% +erfolgen. In der sich öffnenden Datei sollte sich der Eintrag +\Path{Map~tudscr.map} befinden. Ist dies nicht der Fall, muss diese Zeile +manuell eingetragen und die Datei anschließend gespeichert werden. Danach muss +der Nutzer in der Kommandozeile noch folgenden Aufruf ausführen: +% +\begin{quoting} + \Path{initexmf~-{}-mkmaps} +\end{quoting} + + +\minisec{Anmerkung zu \hologo{TeX}~Live und Mac\hologo{TeX}} +Sollte keine Vollinstallation von \Distribution{\hologo{TeX}~Live} durchgeführt +worden sein, müssen die erforderlichen Pakete zur Schriftinstallation manuell +über den \Distribution{\hologo{TeX}~Live}"=Paketmanager hinzugefügt werden. + +Sind nach einem fehlerfreien Durchlauf des Installationsskriptes die Schriften +dennoch nicht verfügbar, so muss die Synchronisierung aller Schriftdateien +angestoßen werden. Daran anschließend müssen die Map"~Datei und die +dazugehörigen Schriftdateien registriert werden. Die hierfür notwendigen +Aufrufe lauten: +% +\begin{quoting} +\Path{updmap-sys -{}-syncwithtrees}\newline +\Path{updmap-sys -{}-enable Map=tudscr.map}\newline +\Path{updmap-sys -{}-force} +\end{quoting} +% +Sind die Schriften danach immer noch nicht verfügbar, so wurden bestimmt schon +weitere Schriften auf dem System \emph{lokal} installiert. In diesem Fall +sollte der Vorgang nochmals für eine lokale Schriftinstallation mit +% +\begin{quoting} +\Path{updmap -{}-syncwithtrees}\newline +\Path{updmap -{}-enable Map=tudscr.map}\newline +\Path{updmap -{}-force} +\end{quoting} +% +ausgeführt werden. Dieses Vorgehen macht allerdings den Befehl +\Path{updmap-sys} von nun an wirkungslos. Nach einer systemweiten Installation +neuer Schriften~-- beispielsweise bei der Aktualisierung der Distribution~-- +müssen diese über den manuellen Aufruf von \Path{updmap} zukünftig durch den +Anwender lokal bei \Distribution{\hologo{TeX}~Live}|?| respektive +\Distribution{Mac\hologo{TeX}}|?| registriert werden. + +\Attention{% + Für die Schriftinstallation werden die Skripte \Path{tftopl}, \Path{pltotf} + und \Path{vptovf} benötigt, welche bei \Distribution{\hologo{TeX}~Live}|?| + beziehungsweise \Distribution{Mac\hologo{TeX}}|?| über das Paket + \Package*{fontware} aus \Package*{collection-fontutils}<> + bereitgestellt werden und zwingend installiert sein müssen. +} + + +\subsection{Installation der Type1-Schriften unter Windows} +\tudhyperdef*{sec:install:win}% +% +Zur Installation der Schriften des \CDs für das \TUDScript-Bundle ist das Archiv +\hrfn{\Download{fonts/TUD-Script_fonts_Windows.zip}}% +{\File*{TUD-Script\_fonts\_Windows.zip}} +vorgesehen. Dieses ist sowohl für \Distribution{\hologo{TeX}~Live}|?| als auch +\Distribution{\hologo{MiKTeX}}|?| nutzbar und enthält~-- bis auf die jeweiligen +Schriftarchive selbst~-- alle benötigten Dateien. Diese sollten nach dem +Entpacken des Archivs in das gleiche Verzeichnis kopiert werden. Vor der +Verwendung des Skripts \File{tudscr\_fonts\_install.bat} sollte sichergestellt +werden, dass sich \emph{alle} der folgenden Dateien im selben Verzeichnis +befinden: +% +\settowidth\tempdim{\File{tudscr\_fonts\_install.zip}~}% +\begin{description}[labelwidth=\tempdim,labelsep=1em] + \item[\File{tudscr\_fonts\_install.bat}]Installationsskript + \item[\File{Univers\_PS.zip}]Archiv mit Schriftdateien für \Univers + \item[\File{DIN\_Bd\_PS.zip}]Archiv mit Schriftdateien für \DIN + \item[\File{tudscr\_fonts\_install.zip}]Archiv mit Metriken für die + Schriftinstallation via \Package{fontinst} +\end{description} +% +Beim Ausführen des Installationsskripts werden alle Schriften standardmäßig in +ein lokales Nutzerverzeichnis installiert. Wird das Skript über das Kontextmenü +mit Administratorrechten ausgeführt, erfolgt die Installation in einem Pfad, +der \emph{für alle Nutzer} gültig und lesbar ist. + + + +\subsection{Installation der Type1-Schriften unter Linux und OS~X} +\tudhyperdef*{sec:install:unix}% +% +Zur Installation der Schriften des \CDs für das \TUDScript-Bundle ist das Archiv +\hrfn{\Download{fonts/TUD-Script_fonts_Unix.zip}}% +{\File*{TUD-Script\_fonts\_Unix.zip}} + vorgesehen. Dieses ist sowohl für \Distribution{\hologo{TeX}~Live}|?| als auch +\Distribution{Mac\hologo{TeX}}|?| nutzbar und enthält~-- bis auf die jeweiligen +Schriftdateien selbst~-- alle benötigten Dateien. Diese sollten nach dem +Entpacken des Archivs in das gleiche Verzeichnis kopiert werden. Vor der +Verwendung des Skripts \File{tudscr\_fonts\_install.sh} sollte sichergestellt +werden, dass sich \emph{alle} der folgenden Dateien im selben Verzeichnis +befinden: +% +\begin{description}[labelwidth=\tempdim,labelsep=1em] + \item[\File{tudscr\_fonts\_install.sh}]Installationsskript + (Terminal: \Path{bash tudscr\_fonts\_install.sh}) + \item[\File{Univers\_PS.zip}]Archiv mit Schriftdateien für \Univers + \item[\File{DIN\_Bd\_PS.zip}]Archiv mit Schriftdateien für \DIN + \item[\File{tudscr\_fonts\_install.zip}]Archiv mit Metriken für die + Schriftinstallation via \Package{fontinst} +\end{description} +% +\minisec{Anmerkung zu Linux und OS~X} +\Attention{% + Nach dem Entpacken eines Release-Archivs im passenden Pfad\footnote{% + beispielsweise \Path{cd~"\$HOME/Downloads/\PName{Unterordner}"}% + } \textbf{muss das Skript zwingend} mit \Path{bash~\PName{Skript}.sh} im + Terminal in diesem Pfad mit den benötigten Dateien aufgerufen werden. +} +Dabei werden alle Schriften standardmäßig in das lokale Nutzerverzeichnis +(\Path{\$TEXMFHOME}) installiert. Wird das Skript mit \Path{sudo} verwendet, +erfolgt die Installation \emph{für alle Nutzer} in den lokalen Systempfad +(\Path{\$TEXMFLOCAL}). + +Es ist unbedingt darauf zu Achten, das beim Ausführen des Skriptes das Terminal +im richtigen Verzeichnis aktiv ist. Bei den meisten unixoiden Betriebssystemen +ist es problemlos möglich, das Terminal aus der Benutzeroberfläche heraus über +das Kontextmenü im gewünschten Pfad zu öffnen. Geht dies nicht, so muss nach +dem Öffnen des Terminals mit dem Befehl \Path{cd} erst zum entsprechenden +Pfad~-- exemplarisch \Path{cd~"\$HOME/Downloads/\PName{Unterordner}"}~-- +navigiert werden. Ein beispielhafter Aufruf im Terminal könnte also lauten: +% +\begin{quoting} +\Path{% + cd~"\$HOME/Downloads/TUD-Script\_fonts\_Unix"{}\,\POParameter{ENTER} +}\newline +\Path{bash tudscr\_fonts\_install.sh\,\POParameter{ENTER}} +\end{quoting} + + +\subsection{Installationshinweise für portable Installationen} +\tudhyperdef*{sec:install:portable}% +% +Prinzipiell ist die Installation der Type1-Schriften des \CDs bei der Nutzung +von \Distribution{\hologo{TeX}~Live~Portable}|?| respektive +\Distribution{\hologo{MiKTeX}~Portable}|?| äquivalent zur nicht"~portablen +Variante, welche in \autoref{sec:install:fonts} beschrieben wird. Alle dort +gegebenen Hinweise sollten sorgfältig berücksichtigt werden. Der durch das +jeweilige Installationsskript voreingestellte Installationspfad sollte für +gewöhnlich nicht geändert werden. Geschieht dies dennoch, so sollte dieser sich +logischerweise auf dem externen Speichermedium +\Path{\PName{Laufwerksbuchstabe}:\textbackslash} befinden. + +\minisec{\hologo{TeX}~Live~Portable} +Das folgende Vorgehen wurde mit Windows getestet. Empfehlungen für die portable +Installation für unixoide Betriebssysteme können an \mailto{\tudscrmail} +gesendet werden. +\begin{enumerate} +\item Installation von \Distribution{\hologo{TeX}~Live~Portable} in + \Path{\PName{Laufwerksbuchstabe}:\textbackslash LaTeX\textbackslash texlive} +\item Die Datei \File*{tl-tray-menu.exe} im Installationspfad öffnen +\item Das Kontextmenü von \Distribution{\hologo{TeX}~Live~Portable} mit einem + Rechtsklick auf das entsprechende Symbol im Infobereich der Taskleiste + öffnen und entweder über die grafische Oberfläche (\emph{Package Manager}) + oder die Kommandozeile (\emph{Command Prompt}) ein Update durchführen +\item Über das Kontextmenü die Kommandozeile ausführen und in dieser das Skript + für die Installation der Schriften \File{tudscr\_fonts\_install.bat} starten. + Dabei gegebenenfalls zuvor in den Pfad des Skriptes wechseln~-- exemplarisch: + \begin{quoting}[leftmargin=1.5em,rightmargin=0pt] + \Path{% + cd~/d~\%USERPROFILE\%\textbackslash{}Downloads% + \textbackslash{}TUD-Script\_fonts\_Windows\,\POParameter{ENTER} + }\newline% + \Path{tudscr\_fonts\_install.bat}\,\POParameter{ENTER} + \end{quoting} + Unter Umständen meldet das Skript fehlende Pakete. Dieses müssen über durch + den Anwender über den \emph{\hologo{TeX}~Live~Manager} installiert werden. + \Attention{% + Ein Ausführen ohne die über \Distribution{\hologo{TeX}~Live~Portable} + geöffnete Kommandozeile führt zu Fehlern. + }% +\end{enumerate} + +\minisec{\hologo{MiKTeX}~Portable} +\begin{enumerate} +\item Installation von \Distribution{\hologo{MiKTeX}~Portable} in + \Path{\PName{Laufwerksbuchstabe}:\textbackslash LaTeX\textbackslash MiKTeX}% + \footnote{Der Pfad darf \emph{nicht} auf der obersten Verzeichnisebene + \Path{\PName{Laufwerksbuchstabe}:\textbackslash} liegen. + } +\item Die Datei \File{miktex-portable.cmd} im Installationspfad öffnen +\item Das Kontextmenü von \Distribution{\hologo{MiKTeX}~Portable} mit einem + Rechtsklick auf das entsprechende Symbol im Infobereich der Taskleiste öffnen + und ein Update durchführen +\item Über das Kontextmenü die Kommandozeile ausführen und in dieser das Skript + für die Installation der Schriften \File{tudscr\_fonts\_install.bat} starten. + Dabei gegebenenfalls zuvor in den Pfad des Skriptes wechseln~-- exemplarisch: + \begin{quoting}[leftmargin=1.5em,rightmargin=0pt] + \Path{% + cd~/d~\%USERPROFILE\%\textbackslash{}Downloads% + \textbackslash{}TUD-Script\_fonts\_Windows\,\POParameter{ENTER} + }\newline + \Path{tudscr\_fonts\_install.bat}\,\POParameter{ENTER} + \end{quoting} + Bei diesem Schritt werden die Pakete \Package{fontinst}, \Package{cmbright} + und \Package{iwona} unter Umständen nachinstalliert. + \Attention{% + Ein Ausführen ohne die über \Distribution{\hologo{MiKTeX}~Portable} + geöffnete Kommandozeile führt zu Fehlern. + }% +\item Bei der erstmaligen Verwendung von \TUDScript werden alle weiteren + benötigten Pakete von \Distribution{\hologo{MiKTeX}~Portable} + nachinstalliert, falls die automatische Nachinstallation aktiviert ist und + diese nicht schon vorhanden sind. Unter anderem betrifft dies die Pakete + \Package*{tudscr}, \Package{koma-script} sowie \Package{etoolbox}, + \Package{xpatch} \Package{letltxmacro}, \Package{environ}, + \Package{trimspaces}, \Package{xcolor} und \Package{mptopdf}<>. +\end{enumerate} + + +\subsection{Probleme bei der Installation der Type1-Schriften} +% +Wird Windows verwendet, kann es unter Umständen vorkommen, dass notwendige +Befehlsaufrufe für das Installationsskript nicht ausgeführt werden können. In +diesem Fall ist der Pfad zu den benötigten Dateien, welche normalerweise unter +\Path{\%SystemRoot\%\textbackslash System32} zu finden sind, nicht in der +Umgebungsvariable \Path{PATH} enthalten. Einen Hinweis zur Problemlösung ist +\hrfn{http://latex.wcms-file3.tu-dresden.de/phpBB3/viewtopic.php?t=359}{% + in diesem Beitrag im Forum% +} +zu finden. + +Treten bei der Installation wider Erwarten Probleme auf, so ist zur Lösung eine +Logdatei zu erstellen. Hierfür sollte unter \textbf{Windows} das Skript, +welches Probleme verursacht, \emph{nicht} aus der Kommandozeile oder dem +Explorer heraus sondern über \emph{Windows PowerShell} ausgeführt werden. +Hierfür ist die Eingabe von \enquote{PowerShell} im Startmenü von Windows mit +einem nachfolgenden Öffnen mittels \POParameter{ENTER}"~Taste ausreichend. +Danach muss mit \Path{cd} zum Ordner des Skriptes navigiert und dieses mit +\Path{.\textbackslash\PName{Skript}.bat|Tee-Object -file \PName{Skript}.log} +ausgeführt werden. Ein Aufruf aus der PowerShell"~Konsole könnte lauten: +% +\begin{quoting}[rightmargin=0pt] + \Path{% + cd~"\$env:USERPROFILE\textbackslash{}Downloads\textbackslash{}% + TUD-Script\_fonts\_Windows"{}\,\POParameter{ENTER}% + }\newline% + \Path{% + .\textbackslash{}tudscr\_fonts\_install.bat% + |Tee-Object -file fonts\_install.log\,\POParameter{ENTER}% + }% +\end{quoting} +% +Für \textbf{unixartige Systeme} ist der Aufruf +\Path{bash \PName{Skript}.sh > \PName{Skript}.log} aus dem Terminal heraus zu +verwenden. Ein exemplarische Verwendung könnte lauten: +% +\begin{quoting} + \Path{% + cd~"\$HOME/Downloads/TUD-Script\_fonts\_Unix"{}\,\POParameter{ENTER}% + }\newline + \Path{% + bash tudscr\_fonts\_install.sh > fonts\_install.log\,\POParameter{ENTER}% + }% +\end{quoting} +% +Die so erstellte Logdatei kann \emph{mit einer kurzen Fehlerbeschreibung} +entweder im \Forum* gepostet oder direkt per E"~Mail an \mailto{\tudscrmail} +gesendet werden. +\index{Installation!Schriftinstallation|!)}% diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-introduction.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-introduction.tex new file mode 100644 index 0000000000..ae2f2a0ff0 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-introduction.tex @@ -0,0 +1,166 @@ +\chapter{Einleitung} +% +Zur Verwendung der \TUDScript-Klassen in der Version~\vTUDScript{} werden +sowohl die \KOMAScript"=Klassen~\vKOMAScript{} oder später als auch die +Hausschrift des \CDs \OpenSans aus dem Paket \Package{opensans} zwingend +benötigt. Außerdem müssen durch die genutzte \hologo{LaTeX}"=Distribution +weitere Pakete bereitgestellt werden, die unter \autoref{sec:packages:needed} +aufgeführt sind. Beim Einsatz einer der Distributionen +\index{Distribution}% +\Distribution{\hologo{TeX}~Live}|?|, +\Distribution{Mac\hologo{TeX}}|?| und +\Distribution{\hologo{MiKTeX}}|?| +in der jeweils aktuellen Versionen sollte dies kein Problem darstellen. Wird +jedoch eine Distribution verwendet, die \TUDScript in der Version~\vTUDScript{} +nicht zur Verfügung stellt und eine Aktualisierung dieser nicht möglich sein, +so sollte \autoref{sec:install:ext} konsultiert werden. + +Das \TUDScript"=Bundle ist hauptsächlich für das Erstellen wissenschaftlicher +Texte sowie Arbeiten gedacht und soll \emph{momentan} die ursprünglichen +Klassen\footnote{% + \Class{tudbook}, \Class{tudbeamer}, \Class{tudletter}, \Class{tudfax}, + \Class{tudhaus}, \Class{tudform}% +} aus dem Vorlagenpaket von Klaus Bergmann nicht ersetzen sondern vielmehr +ergänzen. +% +Eine Umsetzung des \CDs für die \Class{beamer}"=Klasse sowie für Briefe und +Geschäftsschreiben auf Basis des \KOMAScript"=Brief"=Klasse \Class{scrlttr2} +ist bis jetzt leider noch nicht mit \TUDScript realisiert worden, soll jedoch +langfristig erfolgen. Im Bundle \Class{tudmathposter} existieren für die +\Class{beamer}"=Klasse allerdings bereits mehrere Stile. Dieses ist im +\hrfn{https://github.com/tud-cd/tud-cd/}{% + GitHub-Repository~\Distribution*{tud-cd}% +} zu finden. Für das Erstellen von Briefen mit den \TUDScript"=Klassen ließe +sich das Paket \Package{scrletter} nutzen. + + + +\section{Bestandteile und Nutzung des \TUDScript-Bundles} +% +\ChangedAt{% + v2.01:\TUDScript-Bundle auf CTAN veröffentlicht;% + v2.02:Installationsroutine der Type1-Schriften angepasst;% + v2.04:Installationsskripte verbessert und robuster gestaltet sowie für die + beiden portablen Distributionen \Distribution*{\hologo{TeX}~Live~Portable} + und \Distribution*{\hologo{MiKTeX}~Portable} erweitert;% + v2.06:Schriften im Paket \Package{opensans}, manuelle Installation unnötig;% +} +% +Das \TUDScript-Bundle wird über das \CTAN bereitgestellt und kann durch +\hologo{LaTeX}"=Distributionen wie \Distribution{\hologo{TeX}~Live}|?|, +\Distribution{Mac\hologo{TeX}}|?| oder auch \Distribution{\hologo{MiKTeX}}|?| +genutzt werden. Es stellt zum einen die drei Hauptklassen \Class{tudscrbook}, +\Class{tudscrreprt} sowie \Class{tudscrartcl} und zum anderen die Klasse +\Class{tudscrposter} zur Verfügung, welche in \autoref{sec:mainclasses} +beziehungsweise \autoref{sec:poster} vorgestellt werden. Das Paket +\Package{tudscrsupervisor}~-- dokumentiert in \autoref{sec:supervisor}~-- kann +zusammen mit den \TUDScript"=Klassen genutzt werden, um Aufgabenstellungen, +Aushänge oder Gutachten für studentische Arbeiten zu erstellen. Weiterhin +existieren auch eigenständige Pakete, welche in \autoref{sec:bundle} +beschrieben sind. Für die Verwendung des \TUDScript-Bundles ist~-- neben +\KOMAScript{} mindestens in der Version~\vKOMAScript{} sowie den in +\autoref{sec:packages:needed} aufgeführten \hologo{LaTeX}"=Paketen~-- seit der +Version~v2.06 lediglich die Schrift \OpenSans vonnöten, welche durch das Paket +\Package{opensans} zur Verfügung gestellt wird. Eine lokale Nutzerinstallation +der Schriften~-- wie in vorherigen Versionen~-- ist nicht notwendig. Lediglich +für den Fall, dass gezielt die alten Schriften \Univers und \DIN eingesetzt +werden sollen, müssen diese auch installiert sein. Weitere Hinweise dazu sind +in \autoref{sec:install:fonts} zu finden. Um diese zu aktivieren, sei auf +\Option{tudscrver=2.05} und \Option{cdoldfont} verwiesen. + +\minisec{Anmerkung zu Windows} +Für Windows können zwei unterschiedliche \hologo{LaTeX}"=Distributionen genutzt +werden. Die Vorteile von \Distribution{\hologo{TeX}~Live}|?| im Vergleich zu +\Distribution{\hologo{MiKTeX}}|?| liegen zum einen in der Wartung durch mehrere +Autoren sowie der früheren Verfügbarkeit aller Updates über CTAN. Zum anderen +werden zusätzlich zu \hologo{LaTeXe} ein \emph{Perl"~Interpreter} sowie +\emph{Ghostscript} mitgeliefert, wodurch die Ad"=hoc"=Verwendung einiger +Pakete wie beispielsweise \Package{glossaries} vereinfacht beziehungsweise +verbessert wird. Für \Distribution{\hologo{MiKTeX}}|?| müssen diese Programme +gegebenenfalls manuell installiert werden. Demgegenüber entfällt für +\Distribution{\hologo{MiKTeX}}|?| die alljährliche Neuinstallation, welche bei +\Distribution{\hologo{TeX}~Live}|?| notwendig ist. + +\minisec{Anmerkung zu Linux und OS~X} +Die Installation einer der \hologo{LaTeX}"=Distributionen +\Distribution{\hologo{TeX}~Live}|?| oder \Distribution{Mac\hologo{TeX}}|?| +sollte direkt über die angebotenen Pakete +(\url{https://tug.org/texlive/} oder \url{https://tug.org/mactex/}) und nicht +über \Path{apt-get install} erfolgen. Damit wird sichergestellt, dass die +aktuelle Variante der jeweiligen Distribution genutzt wird. + + + +\section{Zur Verwendung dieses Handbuchs} +Sämtliche neu definierten Optionen, Umgebungen und Befehle der Klassen und +Pakete des \TUDScript-Bundles werden im Handbuch aufgeführt und beschrieben. Am +Ende des Dokumentes befinden sich mehrere Indexe, die das Nachschlagen oder +Auffinden von bisher unbekannten Befehlen oder Optionen erleichtern sollen. + +Die im Folgenden beschriebenen Optionen können~-- wie ein Großteil aller +Einstellungen für \KOMAScript~-- in der Syntax des \Package{keyval}"=Paketes +als Schlüssel"=Wert"=Paare bei der Wahl der Dokumentklasse angegeben werden: +\Macro*{documentclass}[% + \POParameter{\PName{Schlüssel}\PValue{=}\PName{Wert}}\Parameter{Klasse}% +] + +Des Weiteren eröffnen die \KOMAScript"=Klassen die Möglichkeit der späten +Optionenwahl. Damit können Optionen nicht nur direkt beim Laden als sogenannte +Klassenoptionen angegeben werden, sondern lassen sich auch noch innerhalb des +Dokumentes nach dem Laden der Klasse ändern. Die \KOMAScript"=Klassen sehen +hierfür zwei Befehle vor. Mit +\Macro{KOMAoptions}[\Parameter{Optionenliste}](\Package{koma-script})'none' +lassen sich beliebig viele Schlüsseln jeweils genau einen Wert zuweisen, +\Macro{KOMAoption}[% + \Parameter{Option}\Parameter{Werteliste}% +](\Package{koma-script})'none' +erlaubt das gleichzeitige Setzen mehrere Werte für genau einen Schlüssel. +Für die von \TUDScript \emph{zusätzlich} zur Verfügung gestellten Optionen +werden äquivalent dazu die Befehle \Macro{TUDoptions}[\Parameter{Optionenliste}] +und \Macro{TUDoption}[\Parameter{Option}\Parameter{Werteliste}] definiert. +Damit kann das Verhalten von Optionen im Dokument~-- innerhalb einer Gruppe +auch lokal~-- geändert werden. + +Die Voreinstellung jeder Option wird mit \enquote{Standardwert:\,\PName{Wert}} +bei deren Beschreibung angeführt. Einige dieser Voreinstellungen sind nicht +immer gleich sondern werden in Abhängigkeit der genutzten Benutzereinstellungen +und Optionen gesetzt. Diese bedingten Voreinstellungen werden durch +\enquote{% + Standardwert:\,\PName{Wert}% + \PValue{\,|\,}Bedingung:\,\PName{bedingter~Wert}% +} +angegeben. Wird ein Schlüssel durch den Benutzer \emph{ohne} eine Wertzuweisung +genutzt, so wird~-- falls vorhanden~-- ein vordefinierter Säumniswert gesetzt, +welcher in der Beschreibung aller Optionen durch die~\PValue{\emph{kursive}} +Schreibweise innerhalb der Werteliste gekennzeichnet ist. In den meisten Fällen +ist der Säumniswert eines Schlüssels \PValue{true}, er entspricht folglich der +Angabe \PName{Schlüssel}\PValue{=true}. Mit der expliziten Wertzuweisung eines +Schlüssels durch den Benutzer werden sowohl einfache als auch bedingte +Voreinstellungen immer überschrieben. Die neben den Optionen neu eingeführten +Befehle und Umgebungen der Klassen werden im gleichen Stil erläutert. + + + +\section{Schnelleinstieg} +Das Handbuch gliedert sich in drei Teile. In \autoref{part:main} ist die +Dokumentation von \TUDScript zu finden. Hier werden alle neuen Optionen, +Umgebungen und Befehle, die über die Funktionalität von \KOMAScript{} +hinausgehen, erläutert. \autoref{part:additional} enthält zum einen einfache +Minimalbeispiele, um den prinzipiellen Umgang und die Funktionalitäten von +\TUDScript zu demonstrieren. Zum anderen werden hier auch ausführliche und +dokumentierte Tutorials vor allem für \hologo{LaTeX}"=Neulinge angeboten. +Insbesondere das Tutorial \Tutorial{treatise} ist mehr als einen Blick wert, +wenn eine wissenschaftliche Arbeit mit \hologo{LaTeXe} verfasst werden soll. +Abschließend werden verschiedenste Pakete vorgestellt, die nicht speziell für +das \TUDScript-Bundle selber sondern auch für andere \hologo{LaTeXe}"=Klassen +verwendet werden können und demzufolge für jeden Anwender interessant sein +könnten. Außerdem werden hier einige Tipps \& Tricks beim Umgang mit +\hologo{LaTeX} beschrieben, um kleinere oder größere Probleme zu lösen. + +Die Klassen \Class{tudscrbook}, \Class{tudscrreprt} und \Class{tudscrartcl} +sind Wrapper"=Klassen der bekannten \KOMAScript-Klassen \Class{scrbook}, +\Class{scrreprt} sowie \Class{scrartcl} und können einfach anstelle deren +verwendet werden. Auf diesen basierende Dokumente können durch das Umstellen +der Dokumentklasse einfach in das \TUDCD überführt werden. Bei Fragestellungen +bezüglich Layout, Schriften oder ähnlichem ist in jedem Fall ein weiterer Blick +in das hier vorliegende Handbuch empfehlenswert. diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-mainclasses.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-mainclasses.tex new file mode 100644 index 0000000000..915ea48199 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-mainclasses.tex @@ -0,0 +1,3663 @@ +\setchapterpreamble{\tudhyperdef'{sec:mainclasses}} +\chapter[% + Die Hauptklassen \Class*{tudscrbook}, \Class*{tudscrreprt} und + \Class*{tudscrartcl}% +]{Die Hauptklassen} +\index{Hauptklassen|!}% +% +\ChangedAt*{% + v2.02:Umbenennung einiger Befehle für Kompatibilität mit anderen Paketen;% + v2.03:Anpassungen interner Befehle an \KOMAScript-Version~v3.15% +} +% +\begin{Declaration*}{\Class{tudscrbook}} +\begin{Declaration*}{\Class{tudscrreprt}} +\begin{Declaration*}{\Class{tudscrartcl}} +Es werden die drei neuen Hauptklassen +% +\begin{description} +\item \Class{tudscrbook} +\item \Class{tudscrreprt} +\item \Class{tudscrartcl} +\end{description} +% +eingeführt, welche auf den \KOMAScript-Klassen basieren und grundsätzlich alle +deren bereitgestellte Optionen~-- beispielsweise +\Option{parskip=\PName{Methode}}(\Package{koma-script})'none' für die +Absatzeinstellungen oder +\Option{BCOR=\PName{Längenwert}}(\Package{typearea})'none' zur Festlegung der +Bindekorrektur~-- sowie Umgebungen und Befehle unterstützen. Zusätzlich zu den +\KOMAScript"=Klassen werden weitere Pakete zwingend benötigt, welche unter +\autoref{sec:packages:needed} aufgeführt sind und durch \TUDScript geladen +werden. + +Es sei hier abermals auf die \scrguide[Anwenderdokumentation von \KOMAScript] +hingewiesen, viele der folgend beschriebenen Befehle und Optionen beziehen sich +auf die darin vorgestellten Einstellungsmöglichkeiten. Die Anpassungen und +Erweiterungen der \KOMAScript"=Klassen an das \CD und die neu definierten +beziehungsweise geänderten oder erweiterten Befehle und Optionen werden im +Folgenden erläutert. + +\begin{Declaration}{\Macro{TUDoptions}[\Parameter{Optionenliste}]} +\begin{Declaration}{\Macro{TUDoption}[\Parameter{Option}\Parameter{Werteliste}]} +\printdeclarationlist% +\index{Optionen|!}% +% +Mit diesen beiden Befehlen besteht für die meisten der neuen Klassen- respektive +Paketoptionen die Möglichkeit, den Wert der Optionen noch nach dem Laden der +Klasse beziehungsweise des Paketes zu ändern. Sie sind das Äquivalent zu den +beiden \KOMAScript-Befehlen \Macro{KOMAoptions}(\Package{koma-script})'none' +beziehungsweise \Macro{KOMAoption}(\Package{koma-script})'none'. + +Man kann wahlweise mit der Anweisung \Macro{TUDoptions} die Werte mehrerer +Optionen gleichzeitig ändern, wobei diese durch Kommata zu trennen sind. Dabei +muss innerhalb der Optionenliste jede zu ändernde Option in der Form +\PName{Option}\PValue{=}\PName{Wert} angegeben werden. Die meisten der +\TUDScript-Optionen besitzen auch einen Standard- respektive Säumniswert. +Werden diese in der Form \PName{Option} ohne die Angabe eines Wertes genutzt, +so wird der jeweiligen Option einfach der vorgesehene Säumniswert zugewiesen. + +Einige Optionen können gleichzeitig mehrere, sich ergänzende Werte besitzen. +Für diese besteht die Möglichkeit, mit \Macro{TUDoption} einer einzelnen Option +nacheinander eine Reihe von Werten zuzuweisen, wobei diese in der Werteliste +durch Komma voneinander zu trennen sind. + +Diese beiden Befehlen erlauben es im Bedarfsfall das Verhalten von einer Option +oder mehreren Optionen im Dokument zu ändern. Werden diese Befehle in einer +Umgebung oder Gruppe genutzt, bleiben die vorgenommenen Einstellungen innerhalb +dieser lokal begrenzt. +\end{Declaration} +\end{Declaration} + + + +\section{Die Schriften des \CDs} +\tudhyperdef*{sec:fonts}% +\index{Schriftart|?(}% +% +\ChangedAt*{% + v2.00:Schriften~-- insbesondere für den mathematischen Satz~-- verbessert;% + v2.01:Unterschneidung (Kerning) der Ziffern verbessert;% +} +% +Das \TUDCD gibt die Verwendung der Schriftfamilie \OpenSans für den Fließtext +vor, was in der Standardkonfiguration durch \TUDScript auch so umgesetzt wird. +Da jedoch in längeren Texten die Verwendung einer Serifenschriften aus +typografischer Sicht zu empfehlen ist, gibt es allerdings die Möglichkeit, die +ursprünglich vorgesehenen Schriften des \CDs nicht zu laden und stattdessen die +\hologo{LaTeX}"=Standardschriften beziehungsweise ein anderes Schriftpaket zu +verwenden. Die Erläuterungen dazu sind in \autoref{sec:text} zu finden. Zur +Verwendung der Schriften mit \hologo{LaTeXe}"=Klassen, welche nicht zum +\TUDScript-Bundle gehören, lässt sich das Paket \Package{tudscrfonts} laden. + +\ChangedAt{% + v2.02;% + v2.04:Einfachere Verwendung des Paketes \Package{fontspec};% + v2.06:\OpenSans als neue Schrift im \TUDCD;% +} +Durch das \CD werden keine Schriften für den Mathematiksatz festgelegt. Das ist +insbesondere für sowohl mathematische Abhandlungen als auch ingenieur- und +naturwissenschaftliche Dokumente nicht tragbar. Im Mathematikmodus werden +deshalb die lateinischen Glyphen mithilfe des Paketes \Package{mathastext} +sowie die griechischen Lettern der \OpenSans genutzt. Zu Ergänzung kann für +zusätzliche mathematische Symbole das Paket \Package{mdsymbol} geladen werden. + +Diese Einstellung lässt sich deaktivieren, wodurch sich die Standardschriften +oder gegebenenfalls die eines zusätzlichen Paketes für den mathematischen Satz +nutzen lassen. Die dafür relevanten Einstellungen werden in \autoref{sec:math} +erläutert. Weiterhin sind ergänzende Hinweise zu einem typografisch sauberen +Mathematiksatz in \autoref{sec:tut} zu finden. + + +\minisec{Die Schriftformate Type1 und OpenType} +\index{Type1-Schriften}% +\index{OpenType-Schriften}% +\ChangedAt{v2.02:OpenType-Schriften mit Paket \Package{fontspec} verwendbar} +% +Das \TUDScript-Bundle unterstützt die Nutzung der Schriften des \CDs sowohl +im Type1- als auch im OpenType-Format. Beide Formate werden durch das Paket +\Package{opensans} bereitgestellt, wobei unabhängig vom genutzten +Textsatzsystem die Schriften im Type1-Format geladen werden. Die Verwendung der +Schriften im OpenType-Format ist auch beim Einsatz von \Engine{LuaLaTeX} oder +\Engine{XeLaTeX} nicht zwingend erforderlich. Dennoch ist dies problemlos +möglich, indem einfach das Paket \Package{fontspec} eingebunden wird. + +Ein Verzicht auf die Type1-Schriften ist dennoch nicht ohne Weiteres möglich. +Denn einerseits sind diese für die Kompilierung eines Dokumentes über den +klassischen Prozesspfad via \Path{latex\,>\,dvips\,>\,ps2pdf}~-- wie es +beispielsweise für die Erstellung von Grafiken mit \Package{pstricks} notwendig +ist~-- erforderlich. Andererseits werden für den Mathematiksatz die Glyphen den +Type1-Schriften entnommen. Eine Verwendung der OpenType-Schriften für den +Mathematiksatz ist leider nicht ohne einen erheblichen Aufwand möglich, weshalb +\TUDScript~-- insbesondere aufgrund des nicht vorhandenen Mehrwerts~-- darauf +verzichtet. +\index{Schriftart|?)}% + + + +\subsection{Schriften für den Textsatz} +\tudhyperdef*{sec:text}% +\index{Schriftstärke}% +% +\begin{Declaration}[% + v2.02!\Option{cdfont=head}; + v2.02!\Option{cdfont=heavyhead}; + v2.03!\Option{cdfont=din}; + v2.03!\Option{cdfont=nodin}; + v2.05!\Option{cdfont=normalbold}; + v2.05!\Option{cdfont=ultrabold}; + v2.06!\Option{cdfont=liningfigures}; + v2.06!\Option{cdfont=oldstylefigures}; + v2.06!\Option{cdfont=standardgreek}; +]{\Option{cdfont=\PSet}}[true,normalbold,liningfigures]% +\printdeclarationlist% +% +Mit der Option \Option{cdfont} können durch den Anwender alle zentralen +Schrifteinstellungen für die \TUDScript-Klassen vorgenommen werden. Dies +betrifft die Schriften sowohl für den Fließtext als auch den Mathematiksatz. +Dabei lassen sich insbesondere unterschiedliche Kombinationen von normaler und +fetter Schriftstärke für die \OpenSans einstellen. Zu Beginn des Dokumentes +sind diese maßgeblich für die Definition der Mathematikschriften. Die +Schriftstärke im charakteristischen Querbalken der Kopfzeile lässt sich mit +dieser Option ebenfalls einstellen. +% +\begin{values}{\Option{cdfont}} +\itemfalse + Es werden die \hologo{LaTeX}"=Standardschriften und nicht die Hausschrift + des \CDs verwendet. Der Anwender kann beliebige Schriftpakete nutzen.% + \footnote{% + Für die Verwendung der klassischen \hologo{LaTeX}"=Schriften, ist das Paket + \Package{lmodern} sehr empfehlenswert.% + } +\itemtrue*[light/lightfont/noheavyfont] + Es wird die Hausschrift \OpenSans im Stil des \CDs genutzt. Die Überschriften + der obersten Gliederungsebenen bis einschließlich \Macro*{subsubsection} + werden entweder in fetter oder extra"~fetter Schriftstärke gesetzt + (\seeref{\Option{headings=\PSet}'ppage'}), darunter liegende% + \footnote{% + \Macro{paragraph}(\Package{koma-script})'none' und + \Macro{subparagraph}(\Package{koma-script})'none'% + } verwenden immer den fetten Schriftschnitt. Dieser nutzt standardmäßig + \textcdrn{Open~Sans~Regular}, kann allerdings mit \Option{cdfont=heavybold} + stärker eingestellt werden. Im Fließtext kommt \textcdln{Open~Sans~Light} zum + Einsatz. +\item[heavy/heavyfont] + Diese Einstellung unterscheidet sich von \Option{cdfont=true} insoweit als + die Schriftstärke der Hausschrift erhöht wird. Der Fließtext des Dokumentes + wird in \textcdrn{Open~Sans~Regular} gesetzt. Der fette Schriftschnitt ist im + Normalfall auf \textcdsn{Open~Sans~Semi"~Bold} festgelegt. +\end{values} +% +Die Stärke der fetten Schriften lässt sich mit folgenden Einstellungen anpassen. +% +\begin{values}{\Option{cdfont}} +\item[normalbold] + \ChangedAt{v2.05} + Für die fette Schriftstärke wird \textcdrn{Open~Sans~Regular} respektive bei + stärkerer Grundschrift (\Option{cdfont=heavy}) \textcdsn{Open~Sans~Semi"~Bold} + verwendet. Dies ist die Voreinstellung. +\item[heavybold/ultrabold] + \ChangedAt{v2.05} + Die fetten Schriften werden stärker hervorgehoben. Es kommt + \textcdsn{Open~Sans~Semi"~Bold} respektive \textcdbn{Open~Sans~Bold} bei + erhöhter Schriftstärke (\Option{cdfont=heavy}) zum Einsatz. +\end{values} +% +Die folgende Tabelle verdeutlicht die Möglichkeiten zur Kombination der +Einstellungen: +\begin{center} +\footnotesize% +\setlength{\tabcolsep}{.5em}% +\begin{tabular}{ccccc} + \toprule + & \multicolumn{2}{c}{\Option{cdfont=normalbold}} + & \multicolumn{2}{c}{\Option{cdfont=heavybold}} + \tabularnewline + & \Macro{mdseries} & \Macro{bfseries} & \Macro{mdseries} & \Macro{bfseries} + \tabularnewline\midrule + \Option{cdfont=true} + & \textcdln{Open~Sans~Light} & \textcdrn{Open~Sans~Regular} + & \textcdln{Open~Sans~Light} & \textcdsn{Open~Sans~Semi"~Bold} + \tabularnewline\midrule + \Option{cdfont=heavy} + & \textcdrn{Open~Sans~Regular} & \textcdsn{Open~Sans~Semi"~Bold} + & \textcdrn{Open~Sans~Regular} & \textcdbn{Open~Sans~Bold} + \tabularnewline\bottomrule +\end{tabular} +\end{center} +\par\medskip\noindent +% +\index{Ziffernform}% +Weiterhin lässt sich die Gestalt der Ziffern anpassen, wobei zwischen +Versalziffern und Mediävalziffern gewählt werden. +% +\begin{values}{\Option{cdfont}} +\item[liningfigures/normalfigures] + \ChangedAt{v2.06} + Mit dieser Einstellung kommen dicktengleiche/äquidistant/proportionale + Versalziffern oder auch Majuskelziffern (\textbf{1234567890}) zum Einsatz. + Mit \Macro{oldstylenums}[\Parameter{Ziffer(n)}] lassen sich + Mediävalziffern oder auch Minuskelziffern explizit setzen. Dieses Verhalten + ist standardmäßig aktiviert. +\item[oldstylefigures/osf/oldnumbers] + \ChangedAt{v2.06} + Für den Fließtext werden nichtproportionale Mediävalziffern oder auch + Minuskelziffern (\textbf{\oldstylenums{0123456789}}) standardmäßig verwendet. +\end{values} +% +Außerdem dient die Option \Option{cdfont=\PSet} als erweiterte Schnittstelle +für den Anwender, um zusätzliche Einstellungen für die Schriftnutzung vornehmen +zu können, für welche normalerweise separate Optionen vorgesehen sind. Diese +Möglichkeiten werden folgend kurz erläutert und auf die tatsächlich zugrunde +liegende Option verweisen. + +Die genutzten Mathematikschriften können mit folgenden Werte beeinflusst werden: +% +\begin{values}{\Option{cdfont}} +\item[nomath/nocdmath] + Diese Einstellung deaktiviert die \OpenSans für den mathematischen Satz. Es + werden die \hologo{LaTeX}"=Standardschriften verwendet und es lassen sich + beliebige Schriftpakete für den Mathematikmodus nutzen, + \seeref{\Option{cdmath=false}}. +\item[math/cdmath] + Die \OpenSans wird für die Mathematikschriften genutzt, + \seeref{\Option{cdmath=true}}. +\item[upgreek/uprightgreek] + Griechische Groß- und Kleinbuchstaben sind aufrecht, + \seeref{\Option{slantedgreek=false}}. +\item[slgreek/slantedgreek] + Die Ausgabe der griechischen Glyphen erfolgt kursiv, + \seeref{\Option{slantedgreek=true}}. +\item[texgreek/standardgreek] + \ChangedAt{v2.06} + Es kommt der \LaTeX-Standard zum Einsatz, bei dem griechische Majuskeln + aufrecht und Minuskeln kursiv ausgegeben werden, + \seeref{\Option{slantedgreek=standard}}. +\end{values} +% +\ChangedAt{v2.02} +Für die \TUDScript-Klassen gibt es bei den \PageStyle{tudheadings}-Seitenstilen +folgende Einstellmöglichkeiten für die Schriftart im Querbalken: +% +\begin{values}{\Option{cdfont}} +\item[nohead/noheadfont] + Bei deaktivierter Hausschrift für den Fließtext können diese ebenfalls im + Querbalken deaktiviert werden, \seeref{\Option{cdhead=false}}. +\item[head/lighthead/lightfonthead/noheavyfonthead] + Für den Querbalken der Kopfzeile wird~-- unabhängig von der Verwendung der + Hausschrift im Fließtext~-- \OpenSans in normaler Schriftstärke verwendet, + \seeref{\Option{cdhead=true}}. +\item[heavyhead/heavyfonthead] + Im Querbalken wird~-- unabhängig von der Dokumentschrift~-- \OpenSans in + erhöhter Stärke genutzt, \seeref{\Option{cdhead=heavy}}. +\end{values} +\end{Declaration} + +\begin{Declaration}[v2.06]{\Option{ttfont=\PSet}}[true]% +\printdeclarationlist% +\index{Schriftart}% +\index{Schriftstärke}% +% +\ChangedAt*{% + v2.06:Verwendung der \texttt{Roboto~Mono} als Schreibmaschinenschrift möglich +} +Bei aktivierter Option \Option{cdfont} lässt sich zusätzlich die verwendete +\texttt{Schreibmaschinenschrift} einstellen, wofür selbige aus einem der Pakete +\Package{roboto-mono} oder \Package{lmodern} genutzt wird und insbesondere die +gewählten Einstellungen für die Schriftstärke der Option \Option{cdfont} +beachtet werden. Ein direktes Laden des jeweiligen Paketes durch den Benutzer +ist nicht notwendig. +% +\begin{values}{\Option{ttfont}} +\itemfalse + Es findet keine Anpassung Schreibmaschinenschrift (\Macro*{ttfamily}) statt, + mögliche Änderungen können durch den Anwender erfolgen. +\itemtrue*[roboto/roboto-mono] + Sollte das Paket \Package{roboto-mono} installiert sein, wird die darin + definierte Schreibmaschinenschrift genutzt. Diese ist serifenlos und liegt in + einer Vielzahl unterschiedlicher Schriftschnitte vor, weshalb sich diese + ideal mit der \OpenSans kombinieren lässt. +\item[lmodern/lmtt/lm] + Es wird explizit die Schreibmaschinenschrift aus \Package{lmodern} aktiviert. +\end{values} +\end{Declaration} + + + +\minisec{Auszeichnungen im Text} +\index{Schriftstärke}% +\index{Schriftauszeichnung}% +% +Unabhängig davon, welche Schriftfamilie im Dokument verwendet wird, können die +Schriften des \CDs jederzeit mit einem der hier aufgeführten Textschalter oder +Textkommandos innerhalb des Dokumentes genutzt werden. Ein Textschalter wirkt +sich~-- wenn er nicht lokal durch eine Gruppe oder Umgebung begrenzt wird~-- +global auf das Dokument aus, wie etwa beispielsweise \Macro*{bfseries}. Bei +einem Textkommando hingegen kommt die Schriftart nur für das nachfolgend +angegebene Argument zum Einsatz, wie bei \Macro*{textbf}[\Parameter{Text}]. +% +\begin{Declaration}[v2.04]{\Macro{cdfont}[\Parameter{Schriftart}]} +\begin{Declaration}[v2.04]{% + \Macro{textcd}[\Parameter{Schriftart}\Parameter{Text}]% +} +\printdeclarationlist +Diese beiden Befehle dienen zur gezielten Aktivierung einer Schriftart des \CDs +in Stärke und Schnitt. Hierbei entspricht \Macro{cdfont} einem Textschalter und +ändert die verwendete Schriftart unverzüglich im aktuellen Geltungsbereich auf +\PName{Schriftart}, wohingegen \Macro{textcd} als Textkommando fungiert und den +im zweiten Argument gegebenen \PName{Text} in \PName{Schriftart} setzt ohne +dabei die Dokumentschriftart selbst zu ändern. + +Für die Schriftauswahl muss im ersten Argument die Bezeichnung der gewünschten +Schriftart angegeben werden. Mögliche Werte sind der nachfolgenden Tabelle zu +entnehmen. Der Vorsatz \PValue{Open Sans} für die \PName{Schriftart} im +Argument ist dabei optional. Ebenso sind weder Leerzeichen noch die passende +Groß- und Kleinschreibung notwendig. Für die Wahl der Schriftstärke ist allein +die Bezeichnung \PValue{Light/Regular/Semi-Bold/Bold/Extra-Bold} ausreichend. +Anstelle des Suffix' \PValue{Italic} ist auch die Nutzung von \PValue{Oblique} +oder \PValue{Slanted} als Alias für die kursiven Schriftlagen möglich. +% +\begin{center}% + \newcommand*\listfonts[2]{% + \csuse{textcd#2}{Open Sans #1} & + \begin{Declaration*}{\Macro{cdfont#2}} + \Macro*{cdfont#2}'none'% + \end{Declaration*} + & + \begin{Declaration*}{\Macro{textcd#2}[\Parameter{Text}]} + \Macro*{textcd#2}[\Parameter{Text}]'none'% + \end{Declaration*} + \tabularnewline + }% + \begin{tabular}{lll}% + \toprule% + \textbf{Schriftart/Bezeichnung} & \textbf{Schalter} & \textbf{Textkommando} + \tabularnewline + \midrule + \listfonts{Light}{ln} + \listfonts{Regular}{rn} + \listfonts{Semi-Bold}{sn} + \listfonts{Bold}{bn} + \listfonts{Extra-Bold}{xn} + \listfonts{Light Italic}{li} + \listfonts{Regular Italic}{ri} + \listfonts{Semi-Bold Italic}{si} + \listfonts{Bold Italic}{bi} + \listfonts{Extra-Bold Italic}{xi} + \bottomrule% + \end{tabular}% +\end{center}% +% +Alternativ zu \Macro{cdfont} und \Macro{textcd} werden für jeden Schriftschnitt +auch explizite Textschalter und "~kommandos bereitgestellt, bei denen das +Argument für die Bezeichnung der Schriftart entfällt. Diese sind in der zweiten +und dritten Spalte der Tabelle aufgeführt. +\end{Declaration} +\end{Declaration} + + + +\subsection{Schriften für den Mathematiksatz} +\tudhyperdef*{sec:math}% +\index{Mathematiksatz|?(}% +% +\begin{Declaration}[v2.03]{\Option{cdmath=\PBoolean}}% + [true][\Option{cdfont=false}:false] +\printdeclarationlist% +% +Diese Option dient zur Anpassung der Mathematikschriften. Wird diese aktiviert, +so werden zur Hausschrift passende Glyphen im Mathematikmodus genutzt. Normale +sowie fette Schriftstärke werden zu \emph{Beginn des Dokuments} abhängig von +der zu diesem Zeitpunkt aktiven Einstellung für die Schriften des Fließtexts +(\seeref{\Option{cdfont}}) definiert. Auf fette Mathematikschriften kann im +Dokument mit \Macro{boldmath} umgeschaltet werden, eine Anpassung der +Einstellungen ist durch \Macro{TUDoptions} möglich. Gültige Werte für die +Option \Option{cdmath} sind: +% +\begin{values}{\Option{cdmath}} +\itemfalse + Es werden die normalen \hologo{LaTeX}"=Serifenschriften beziehungsweise die + Schriften beliebig nutzbarer Pakete für den Mathematiksatz verwendet. +\itemtrue* + Im Mathematikmodus kommt \OpenSans sowohl für lateinische als auch + griechische Buchstaben zum Einsatz. +\end{values} +\end{Declaration} + +\begin{Declaration}[% + v2.06!\Option{slantedgreek=standard}; +]{\Option{slantedgreek=\PBoolean}}[true] +\printdeclarationlist% +\index{Griechische Buchstaben|(}% +% +Die Option ändert die standardmäßige Neigung der griechischen Großbuchstaben im +Mathematikmodus bei der Verwendung der Standardbefehle für griechische +Buchstaben. +% +\begin{values}{\Option{slantedgreek}} +\itemfalse + Die griechischen Glyphen werden im Mathematiksatz allesamt aufrecht gesetzt. +\itemtrue* + Alle griechischen Buchstaben werden im Mathematikmodus kursiv ausgegeben. +\item[standard/latex] + Die Ausgabe entspricht mit aufrechten Majuskeln und kursiven Minuskeln der + griechischen Lettern dem \LaTeX-Standard beim mathematischen Satz. +\end{values} +\end{Declaration} + +\begin{Declaration}{\Macro{Gamma}} +\begin{Declaration}{\Macro{Delta}} +\begin{Declaration}{\Macro{Theta}} +\begin{Declaration}{\Macro{Lambda}} +\begin{Declaration}{\Macro{Xi}} +\begin{Declaration}{\Macro{Pi}} +\begin{Declaration}{\Macro{Sigma}} +\begin{Declaration}{\Macro{Upsilon}} +\begin{Declaration}{\Macro{Phi}} +\begin{Declaration}{\Macro{Psi}} +\begin{Declaration}{\Macro{Omega}} +\begin{Declaration}{\Macro{alpha}} +\begin{Declaration}{\Macro{beta}} +\begin{Declaration}{\Macro{gamma}} +\begin{Declaration}{\Macro{delta}} +\begin{Declaration}{\Macro{epsilon}} +\begin{Declaration}{\Macro{varepsilon}} +\begin{Declaration}{\Macro{zeta}} +\begin{Declaration}{\Macro{eta}} +\begin{Declaration}{\Macro{theta}} +\begin{Declaration}{\Macro{vartheta}} +\begin{Declaration}{\Macro{iota}} +\begin{Declaration}{\Macro{kappa}} +\begin{Declaration}{\Macro{lambda}} +\begin{Declaration}{\Macro{mu}} +\begin{Declaration}{\Macro{nu}} +\begin{Declaration}{\Macro{xi}} +\begin{Declaration}{\Macro{pi}} +\begin{Declaration}{\Macro{varpi}} +\begin{Declaration}{\Macro{rho}} +\begin{Declaration}{\Macro{varrho}} +\begin{Declaration}{\Macro{sigma}} +\begin{Declaration}{\Macro{varsigma}} +\begin{Declaration}{\Macro{tau}} +\begin{Declaration}{\Macro{upsilon}} +\begin{Declaration}{\Macro{phi}} +\begin{Declaration}{\Macro{varphi}} +\begin{Declaration}{\Macro{chi}} +\begin{Declaration}{\Macro{psi}} +\begin{Declaration}{\Macro{omega}} +\settowidth\tempdim{\Macro{varepsilon}}% +\addtolength\tempdim{\dimexpr 2\tabcolsep+2\arrayrulewidth-\textwidth\relax}% +\printdeclarationlist(% + \begin{minipage}{-\tempdim}% + \small% + \newcommand\tablecontent{}% + \newcommand*\greekLetters{% + Gamma,Delta,Theta,Lambda,Xi,Pi,Sigma,Upsilon,Phi,Psi,Omega,% + alpha,beta,gamma,delta,epsilon,varepsilon,zeta,eta,theta,vartheta,% + iota,kappa,lambda,mu,nu,xi,pi,varpi,rho,varrho,sigma,varsigma,tau,% + upsilon,phi,varphi,chi,psi,omega% + }% + \def\do#1{% + \appto\tablecontent{% +% \begin{Declaration*}{\Macro{up#1}} + \Macro*{up#1}'none'% +% \end{Declaration*} + & $\csuse{up#1}$ & & +% \begin{Declaration*}{\Macro{it#1}} + \Macro*{it#1}'none'% +% \end{Declaration*} + & $\csuse{it#1}$\tabularnewline + }% + }% + \expandafter\docsvlist\expandafter{\greekLetters}% + \centering% + \vspace{\intextsep}\noindent + \begin{tabularm}{5} + \toprule% + \textbf{Befehl (aufrecht)} & \textbf{Symbol} & & + \textbf{Befehl (kursiv)} & \textbf{Symbol} + \tabularnewline\midrule\tablecontent\bottomrule% + \end{tabularm} + \end{minipage}% +)% +% +Unabhängig von der Option \Option{slantedgreek} können sowohl kursive als auch +aufrechte griechischen Glyphen im Mathematikmodus mit diesen Befehlen direkt +verwendet werden. Dies ist nützlich, um zwischen \emph{kursiven Variablen} und +\emph{aufrechten Konstanten} zu unterscheiden. Weiterhin kann anstelle von +\Macro*{up\Parameter{Glyphe}} oder \Macro*{it\Parameter{Glyphe}} auch der +Präfix \Macro*{other\Parameter{Glyphe}} genutzt werden. Damit wird~-- abhängig +von der Option \Option{slantedgreek}~-- die komplementäre Schriftlage der +angegebenen Glyphe gesetzt. +\index{Griechische Buchstaben|)}% +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + + + +\minisec{Zusätzliche Hinweise zum Mathematiksatz} +Unter Umständen werden zusätzliche Symbole für den Mathematiksatz benötigt. +Sehr oft kommt hierfür das Paket \Package{amssymb} zum Einsatz. Dieses stellt +zahlreiche zusätzliche für die \hologo{LaTeX}"=Standardschriften zur Verfügung. +Diese sind in Verbindung mit der \OpenSans aus typografischer Sicht jedoch +keine ideale Lösung. Die Symbole aus dem Paket \Package{mdsymbol} passen +wesentlich besser zu besagter Schriftfamilie, weshalb diesem Paket der Vorzug +gegeben werden sollte, falls die Schriften des \CDs für den mathematischen Satz +genutzt werden. Weitere Hinweise zum typografisch guten Mathematiksatz sind +außerdem in \autoref{sec:tut} zu finden. +\index{Mathematiksatz|?)}% + + +\subsection{Vertikaler Leerraum in Abhängigkeit der Schriftgröße} +\index{Leerraum}% +\index{Schriftgröße}% +% +Bei den \TUDScript-Klassen sind im Normalfall mehrere Längen von der für das +Dokument gewählten Schriftgröße abhängig~-- im Gegensatz zu \KOMAScript. Dies +hat den großen Vorteil, dass bei einer Änderung der Schriftgröße die folgend +genannten Befehle respektive Längen nicht separat durch den Anwender angepasst +werden müssen, um weiterhin sinnvoll verwendet werden zu können. + +Die Anpassung an die Schriftgröße erfolgt sowohl die dehnbaren Längen +\Length{bigskipamount}, \Length{medskipamount} und \Length{smallskipamount}, +welche von den Befehlen \Macro{bigskip}, \Macro{medskip} beziehungsweise +\Macro{smallskip} für das Einfügen vertikaler Abstände genutzt werden, als auch +die beiden Längen \Length{abovecaptionskip}(\Package{koma-script})'none' und +\Length{belowcaptionskip}(\Package{koma-script})'none' für den Abstand zwischen +einem Gleitobjekt~-- beispielsweise eine Abbildung oder eine Tabelle~-- und +dessen mit \Macro{caption}(\Package{koma-script},\Package{caption})'none' +gesetzten Beschreibung. Außerdem wird die Länge \Length{columnsep} als Maß für +den horizontalen Abstand der einzelnen Textspalten im zwei- oder mehrspaltigen +Layout, wie es beispielsweise mit dem Paket \Package{multicol} erzeugt werden +kann, in Relation zur Schriftgröße sinnvoll festgelegt. + +Die verwendete Schriftgröße kann durch den Anwender über die \KOMAScript-Option +\Option{fontsize=\PName{Schriftgröße}}(\Package{koma-script})'none' festgelegt +werden. +\Attention{% + Dabei ist zu beachten, dass diese immer als Klassenoption angegeben werden + sollte.% +} +Weitere Hinweise zur Wahl der passenden Schriftgröße sind außerdem in +\autoref{sec:fontsize} zu finden. + +\begin{Declaration}[v2.05]{\Option{relspacing=\PBoolean}}[true]% +\printdeclarationlist% +% +Mit der Option \Option{relspacing=\PBoolean} lässt sich die zuvor beschriebene +Schriftgrößenabhängigkeit sowohl für vertikalen Leerraum zwischen zwei Absätzen +oder bei Beschriftungen als auch für den horizontalen Abstand zwischen den +Textspalten im mehrspaltigen Layout anpassen. +% +\begin{values}{\Option{relspacing}} +\itemfalse[absolute/standard] + Die besagten Längen werden nicht angepasst, passende Werte sollten bei einer + Änderung der Schriftgröße durch den Anwender gewählt werden. +\itemtrue*[relative/fontsize] + In Abhängigkeit von der gewählten Schriftgröße werden die zuvor genannten + Längen automatisch festgelegt. +\end{values} +\end{Declaration} + + + +\section{Das Layout des \CDs} +\index{Layout|(}% +\subsection{Der Satzspiegel} +\index{Satzspiegel|(}% +% +\begin{Declaration}[% + v2.03; + v2.05!\Option{cdgeometry=restricted};% + v2.05!\Option{cdgeometry=adapted};% + v2.05!\Option{cdgeometry=calculated};% + v2.05!\Option{cdgeometry=custom};% +]{\Option{cdgeometry=\PSet}}[true,restricted][\Option{cd=false}:false]% +\printdeclarationlist% +\index{Layout!Seitenstil}% +\index{Satzspiegel!doppelseitig}% +% +Diese Option ist für die Aufteilung beziehungsweise die Berechnung des +Satzspiegels verantwortlich. Das Maß der Seitenränder ist im \CD fest +vorgegeben und wird standardmäßig von den \TUDScript-Klassen eingehalten. +Allerdings lassen sich die Seitenränder anpassen, um beispielsweise einen +vernünftigen doppelseitigen Satz zu ermöglichen.% +\footnote{Hierbei sollte der innere Rand schmaler als der äußere sein} +Des Weiteren besteht die Möglichkeit, auf das \KOMAScript"=Standardverhalten +zurückzufallen und die Satzspiegelberechnung durch das Paket \Package{typearea} +vornehmen zu lassen. Hier hat insbesondere die Klassenoption +\Option{DIV=\PSet}(\Package{typearea})'none'|declare| maßgeblichen Einfluss auf +den Satzspiegel. Mehr dazu ist in der \scrguide[Dokumentation von \KOMAScript] +zu finden. +\ChangedAt{v2.05} +Zusätzlich lässt sich mit \Option{cdgeometry=custom} der Satzspiegel durch den +Anwender (fast) beliebig festlegen. +% +\begin{values}{\Option{cdgeometry}} +\itemfalse + Die Satzspiegelberechnung erfolgt via \Package{typearea}, die Vorgaben des + \CDs bezüglich der Seitenränder werden ignoriert. +\itemtrue*[asymmetric/cd] + Die Seitenränder werden im asymmetrischen Stil des \CDs fest definiert und + auch für den doppelseitigen Satz + (Klassenoption \Option{twoside=true}(\Package{typearea})'none') genutzt.% + \footnote{links: 30\,mm, rechts: 20\,mm, oben: 20\,mm, unten: 30\,mm} +\item[symmetric/centred/centered] + Der Satzspiegel wird im einseitigen sowie doppelseitigen Satz auf der Seite + zentriert.% + \footnote{links: 25\,mm, rechts: 25\,mm, oben: 20\,mm, unten: 30\,mm} +\item[twoside/balanced] + Diese Einstellung aktiviert den doppelseitigen Satz + (\Option{twoside=true}(\Package{typearea})'none') und ändert den Satzspiegel + derart, dass die Ränder der inneren Seiten schmaler sind als die der äußeren.% + \footnote{innen: 20\,mm, außen: 30\,mm, oben: 20\,mm, unten: 30\,mm} + \Attention{% + Der so erzeugte Satzspiegel ist jedoch unvorteilhaft, da das Logo der \TnUD + sehr nah am inneren Seitenrand des Dokumentes gesetzt wird und folglich auf + rechten respektive ungeraden Seiten sehr weit an den Blattrand rückt. + } + Dieses Problem kann~-- bei \Class{tudscrbook} sowie \Class{tudscrreprt}~-- + prinzipiell gelöst werden, indem Titel, Teile und Kapitel über das Aktivieren + der \KOMAScript-Option \Option{open=left}(\Package{koma-script})'none' immer + auf einer linken Seite beginnen, was allerdings aus typografischer Sicht eher + unüblich ist. +\end{values} +% +\ChangedAt{v2.05:Neue Möglichkeiten bei der Satzspiegelberechnung im \CD} +Mit den folgenden Werten lässt sich einstellen, in welcher Variante der +Satzspiegel nach dem \TUDCD erstellt werden soll. +% +\begin{values}{\Option{cdgeometry}} +\item[restricted] + Der Satzspiegel entspricht den expliziten Vorgaben des \CDs. +\item[adapted] + Laut dem Handbuch zum \CD werden für Papierformate zwischen DIN~A6 und DIN~A4 + \enquote{im Interesse größter Einheitlichkeit die Maßverhältnisse über einen + größeren Formatbereich hinweg \enquote{eingefroren}.} Dies kann jedoch zu + schlecht nutzbaren Satzspiegeln führen. Mit dieser Einstellung kann die + Fixierung deaktiviert und der äquivalente Satzspiegel beispielsweise für das + Format~DIN~A5 aktiviert werden. Bei Formaten außerhalb des fixierten Bereichs + hat diese Einstellung keinen Einfluss. +\item[calculated] + Der Satzspiegel wird anhand der Referenzmaße für das Format~DIN~A4 für das + eingestellte Papierformat \emph{skaliert}. Die eigentlich definierten + diskreten Maße bei unterschiedlichen Gestaltungshöhen werden ignoriert. +\end{values} +% +\ChangedAt{v2.05} +Da es häufig sehr restriktive~-- wenn auch meistens völlig willkürliche~-- +Vorgaben für die Seitenränder gibt, besteht außerdem die Möglichkeit, diese +weitestgehend manuell einzustellen. +\begin{values}{\Option{cdgeometry}} +\item[custom] + Für die Festlegung der Seitenränder ist das Paket \Package{geometry} + maßgeblich verantwortlich. Der Anwender kann mit den beiden, durch das Paket + bereitgestellten Befehlen \Macro{geometry}(\Package{geometry})'none' und + \Macro{newgeometry}(\Package{geometry})'none' den Satzspiegel selbst + definieren. Für Hinweise zur Verwendung der Befehle sollte die Dokumentation + von \Package{geometry} genutzt werden. +\end{values} +\end{Declaration} + +\begin{Declaration}[v2.03]{\Option{extrabottommargin=\PName{Höhe}}}[0pt]% +\printdeclarationlist% +% +Mit dieser Option kann die Größe des unteren Seitenrandes angepasst werden, +wenn der Satzspiegel des \CDs verwendet wird (\seeref{\Option{cdgeometry}}). +Insbesondere für den Fall, dass bei Seiten im Stil \PageStyle{tudheadings} +im Fußbereich entweder mit \Macro{footlogo} Drittlogos verwendet werden und +diese über das optionale Argument oder via \Option{footlogoheight} über die +Standardhöhe hinaus vergrößert wurden oder mit \Macro{footcontent} ein +übergroßer Inhalt angegeben wurde, kann dieser unter Umständen etwas zu klein +sein. Mit der Option \Option{extrabottommargin} wird der Fußbereich durch +positive Werte vergrößert, negative Werte verkleinern diesen entsprechend. + +Alternativ zur Option \Option{extrabottommargin} kann auch die Einstellung +\Option{cdfoot=\PValueName{Höhe}} mit einem Längenwert verwendet werden. +Dabei spielt es für beide Optionen keine Rolle, ob eine \hologo{LaTeX}"=Länge, +ein \hologo{TeX}"=Abstand oder eine \hologo{TeX}"=Ausdehnung als Länge bei der +Wertzuweisung verwendet wird. +\end{Declaration} + +\minisec{Bindekorrektur} +\index{Satzspiegel!Bindekorrektur|!}% +% +Im Zusammenhang mit den Seitenrändern oder besser dem Satzspiegel ist die durch +das Paket \Package{typearea} zur Verfügung gesellte \KOMAScript-Option +\Option{BCOR=\PName{Längenwert}}(\Package{typearea})'none'|declare| zu +erwähnen. Mit dieser kann bei der Satzspiegelberechnung ein Heftrand respektive +eine Bindekorrektur berücksichtigt werden. Durch die \TUDScript-Klassen wird +der mit dieser Option angegebene Wert auch an das Paket \Package{geometry} +weitergereicht, sodass der Benutzer unabhängig von der Satzspiegelgestaltung +(\Option{cdgeometry}) die Option \Option{BCOR}(\Package{typearea})'none' nutzen +kann. So lässt sich eine Bindekorrektur von beispielsweise \unit[5]{mm} mit der +\emph{Klassenoption} \Option*{BCOR=5mm} festlegen. + +Eine Anpassung der Bindekorrektur hat natürlich \emph{immer} eine Änderung der +verfügbaren Breite des Textbereichs zur Folge hat und führt somit zwingend zu +einer Anpassung des Satzspiegels. Da die Bindekorrektur jedoch abhängig von der +Höhe des Buchblocks gewählt werden sollte, welche letztendlich erst mit dem +Druck des fertiggestellten Dokumentes bestimmt werden kann, muss diese zu +Beginn abgeschätzt werden. +% +\begin{Example} +Als Faustregel gilt, dass die erforderliche Bindekorrektur in etwa der halben +Höhe des Buchblocks entsprechen sollte. Dessen Höhe wiederum ist abhängig von +der Anzahl der Seiten sowie der Dichte des verwendeten Papiers. Wird normales +Papier mit einer Dichte von \unit[80]{g/m²} verwendet, so entsprechen 100~Blatt +in etwa einer Höhe von \unit[10]{mm}, bei \unit[100]{g/m²} ca. \unit[12]{mm}. +Dementsprechend wäre eine Bindekorrektur von \Option*{BCOR=5mm} beziehungsweise +\Option*{BCOR=6mm} bei diesem Beispiel zu wählen. +\index{Satzspiegel|)}% +\end{Example} + +\minisec{Kopf"~ und Fußzeile im Zusammenspiel mit dem Satzspiegel} +\index{Layout!Kopfzeile|?}% +\index{Layout!Fußzeile|?}% +% +Da im \CD nicht festgelegt ist, wie die Gestaltung der Kopf"~ und Fußzeilen in +einer wissenschaftlichen Arbeit auszuführen ist, bleibt dem Nutzer dafür eine +gewisse Freiheit. Dafür sollte idealerweise das zu \KOMAScript{} gehörige Paket +\Package{scrlayer-scrpage} genutzt werden. + +In der Dokumentation zu \Package{typearea} wird auch darauf eingegangen, wann +Kopf"~ und Fußzeile bei der Satzspiegelkonstruktion entweder dem Rand oder dem +Textkörper zugeschlagen werden sollten. Dies sollte bei der Erstellung eigener +Kopf"~ und Fußzeilen beachtet werden. Die Einstellung dafür erfolgt mit den +beiden \KOMAScript"=Optionen +\Option{headinclude=\PBoolean}(\Package{typearea})'none'|declare| sowie +\Option{footinclude=\PBoolean}(\Package{typearea})'none'|declare|. +Diese können~-- unabhängig von der Einstellung zur Satzspiegelgestaltung durch +die Option \Option{cdgeometry}~-- verwendet werden. + + +\subsection{Die Gestalt von Titel, Umschlagseite, Teilen sowie Kapiteln \& Co.} +\index{Layout!Farben|(}% +\index{Layout!Seitenstil|(}% +\index{Layout!Überschriften|(}% +% +Falls die nachfolgend beschriebene Option \Option{cd=\PSet} aktiviert ist, +werden einige, spezielle Seiten im prägnanten Stil mit dem Logo der \TnUD und +der dazugehörigen Kopfzeile mit Querbalken gesetzt. Dies betrifft insbesondere +\hyperref[sec:title]{die Umschlagseite und den Titel aus \autoref{sec:title}}, +die \hyperref[sec:part]{Teileseiten in \autoref{sec:part}} sowie die +\hyperref[sec:chapter]{Kapitelseiten in \autoref{sec:chapter}}. Mit den +\PageStyle{tudheadings}"=Seitenstilen oder der \Environment{tudpage}"=Umgebung +können weitere Seiten in diesem Stil erzeugt werden. Wird das Paket +\Package{tudscrsupervisor} verwendet und mit den bereitgestellten Befehlen oder +Umgebungen eine Aufgabenstellung, ein Gutachten oder ein Aushang erstellt, so +erscheinen auch diese in besagtem Seitenstil. +% +\begin{Declaration}[% + v2.03!\Option{cd=bicolor}:% + Farbeinsatz nur im Kopf mit farbig abgesetztem Querbalken; + v2.03!\Option{cd=fullcolor}:% + voller Farbeinsatz mit farbig abgesetztem Querbalken;% + v2.04!\Option{cd=barcolor}:nur farbig abgesetzter Querbalken;% +]{\Option{cd=\PSet}}[true] +\printdeclarationlist% +% +Mit dieser Option wird festgelegt, ob und wie das \TUDCD im gesamten Dokument +verwendet wird. Sie hat Einfluss auf die Ausprägung von Titel"~, Teil"~, und +Kapitelseiten sowie die Überschriften der weiteren Gliederungsebenen. +% +\begin{values}{\Option{cd}} +\itemfalse + Diese Einstellung erzeugt das Standard"=Verhalten der \KOMAScript"=Klassen, + es wird kein \CD genutzt. +\itemtrue*[nocolor/monochrome] + Das Layout für Titel"~, Teil"~ und Kapitelseiten ist im \CD, es wird + schwarze Schrift für Titel, Teil"~ und Kapitelüberschriften verwendet. Die + Ausprägung des Seitenkopfes ist abhängig von der Option \Option{cdhead}. +\item[lightcolor/pale] + Die Einstellung entspricht weitestgehend der Option \Option{cd=true}, + allerdings wird die primäre Hausfarbe \Color{HKS41} für den Kopf des + \PageStyle{tudheadings}"=Seitenstils und Überschriften genutzt. +\item[barcolor] + \ChangedAt{v2.04} + Zusätzlich zur vorherigen Einstellung wird außerdem der Querbalken farbig + abgesetzt. +\item[bicolor/bichrome] + \ChangedAt{v2.03} + Der Kopf wird mit einem farbigen Hintergrund in der Hausfarbe gesetzt, auch + der Querbalken wird farbig hinterlegt. Für die Überschriften wird die + primären Hausfarbe verwendet. +\item[color] + Der Titel sowie Teil"~ und Kapitelseiten werden allesamt farbig gestaltet, + der Seitenkopf wird in der primären Hausfarbe \Color{HKS41} gesetzt, der + Querbalken erhält Linien als Begrenzung. +\item[fullcolor/full] + \ChangedAt{v2.03} + Entspricht der vorherigen Einstellung, allerdings wird der Querbalken nicht + durch Linien begrenzt sondern farbig hinterlegt. +\end{values} +\end{Declaration} + +\begin{Declaration}[v2.06]{\Option{headings=\PSet}}[heavy] +\printdeclarationlist% +\index{Schriftstärke}% +% +Die Option \Option{headings=\PSet}(\Package{koma-script})'none' wird bereits +von \KOMAScript{} definiert und dient unter anderem zum Festlegen der Größe von +Überschriften. Diese wird von \TUDScript erweitert, um im Layout des \CDs die +Schriftstärke der Überschriften anpassen zu können. +% +\begin{values}{\Option{headings}} +\item[light/normalbold] + Die Überschriften werden in fetter Schrift gesetzt. +\item[heavy/ultrabold] + Für Überschriften wird die extra"~fette Schriftstärke verwendet. +\end{values} +% +Die Einstellungen gelten für die Gliederungsebenen bis einschließlich +\Macro*{subsubsection}. +\end{Declaration} + + +\subsubsection{Individuelle Einstellungen für einzelne Elemente des Layouts} +Das Verhalten aller für das Layout relevanten Elemente wird von der eben zuvor +erläuterten Option \Option{cd=\PSet} bestimmt. Dies betrifft zum einen sowohl +den Titel~(\Macro{maketitle}) als auch die Umschlagseite~(\Macro{makecover}) +und zum anderen alle Teileseiten +(% + \Macro{part}(\Package{koma-script})'none', + \Macro{addpart}(\Package{koma-script})'none'% +) +und Kapitelseiten +(% + \Macro{chapter}(\Package{koma-script})'none', + \Macro{addchap}(\Package{koma-script})'none'% +) +sowie alle darunter liegenden Gliederungsebenen. + +Soll ein bestimmtes Element des Layouts abweichend von der allgemeinen +Einstellung für das gesamte Dokument erscheinen, so kann eine der folgenden +Optionen genutzt werden, um dieses individuell anzupassen und die mit +\Option{cd=\PSet} eingestellten Vorgaben für das jeweilige Element zu +überschreiben.% +\footnote{% + \Option{cdtitle} für den Titel, \Option{cdcover} für die Umschlagseite, + \Option{cdpart} für Teile, \Option{cdchapter} für Kapitel sowie + \Option{cdsection} für alle darunter liegenden Gliederungsebenen% +} +Die gültigen Wertzuweisungen für die einzelnen Elemente entsprechend dabei den +möglichen Werten für die Option \Option{cd=\PSet}. + +Zu beachten ist dabei, dass die verwendete Schrift für die Elemente des Layouts +abhängig von der Option \Option{cdfont=\PSet} ist. Für Titel- und Umschlagseite +kann diese direkt über das optionale Argument von \Macro{maketitle} respektive +\Macro{makecover} geändert werden. + +\begin{Declaration}[% + v2.03!\Option{cdtitle=bicolor}:% + Farbeinsatz nur im Kopf mit farbig abgesetztem Querbalken; + v2.03!\Option{cdtitle=fullcolor}:% + voller Farbeinsatz mit farbig abgesetztem Querbalken; + v2.04!\Option{cdtitle=barcolor}:nur farbig abgesetzter Querbalken;% +]{\Option{cdtitle=\PSet}} +\printdeclarationlist% +\index{Titel|?}% +% +Mit der Option \Option{cdtitle} kann die allgemeine Einstellung für den Titel +überschrieben werden. Es kann zwischen dem normalen (\Option*{cdtitle=false}) +und dem im \CD umgeschaltet werden. Die neue Titelseite unterstützt alle durch +\KOMAScript{} definierten Befehle für den Titel.% +\footnote{% + \Macro{extratitle}[\Parameter{Schmutztitel}](\Package{koma-script}), + \Macro{frontispiece}[\Parameter{Frontispiz}](\Package{koma-script}) für eine + Seite vor dem eigentlichen Haupttitel sowie + \Macro{titlehead}[\Parameter{Kopf}](\Package{koma-script}), + \Macro{subject}[\Parameter{Typisierung}], \Macro{title}[\Parameter{Titel}], + \Macro{subtitle}[\Parameter{Untertitel}], \Macro{author}[\Parameter{Autor}], + \Macro{and}, \Macro{thanks}[\Parameter{Fußnote}](\Package{koma-script}), + \Macro{publishers}[\Parameter{Verlag}](\Package{koma-script}) und + \Macro{date}[\Parameter{Datum}] für den Titel selbst sowie + \Macro{uppertitleback}[\Parameter{Titelrückseitenkopf}](\Package{koma-script}) + und + \Macro{lowertitleback}[\Parameter{Titelrückseitenfuß}](\Package{koma-script}) + für die Rückseite des Titels sowie abschließend + \Macro{dedication}[\Parameter{Widmung}](\Package{koma-script}) für eine + Danksagung. +} +Zusätzlich werden viele neue Felder definiert, welche vor allem für eine +wissenschaftliche Arbeit von Relevanz sind. Genaueres dazu +ist in \autoref{sec:title} nachzulesen. Unabhängig von der gewählten Variante +der Titelseite wird diese immer mit \Macro{maketitle} erzeugt. +\end{Declaration} + +\begin{Declaration}[% + v2.02;% + v2.03!\Option{cdcover=bicolor}:% + Farbeinsatz nur im Kopf mit farbig abgesetztem Querbalken; + v2.03!\Option{cdcover=fullcolor}:% + voller Farbeinsatz mit farbig abgesetztem Querbalken; + v2.04!\Option{cdcover=barcolor}:nur farbig abgesetzter Querbalken;% +]{\Option{cdcover=\PSet}} +\printdeclarationlist% +\index{Umschlagseite|?}% +% +Die \TUDScript-Klassen führen zusätzlich den Befehl \Macro{makecover} ein, mit +dem sich neben dem Titel eine separate Umschlagseite erzeugen lässt. Diese ist +in ihrer Gestalt der Titelseite sehr ähnlich, wird normalerweise jedoch in +einem anderen Satzspiegel als dem des Buchblocks gesetzt. Mit der Option +\Option{cdcover} kann~-- unabhängig von \Option{cd=\PSet}~-- das Aussehen der +Umschlagseite geändert werden. Wird \Option*{cdcover=false} gewählt, entspricht +die Umschlagseite dem originalen \KOMAScript-Titel. Die Verwendung des Befehls +\Macro{makecover} sowie die dazugehörigen Parameter werden detailliert in +\autoref{sec:title} erläutert. +\end{Declaration} + +\begin{Declaration}[% + v2.03!\Option{cdpart=bicolor}:% + Farbeinsatz nur im Kopf mit farbig abgesetztem Querbalken; + v2.03!\Option{cdpart=fullcolor}:% + voller Farbeinsatz mit farbig abgesetztem Querbalken; + v2.04!\Option{cdpart=barcolor}:nur farbig abgesetzter Querbalken;% +]{\Option{cdpart=\PSet}} +\printdeclarationlist% +\index{Layout!Teileseiten|?}% +% +Für die Teileseiten kann der Wert des Schlüssels \Option{cd=\PSet} separat +überschrieben und somit deren Layout respektive Erscheinungsbild beeinflusst +werden, welches bei der Benutzung der Befehle +\Macro{part}(\Package{koma-script})'none' und +\Macro{addpart}(\Package{koma-script})'none' sowie deren Sternversionen +verwendet wird. In \autoref{sec:part} sind weitere Hinweise zur Teileseite im +\CD zu finden. +\end{Declaration} + +\begin{Declaration}[% + v2.03!\Option{cdchapter=bicolor}:% + Farbeinsatz nur im Kopf mit farbig abgesetztem Querbalken; + v2.03!\Option{cdchapter=fullcolor}:% + voller Farbeinsatz mit farbig abgesetztem Querbalken; + v2.04!\Option{cdchapter=barcolor}:nur farbig abgesetzter Querbalken;% +]{\Option{cdchapter=\PSet}} +\printdeclarationlist% +\index{Layout!Kapitelseiten|?}% +% +Für Kapitelseiten kann der Schlüsselwert \Option{cd=\PSet} ebenfalls angepasst +und damit das Layout respektive Erscheinungsbild geändert werden, das bei der +Verwendung von \Macro{chapter}(\Package{koma-script})'none' beziehungsweise +\Macro{addchap}(\Package{koma-script})'none' und den dazugehörigen +Sternversionen genutzt wird. Weitere Hinweise zur Kapitelseite im \CD sind in +\autoref{sec:chapter} zu finden. +\end{Declaration} + +\begin{Declaration}[v2.05]{\Option{cdsection=\PSet}} +\printdeclarationlist% +% +Für Überschriften der weiteren Gliederungsebenen +\Macro{section}(\Package{koma-script})'none', +\Macro{subsection}(\Package{koma-script})'none', +\Macro{subsubsection}(\Package{koma-script})'none' sowie +\Macro{paragraph}(\Package{koma-script})'none' und +\Macro{subparagraph}(\Package{koma-script})'none' +werden in der primären Hausfarbe \Color{HKS41} ausgegeben, falls über die +Option \Option{cd=\PSet} eine farbige Ausprägung des Layouts eingestellt wurde. +Mit der Angabe von \Option*{cdsection=true} erscheinen die Überschriften der +genannten Gliederungsebenen ohne Farbeinsatz. +\end{Declaration} +% +\begin{Example} +Soll die Titelseite in Farbe, der Rest des Dokumentes allerdings in schwarzer +Schrift gesetzt werden, so kann dies folgendermaßen erreicht werden: +\begin{Code}[escapechar=§] +\documentclass[cd=true,cdtitle=color]{§\PName{Dokumentklasse}§} +\end{Code} +\index{Layout!Farben|)}% +\index{Layout!Seitenstil|)}% +\end{Example} + + +\subsubsection{Die vertikale Position der Überschriften} +\begin{Declaration}[v2.05]{\Option{pageheadingsvskip=\PName{Längenwert}}} +\begin{Declaration}[v2.05]{\Option{headingsvskip=\PName{Längenwert}}} +\printdeclarationlist% +\index{Layout!Teileseiten|?}% +\index{Layout!Kapitelseiten|?}% +% +Mit diesen beiden Optionen kann die vertikale Position spezieller Überschriften +verändert werden. Mit der Option \Option{pageheadingsvskip} lässt sich sowohl +der Titel auf einer Titelseite +(\KOMAScript-Option \Option{titlepage=true}(\Package{koma-script})'none') als +auch die Überschriften von separaten Kapitelseiten (\Option{chapterpage=true}) +und Teilen vertikal verschieben. Demgegenüber kann mit der zweiten Option +\Option{headingsvskip}, sowohl den Titel des Titelkopfes +(\KOMAScript-Option \Option{titlepage=false}(\Package{koma-script})'none') als +auch die Kapitelüberschrift bei deaktivierter Kapitelseite +(\Option{chapterpage=false}) in ihrer vertikalen Position anzupassen. + +Die zuvor genannten Überschriften werden normalerweise im Layout relativ tief +im Textbereich gesetzt. Mit negativen Werten werden die Überschriften nach oben +verschoben, wobei darauf geachtet werden sollte, dass diese sich danach noch +innerhalb des Satzspiegels befinden. Positive Werte setzen die Überschriften +dementsprechend tiefer. +\index{Layout!Überschriften|)}% +\end{Declaration} +\end{Declaration} + + + +\subsection{Seiten im Stil des \CDs} +\tudhyperdef*{sec:tudheadings}% +\index{Layout!Seitenstil|?(}% +% +\begin{Declaration}{\Macro{faculty}[\Parameter{Fakultät}]} +\begin{Declaration}{\Macro{department}[\Parameter{Einrichtung}]} +\begin{Declaration}{\Macro{institute}[\Parameter{Institut}]} +\begin{Declaration}{\Macro{chair}[\Parameter{Lehrstuhl}]} +\begin{Declaration}{\Macro{extraheadline}[\Parameter{Textzeile}]} +\printdeclarationlist% +\index{Layout!Kopfzeile}% +\index{Layout!Querbalken}% +% +Für den Seitenstil des \TUDCDs charakteristisch ist die Kopfzeile mit dem +prägnanten Querbalken. In dieser wird~-- falls angegeben~-- in fetter Schrift +die Fakultät ausgegeben, danach folgen durch Kommas getrennt die Einrichtung, +das Institut und der Lehrstuhl beziehungsweise die Professur. Sollte der Platz +in der ersten Zeile nicht ausreichen, erfolgt ein automatischer Zeilenumbruch. + +In besonderen Ausnahmefällen erlaubt das \CD die Angabe einer zusätzlichen +zweiten beziehungsweise dritten Zeile unterhalb der Angaben des Bereichs an der +\TnUD, welche weitere, frei wählbare Angaben enthält. Diese kann mit dem Befehl +\Macro{extraheadline}[\Parameter{Textzeile}] definiert werden. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +% +\begin{Declaration}[v2.02]{\PageStyle{tudheadings}} +\begin{Declaration}[v2.02]{\PageStyle{plain.tudheadings}} +\begin{Declaration}[v2.02]{\PageStyle{empty.tudheadings}} +\printdeclarationlist% +% +\ChangedAt*{% + v2.03:Seitenstile um zweifarbigen Kopf und farbigen Fuß erweitert% +} +Ein zentrales Element des \TUDCDs ist der prägnante Seitenkopf mit der Angabe +von Fakultät~(\Macro{faculty}), Einrichtung~(\Macro{department}), +Institut~(\Macro{institute}) und Lehrstuhl~(\Macro{chair}) im dazugehörigen +Querbalken. Durch die Nutzung des Paketes \Package{scrlayer-scrpage} lassen +sich entweder einzelne Seiten oder auch ganze Dokumente sehr einfach in diesem +Stil setzen. Dazu muss lediglich mit +\Macro{pagestyle}[\Parameter{Seitenstil}](\Package{koma-script})'none' einer +der Seitenstile geladen werden. + +Allen Seitenstilen gemein ist der typische Kopf mit dem charakteristischen +Querbalken, dessen Gestalt für \emph{alle} Seitenstile gleichermaßen über die +Option \Option{cdhead} angepasst werden kann. Mit dem Befehl \Macro{headlogo} +lässt sich ein zusätzliches Zweitlogo im Kopfbereich ausgegeben. +\Attention{% + Für die speziellen Layout-Elemente Titel und Umschlagseite sowie Teile- und + Kapitelseiten wird die Einstellung von \Option{cdhead} durch die Nutzung der + Option~\Option{cd=\PSet} überschrieben. +} + +Die Ausprägung des Fußes unterscheidet sich bei den einzelnen Seitenstilen. +Dieser ist beim Seitenstil \PageStyle{empty.tudheadings} immer leer. Die beiden +Stile~-- oder vielmehr das Seitenstil"~Paar~-- \PageStyle{tudheadings} und +\PageStyle{plain.tudheadings} übernehmen die Einstellungen für die Fußzeile aus +der Anwenderschnittstelle von \Package{scrlayer-scrpage}.% +\footnote{% + Es können die Befehle + \Macro{lefoot}(\Package{scrlayer-scrpage})'none', + \Macro{cefoot}(\Package{scrlayer-scrpage})'none' und + \Macro{refoot}(\Package{scrlayer-scrpage})'none' sowie + \Macro{lofoot}(\Package{scrlayer-scrpage})'none', + \Macro{cofoot}(\Package{scrlayer-scrpage})'none' und + \Macro{rofoot}(\Package{scrlayer-scrpage})'none' respektive + \Macro{ofoot}(\Package{scrlayer-scrpage})'none', + \Macro{cfoot}(\Package{scrlayer-scrpage})'none' und + \Macro{ifoot}(\Package{scrlayer-scrpage})'none' + genutzt werden.% +} +Wie die einzelnen Befehle zur Individualisierung der Fußzeile zu verwenden +sind, kann der \scrguide[\KOMAScript-Anleitung] entnommen werden. Alternativ +zu einer eigenen Definition der Fußzeile lässt sich außerdem die Option +\Option{cdfoot} verwenden. Zusätzlich kann über \Macro{footcontent} ein freier +Inhalt für den Fußbereich definiert werden, mit \Macro{footlogo} ist die +Ausgabe von einem oder mehreren Logos in diesem möglich. Die verwendete Schrift +im Fußbereich wird durch das Schriftelement~\Font{tudheadings} festgelegt. + +Sobald einer der definierten Stile mit +\Macro{pagestyle}[\Parameter{Seitentil}](\Package{koma-script})'none' aktiviert +wurde, sind die beiden Seitenstile \PageStyle{tudheadings} sowie +\PageStyle{plain.tudheadings} zusätzlich unter den Namen \PageStyle{headings} +respektive \PageStyle{plain} verwendbar. Dies hat den Vorteil, dass bei +Optionen oder Befehlen, welche automatisch zwischen den beiden Seitenstilen +\PageStyle{headings} und \PageStyle{plain} umschalten, durch die einmalige +Auswahl von einem der \PageStyle{tudheadings}"=Stilen nun zwischen diesen +umgeschaltet wird. + +Der Seitenstil \PageStyle{empty} erzeugt allerdings weiterhin eine komplett +leere Seite. Soll eine Seite mit der prägnanten Kopfzeile der \TnUD und leerem +Seitenfuß erschienen, so muss \Macro*{pagestyle}[\PParameter{empty.tudheadings}] +manuell aufgerufen werden. Um auf das normale Verhalten von \KOMAScript{} +zurückzuschalten, muss mit \Macro*{pagestyle}[\Parameter{Seitentil}] einer der +beiden Seitenstile \PageStyle{scrheadings}(\Package{scrlayer-scrpage})'none' +oder \PageStyle{plain.scrheadings}(\Package{scrlayer-scrpage})'none' aktiviert +werden. +\index{Layout!Seitenstil|?)}% +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}[% + v2.03;% + v2.04!\Option{cdhead=barcolor}:nur farbig abgesetzter Querbalken;% + v2.05!\Option{cdhead=date}:Datum zwischen Kopf- und Textbereich;% +]{\Option{cdhead=\PSet}}[true,nocolor,textwidth] +\printdeclarationlist% +\index{Layout!Seitenstil|(}% +\index{Layout!Kopfzeile}% +\index{Layout!Querbalken}% +\index{Datum}% +% +Mit dieser Option lassen sich für die \PageStyle{tudheadings}"=Seitenstile +sowohl die Gestalt des Logos sowie des Querbalkens als auch die darin +verwendete Schrift beeinflussen. Die folgenden Werte können für eine Anpassung +der Schriftart im Balken verwendet werden: +% +\begin{values}{\Option{cdhead}} +\itemfalse + Sollte mit \Option{cdfont=false} die Verwendung der Hausschrift im Stil des + \TUDCDs deaktiviert worden sein, wird die Kopfzeile im Querbalken in den + Serifenlosen der aktiven Schrift gesetzt. Ist die Hausschrift aktiviert, + hat diese Einstellung keinen Einfluss. +\itemtrue*[light/lightfont/noheavyfont] + Im Querbalken wird für \Macro{faculty} \textcdsn{Open~Sans~Semi"~Bold} + verwendet, für \Macro{department}, \Macro{institute}, + \Macro{chair} und \Macro{extraheadline} kommt \textcdln{Open~Sans~Light} zum + Einsatz. +\item[heavy/heavyfont] + Der Inhalt von \Macro{faculty} wird in \textcdbn{Open~Sans~Bold} gesetzt, für + die restlichen Felder wird \textcdrn{Open~Sans~Regular} genutzt. +\end{values} +% +Bei der Ausprägung des Kopfes und des Querbalkens gibt es mehrere Varianten. +Einerseits kann der Querbalken mit zwei Außenlinien dargestellt werden: +% +\begin{values}{\Option{cdhead}} +\item[nocolor/monochrome] + Der Kopf und die Linien des Querbalkens erscheinen in schwarzer Farbe. +\item[lightcolor/pale] + Sowohl Kopf als auch Querbalken werden in der primären Hausfarbe gesetzt. +\end{values} +% +Andererseits ist auch eine Darstellung mit mehr Farbeinsatz möglich, bei +welcher der Querbalken und gegebenenfalls der ganze Seitenkopf farbig +abgesetzt wird. Dabei erstreckt sich der Kopfbereich immer über die komplette +Seitenbreite, \seeref{\Option{cdhead=paperwidth}}. +% +\begin{values}{\Option{cdhead}} +\item[barcolor] + \ChangedAt{v2.04} + Im Gegensatz zur vorherigen Einstellung wird der Querbalken mit farbigem + Hintergrund verwendet, der darüber liegende Teil des Kopfes wird ohne + farbigen Hintergrund gesetzt. +\item[bicolor/bichrome] + \ChangedAt{v2.03} + Die Kopfzeile wird farbig abgesetzt, wobei der Hintergrund des Logos und der + Querbalken unterschiedlich ausfallen. Die Außenlinien der Querbalkens + entfallen. +\end{values} +% +Für den Fall, dass der Querbalken lediglich mit zwei Außenlinien dargestellt +wird, kann zusätzlich dessen Laufweite festgelegt werden: +% +\begin{values}{\Option{cdhead}} +\item[textwidth/slim] + Der Querbalken im Kopf erstreckt sich nur über den Textbereich. Diese + Einstellung ist insbesondere sinnvoll, wenn ein randloser Ausdruck technisch + nicht möglich ist. +\item[paperwidth/wide] + Die horizontale Ausdehnung des Querbalkens erstreckt sich über die komplette + Seitenbreite bis an den Blattrand. Dieses Verhalten lann im farbigen Layout + des Kopfes nicht deaktiviert werden. +\end{values} +% +\ChangedAt{v2.05} +Neben den zuvor beschriebenen Möglichkeiten zur Gestaltung des Kopfbereiches +kann auf allen Seiten mit aktiviertem \PageStyle{tudheadings}"=Seitenstil +unterhalb des Querbalkens das mit \Macro{date} angegebene Datum rechtsbündig +eingeblendet werden. +% +\begin{values}{\Option{cdhead}} +\item[date/showdate] + Das eingestellte Datum wird rechts oberhalb vom Textbereich eingeblendet. +\item[nodate/hidedate] + Es erscheint kein Datum zwischen Kopf- und Textbereich. +\end{values} +\end{Declaration} + +\begin{Declaration}[% + v2.03!\Option{cdfoot=color}:farbiger Hintergrund der Fußzeile;% + v2.03!\Option{cdfoot=\PValueName{Höhe}};% +]{\Option{cdfoot=\PSet}}[false]% +\printdeclarationlist% +\index{Layout!Fußzeile}% +\index{Layout!Kolumnentitel}% +\index{Satzspiegel!doppelseitig}% + +Die \TUDScript-Klassen sind~-- insbesondere aufgrund der Möglichkeit zur +Verwendung des Paketes \Package{scrlayer-scrpage}~-- bei der Gestaltung der +Kopf"~ und Fußzeilen sehr flexibel und individuell anpassbar. Die Ausprägung +und der Inhalt dieser ist nicht explizit durch das \CD vorgegeben und können +durch den Anwender beliebig gewählt und geändert werden. + +Eine Möglichkeit für deren Gestaltung zeigt das Handbuch für das \TUDCD. Dieses +wird ohne Kopf"~ und mit einer einfachen Fußzeile gesetzt, welche den aktuellen +Kolumnentitel sowie die Paginierung enthält. Mit \Option{cdfoot} kann diese +Ausprägung aktiviert werden, was auch für dieses Anwenderhandbuch geschehen ist. +% +\begin{values}{\Option{cdfoot}} +\itemfalse + Die Kopf"~ und Fußzeilen zeigen Standardverhalten, zur manuellen Änderung + sollte unbedingt das \KOMAScript"=Paket \Package{scrlayer-scrpage} verwendet + werden. +\itemtrue* + Die Fußzeilen des Dokumentes werden äquivalent zum Handbuch des \TUDCDs mit + lebenden Kolumnentitel und Seitenzahl gesetzt, wobei im doppelseitigen Satz + (Klassenoption \Option{twoside=true}(\Package{typearea})'none') die + Paginierung außen platziert wird. +\end{values} +% +Wird beim Laden der Klasse respektive des Paketes \Package{scrlayer-scrpage} +die Option \Option{manualmark}(\Package{scrlayer-scrpage})'none'|declare| nicht +explizit angegeben, so werden mit \Option{cdfoot=true} über die +\KOMAScript-Option \Option{automark}(\Package{scrlayer-scrpage})'none'|declare| +auch gleichzeitig die automatischen Kolumnentitel aktiviert, welche als Marken +die Titel der Gliederungsebenen verwendet. Genaueres dazu und der Möglichkeit, +die Kolumnentitel manuell festzulegen, ist dem \scrguide zu entnehmen. + +\ChangedAt{v2.03} +Sollte einer der \PageStyle{tudheadings}"=Seitenstil aktiviert sein und es wird +auf der erzeugten Seite ein farbiges Layout~-- beispielsweise der zweifarbige +Kopf (\Option{cdhead=bicolor}) oder ein farbiger Seitenhintergrund~-- genutzt, +so kann auch die Fußzeile einen farbigen Hintergrund erhalten. +% +\begin{values}{\Option{cdfoot}} +\item[nocolor/monochrome] + Der Fuß wird immer ohne farbigen Hintergrund gesetzt. +\item[color/bicolor/bichrome] + Die Fußzeile wird farbig abgesetzt, falls entweder der Kopf in einer farbigen + Variante genutzt wird (\seeref{\Option{cdhead}}) oder eine Seite mit einem + farbigen Hintergrund in der Hausfarbe (Titel oder Kapitelseite) aktiv ist. +\end{values} +% +Mit den Befehlen \Macro{footlogo}'ppage' und \Macro{footcontent}'ppage' können +für den Fußbereich zusätzliche Inhalte definiert werden. Sollte der zur +Verfügung stehende Platz hierfür nicht ausreichen, lässt sich dieser vergrößern. +% +\begin{values}{\Option{cdfoot}} +\item[\PValueName{Höhe}] + Wird der Option ein Längenwert übergeben, entspricht dies exakt der + Verwendung von Option \Option{extrabottommargin=\PName{Höhe}}. +\end{values} +\end{Declaration} + +\begin{Declaration}[v2.04]{\Font{tudheadings}} +\printdeclarationlist% +\index{Schriftelemente}% +% +Im Fußbereich der Seiten im \PageStyle{tudheadings}"=Seitenstil wird das +Schriftelement~\Font{tudheadings} verwendet. Dieses wirkt sich auf die +Seitenzahlen, den Kolumnentitel und die mit \Macro{footcontent} angegebenen +Inhalte aus. Hierüber wird die Wahl der richtigen Schriftfarbe in Abhängigkeit +vom Seitenhintergrund und den Einstellungen für die Optionen \Option{cdhead} +sowie \Option{cdfoot} realisiert. Wie \Font{tudheadings} angepasst werden +kann, ist in \autoref{sec:fonts:elements} zu finden. +\end{Declaration} + +\begin{Declaration}{\Macro{headlogo}[\LParameter\Parameter{Dateiname}]} +\printdeclarationlist% +\index{Layout!Kopfzeile}% +\index{Layout!Zweitlogo|?}% +\index{Layout!Dresden-concept-Logo@\DDC-Logo}% +% +Neben dem Logo der \TnUD darf zusätzlich ein Zweitlogo im Kopf verwendet +werden. Dieses lässt sich mit diesem Befehl einbinden. Normalerweise wird es +auf die Höhe der Erstlogos skaliert. Über das optionale Argument können weitere +Formatierungsbefehle an den im Hintergrund verwendeten Befehl +\Macro{includegraphics}(\Package{graphicx})'none' durchgereicht werden, um +beispielsweise die Größe des Zweitlogos anzupassen. Welche Parameter angepasst +werden können, ist der Dokumentation des \Package{graphicx}"=Paketes zu +entnehmen. + +Sollte die Option \Option{ddc} aktiviert sein, wird das \DDC-Logo nicht im Kopf +sondern automatisch im Fuß gesetzt. Die Option \Option{ddchead} setzt dieses +auf jeden Fall im Kopf und überschreibt damit das mit \Macro{headlogo} +angegebene Zweitlogo. +\end{Declaration} + +\begin{Declaration}[v2.03]{% + \Macro{footlogo}[\LParameter\Parameter{Dateinamenliste}]% +} +\begin{Declaration}[v2.03]{\Macro{footlogosep}}% +\printdeclarationlist% +\index{Layout!Fußzeile}% +\index{Layout!Drittlogo}% +\index{Layout!Dresden-concept-Logo@\DDC-Logo}% + +Laut den Richtlinien des \CDs dürfen im Fußbereich weitere Logos erscheinen, +beispielsweise von kooperierenden Unternehmen oder Sponsoren. Die Dateinamen +der gewünschten Logos können als kommaseparierte Liste im obligatorischen +Argument des Befehls \Macro{footlogo} angegeben werden. Sollte tatsächlich +nicht nur ein Dateiname sondern eine Liste übergeben worden sein, so wird bei +der Ausgabe der Logos zwischen diesen jeweils der in \Macro{footlogosep} +gespeicherte Separator~-- standardmäßig \Macro*{hfill}~-- gesetzt. Dieser kann +mit \Macro*{renewcommand*}[\PParameter{\Macro{footlogosep}}\PParameter{\dots}] +beliebig durch den Anwender angepasst werden. Der Separator wird auch gesetzt, +falls in \PName{Dateinamenliste} lediglich ein Komma verwendet wurde. Mit +\Macro{footlogo}[\PParameter{,\PName{Dateiname},}] kann so beispielsweise ein +Logo zentriert im Fuß gesetzt werden. +\Attention{% + Dabei ist zu beachten, dass ein mit der Option \Option{ddc} beziehungsweise + \Option{ddcfoot} gesetztes \DDC-Logo im Fußbereich~-- im Gegensatz zur + Verwendung von \Macro{footcontent}~-- überlagert werden könnte. Hier muss der + Anwender im Zweifel durch das Einfügen von Separatoren~-- sprich Kommas~-- im + Argument von \Macro{footlogo} etwas Formatierungsarbeit leisten. +} + +Das optionale Argument von \Macro{footlogo} wird an +\Macro{includegraphics}(\Package{graphicx})'none' weitergereicht. Dies +geschieht für alle angegeben Dateien aus der Liste gleichermaßen. Sollen für +einzelne Logos individuelle Einstellungen vorgenommen werden, so sind die +entsprechenden Parameter im obligatorischen Argument nach dem jeweiligen +Dateinamen mit einem Doppelpunkt~\enquote{\PValue{:}} als Separator +(\Macro{footlogo}[\PParameter{\PName{Dateiname}:\PName{Parameter}}]) zu +übergeben, wobei diese \emph{nach} den allgemeinen Einstellungen für alle Logos +angewendet werden. Die möglichen Parameter und Werte für die optionalen +Argumente sind der Dokumentation des \Package{graphicx}"=Paketes zu entnehmen. +\end{Declaration} +\end{Declaration} + +\begin{Declaration}[v2.05]{\Option{footlogoheight=\PName{Längenwert}}}% +\printdeclarationlist% +% +Ohne die Angabe eines optionalen Argumentes bei \Macro{footlogo} für die Größe +werden alle Logos im Fuß auf die Höhe des Logos der \TnUD skaliert. Dies kann +global für alle Logos geändert werden, indem die Option +\Option{footlogoheight=\PName{Längenwert}} gesetzt wird. Sollte die Höhe des +Fußbereiches nicht ausreichen, um alle Logos in der gewünschten Größe +darstellen zu können, kann diese über \Option{extrabottommargin=\PName{Höhe}} +beziehungsweise \Option{cdfoot=\PValueName{Höhe}} angepasst werden. +\end{Declaration} + +\begin{Declaration}[% + v2.04; + v2.05:Änderung des Inhaltes nur einer Spalte möglich +]{% + \Macro{footcontent}[% + \OParameter{Anweisungen}\Parameter{Inhalt}\OParameter{Inhalt}% + ]% +} +\begin{Declaration}[v2.04]{% + \Macro{footcontent*}[% + \OParameter{Anweisungen}\Parameter{Inhalt}\OParameter{Inhalt}% + ]% +} +\printdeclarationlist% +\index{Layout!Fußzeile}% +% +Mit diesem Befehl kann beliebiger Inhalt entweder einspaltig oder zweispaltig +im Fußbereich der \PageStyle{tudheadings}"=Seitenstile gesetzt werden. In der +Form \Macro{footcontent}[\Parameter{Inhalt}] wird der Inhalt über die komplette +Textbreite im Fuß ausgegeben. Wird der Befehl jedoch in der zweiten Variante +\Macro{footcontent}[\Parameter{linker Inhalt}\OParameter{rechter Inhalt}] mit +einem optionalen \emph{nach} dem obligatorischen Argument verwendet, so +erscheint der Fußbereich zweispaltig, wobei der Inhalt aus dem ersten, +obligatorischen Argument in der linken und der Inhalt aus dem zweiten, +optionalen Argument entsprechend in der rechten Fußspalte gesetzt wird. Dabei +wird ein etwaiges \DDC-Logo, welches über die Option \Option{ddc} respektive +\Option{ddcfoot} gesetzt wurde, beachtet und der für den Text zur Verfügung +stehende Platz im Fuß reduziert. Mögliche Einstellungen des Paketes +\Package{scrlayer-scrpage} für den Fuß werden nicht berücksichtigt, hier kann +es zu Überlagerungen der Inhalte kommen. Gleiches gilt für die Verwendung der +Werte \PValue{true} und \PValue{false} für die Option \Option{cdfoot}. + +\ChangedAt{v2.05} +Wird an das Argument für die linke oder die rechte Spalte lediglich ein Stern +\PValue{*} übergeben, so bleibt der bis dahin definierte Inhalt in dieser +Spalte erhalten. Beispielsweise kann die linke Fußbereichsspalte mit +\Macro{footcontent}[\Parameter{Inhalt}\POParameter{*}] angepasst werden ohne +dabei den Inhalt der rechten Spalte zu verändern oder es ließe sich lediglich +die verwendete Schrift des Fußbereichs bei gleichbleibendem Inhalt mit +\Macro{footcontent}[\OParameter{Anweisungen}\PParameter{*}\POParameter{*}]% +anpassen. + +Im Fußbereich wird für die Schrift das Schriftelement \Font{tudheadings} +verwendet. Dabei wird auch die Schriftgröße angepasst, wobei diese sich an der +Kopfzeile orientiert. Zusätzlich können mit dem ersten optionalen Argument von +\Macro{footcontent}~-- vor der eigentlichen Ausgabe des Inhaltes~-- zusätzliche +Schrifteinstellungen respektive \PName{Anweisungen} ausgeführt werden. Soll die +Definition des Inhalts im Fußbereich \emph{ohne} eine automatische Anpassung +der Schriftgröße erfolgen, so ist die Sternversion \Macro{footcontent*} zu +verwenden. Auch hier lässt sich gegebenenfalls das optionale Argument für die +Schriftformatierung nutzen. +\ChangedAt{v2.06} +Zu guter Letzt können bei der Änderung des Inhaltes im Fußbereich auch +vorherige Anpassungen der Schrift unverändert bleiben, indem mit +\Macro{footcontent}[\POParameter{*}\Parameter{Inhalt}\OParameter{Inhalt}] +im optionalen Argument ein Stern verwendet wird. +\end{Declaration} +\end{Declaration} + +\begin{Declaration}[% + v2.02:Logo von \DDC automatisch in Kopf/Fuß;% + v2.02!\Option{ddc=colorblack}; + v2.02!\Option{ddc=gray}; + v2.02!\Option{ddc=black}; + v2.02!\Option{ddc=blue}; + v2.02!\Option{ddc=white}; +]{\Option{ddc=\PSet}}[false] +\begin{Declaration}[v2.02]{\Option{ddchead=\PSet}} +\begin{Declaration}[v2.02]{\Option{ddcfoot=\PSet}} +\printdeclarationlist% +\index{Layout!Fußzeile}% +\index{Layout!Kopfzeile}% +\index{Layout!Zweitlogo}% +\index{Layout!Dresden-concept-Logo@\DDC-Logo}% +% +Diese Option fügt das Logo von \DDC entweder im Kopf oder Fuß der Seiten mit +dem Stil \PageStyle{tudheadings} ein. Diese wird automatisch entweder im Kopf +oder~-- falls mit \Macro{headlogo} ein Zweitlogo angegeben wurde~-- im Fuß +gesetzt. + +Alternativ dazu können die Optionen \Option{ddchead} beziehungsweise +\Option{ddcfoot} genutzt werden, welche das Logo explizit entweder im Kopf oder +Fuß setzen. Ein mit \Macro{headlogo} angegebenes Zweitlogo wird durch +\Option{ddchead=\PSet} definitiv unterdrückt, \Option{ddcfoot=\PSet} setzt das +\DDC-Logo in jedem Fall in den Seitenfuß. Die Verwendung einer der drei +Optionen führt folglich zur Deaktivierung der anderen beiden. + +Das \DDC-Logo wird standardmäßig sowohl im Kopf als auch im Fuß in der gleichen +Höhe gesetzt, wie das Logo der \TnUD und kann zumindest für den Kopf nicht +geändert. Wird es im Fuß verwendet, lässt sich die Größe über die Option +\Option{footlogoheight} ändern. Sollte nach einer Vergrößerung der Darstellung +die Höhe des Fußbereiches nicht ausreichen, so kann diese über +\Option{extrabottommargin=\PName{Höhe}} respektive +\Option{cdfoot=\PValueName{Höhe}} angepasst werden. +Die möglichen Werte für die drei Schlüssel sind: +% +\begin{values}{\Option{ddc}} +\itemfalse + Bei den \PageStyle{tudheadings}"=Seitenstile erscheint kein Logo von \DDC. +\itemtrue* + Das Logo von \DDC wird im Kopf beziehungsweise im Fuß verwendet. Die Wahl der + Farbe des Logos geschieht passend zur farblichen Ausprägung der Seite selbst. +\end{values} +% +Die Farbe des \DDC-Logos wird in Abhängigkeit der farblichen Ausprägung des +Layouts (Option \Option{cd=\PSet}) automatisch gewählt. Dies lässt sich manuell +ändern: +% +\begin{values}{\Option{ddc}} +\item[color] + Im Kopf oder Fuß wird die achtfarbige 4C"~Variante des \DDC-Logos genutzt. +\item[colorblack] + Es wird das achtfarbige Logo mit schwarzem \DDC-Schriftzug anstelle des + grauen verwendet. Für den Fuß wird der grüne Claim durch einen schwarzen + ersetzt. Dies ist insbesondere für kleine Darstellungen des Logos im Fuß + sinnvoll. +\item[gray/grey] + Dies Ausgabe des \DDC-Logos erfolgt in Graustufen. +\item[black] + Verwendung des Logos in Graustufen mit schwarzem Schriftzug. +\item[blue] + Schriftzug und Logo werden in Abstufungen der Hausfarbe \Color{HKS41} gesetzt. +\item[white] + Das \DDC-Logo sowie der dazugehörige Schriftzug sind vollständig weiß. +\end{values} +\index{Layout!Seitenstil|)}% +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Environment{tudpage}[\OLParameter{Sprache}]} +\begin{Declaration}{\Key{\Environment{tudpage}}{language=\PName{Sprache}}} +\begin{Declaration}{\Key{\Environment{tudpage}}{columns=\PName{Anzahl}}} +\begin{Declaration}[v2.02]{\Key{\Environment{tudpage}}{pagestyle=\PSet}} +\begin{Declaration}{\Key{\Environment{tudpage}}{cdfont=\PSet}}{% + \seeref{\Option{cdfont}'ppage'}% +} +\begin{Declaration}[v2.03]{\Key{\Environment{tudpage}}{cdhead=\PSet}}{% + \seeref{\Option{cdhead}'ppage'}% +} +\begin{Declaration}[v2.03]{\Key{\Environment{tudpage}}{cdfoot=\PSet}}{% + \seeref{\Option{cdfoot}'ppage'}% +} +\begin{Declaration}{\Key{\Environment{tudpage}}{headlogo=\PName{Dateiname}}}{% + \seeref{\Macro{headlogo}'ppage'}% +} +\begin{Declaration}[v2.03]{% + \Key{\Environment{tudpage}}{footlogo=\PName{Dateinamenliste}} +}{\seeref{\Macro{footlogo}'ppage'}} +\begin{Declaration}[v2.02]{\Key{\Environment{tudpage}}{ddc=\PSet}}{% + \seeref{\Option{ddc}'ppage'}% +} +\begin{Declaration}[v2.02]{\Key{\Environment{tudpage}}{ddchead=\PSet}}{% + \seeref{\Option{ddchead}'ppage'}% +} +\begin{Declaration}[v2.02]{\Key{\Environment{tudpage}}{ddcfoot=\PSet}}{% + \seeref{\Option{ddcfoot}'ppage'}% +} +\printdeclarationlist% +\index{Layout!Kopfzeile}% +\index{Layout!Fußzeile}% +\index{Layout!Seitenstil}% +% +Die \Environment{tudpage}"=Umgebung hat ihren Ursprung in einer früheren +Version, als die \PageStyle{tudheadings}"=Seitenstile noch nicht verfügbar +waren, welche mittlerweile anstelle dieser Umgebung verwendet werden können. +Für die \Environment{tudpage}"=Umgebung lassen sich verschiedene Parameter als +optionales Argument angegeben. Wird das Paket \Package{babel} genutzt, kann die +genutzte Sprache mit \Key{\Environment{tudpage}}{language=\PName{Sprache}} +geändert werden, was zur Anpassung der sprachspezifischen Trennungsmuster und +Bezeichner führt. Wurde das Paket \Package{multicol} geladen, wird mit dem +Parameter \Key{\Environment{tudpage}}{columns=\PName{Anzahl}} der Inhalt der +Umgebung mehrspaltig gesetzt. Mit \Key{\Environment{tudpage}}{pagestyle} kann +der Seitenstil angepasst werden, wobei \PValue{headings}, \PValue{plain} und +\PValue{empty} gültige Werte sind. + +Die weiteren Parameter entsprechen in ihrem Verhalten den gleichnamigen +Klassenoptionen oder Befehlen, wirken sich jedoch nur innerhalb der +\Environment{tudpage}"=Umgebung aus. Das Verhalten sowie gültige +Wertzuweisungen ist auf den angegebenen Seiten dokumentiert. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + + +\subsection{Der Titel und die Umschlagseite} +\tudhyperdef*{sec:title}% +\index{Titel}% +\index{Umschlagseite}% +% +\ChangedAt*{% + v2.03:Bugfix für Umschlagseite und Titel beim Satzspiegel% +} +% +Für das Erstellen eines Titels mit dem Befehl \Macro{maketitle} wird mit der +\KOMAScript-Option +\Option{titlepage=\PBoolean}(\Package{koma-script})'none'|declare| +festgelegt, ob dieser in Gestalt einer ganzen Titelseite oder nur als Titelkopf +erscheinen soll. Für den Titel im \TUDCD werden alle Felder unterstützt, welche +bereits durch \KOMAScript{} definiert sind. Darüber hinaus werden für die +\TUDScript-Klassen weitere Felder bereitgestellt, welche Auswirkungen auf die +Gestalt des Titels haben. Diese werden nachfolgend in diesem \autorefname +erläutert. Der Titel~-- bestehend aus einem möglichen Schmutztitel +(\Macro{extratitle}(\Package{koma-script})) inklusive dazugehöriger Rückseite +(\Macro{frontispiece}[\Parameter{Frontispiz}](\Package{koma-script})), der +eigentlichen Titelseite respektive des Titelkopfes und der nachgelagerten +Elementen~-- kann mit \Macro{maketitle} ausgegeben werden. Außerdem kann im +zweispaltigen Satz \Macro{maketitleonecolumn} verwendet werden, womit eine +einspaltige Ergänzung nach dem Titel selbst ermöglicht wird. + +Zusätzlich zum Titel lässt sich mit \Macro{makecover} eine Umschlagseite +erzeugen. Diese kann insbesondere für gebundene Arbeiten verwendet werden. Es +wird~-- im Vergleich zum Titel~-- lediglich einer reduzierte Anzahl an Feldern +auf dieser ausgegeben. + +\begin{Declaration}[% + v2.01:Bugfix für Schriftstärke auf Titelseite;% + v2.02:Unterstützung der Schriftelemente \Font*{titlehead}, + \Font*{subject}, \Font*{title}, \Font*{subtitle}, \Font*{author}, + \Font*{date}, \Font*{publishers}, \Font*{dedication}, + \Font*{titlepage} und \Font*{thesis}% +]{\Macro{maketitle}[\OLParameter{Seitenzahl}]} +\begin{Declaration}[v2.02]{% + \Key{\Macro{maketitle}}{pagenumber=\PName{Seitenzahl}}% +} +\begin{Declaration}[v2.06]{\Key{\Macro{maketitle}}{cdgeometry=\PSet}}{% + \seeref{\Option{cdgeometry}'ppage'}% +} +\begin{Declaration}[v2.02]{\Key{\Macro{maketitle}}{cdfont=\PSet}}{% + \seeref{\Option{cdfont}'ppage'}% +} +\begin{Declaration}[v2.03]{\Key{\Macro{maketitle}}{cdhead=\PSet}}{% + \seeref{\Option{cdhead}'ppage'}% +} +\begin{Declaration}[v2.03]{\Key{\Macro{maketitle}}{cdfoot=\PSet}}{% + \seeref{\Option{cdfoot}'ppage'}% +} +\begin{Declaration}[v2.03]{% + \Key{\Macro{maketitle}}{headlogo=\PName{Dateiname}}% +}{\seeref{\Macro{headlogo}'ppage'}} +\begin{Declaration}[v2.03]{% + \Key{\Macro{maketitle}}{footlogo=\PName{Dateinamenliste}} +}{\seeref{\Macro{footlogo}'ppage'}} +\begin{Declaration}[v2.03]{\Key{\Macro{maketitle}}{ddc=\PSet}}{% + \seeref{\Option{ddc}'ppage'}% +} +\begin{Declaration}[v2.03]{\Key{\Macro{maketitle}}{ddchead=\PSet}}{% + \seeref{\Option{ddchead}'ppage'}% +} +\begin{Declaration}[v2.03]{\Key{\Macro{maketitle}}{ddcfoot=\PSet}}{% + \seeref{\Option{ddcfoot}'ppage'}% +} +\printdeclarationlist% +\index{Titel|!(}% +\index{Satzspiegel!doppelseitig}% +% +Der Befehl \Macro{maketitle} setzt für \Option{cdtitle=false} den normalen +\KOMAScript"=Titel{}, ansonsten wird die Titelseite im \TUDCD erzeugt. Die +letztere Variante ist im Vergleich zum Standardtitel um eine Vielzahl von +Feldern erweitert worden und erlaubt insbesondere die Angabe von Daten für das +Deckblatt einer akademischen Abschlussarbeit. Die einzelnen Felder werden +später in diesem \autorefname erläutert. Wird das Dokument doppelseitig und mit +rechts öffnenden Kapiteln gesetzt,% +\footnote{% + \KOMAScript-Optionen \Option{twoside=true}(\Package{typearea})'none' und + \Option{open=right}(\Package{koma-script})'none', Standard für + \Class{tudscrbook}% +} +so wird zusätzlich die Option \Option{cleardoublespecialpage} einbezogen. Dies +ist insbesondere bei den Befehlen \Macro{uppertitleback}(\Package{koma-script}) +respektive \Macro{lowertitleback}(\Package{koma-script}) für die Titelrückseite +zu beachten. + +Das optionale Argument erlaubt~-- ebenso wie bei den \KOMAScript"=Klassen~-- +die Änderung der Seitenzahl der Titelseite. Diese wird jedoch nicht ausgegeben, +sondern beeinflusst lediglich die Zählung. Sie sollten hier unbedingt eine +ungerade Zahl wählen, da sonst die gesamte Zählung durcheinander gerät. +Wird eine Titelseite +(\KOMAScript-Option \Option{titlepage=true}(\Package{koma-script})'none') im +\TUDCD gesetzt (\Option{cdtitle=true}), können auch die weiterhin aufgeführten +Parameter im optionalen Argument verwendet werden. Diese entsprechen in ihrem +Verhalten den gleichnamigen Optionen respektive Befehlen, wirken sich jedoch +nur lokal und einzig auf die Titelseite aus. So kann beispielsweise die Nutzung +eines \DDC-Logos auf den Titel beschränkt bleiben. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{% + \Macro{maketitleonecolumn}[% + \OLParameter{Seitenzahl}\Parameter{Einspaltentext}% + ]% +} +\printdeclarationlist% +\index{Satzspiegel!doppelseitig}% +\index{Satzspiegel!zweispaltig}% +% +Im zweispaltigen Satz +(Klassenoption~\Option{twocolumn}(\Package{typearea})'none'|declare|) wird mit +\Macro{maketitle} die Titelseite selbst immer einspaltig gesetzt. Direkt nach +dem Titel folgt normalerweise der zweispaltige Fließtext. Mit dem Befehl +\Macro{maketitleonecolumn} kann nach dem Titel zusätzlich weiterer Inhalt~-- +zum Beispiel eine Zusammenfassung respektive eine Kurzfassung~-- einspaltig +gesetzt werden. + +Bei einer aktivierten Titelseite +(\KOMAScript-Option~\Option{titlepage=true}(\Package{koma-script})'none') +erfolgt die Ausgabe des Argumentes \Parameter{Einspaltentext} direkt nach +dieser auf einer oder gegebenenfalls mehreren neuen Seiten ebenfalls +einspaltig. Wird der Befehl \Macro{maketitleonecolumn} statt mit einer +Titelseite jedoch mit einem Titelkopf +(\KOMAScript-Option~\Option{titlepage=false}(\Package{koma-script})'none') zum +Einsatz, so folgt diesem die einspaltige Textpassage aus dem obligatorischen +Argument direkt, wobei gegebenenfalls bei entsprechendem Inhalt ein +automatischer Seitenumbruch erfolgt. Danach wird direkt und ohne zusätzlichen +Umbruch auf das zweispaltige Layout umgeschaltet. + +Der optionale Parameter von \Macro{maketitleonecolumn} kann äquivalent zu +\Macro{maketitle} für die Änderung der Seitenzahl, der verwendeten Schrift +sowie zur Anpassung von Kopf und Fuß verwendet werden. Dabei ist zu beachten, +dass ein Großteil der Parameter nur Auswirkungen haben, falls eine Titelseite +(\KOMAScript-Option \Option{titlepage=true}(\Package{koma-script})'none') +verwendet wird. +\end{Declaration} + +\begin{Declaration}[% + v2.02:Umschlagseite für Layout ohne \noexpand\CD hinzugefügt;% + v2.02:Unterstützung der Schriftelemente \Font*{titlehead}, + \Font*{subject}, \Font*{title}, \Font*{subtitle}, \Font*{author}, + \Font*{publishers}, \Font*{titlepage} und \Font*{thesis}% +]{\Macro{makecover}[\OLParameter{Seitenzahl}]} +\begin{Declaration}[v2.02]{% + \Key{\Macro{makecover}}{pagenumber=\PName{Seitenzahl}}% +} +\begin{Declaration}{\Key{\Macro{makecover}}{cdgeometry=\PBoolean}} +\begin{Declaration}[v2.02]{\Key{\Macro{makecover}}{cdfont=\PSet}}{% + \seeref{\Option{cdfont}'ppage'}% +} +\begin{Declaration}[v2.03]{\Key{\Macro{makecover}}{cdhead=\PSet}}{% + \seeref{\Option{cdhead}'ppage'}% +} +\begin{Declaration}[v2.03]{\Key{\Macro{makecover}}{cdfoot=\PSet}}{% + \seeref{\Option{cdfoot}'ppage'}% +} +\begin{Declaration}[v2.03]{% + \Key{\Macro{makecover}}{headlogo=\PName{Dateiname}}% +}{\seeref{\Macro{headlogo}'ppage'}} +\begin{Declaration}[v2.03]{% + \Key{\Macro{makecover}}{footlogo=\PName{Dateinamenliste}} +}{\seeref{\Macro{footlogo}'ppage'}} +\begin{Declaration}[v2.03]{\Key{\Macro{makecover}}{ddc=\PSet}}{% + \seeref{\Option{ddc}'ppage'}% +} +\begin{Declaration}[v2.03]{\Key{\Macro{makecover}}{ddchead=\PSet}}{% + \seeref{\Option{ddchead}'ppage'}% +} +\begin{Declaration}[v2.03]{\Key{\Macro{makecover}}{ddcfoot=\PSet}}{% + \seeref{\Option{ddcfoot}'ppage'}% +} +\printdeclarationlist% +\index{Umschlagseite|!(}% +% +Eine Umschlagseite wird zumeist für gebundene Abschlussarbeiten verlangt, um +diese beispielsweise für einen Prägedruck auf dem Buchdeckel zu verwenden. +Deshalb ist die farbige Ausprägung der Umschlagseite auch deaktiviert, wenn +diese für das restliche Dokument aktiv ist (\Option{cd=color}). Dies kann +jedoch jederzeit mit \Option{cdcover=\PSet} überschrieben werden. + +Wird \Option{cdcover=true} gewählt, so wird die Umschlagseite im \TUDCD +gesetzt. Auf dieser werden der Titel des Dokumentes, die Typisierung +durch \Macro{thesis} und/oder \Macro{subject} sowie der Autor oder respektive +die Autoren und gegebenenfalls der mit \Macro{publishers}(\Package{koma-script}) +angegebene Verlag ausgegeben. +\ChangedAt{v2.02} +Für die Einstellung \Option{cdcover=false} wird lediglich der normale +\KOMAScript"=Titel als separate Umschlagseite ausgegeben. + +Die Titelseite selbst gehört immer zum Buchblock und sollte daher im gleichen +Satzspiegel gesetzt werden. Dem entgegen steht die Umschlagseite, welche +zumeist in einem anderen Layout erscheint. Normalerweise wird das Cover~-- +unabhängig von der Option \Option{cdgeometry}~-- im asymmetrischen Satzspiegel +des \CDs gesetzt. Mit \Key*{\Macro{makecover}}{cdgeometry=false} im optionalen +Argument kann das Verhalten geändert werden. In diesem Fall erscheint auch die +Umschlagseite im Buchblock des restlichen Dokumentes. Allerdings können für +diese Einstellung die Seitenränder mit den Befehlen +\Macro{coverpagetopmargin}(\Package{koma-script})'none', +\Macro{coverpageleftmargin}(\Package{koma-script})'none', +\Macro{coverpagerightmargin}(\Package{koma-script})'none' sowie +\Macro{coverpagebottommargin}(\Package{koma-script})'none' +durch den Nutzer frei angepasst werden. Mehr dazu ist im \scrguide zu finden. + +Außerdem kann mit dem optionalen Argument die Seitenzahl der Umschlagseite +geändert werden. Diese wird jedoch nicht ausgegeben, sondern beeinflusst +lediglich die Zählung. Sie sollten hier unbedingt eine ungerade Zahl wählen, da +sonst die gesamte Zählung durcheinander gerät. Die weiterhin aufgeführten +Parameter entsprechen in ihrem Verhalten beziehungsweise ihrer Funktion den +gleichnamigen Optionen respektive Befehlen, wirken sich jedoch nur lokal und +einzig auf die Umschlagseite aus. +\index{Umschlagseite|!)}% +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{title}[\Parameter{Titel}]} +\begin{Declaration}[% + v2.01:Bugfix für Schriftstärke bei Verwendung des Untertitels% +]{\Macro{subtitle}[\Parameter{Untertitel}]} +\printdeclarationlist% +\index{Titel!Felder|(}% +% +Die Befehle \Macro{title} und \Macro{subtitle} sind selbsterklärend. Anzumerken +ist, dass die Schriftstärke des Titels von der Option \Option{headings} abhängt +und der Untertitel immer im fetten Schnitt erscheint. +\end{Declaration} +\end{Declaration} + +\begin{Declaration}[v2.02]{\Font{titlepage}} +\begin{Declaration}[v2.02]{\Font{thesis}} +\begin{Declaration}[v2.06]{\Macro{raggedtitle}} +\printdeclarationlist% +\index{Schriftelemente}% +% +Die \TUDScript-Klassen definieren diese neuen Schriftelemente. Dabei wird +\Font{titlepage} auf der Titelseite für alle Felder verwendet, welche kein +spezielles Schriftelement verwenden, welches ohnehin durch \KOMAScript{} +bereitgestellt wird. Das mit \Macro{thesis} angegebene Feld, in welchem der Typ +einer Abschlussarbeit angegeben wird, nutzt das Schriftelement~\Font{thesis}. + +\ChangedAt{v2.02} +Für alle Felder des Titels und der Umschlagseite lassen sich die verwendeten +Schriften anpassen. In \autoref{sec:fonts:elements} lässt sich nachlesen, wie +dies genau funktioniert. Dabei werden für Titel und Umschlagseite sowohl die +bereits durch \KOMAScript{} bereitgestellten Schriftelemente +\Font{titlehead}(\Package{koma-script})'none', +\Font{subject}(\Package{koma-script})'none', +\Font{title}(\Package{koma-script})'none', +\Font{subtitle}(\Package{koma-script})'none', +\Font{author}(\Package{koma-script})'none', +\Font{publishers}(\Package{koma-script})'none', +\Font{date}(\Package{koma-script})'none' und +\Font{dedication}(\Package{koma-script})'none' +als auch die neuen \Font{titlepage} und \Font{thesis} unterstützt. +\ChangedAt{v2.06} +Der Befehl \Macro{raggedtitle} definiert die Ausrichtung des Titels, welcher +standardmäßig linksbündig gesetzt wird. +\begin{Example} +Um die Einträge auf der Titelseite zentriert auszugeben, genügt folgende +Definition: +\begin{Code} +\let\raggedtitle\centering +\end{Code} +\end{Example} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{author}[\Parameter{Autor(en)}]} +\begin{Declaration}{\Macro{authormore}[\Parameter{Autorenzusatz}]} +\begin{Declaration}[% + v2.02;% + v2.05:optionales Argument zur Formatierung mit \Macro*{hypersetup};% + v2.06:wird für alle Klassen bereitgestellt, Verwendung im Titel möglich% +]{% + \Macro{emailaddress}[\OParameter{Einstellungen}\Parameter{E-Mail-Adresse}]% +} +\begin{Declaration}[% + v2.05;% + v2.06:wird für alle Klassen bereitgestellt, Verwendung im Titel möglich% +]{\Macro{emailaddress*}[\Parameter{E-Mail-Adresse}]} +\begin{Declaration}{\Macro{dateofbirth}[\Parameter{Geburtsdatum}]} +\begin{Declaration}{\Macro{placeofbirth}[\Parameter{Geburtsort}]} +\begin{Declaration}{\Macro{matriculationnumber}[\Parameter{Matrikelnummer}]} +\begin{Declaration}{\Macro{matriculationyear}[\Parameter{Immatrikulationsjahr}]} +\begin{Declaration}[% + v2.05:Für Titel verwendbar% +]{\Macro{course}[\Parameter{Studiengang}]} +\begin{Declaration}[% + v2.02;% + v2.05:Für Titel verwendbar% +]{\Macro{discipline}[\Parameter{Studienrichtung}]} +\printdeclarationlist% +\index{Autorenangaben|?}% +\index{Kollaboratives Schreiben}% +\index{Datum!Geburtsdatum|?}% +% +Mit dem Befehl \Macro{author} wird der Autor angegeben. Innerhalb des +Argumentes können auch mehrere Autoren aufgeführt werden, wobei diese in diesem +Fall jeweils mit \Macro{and} zu trennen sind. Alle weiteren hier vorgestellten +Befehle können selbst im Argument von \Macro{author} verwendet werden, wodurch +für jeden Autor individuelle Angaben möglich sind. + +Mit \Macro{authormore} wird unter dem Autor eine Zeile ausgegeben, welche +durch den Anwender frei belegt werden kann. Mit \Macro{emailaddress} kann für +jeden Autor eine E"~Mail"=Adresse angegeben werden, welche als Hyperlink +definiert wird, falls das Paket \Package{hyperref} geladen wurde. Das optionale +Argument wird an \Macro{hypersetup}(\Package{hyperref})'none' aus besagtem +Paket übergeben und kann somit für zusätzliche Einstellungen genutzt werden. +Mit der Sternversion \Macro{emailaddress*} erfolgt keine Formatierung des +Eintrags im Argument. + +Sollte das Paket \Package{isodate} oder \Package{datetime2} geladen sein, wird +die damit eingestellte Formatierung des Datums durch \Macro{dateofbirth}~-- wie +übrigens bei jedem anderem Datumsfeld der \TUDScript-Klassen auch~-- für das +Geburtsdatum auf dem Titel verwendet. Hierfür wird entweder +\Macro{printdate}(\Package{isodate})'none' von \Package{isodate} oder +\Macro{DTMDate}(\Package{datetime2})'none' aus \Package{datetime2} genutzt. Mit +dem Befehl \Macro{placeofbirth} lässt sich zusätzlich ein Geburtsort angeben. + +Die weiteren Befehle als zusätzliche Angabe erklären sich quasi von selbst. +Anzumerken ist, dass die mit den Befehlen \Macro{matriculationnumber}, +\Macro{matriculationyear}, \Macro{course} sowie \Macro{discipline} gemachten +Angaben ebenfalls vom Paket \Package{tudscrsupervisor} innerhalb der +\Environment{task}(\Package{tudscrsupervisor})"=Umgebung genutzt werden, falls +diese denn zum Einsatz kommt. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{and}} +\printdeclarationlist% +\index{Kollaboratives Schreiben|?}% +% +Dieser Befehl wird sowohl bei den \hologo{LaTeX}"=Standardklassen als auch bei +den \KOMAScript"=Klassen lediglich auf der Titelseite dazu verwendet, mehrere +Autoren im Argument von \Macro{author} voneinander zu trennen. + +Bei den \TUDScript-Klassen hingegen ist dieser Befehl derart in seiner Funktion +erweitert worden, dass damit die Angabe einer kollaborativen Autorenschaft für +Abschlussarbeiten innerhalb des Befehls \Macro{author} möglich ist. Außerdem +kann er noch im Argument von \Macro{supervisor}, \Macro{referee} sowie +\Macro{advisor} verwendet werden, um mehrere Betreuer beziehungsweise Gutachter +und Fachreferenten anzugeben. Er ist dabei nicht auf die Verwendung für den +Titel allein beschränkt sondern kann auch bei der Angabe von Personen in den +entsprechenden Feldern der Umgebungen +\begin{Bundle}{\Package{tudscrsupervisor}} +\Environment{task}, \Environment{evaluation} und \Environment{notice} +\end{Bundle} +aus dem Paket \Package{tudscrsupervisor} eingesetzt werden. +\end{Declaration} +% +\begin{Example} +Angenommen, es soll eine Abschlussarbeit von zwei unterschiedlichen Autoren in +kollaborativer Gemeinschaft erstellt werden, so lässt sich die Autorenangaben +folgendermaßen gestalten: +\begin{Code} +\author{% + Mickey Mouse% + \matriculationnumber{12345678}% + \dateofbirth{2.1.1990}% + \placeofbirth{Dresden}% +\and% + Donald Duck% + \matriculationnumber{87654321}% + \dateofbirth{1.2.1990}% + \placeofbirth{Berlin}% +} +\matriculationyear{2010} +\end{Code} +Alle zusätzlichen Angaben außerhalb des Argumentes von \Macro{author} werden +für beide Autoren gleichermaßen übernommen. Angaben innerhalb des Argumentes +von \Macro{author} werden den jeweiligen, mit \Macro{and} getrennten Autoren +zugeordnet. Mehr dazu ist im Minimalbeispiel in \autoref{sec:exmpl:thesis}. +\end{Example} + +\begin{Declaration}[% + v2.05:Angabe von Parametern für Prä- und Suffix bei Datumsausgabe möglich; +]{\Macro{date}[\OLParameter{Suffix}\Parameter{Datum}]} +\begin{Declaration}[v2.05]{% + \Macro{date*}[\OLParameter{Suffix}\Parameter{Datum}]% +} +\begin{Declaration}[v2.05]{% + \Key{\Macro{date}}{before=\PName{Präfix}}% +} +\begin{Declaration}[v2.05]{% + \Key{\Macro{date}}{after=\PName{Suffix}}% +} +\begin{Declaration}[v2.05]{% + \Key{\Macro{date}}{place=\PName{Ort}}% +} +\begin{Declaration}{\Macro{defensedate}[\Parameter{Verteidigungsdatum}]} +\printdeclarationlist% +\index{Datum|?}% +\index{Datum!Abgabedatum|?}% +\index{Datum!Verteidigungsdatum|?}% +% +Mit dem Befehl \Macro{date} lässt sich das Datum angegeben. +\ChangedAt{v2.05} +Über das optionale Argument können die beiden Parameter +\Key{\Macro{date}}{before} und \Key{\Macro{date}}{after} genutzt werden, um +ergänzende Angaben vor beziehungsweise nach dem eigentlichen Datum auszugeben. +Die Sternversion \Macro{date*} setzt den mit \Macro{place} angegebenen Ort vor +das Datum. Dies geschieht auch für die normale Version von \Macro{date}, wenn +der Parameter \Key{\Macro{date}}{place} verwendet wird. + +Das Datum wird bei normalen Dokumenten direkt nach dem Autor respektive den +Autoren ausgegeben. Bei Abschlussarbeiten~-- aktiviert durch die Verwendung von +\Macro{thesis} oder \Option{subjectthesis} in Verbindung mit \Macro{subject}~-- +erscheint dieses am Ende der Titelseite als Abgabedatum. Außerdem kann in +diesem Fall mit dem Befehl\Macro{defensedate} das Datum der Verteidigung +angegeben werden, wie es beispielsweise bei dem Druck von Dissertationen üblich +ist. + +Sollte eines der Pakete \Package{isodate} oder \Package{datetime2} geladen +sein, so wird mit \Macro{printdate}(\Package{isodate})'none' beziehungsweise +\Macro{DTMDate}(\Package{datetime2})'none' die durch das jeweilige Paket +eingestellte Ausgabeformatierung des Datums für alle Datumsfelder des +Dokumentes und folglich auch für die beiden Felder \Macro{date} und +\Macro{defensedate} verwendet. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{thesis}[\Parameter{Typisierung}]} +\begin{Declaration}{\Macro{subject}[\Parameter{Typisierung}]} +\printdeclarationlist% +\index{Abschlussarbeit|!}% +\index{Typisierung}% +% +Mit diesen beiden Befehlen kann der Typ der Dokumentes beziehungsweise der +Abschlussarbeit angegeben werden. Während der Befehl \Macro{thesis} den Inhalt +des Feldes unter dem Titel vertikal zentriert auf der Titelseite ausgibt, +erscheint der Inhalt des Befehls \Macro{subject} oberhalb des Titels. Es können +auch beide Befehle parallel mit unterschiedlichen Inhalten verwendet werden. +Der Befehl \Macro{thesis} dient den \TUDScript"=Dokumentklassen außerdem zur +Erkennung von Abschlussarbeiten gedacht, da für diese spezielle Felder +bereitgehalten werden und auch die Titelseite leicht geändert gesetzt wird. + +Des Weiteren ist es bei beiden Befehlen möglich, spezielle Werte als Argument +zur Typisierung des Dokumentes zu verwenden. Diese werden entsprechend der +gewählten Dokumentensprache~-- entweder Deutsch oder Englisch~-- entschlüsselt +und gesetzt. Die möglichen Werte sind \autoref{tab:thesis} zu entnehmen. Dabei +ist zu beachten, dass das Setzen eines speziellen Wertes für \emph{entweder} +\Macro{thesis} \emph{oder} \Macro{subject} möglich ist. Die Verwendung eines +der genannten Werte führt immer dazu, dass das Dokument als Abschlussarbeiten +erkannt und die erweiterte Titelseite aktiviert wird. Gleichzeitig wird damit +die Option \Option{subjectthesis} beeinflusst. Sollte vom Anwender kein +explizites Verhalten für \Option{subjectthesis} definiert sein, so führt die +Verwendung von \Macro{thesis}[\Parameter{Wert}] zu \Option{subjectthesis=false} +und \Macro{subject}[\Parameter{Wert}] zu \Option{subjectthesis=true}. +% +\begin{table} +\index{Bezeichner}% +\index{Typisierung}% +\caption{% + Spezielle Werte zur Typisierung des Dokumentes für + \Macro{thesis} und \Macro{subject}% +}% +\label{tab:thesis}% +% +\centering% +\newcommand*\typecast[2]{% + \PValue{#1} & \Term{#2} & \csuse{#2} & \selectlanguage{english}\csuse{#2} + \tabularnewline% +}% +\begin{tabular}{llll} + \toprule + \textbf{Wert} & \textbf{Bezeichner} & \textbf{Deutsch} & \textbf{Englisch} + \tabularnewline + \midrule + \typecast{diss}{dissertationname} + \typecast{doctoral}{dissertationname} + \typecast{phd}{dissertationname} + \typecast{diploma}{diplomathesisname} + \typecast{master}{masterthesisname} + \typecast{bachelor}{bachelorthesisname} + \typecast{student}{studentthesisname} + \typecast{evidence}{studentresearchname} + \typecast{project}{projectpapername} + \typecast{seminar}{seminarpapername} + \typecast{term}{termpapername} + \typecast{research}{researchname} + \typecast{log}{logname} + \typecast{report}{reportname} + \typecast{internship}{internshipname} + \bottomrule +\end{tabular} +\end{table} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Option{subjectthesis=\PBoolean}}% + [false][\Macro{subject}[\Parameter{\autoref{tab:thesis}}]:true] +\printdeclarationlist% +% +Der Befehl \Macro{thesis} dient den \TUDScript"=Hauptklassen zur Unterscheidung +zwei unterschiedlicher Ausprägungen der Titelseite und ist speziell für +Abschlussarbeiten gedacht. Außerdem kann bei der Nutzung spezieller Werte +aus \autoref{tab:thesis} innerhalb des Argumentes von \Macro{subject} ebenfalls +das Verhalten für Abschlussarbeiten aktiviert werden, wobei hierdurch die +Einstellung \Option{subjectthesis=true} automatisch vorgenommen wird. + +Für den Standardfall~-- bekanntlich \Option{subjectthesis=false}~-- wird der +durch \Macro{thesis} gegebene Typ der Abschlussarbeit sowie der gegebenenfalls +durch \Macro{graduation} gesetzte angestrebte Abschluss in großen Lettern und +sehr zentral auf der Titelseite gesetzt. Die Verwendung von \Macro{subject} ist +hierbei weiterhin möglich. +% +Wird die Option mit \Option{subjectthesis=true} aktiviert, so wird die mit +\Macro{thesis} gesetzte Bezeichnung nicht unterhalb sondern oberhalb des Titels +an der Stelle von \Macro{subject} ausgegeben. Der mit \Macro{graduation} +angegebene Abschluss wird weiterhin unter dem Titel, allerdings in schlankerer +Schrift gesetzt. Eine etwaige Verwendung des Befehls \Macro{subject} wird in +diesem Fall ignoriert. +% +\begin{values}{\Option{subjectthesis}} +\itemfalse + Die Ausgabe des Typs der Abschlussarbeit (\Macro{thesis}) selbst sowie des + angestrebten Abschlusses (\Macro{graduation}) erfolgt in großen Lettern + zentral auf der Titelseite. +\itemtrue* + Der Typ der Abschlussarbeit (\Macro{thesis}) wird oberhalb des Titels in der + Betreffzeile gesetzt. Der angestrebte Abschluss (\Macro{graduation}) wird + zentral ausgegeben. +\end{values} +\end{Declaration} + +\begin{Declaration}[v2.02]{% + \Macro{graduation}[\OParameter{Kurzform}\Parameter{Grad}]% +} +\printdeclarationlist% +% +Mit diesem Befehl wird der angestrebte akademische Grad auf der Titelseite +ausgegeben. Da dies nur mit einer Abschlussarbeit erreicht werden kann erfolgt +die Ausgabe nur, wenn entweder \Macro{thesis} oder \Macro{subject} verwendet +wurde, wobei bei letzterem Befehl im Argument zwingend ein Wert aus +\autoref{tab:thesis} verwendet werden muss. + +Bei der Ausgabe des akademischen Grades hat die Option \Option{subjectthesis} +Einfluss auf die Ausgabe auf der Titelseite. Bei \Option{subjectthesis=false} +wird der Abschluss~-- ähnlich wie der Typ der Abschlussarbeit~-- zentral und in +relativ großen Lettern gesetzt. Für \Option{subjectthesis=true} erfolgt die +Ausgabe kleiner und in weniger starken Buchstaben. +\end{Declaration} + +\begin{Declaration}{\Macro{supervisor}[\Parameter{Name(n)}]} +\begin{Declaration}{\Macro{referee}[\Parameter{Name(n)}]} +\begin{Declaration}{\Macro{advisor}[\Parameter{Name(n)}]} +\begin{Declaration}{\Macro{professor}[\Parameter{Name}]} +\printdeclarationlist% +\index{Betreuer|?}% +\index{Gutachter|?}% +\index{Referent|?}% +% +Mit \Macro{supervisor}, \Macro{referee} und \Macro{advisor} werden die Betreuer +einer Abschlussarbeit beziehungsweise die Gutachter und Fachreferenten einer +Dissertation angegeben. Zusätzlich kann mit \Macro{professor} der betreuende +Hochschullehrer beziehungsweise die betreuenden Professoren für studentische +Arbeiten angegeben werden. Die Angabe mehrerer Person erfolgt wie beim Befehl +\Macro{author} durch die Trennung mittels \Macro{and}. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}[v2.06]{\Option{titlesignature=\PBoolean}}[false]% +\printdeclarationlist% +% +Einige Lehrstühle an der \TnUD verlangen eine Unterschrift des Autors einer +Abschlussarbeit direkt auf der Titelseite. Mit dem Aktivieren dieser Option +wird ein solches Feld am unteren Seitenrand des Titels erzeugt. +\end{Declaration} + +\begin{Declaration}{\Macro{titledelimiter}[\Parameter{Trennzeichen}]} +\printdeclarationlist% +\index{Titel!Trennzeichen}% +% +Für den Titel und die Umschlagseite werden durch die \TUDScript-Klassen eine +Reihe von zusätzlichen Feldern bereitgestellt. Einigen dieser Felder wird eine +Beschreibung (\seeref{\autoref{sec:localization}}) vorangestellt. Dazwischen +wird bei der Ausgabe ein Trennzeichen eingefügt. Ein Doppelpunkt gefolgt von +einem Leerzeichen (:\Macro*{nobreakspace}) ist hierfür die Voreinstellung. Mit +dem Befehl \Macro{titledelimiter} lässt sich dieses Trennzeichen beliebig an +die individuellen Wünsche des Anwenders anpassen. +\index{Titel!Felder|)}% +\end{Declaration} + + +\begin{Bundle}{\Package{koma-script}} +\begin{Declaration}{\Macro{extratitle}[\Parameter{Schmutztitel}]} +\begin{Declaration}{\Macro{frontispiece}[\Parameter{Frontispiz}]} +\begin{Declaration}{\Macro{titlehead}[\Parameter{Kopf}]} +\begin{Declaration}{\Macro{publishers}[\Parameter{Verlag}]} +\begin{Declaration}{\Macro{thanks}[\Parameter{Fußnote}]} +\begin{Declaration}{\Macro{uppertitleback}[\Parameter{Titelrückseitenkopf}]} +\begin{Declaration}{\Macro{lowertitleback}[\Parameter{Titelrückseitenfuß}]} +\begin{Declaration}{\Macro{dedication}[\Parameter{Widmung}]} +\printdeclarationlist% +% +Diese Befehle entsprechen den in ihrem Verhalten den originalen Pendants der +\KOMAScript"=Klassen und sollen hier der Vollständigkeit halber erwähnt werden. + +Die Ausgabe des mit \Macro{extratitle} definierten Schmutztitels~-- welcher +beliebig gestaltet und formatiert werden kann~-- und der gegebenenfalls mit +\ChangedAt[\Macro{frontispiece}](){% + v2.06:Schmutztitelrückseite aus \Package{koma-script} wird unterstützt% +}% +\Macro{frontispiece} definierten Rückseite erfolgt als Bestandteil der Titelei +mit \Macro{maketitle} vor der eigentlichen Titelseite. Mit dem Befehl +\Macro{titlehead} kann ein zusätzlicher, beliebig formatierbarer Text oberhalb +der Typisierung und des Titels ausgegeben werden. Da die vertikale Position des +Dokumenttitels durch das \CD fest vorgegeben ist, kann es~-- im Gegensatz zu +den \KOMAScript"=Klassen~-- passieren, dass der Kopf des Haupttitels selbst in +die Kopfzeile ragt. Dies wird durch die \TUDScript-Klassen nicht geprüft und +muss gegebenenfalls vom Anwender kontrolliert werden. Der mit dem Befehl +\Macro{publishers} definierte Inhalt muss nicht zwingende einen Verlag +bezeichnen sondern kann auch andere Informationen beinhalten, welche am Ende +der Titelseite ausgegeben werden sollen. + +Fußnoten werden auf dem Titel nicht mit +\Macro{footnote}(\Package{koma-script})'none', sondern mit der Anweisung +\Macro{thanks} erzeugt. Diese dienen in der Regel für Anmerkungen bei Titel +oder den Autoren. Als Fußnotenzeichen werden dabei Symbole statt Zahlen +verwendet. Der Befehl \Macro{thanks} kann nur innerhalb des Arguments einer der +Anweisungen für die Titelseite wie beispielsweise \Macro{author} oder +\Macro{title} verwendet werden. + +\index{Satzspiegel!doppelseitig}% +Im doppelseitigen Druck lässt sich die Rückseite der Haupttitelseite für +weitere Angaben nutzen. Sowohl den Titelrückseitenkopf als auch den +Titelrückseitenfuß kann der Anwender mit \Macro{uppertitleback} und +\Macro{lowertitleback} frei gestalten. + +Mit \Macro{dedication} lässt eine separate Widmungsseite zentriert und in etwas +größerer Schrift setzen. Die Rückseite ist~-- wie auch die des Schmutztitels~-- +grundsätzlich leer. Die Widmung wird mit der restlichen Titelei ausgegeben und +muss daher vor der Nutzung von \Macro{maketitle} angegeben werden. +\index{Titel|!)}% +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Bundle} + +\subsection{Die Teileseite} +\tudhyperdef*{sec:part}% +% +\ChangedAt[\Macro{partpagestyle}(\Package{koma-script})]{% + v2.02:Seitenstil \PageStyle{plain.tudheadings} wird genutzt% +} +Wird für die Teileseiten das Layout des \CDs verwendet, so wird der Seitenstil +dieser (\Macro{partpagestyle}(\Package{koma-script})'none') auf +\PageStyle{plain.tudheadings} gesetzt. Möchten Sie stattdessen einen anderen +Seitenstil nutzen, so kann dieser mit +\Macro*{renewcommand*}[% + \PParameter{\Macro{partpagestyle}(\Package{koma-script})'none'}% + \Parameter{Seitenstil}% +] +angepasst werden. + +\begin{Declaration}[v2.06]{\Macro{setpartsubtitle}[\Parameter{Untertitel}]} +\begin{Declaration}[v2.06]{\Font{partsubtitle}} +\printdeclarationlist% +\index{Layout!Teileseiten|?}% +\index{Layout!Überschriften}% +\index{Schriftelemente}% +% +Mit \Macro{setpartsubtitle}[\Parameter{Untertitel}] kann für Teile nach der +Überschrift selbst ein Untertitel gesetzt werden. Der Befehl muss in gleicher +Weise wie \Macro{setpartpreamble}(\Package{koma-script})'none' \emph{vor} der +Verwendung von \Macro{part}(\Package{koma-script})'none' oder den davon +abgeleiteten Varianten angegeben werden. Mit dem Schriftelement +\Font{partsubtitle} lässt sich die Schrift für den gegebenen Untertitel +verändern. In \autoref{sec:fonts:elements} ist zu finden, wie es angepasst +werden kann. +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Option{parttitle=\PBoolean}}[false]% +\printdeclarationlist% +\index{Layout!Teileseiten|?}% +\index{Layout!Überschriften}% +% +Diese Option ermöglicht es, den mit \Macro{title} gegebenen Titel des +Dokumentes selbst in großer Schrift auf einer Teileseite auszugeben, die +Bezeichnung des mit +\Macro{part}[\Parameter{Bezeichnung}](\Package{koma-script})'none' erzeugten +Teils wird in diesem Fall als Untertitel direkt darunter gesetzt. Diese +Layout"=Variante findet sich im Handbuch für das \TUDCD. \notudscrartcl +% +\begin{values}{\Option{parttitle}} +\itemfalse + Die Bezeichnung des Teils erscheint in großer Schrift, der Titel des + Dokumentes wird nicht ausgegeben. +\itemtrue* + Der angegebene Titel wird in großer Auszeichnung auf der Teileseite gesetzt, + die Bezeichnung des Teils selber als Untertitel. +\end{values} +\end{Declaration} + + + +\subsection{Die Kapitelseite} +\begin{Declaration}{\Option{chapterpage=\PBoolean}}% + [false][\Option{cd=color}:true]% +\printdeclarationlist% +\tudhyperdef*{sec:chapter}% +\index{Layout!Kapitelseiten|?}% +\index{Layout!Überschriften}% +\index{Satzspiegel!doppelseitig}% +\index{Vakatseiten}% +% +Mit dieser Einstellung kann die Überschrift eines Kapitels separat auf einer +Seite ausgegeben werden. Der nachfolgende Text wird auf der nächsten +beziehungsweise bei doppelseitigem Satz und rechts öffnenden Kapiteln% +\footnote{% + \KOMAScript-Optionen \Option{twoside=true}(\Package{typearea})'none' und + \Option{open=right}(\Package{koma-script})'none', Standard für + \Class{tudscrbook}% +} +auf der übernächsten Seite ausgegeben. Die in diesem Fall erzeugte Rückseite +wird in ihrer Ausprägung~-- wie auch Teileseiten~-- durch die Einstellung von +\Option{cleardoublespecialpage} bestimmt. Beim farbigen Layout ist diese Option +standardmäßig aktiviert. \notudscrartcl +% +\begin{values}{\Option{chapterpage}} +\itemfalse + Es gibt keine Sonderstellung von Kapiteln, der nachfolgende Text wird direkt + unter der Überschrift respektive nach der mit + \Macro{setchapterpreamble}(\Package{koma-script})'none' erzeugten + Kapitelpräambel auf der gleichen Seite ausgegeben. +\itemtrue* + Die Kapitelüberschrift und gegebenenfalls die Kapitelpräambel werden auf + einer separaten Seite gesetzt. Der folgende Text erscheint auf der nächsten + respektive übernächsten Seite, \seeref*{\Option{cleardoublespecialpage}}. +\end{values} +% +\ChangedAt[\Macro{chapterpagestyle}(\Package{koma-script})]{% + v2.02:nicht mehr abhängig von \Macro{partpagestyle}(\Package{koma-script}) +} +Mit \Macro*{renewcommand*}[% + \PParameter{\Macro{chapterpagestyle}(\Package{koma-script})'none'}% + \Parameter{Seitenstil}% +] +lässt sich übrigens~-- unabhängig von der Option \Option{chapterpage}~-- der +Seitenstil von Kapiteln anpassen. Bei der Verwendung von Kapitelseiten mit +\Option{chapterpage=true} ist außerdem das Aktivieren der \KOMAScript-Option +\Option{chapterprefix=\PBoolean}(\Package{koma-script})'none'|declare| +empfehlenswert. Damit werden die Kapitelüberschriften mit einer Vorsatzzeile +gesetzt. Wird ein nummeriertes Kapitel erzeugt, so wird zunächst in einer Zeile +\enquote{Kapitel} gefolgt von der aktuellen Kapitelnummer ausgegeben, in der +nächsten Zeile wird anschließend die eigentliche Überschrift in linksbündigem +Flattersatz ausgegeben. Mehr dazu ist der \scrguide[\KOMAScript-Dokumentation] +zu entnehmen. +\end{Declaration} + +\begin{Declaration}[v2.06]{\Macro{setchaptersubtitle}[\Parameter{Untertitel}]} +\begin{Declaration}[v2.06]{\Font{chaptersubtitle}} +\printdeclarationlist% +\index{Layout!Kapitelseiten|?}% +\index{Layout!Überschriften}% +\index{Schriftelemente}% +% +Mit \Macro{setchaptersubtitle}[\Parameter{Untertitel}] kann für Kapitel nach +der Überschrift selbst ein Untertitel gesetzt werden. Der Befehl muss in +gleicher Weise wie \Macro{setchapterpreamble}(\Package{koma-script})'none' +\emph{vor} der Verwendung von \Macro{chapter}(\Package{koma-script})'none' oder +den davon abgeleiteten Varianten angegeben werden. Mit dem Schriftelement +\Font{chaptersubtitle} lässt sich die Schrift für den gegebenen Untertitel +verändern. In \autoref{sec:fonts:elements} ist zu finden, wie es angepasst +werden kann. +\end{Declaration} +\end{Declaration} + + +\subsection{Vakatseiten} +\index{Vakatseiten|(}% +% +Automatisch erzeugte Vakatseiten~-- auch absichtliche Leerseiten genannt~-- +sind in Abhängigkeit der +\KOMAScript-Optionen \Option{twoside=\PSet}(\Package{typearea})'none'|declare| +und \Option{open=\PName{Methode}}(\Package{koma-script})'none'|declare| am +Beginn von Teilen und Kapiteln in Dokumenten zu finden.% +\footnote{% + Voreinstellungen + \Class{tudscrbook}: + \Option{twoside=true}(\Package{typearea})'none', + \Option{open=right}(\Package{koma-script})'none'; + \Class{tudscrartcl}, \Class{tudscrreprt}: + \Option{open=any}(\Package{koma-script})'none', + \Option{twoside=false}(\Package{typearea})'none'% +} +Für die Vakatseiten kann der Seitenstil mit der \KOMAScript"=Option +\Option{cleardoublepage=\PSet}(\Package{koma-script})'none'|declare| +eingestellt werden. + +\begin{Declaration}[% + v2.06:Einstellung für farbige Rückseiten% +]{\Option{cleardoublespecialpage=\PSet}}[true]% +\printdeclarationlist% +\index{Titel}% +\index{Layout!Teileseiten}% +\index{Layout!Kapitelseiten}% +\index{Layout!Rückseiten}% +\index{Satzspiegel!doppelseitig}% +% +Diese Option wirkt sich lediglich bei aktiviertem doppelseitigem Satz und +ausschließlich rechts eröffnenden Seiten für Teile beziehungsweise Kapitel +aus.% +\footnote{% + \KOMAScript"=Option \Option{twoside=true}(\Package{typearea})'none' und + \Option{open=right}(\Package{koma-script})'none'% +} +In diesem Fall kann der Stil der darauffolgenden, linken Seite~-- sprich der +Rückseite~-- beeinflusst werden. Das Normalverhalten sieht vor, dass nach einem +Teil die nachfolgende Rückseite unabhängig von der Einstellung für +\Option{cleardoublepage}(\Package{koma-script})'none' immer als vollständig +leere Seite ohne Kopf"~ oder Fußzeilen gesetzt wird. + +Diese Option erlaubt es, das Normalverhalten zu deaktivieren und für die Seite +nach der Teileseite~-- und abhängig von \Option{chapterpage} auch nach einem +Kapitelanfang auf einer separaten Seite~-- den Seitenstil der Option +\Option{cleardoublepage}(\Package{koma-script})'none' zu übernehmen. Des +Weiteren kann auch ein anderer, bereits definierter Seitenstil gewählt werden. +Außerdem kann im farbigen Layout die Rückseite in der gleichen Farbe wie die +Vorderseite von Titel, Teil oder Kapitel gesetzt werden. +\notudscrartcl +% +\begin{values}{\Option{cleardoublespecialpage}} +\itemfalse + Die Rückseiten sind vollständig leere Seiten, unabhängig von Option + \Option{cleardoublepage}(\Package{koma-script})'none'. +\itemtrue* + Der Seitenstil der Rückseite von Teilen und gegebenenfalls Kapiteln entspricht + der Einstellung von \Option{cleardoublepage}(\Package{koma-script})'none' für + Vakatseiten. +\item[current] + Für die erzeugte Rückseite wird der aktuell definierte Seitenstil + (\Macro{pagestyle}(\Package{koma-script})'none') verwendet. +\item[\PValueName{Seitenstil}] + Mit der Angabe von \Option{cleardoublespecialpage=\PName{Seitenstil}} + kann ein beliebiger, bereits definierter Seitenstil für die Rückseite nach + Teilen und Kapiteln verwendet werden. +\item[color] + Im farbigen Layout ist auch die Rückseite von Teilen und Kapiteln farbig, + \seeref{\Option{cd}}. Die Einstellung wirkt sich ebenfalls auf die Rückseite + des Titels aus.\footnote{% + \seeref{\Macro{uppertitleback}(\Package{koma-script}) und + \Macro{lowertitleback}(\Package{koma-script})} im \scrguide*% + }% +\item[nocolor] + Es werden weiße Rückseiten bei Titel, Teilen und gegebenenfalls Kapiteln + erzeugt. +\end{values} +\index{Vakatseiten|)}% +\end{Declaration} + + + +\subsection{Verwendung von Schriftelementen} +\tudhyperdef*{sec:fonts:elements}% +\index{Schriftelemente|!}% +% +Vom \TUDScript-Bundle werden weitere Schriftelemente~-- in Ergänzung zu den +bereits durch \KOMAScript{} bereitgestellten~-- definiert. Dies sind +\Font{titlepage}, \Font{thesis}, \Font{tudheadings} sowie \Font{partsubtitle} +und \Font{chaptersubtitle}. Sowohl die durch \KOMAScript{} definierten als auch +alle hier genannten und folgend erläuterten Schriftelemente lassen sich im +Bedarfsfall über den Befehl \Macro{addtokomafont}[% + \Parameter{Schriftelement}\Parameter{Einstellungen}% +](\Package{koma-script})'none' angepassen. Mehr dazu ist im \scrguide innerhalb +des Abschnitts \emph{Textauszeichnungen} zu finden. + + + +\subsection{Verwendung von Feldinhalten} +\index{Felder|!}% +\begin{Declaration}[v2.06]{\Macro{getfield}[\Parameter{Feldname}]} +\printdeclarationlist +Mit diesem Makro kann auf den Inhalt eines zuvor angegebenen Feldes zugegriffen +werden. +\begin{Example} +Das für dieses Dokument angegebene Datum lautet \enquote{\getfield{date}}. Es +kann wie folgt ausgegeben werden: +\begin{Code} +\getfield{date} +\end{Code} +\end{Example} +Weitere mögliche Argumente sind beispielsweise \PValue{faculty}, +\PValue{department}, \PValue{institute} und \PValue{chair} sowie \PValue{title}, +\PValue{author}, \PValue{thesis}, \PValue{professor}, \PValue{supervisor} oder +\PValue{place}. +\end{Declaration} + +\subsection{Die Farben des \CDs} +\index{Layout!Farben}% +% +Zur Verwendung der Farben des \CDs wird das Paket \Package{tudscrcolor} +genutzt. Falls dieses nicht in der Präambel geladen wird~-- um beispielsweise +zusätzliche Optionen aufzurufen~-- binden die \TUDScript"=Klassen dieses +automatisch ein. Detaillierte Informationen sind in der Dokumentation von +\Package{tudscrcolor}'full' zu finden. +\index{Layout|)}% + + + +\section{Zusätzliche Optionen und Erweiterungen} +\ChangedAt*{% + v2.03:Bugfix für \abstractname, \confirmationname{} und \blockingname{} + bei der Festlegung von Seitenstil und Kolumnentitel% +}% +Neben den Befehlen für die Anpassung des Layouts an das \TUDCD stellen die +\TUDScript-Klassen weitere Befehle und Umgebungen zur Verfügung, um die +Anwendung insbesondere für wissenschaftliche Arbeiten zu erleichtern. + + +\subsection{Zusammenfassung/Kurzfassung} +\index{Zusammenfassung|!(}% +% +\begin{Declaration}[% + v2.02!\Option{abstract=multiple}:ersetzt \Option{abstract=double};% + v2.02!\Option{abstract=tocleveldown};% + v2.02!\Option{abstract=markboth};% + v2.04!\Option{abstract=tocmultiple}% +]{\Option{abstract=\PSet}}% +\printdeclarationlist% +\index{Satzspiegel!zweispaltig}% +% +Diese Option wird bereits durch \KOMAScript{} für die Klassen \Class{scrartcl} +und \Class{scrreprt} standardmäßig bereitgestellt. Für die Klasse +\Class{scrbook} geschieht dies nicht. Dazu heißt es im Handbuch: +% +\begin{quoting} +Bei Büchern wird in der Regel eine andere Art der Zusammenfassung verwendet. +Dort wird ein entsprechendes Kapitel an den Anfang oder Ende des Werks gesetzt. +Oft wird diese Zusammenfassung entweder mit der Einleitung oder einem weiteren +Ausblick verknüpft. Daher gibt es bei \Class{scrbook} generell keine +\Environment{abstract}"=Umgebung. Bei Berichten im weiteren Sinne, etwa einer +Studien- oder Diplomarbeit, ist ebenfalls eine Zusammenfassung in dieser Form +zu empfehlen. +\end{quoting} +% +Durch die \TUDScript-Klassen wird die \Option{abstract}"=Option erweitert. +Neben den Auswahlmöglichkeit, welche bereits \KOMAScript{} für die Klassen +\Class{tudscrartcl} und \Class{tudscrreprt} anbietet, kann die Überschrift für +die Zusammenfassung außerdem in Gestalt eines \sectionautorefname{}s oder für +\Class{tudscrreprt} und \Class{tudscrbook} in der Form eines +\chapterautorefname{}s ausgegeben werden. +% +\begin{values}{\Option{abstract}} +\itemfalse(nur \Class{tudscrartcl} und \Class{tudscrreprt}) + Es wird keine Überschrift für die \Environment{abstract}"=Umgebung ausgegeben. +\itemtrue*(nur \Class{tudscrartcl} und \Class{tudscrreprt}) + Wie bei den \KOMAScript"=Klassen wird eine zentrierte Überschrift mit dem + Bezeichner \Term{abstractname} vor der eigentlichen Zusammenfassung gesetzt. +\item[section/addsec] + Die Überschrift (\Term{abstractname}) verwendet den Gliederungsbefehl + \Macro{section}(\Package{koma-script})'none'. +\item[chapter/addchap][\Class{tudscrbook}](% + nur \Class{tudscrreprt} und \Class{tudscrbook}% + ) + Es wird der Befehl \Macro{chapter}(\Package{koma-script})'none' für das + Setzen der Überschrift (\Term{abstractname}) genutzt. +\item[heading] + Es wird die höchstmögliche Gliederungsebene verwendet. Für + \Class{tudscrartcl} entspricht dies \Option{abstract=section}, bei + \Class{tudscrreprt} und \Class{tudscrbook} \Option{abstract=chapter}. +\end{values} +% +Abhängig von der gewählten Gliederungsebene der Überschrift wird das Verhalten +für das Setzen eines Eintrages ins Inhaltsverzeichnis festgelegt. Ohne oder mit +zentrierter Überschrift wird per Voreinstellung kein Eintrag erzeugt. Wird die +Überschrift jedoch in Form einer Gliederungsebene gewählt, so erscheint die +Zusammenfassung für gewöhnlich im Inhaltsverzeichnis auf der obersten Ebene. +Das voreingestellte Verhalten für die Einträge ins Inhaltsverzeichnis kann +jederzeit mit folgenden Werten durch den Anwender überschrieben werden. +% +\begin{values}{\Option{abstract}} +\item[notoc/nottotoc] + Die Zusammenfassung wird definitiv nicht ins Inhaltsverzeichnis eingetragen. +\item[toc/totoc] + Es wird auf der obersten Gliederungsebene der aktuell verwendeten + Dokumentklasse (\Macro*{chapter} oder \Macro*{section}) ein nicht + nummerierten Eintrag im Inhaltsverzeichnis für die Zusammenfassung gesetzt. +\item[tocleveldown/leveldown/totocleveldown] + \ChangedAt{v2.02} + Der Inhaltsverzeichniseintrag wird eine Stufe unterhalb der obersten + Gliederungsebene (\Macro*{section} oder \Macro*{subsection}) erzeugt. +\item[tocmultiple/totocmultiple/tocaggregate/totocaggregate] + \ChangedAt{v2.04} + Es wird ein \emph{einziger} Inhaltsverzeichniseintrag für \emph{alle} + Zusammenfassungen erstellt. +\end{values} +% +\ChangedAt{v2.02} +Außerdem kann das Verhalten für die Kolumnentitel durch den Nutzer beeinflusst +werden. Diese werden normalerweise automatisch gesetzt, wenn diese über die +\KOMAScript-Option \Option{automark}(\Package{scrlayer-scrpage})'none' +aktiviert wurden und sind von der aktuellen Gliederungsebene der Überschrift +abhängig. Werden jedoch mit Hilfe der \KOMAScript-Option +\Option{manualmark}(\Package{scrlayer-scrpage})'none' manuelle Kolumnentitel +genutzt, müssen diese normalerweise auch für die Zusammenfassung durch den +Anwender gesetzt werden. Mit \Option{abstract=markboth} lässt sich allerdings +das Setzen der Kolumnentitel unabhängig davon forcieren. +% +\begin{values}{\Option{abstract}} +\item[markboth] + Unabhängig von der Verwendung manueller oder automatischer Kolumnentitel + werden diese auf rechten sowie linken Seiten mit \Term{abstractname} gesetzt. +\item[nomarkboth] + Die Einstellung für manuelle oder automatische Kolumnentitel werden beachtet + und abhängig von der verwendeten Gliederungsebene der Überschrift gesetzt. +\end{values} +% +Mit dem optionalen Parameter \Key{\Environment{abstract}}{markboth} der +\Environment{abstract}"=Umgebung kann der Kolumnentitel mit einem beliebigen +Inhalt gesetzt werden. + +Häufig wird für Abschlussarbeiten verlangt, neben der deutschsprachigen auch +noch eine englischsprachige Zusammenfassung zu verfassen. Mit der Einstellung +\Option{abstract=multiple} lassen sich mehrere Zusammenfassungen auf einer +Seite ausgeben~-- sofern genügend Platz vorhanden ist. Außerdem kann die +standardmäßige vertikale Zentrierung der \Environment{abstract}"=Umgebung +auf einer Seite unterdrückt werden. Diese Einstellungen zur Positionierung der +Zusammenfassungen innerhalb der \Environment{abstract}"=Umgebung werden nur +wirksam, wenn eine Titelseite +(\KOMAScript-Option \Option{titlepage=true}(\Package{koma-script})'none') und +\emph{keine} Überschriften in Form von Kapiteln (\Option{abstract=chapter}) +verwendet werden. +% +\begin{values}{\Option{abstract}} +\item[single/one/simple] + Jede Zusammenfassung wird auf einer eigenen Seite + beziehungsweise im zweispaltigen Satz in einer neuen Spalte ausgegeben. +\item[multiple/multi/all/aggregate] + \ChangedAt{v2.02} + Zusammenfassungen, welche mit \Macro{nextabstract} getrennt wurden, werden + direkt nacheinander auf der gleichen Seite ausgegeben, wenn ausreichend Platz + auf dieser vorhanden sein sollte. Ist die Klassenoption + \Option{twocolumn}(\Package{typearea})'none' aktiviert, erfolgt die Ausgabe + aller Zusammenfassungen ohne Spaltenumbruch. +\item[fill/fil/vfil/vfill] + Alle Zusammenfassungen werden bei der Ausgabe auf einer Seite vertikal + zentriert. Diese Einstellung steht für den zweispaltigen Satz + (Klassenoption \Option{twocolumn}(\Package{typearea})'none') nicht zur + Verfügung. +\item[nofill/nofil/novfil/novfill] + Die Ausgabe erfolgt wie im normalen Fließtext auch. +\end{values} +\end{Declaration} + +\begin{Declaration}[% + v2.02:Trennung einzelner Abschnitte mit \Macro{nextabstract};% +]{\Environment{abstract}[\OLParameter{Sprache}]} +\begin{Declaration}{\Macro{nextabstract}[\OLParameter{Sprache}]} +\begin{Declaration}{\Key{\Environment{abstract}}{language=\PName{Sprache}}} +\begin{Declaration}[v2.02]{\Key{\Environment{abstract}}{markboth=\PSet}} +\begin{Declaration}[v2.02]{% + \Key{\Environment{abstract}}{pagestyle=\PName{Seitenstil}}% +} +\begin{Declaration}{\Key{\Environment{abstract}}{columns=\PName{Anzahl}}} +\begin{Declaration}{\Key{\Environment{abstract}}{option=\PSet}}{% + \seeref{\Option{abstract}'ppage'}% +} +\printdeclarationlist% +\index{Satzspiegel!zweispaltig}% +% +Die \Environment{abstract}"=Umgebung dient speziell für die Ausgabe einer +Zusammenfassung, entweder zu Beginn eines Dokumentes oder beispielsweise vor +einem Teil oder Kapitel. Wird ein Titelkopf und keine Titelseite verwendet +(\KOMAScript-Option \Option{titlepage=false}(\Package{koma-script})'none'), so +wird eine Zusammenfassung~-- identisch zu den \KOMAScript"=Klassen~-- in einer +\Environment{quotation}(\Package{koma-script})'none'"=Umgebung ausgegeben, +wobei die Überschrift \emph{nicht} in der Form einer Gliederungsebene gesetzt +wird. Diese Umgebung hat jedoch den Nachteil, dass die \KOMAScript-Option +\Option{parskip=\PName{Methode}}(\Package{koma-script})'none' nicht beachtet +wird. Um dies zu beheben, kann das Paket \Package{quoting} geladen werden, +wodurch stattdessen die Umgebung \Environment{quoting}(\Package{quoting})'none' +verwendet wird. + +Mit der zuvor erläuterten Option \Option{abstract} kann eingestellt werden, in +welcher Gestalt die Zusammenfassung ausgegeben werden soll. Des Weiteren lässt +sich jede \Environment{abstract}"=Umgebung individuell über weitere Parameter +als optionales Argument anpassen. Damit lassen sich gegebenenfalls für eine +bestimmte \Environment{abstract}"=Umgebung die globalen Einstellungen +der Option \Option{abstract} lokal ändern und gezielt anpassen. + +Wird das Paket \Package{babel} durch den Anwender geladen, kann mit dem +optionalen Parameter \Key{\Environment{abstract}}{language=\PName{Sprache}}die +Sprache innerhalb der \Environment{abstract}"=Umgebung geändert werden. Dafür +muss die gewünschte Sprache bereits mit dem Laden von \Package{babel} entweder +als Paketoption oder besser noch als Klassenoption angegeben worden sein. +Dadurch werden innerhalb der Umgebung die Bezeichnung \Term{abstractname} und +die Trennungsmuster sprachspezifisch angepasst. Die gewünschte Sprache kann +auch ohne die Verwendung des Parameters \Key{\Environment{abstract}}{language} +direkt als optionales Argument übergeben werden. + +\ChangedAt{v2.02} +Mit \Key{\Environment{abstract}}{markboth} können die gesetzten Kolumnentitel +beeinflusst werden. Wird \Key{\Environment{abstract}}{markboth=false} +angegeben, werden automatische respektive manuelle Kolumnentitel verwendet. Die +Einstellung \Key{\Environment{abstract}}{markboth=true} wiederum setzt diese +für linke und rechte Seiten auf \Term{abstractname}. Zusätzlich lässt sich mit +\Key{\Environment{abstract}}{markboth=\PValueName{Kolumnentitel}} der +Kolumnentitel direkt festlegen. So können die Kolumnen beispielsweise mit der +Verwendung von \Key{\Environment{abstract}}{markboth=\PParameter{}} auch +gelöscht werden. Sollte \Key{\Environment{abstract}}{markboth} aktiviert +werden, so wird in der Umgebung automatisch der Seitenstil \PageStyle{headings} +genutzt~-- falls eine Titelseite +(\KOMAScript-Option \Option{titlepage=true}(\Package{koma-script})'none') +verwendet wird. Mit dem Parameter \Key{\Environment{abstract}}{pagestyle} kann +dieser auch manuell angegeben werden, die \PageStyle{tudheadings}"=Seitenstile +werden dabei ebenfalls unterstützt werden. + +Wurde das Paket \Package{multicol} geladen, kann mit dem Parameter +\Key{\Environment{abstract}}{columns=\PName{Anzahl}} die Zusammenfassung +mehrspaltig gesetzt werden. Dem Parameter \Key{\Environment{abstract}}{option} +können alle gültigen, bereits erläuterten Werte der Option \Option{abstract} +übergeben werden. Die damit gemachten Einstellungen wirken sich~-- im Gegensatz +zur Variante der späten Optionenwahl% +\footnote{% + \Macro{TUDoption}[\PParameter{abstract}\Parameter{Einstellung}] oder + \Macro{TUDoptions}[\PParameter{abstract=\PName{Einstellung}}]% +} +respektive als Angabe einer Klassenoption~-- lediglich lokal auf die verwendete +\Environment{abstract}"=Umgebung aus. + +\ChangedAt{v2.02} +Sollen mehrere Zusammenfassungen erzeugt und dabei die Einstellungen +\Option{abstract=single} beziehungsweise \Option{abstract=multiple} sowie +\Option{abstract=fill} respektive \Option{abstract=nofill} beachtet werden, so +ist die \Environment{abstract}"=Umgebung nur einmal zu verwenden. Innerhalb +dieser müssen die einzelnen Zusammenfassungen jeweils mit \Macro{nextabstract} +voneinander getrennt werden. Der Befehl akzeptiert dabei im optionalen Argument +alle Parameter, welche auch von der \Environment{abstract}"=Umgebung selbst +unterstützt werden. Das Minimalbeispiel in \fullref{sec:exmpl:dissertation} +zeigt hierfür das notwendige Vorgehen. + +Wird die \Environment{abstract}"=Umgebung innerhalb des Argumentes der Befehle +\Macro{setpartpreamble}(\Package{koma-script})'none' beziehungsweise +\Macro{setchapterpreamble}(\Package{koma-script})'none' verwendet, so wird die +Überschrift~-- im Fall, dass nicht \Option{abstract=false} gewählt ist~-- +\emph{immer} in Textgröße und zentriert gesetzt. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\minisec{Umbenennung der \abstractname} +Mit dem \KOMAScript-Befehl \Macro{renewcaptionname}(\Package{koma-script})'none' +kann der Bezeichner~-- sprich der Wortlaut~-- der für die +\Environment{abstract}"=Umgebung verwendeten Überschrift verändert werden. Mehr +dazu ist in \autoref{sec:localization} zu finden. +% +\begin{Example} +Die Überschrift der \Environment{abstract}"=Umgebung soll für die Sprache +\PValue{ngerman} von \enquote{\abstractname} in \enquote{Kurzfassung} umbenannt +werden. Das Makro \Macro{renewcaptionname}(\Package{koma-script})'none' +erwartet die drei obligatorischen Argumente +\Parameter{Sprache}\Parameter{Makro}\Parameter{Inhalt}: +\begin{Code}[escapechar=§] +\renewcaptionname{ngerman}{\abstractname}{Kurzfassung} +\end{Code} +\index{Zusammenfassung|!)}% +\end{Example} + + +\subsection{Selbstständigkeitserklärung und Sperrvermerk} +\index{Selbstständigkeitserklärung|!(}% +\index{Sperrvermerk|!(}% +% +\begin{Declaration}[% + v2.02!\Option{declaration=multiple}:ersetzt \Option{declaration=double};% + v2.02!\Option{declaration=tocleveldown};% + v2.02!\Option{declaration=markboth};% + v2.04!\Option{declaration=tocmultiple}% +]{\Option{declaration=\PSet}}[true]% +\printdeclarationlist% +% +Mit \Option{declaration} kann äquivalent zur Option \Option{abstract} die +Gestaltung von Selbstständigkeitserklärung und Sperrvermerk angepasst werden. +Zur Ausgabe der Erklärungen werden die Umgebung \Environment{declarations} +sowie die Befehle \Macro{declaration} beziehungsweise \Macro{confirmation} und +\Macro{blocking} bereitgestellt. + +Die beiden Optionen \Option{abstract} und \Option{declaration} ähneln sich sehr +stark. Alle möglichen Wertzuweisungen für \Option{declaration} wurden bereits +bei der Beschreibung von \Option{abstract} ausführlich erläutert. Deshalb +geschieht dies hier in einer etwas kürzeren Ausführung. Sollte Ihnen eine +Erläuterung etwas dürftig erscheinen, so hilft mit Sicherheit ein Blick zur +Erklärung der Option \Option{abstract}'full'. + +Die möglichen Werte für die Gestaltung der Überschrift werden nachfolgend +genannt. Im Gegensatz zur Option \Option{abstract} stehen die beiden +Einstellungen \Option{declaration=true} und \Option{declaration=false} auch für +die Klasse \Class{tudscrbook} zur Verfügung. +% +\begin{values}{\Option{declaration}} +\itemfalse + Es wird keine Überschrift über den Erklärungen selbst ausgegeben. +\itemtrue* + Eine zentrierte Überschrift mit dem Bezeichner \Term{confirmationname} vor + der Selbstständigkeitserklärung beziehungsweise \Term{blockingname} vor dem + Sperrvermerk wird gesetzt. +\item[section/addsec] + Die Überschrift verwendet den Gliederungsbefehl + \Macro{section}(\Package{koma-script})'none'. +\item[chapter/addchap][\Class{tudscrbook}](% + nur \Class{tudscrreprt} und \Class{tudscrbook}% + ) + Es wird der Befehl \Macro{chapter}(\Package{koma-script})'none' für das + Setzen der Überschrift genutzt. +\item[heading] + Es wird die höchstmögliche Gliederungsebene verwendet. Für + \Class{tudscrartcl} entspricht dies \Option{declaration=section}, bei + \Class{tudscrreprt} und \Class{tudscrbook} \Option{declaration=chapter}. +\end{values} +% +Abhängig von der gewählten Gliederungsebene der Überschrift wird das Verhalten +für das Setzen eines Eintrages ins Inhaltsverzeichnis festgelegt. Normalerweise +wird nur für Überschriften in Form einer Gliederungsebene ein Eintrag der +Erklärung ins Inhaltsverzeichnis erstellt, für \Option{declaration=true} und +\Option{declaration=false} geschieht dies standardmäßig nicht. Mit folgenden +Werten kann das voreingestellte Verhalten überschrieben werden. +% +\begin{values}{\Option{declaration}} +\item[notoc/nottotoc] + Die Erklärung wird definitiv nicht ins Inhaltsverzeichnis eingetragen. +\item[toc/totoc] + Unabhängig von der Wahl der Überschrift erhält jede Erklärung einen nicht + nummerierten Eintrag im Inhaltsverzeichnis auf der obersten Gliederungsebene + der verwendeten Dokumentklasse (\Macro*{chapter} oder \Macro*{section}). +\item[tocleveldown/leveldown/totocleveldown] + \ChangedAt{v2.02} + Der Inhaltsverzeichniseintrag wird eine Stufer unter der obersten + Gliederungsebene (\Macro*{section} oder \Macro*{subsection}) erzeugt. +\item[tocmultiple/totocmultiple/tocaggregate/totocaggregate] + \ChangedAt{v2.04} + Es wird ein \emph{einziger} Inhaltsverzeichniseintrag für \emph{alle} + Erklärungen erstellt. +\end{values} +% +\ChangedAt{v2.02} +Normalerweise werden automatische Kolumnentitel abhängig von der +Gliederungsebene der Überschrift gesetzt, falls diese über die +\KOMAScript-Option \Option{automark}(\Package{scrlayer-scrpage})'none' +aktiviert sind. Werden manuelle Kolumnentitel genutzt, müssen diese auch für +die Erklärungen manuell gesetzt werden. Mit \Option{declaration=markboth} lässt +sich unabhängig davon das Setzen der Kolumnentitel auf linken und rechten +Seiten forcieren, wobei hierfür der Titel der Überschrift genutzt wird. +% +\begin{values}{\Option{declaration}} +\item[markboth] + Unabhängig von der Verwendung manueller oder automatischer Kolumnentitel + werden diese auf rechten sowie linken Seiten mit den Bezeichnern + \Term{confirmationname} beziehungsweise \Term{blockingname} gesetzt. +\item[nomarkboth] + Die Einstellung für manuelle oder automatische Kolumnentitel werden beachtet. +\end{values} +% +Für \Macro{declaration} respektive \Macro{confirmation} und \Macro{blocking} +sowie die \Environment{declarations}"=Umgebung lässt sich mit dem Parameter +\Key{\Environment{declarations}}{markboth} ein beliebiger Kolumnentitel setzen. + +Die folgenden Einstellungen zur Positionierung der Erklärungen haben lediglich +Auswirkungen, wenn die Überschrift der Erklärung \emph{nicht} im Form eines +Kapitels ausgegeben und mit der \KOMAScript-Option +\Option{titlepage=true}(\Package{koma-script})'none' eine Titelseite verwendet +wird. +% +\begin{values}{\Option{declaration}} +\item[single/one/simple] + Jede Erklärung wird auf einer separaten Seite + beziehungsweise im zweispaltigen Satz in einer neuen Spalte ausgegeben. +\item[multiple/multi/all/aggregate] + \ChangedAt{v2.02} + Erklärungen, welche in der \Environment{declarations}"=Umgebung mit den + Befehlen \Macro{confirmation}, \Macro{blocking} und \Macro{declaration} oder + außerhalb dieser mit \Macro{declaration} gesetzt wurden, werden direkt + nacheinander auf der gleichen Seite ausgegeben, wenn ausreichend Platz auf + dieser vorhanden sein sollte. Ist die Klassenoption + \Option{twocolumn}(\Package{typearea})'none' aktiviert, erfolgt die Ausgabe + aller Erklärungen ohne Spaltenumbruch. +\item[fill/fil/vfil/vfill] + Alle Erklärungen auf einer Ausgabeseite werden vertikal zentriert. Für + den zweispaltigen Satz + (Klassenoption \Option{twocolumn}(\Package{typearea})'none') steht diese + Einstellung nicht zur Verfügung. +\item[nofill/nofil/novfil/novfill] + Die Ausgabe erfolgt wie im normalen Fließtext auch. +\end{values} +\end{Declaration} + +\begin{Declaration}[% + v2.02;% + v2.04:Trennung einzelner Abschnitte mit \Macro{nextdeclaration};% +]{\Environment{declarations}[\OLParameter{Sprache}]} +\begin{Declaration}{% + \Macro{nextdeclaration}[% + \OLParameter{Sprache}\Parameter{Überschrift}\Parameter{Erklärung}% + ]% +} +\begin{Declaration}{\Key{\Environment{declarations}}{language=\PName{Sprache}}} +\begin{Declaration}{\Key{\Environment{declarations}}{markboth=\PSet}} +\begin{Declaration}{% + \Key{\Environment{declarations}}{pagestyle=\PName{Seitenstil}}% +} +\begin{Declaration}{% + \Key{\Environment{declarations}}{columns=\PName{Anzahl}}% +} +\begin{Declaration}{\Key{\Environment{declarations}}{option=\PSet}} +\begin{Declaration}{% + \Key{\Environment{declarations}}{supporter=\PName{Unterstützer}} +} +\begin{Declaration}{\Key{\Environment{declarations}}{place=\PName{Ort}}} +\begin{Declaration}{\Key{\Environment{declarations}}{closing=\PName{Ende}}} +\begin{Declaration}{\Key{\Environment{declarations}}{company=\PName{Firma}}} +\printdeclarationlist% +% +Für Selbstständigkeitserklärung und Sperrvermerk sollte im einfachsten Fall +\Macro{declaration} beziehungsweise \Macro{confirmation} und \Macro{blocking} +verwendet werden. Sobald diese jedoch in anderer Reihenfolge, mehrfacher +Ausführung, unterschiedlichen Sprachen oder um zusätzliche Erklärungen ergänzt +werden, bietet die \Environment{declarations}"=Umgebung entsprechende +Freiheiten. + +Innerhalb dieser Umgebung können Selbstständigkeitserklärung und Sperrvermerk +mit dem Befehl \Macro{declaration} direkt nacheinander folgend beziehungsweise +mit \Macro{confirmation} und \Macro{blocking} auch separat ausgegeben werden. +Dies kann in beliebiger Reihenfolge und auch mehrmals geschehen, um diese +beispielsweise mehrsprachig zu setzen. +\ChangedAt{v2.04} Des Weiteren gibt es mit \Macro{nextdeclaration} die +Möglichkeit, eine Erklärung völlig frei zu verfassen. Dieser Befehl kann +\emph{ausschließlich} innerhalb der \Environment{declarations}"=Umgebung +genutzt werden, wobei im ersten Argument die gewünschte Überschrift und im +zweiten der Inhalt respektive Text der Erklärung selbst angegeben werden muss. + +Die folgend beschriebenen Parameter können sowohl für die Umgebung +\Environment{declarations} selbst als auch für die zuvor genannten Befehle als +optionales Argument verwendet werden. Ähnlich wie die gleichnamigen Optionen +sind auch die Umgebungen \Environment{abstract} und \Environment{declarations} +sehr ähnlich zueinander. Deshalb werden die Erläuterungen relativ kurz +gehalten. Ist ein Erklärung für einen Parameter etwas unverständlich, kann +diese bei der Umgebung \Environment{abstract}'full' nachgelesen werden. + +Wurde das Paket \Package{babel} geladen, kann die Sprache~-- sofern diese als +Paketoption oder besser noch als Klassenoption angegeben wurde~-- mit dem +Parameter \Key{\Environment{declarations}}{language=\PName{Sprache}} für die +\Environment{declarations}"=Umgebung geändert werden. Dadurch werden die +Bezeichner~-- unter anderem \Term{confirmationname} und \Term{blockingname}~-- +sowie die Trennungsmuster innerhalb der Umgebung sprachspezifisch angepasst. + +\ChangedAt{v2.02} +Die Kolumnentitel können mit \Key{\Environment{declarations}}{markboth} +beeinflusst werden. Mit \Key{\Environment{declarations}}{markboth=true} werden +für diese auf linker und rechter Seite \Term{confirmationname} beziehungsweise +\Term{blockingname} verwendet. +Automatische (\Option{automark}(\Package{scrlayer-scrpage})'none') respektive +manuelle (\Option{manualmark}(\Package{scrlayer-scrpage})'none') Kolumnentitel +werden mit \Key{\Environment{declarations}}{markboth=false} genutzt. Mit +\Key{\Environment{declarations}}{markboth=\PValueName{Kolumnentitel}} können +diese direkt festgelegt werden. Wird \Key{\Environment{declarations}}{markboth} +in irgendeiner Form genutzt, wird der Seitenstil \PageStyle{headings} +automatisch gesetzt. Dieser lässt sich für die Umgebung mit dem Parameter +\Key{\Environment{declarations}}{pagestyle} auch manuell angegeben. Wurde das +Paket \Package{multicol} geladen, wird der Inhalt der Umgebung mit +\Key{\Environment{declarations}}{columns=\PName{Anzahl}} mehrspaltig gesetzt. +Für \Key{\Environment{declarations}}{option} können alle gültigen Werte der +Option \Option{declaration} angegeben werden. Die Verwendung der weiteren +Parameter \Key{\Macro{confirmation}}{supporter} sowie +\Key{\Macro{confirmation}}{place} und \Key{\Macro{confirmation}}{closing} ist +in der Dokumentation des Befehls \Macro{confirmation} zu finden, der Parameter +\Key{\Macro{blocking}}{company} ist für \Macro{blocking} erläutert. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{confirmation}[\OLParameter{Unterstützer}]} +\begin{Declaration}[v2.05]{\Macro{confirmation*}[\LParameter]} +\begin{Declaration}{\Key{\Macro{confirmation}}{supporter=\PName{Unterstützer}}} +\begin{Declaration}{\Key{\Macro{confirmation}}{place=\PName{Ort}}} +\begin{Declaration}{\Key{\Macro{confirmation}}{closing=\PName{Ende}}} +\begin{Declaration}{\Key{\Macro{confirmation}}{language=\PName{Sprache}}} +\begin{Declaration}[v2.02]{\Key{\Macro{confirmation}}{markboth=\PSet}} +\begin{Declaration}[v2.02]{% + \Key{\Macro{confirmation}}{pagestyle=\PName{Seitenstil}}% +} +\begin{Declaration}[v2.02]{% + \Key{\Macro{confirmation}}{columns=\PName{Anzahl}}% +} +\begin{Declaration}{\Key{\Macro{confirmation}}{option=\PSet}} +\printdeclarationlist% +\index{Datum}% +% +Mit diesem Befehl wird ein sprachspezifischer Standardtext für eine +Selbstständigkeitserklärung ausgegeben, welcher in \Term{confirmationtext} +gespeichert ist. Wie dieser angepasst beziehungsweise geändert werden kann, ist +unter \autoref{sec:localization} zu finden. Er kann sowohl innerhalb der +\Environment{declarations}"=Umgebung als auch außerhalb dieser direkt im +Dokument verwendet werden. + +Wird \Term{confirmationtext} nicht geändert, kann dieser über das optionale +Argument von \Macro{confirmation} und die deklarierten Parameter angepasst +werden. Im Standardtext der Selbstständigkeitserklärung werden sowohl der Titel +als auch der Typ der Abschlussarbeit~-- falls dieser mit \Macro{thesis}, +\Macro{subject}[\Parameter{\autoref{tab:thesis}}] beziehungsweise mit der +Option \Option{subjectthesis} angegeben wurde~-- aufgeführt. Über den Parameter +\Key{\Macro{confirmation}}{supporter} oder \emph{zuvor} mit dem Befehl +\Macro{supporter} können weitere an der Arbeit beteiligte Personen angegeben +werden. Mehrere zu nennende Personen sind auch hier durch \Macro{and} zu +trennen. Das Feld der Unterstützer kann auch mit dem bloßen optionalen Argument +ohne die Angabe eines Parameters angepasst werden. +\ChangedAt{v2.05} +Mit der Sternversion \Macro{confirmation*} werden als Unterstützer die mit +\Macro{supervisor}[\Parameter{Name(n)}] definierten Betreuer der Arbeit +angegeben. + +Nach dem eigentlichen Text der Selbstständigkeitserklärung wird der mit +\Key{\Macro{confirmation}}{place} beziehungsweise \Macro{place} angegebene Ort +sowie das mit \Macro{date} eingestellte Datum ausgegeben. Als Voreinstellung +ist für den Ort \enquote{Dresden} gewählt. Danach folgen~-- mit etwas +vertikalem Leerraum für die notwendige Unterschrift~-- der Autor oder die +Autoren, angegeben durch den Befehl \Macro{author}. Soll anstelle dessen etwas +anderes nach dem Text der Selbstständigkeitserklärung gesetzt werden, kann dies +mit dem Parameter \Key{\Macro{confirmation}}{closing} oder zuvor mit dem +Befehl \Macro{confirmationclosing} angepasst werden. Die Parameter +\Key{\Environment{declarations}}{language}, +\Key{\Environment{declarations}}{markboth}, +\Key{\Environment{declarations}}{pagestyle}, +\Key{\Environment{declarations}}{columns} und +\Key{\Environment{declarations}}{option} entsprechen in ihrem Verhalten denen +der \Environment{declarations}"=Umgebung. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}[v2.02]{\Macro{blocking}[\OLParameter{Firma}]} +\begin{Declaration}{\Key{\Macro{blocking}}{company=\PName{Firma}}} +\begin{Declaration}{\Key{\Macro{blocking}}{language=\PName{Sprache}}} +\begin{Declaration}{\Key{\Macro{blocking}}{markboth=\PSet}} +\begin{Declaration}{\Key{\Macro{blocking}}{pagestyle=\PName{Seitenstil}}} +\begin{Declaration}{\Key{\Macro{blocking}}{columns=\PName{Anzahl}}} +\begin{Declaration}{\Key{\Macro{blocking}}{option=\PSet}} +\printdeclarationlist% +% +Beim Sperrvermerk verhält es sich äquivalent zur Selbstständigkeitserklärung. +Es wird der in \Term{blockingtext} hinterlegte Standardtext in der gewählten +Sprache ausgegeben. Dieser kann~-- wie in \autoref{sec:localization} +beschrieben~-- geändert werden. Der Befehl \Macro{blocking} kann sowohl +innerhalb der Umgebung \Environment{declarations} als auch direkt im Dokument +verwendet werden. + +In seiner ursprünglichen Definition, kann er im optionalen Argument über die +deklarierten Parameter angepasst werden. Im Standardtext des Sperrvermerks +werden sowohl der Titel als auch der Typ der Abschlussarbeit~-- falls dieser +mit \Macro{thesis}, \Macro{subject}[\Parameter{\autoref{tab:thesis}}] +respektive mit der Option \Option{subjectthesis} angegeben wurde~-- aufgeführt. +Mit \Key{\Macro{blocking}}{company} oder \emph{vorher} mit \Macro{company} kann +zusätzlich eine im Sperrvermerk zu nennende Firma oder ähnliches angegeben +werden. Dieses Feld lässt sich auch direkt im optionalen Argument ohne die +Verwendung eines Parameters definieren. Die weiteren Parameter +\Key{\Environment{declarations}}{language}, +\Key{\Environment{declarations}}{markboth}, +\Key{\Environment{declarations}}{pagestyle}, +\Key{\Environment{declarations}}{columns} und +\Key{\Environment{declarations}}{option} entsprechen in ihrem Verhalten denen +der \Environment{declarations}"=Umgebung. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{declaration}[\LParameter]} +\begin{Declaration}[v2.05]{\Macro{declaration*}[\LParameter]} +\begin{Declaration}{\Key{\Macro{declaration}}{language=\PName{Sprache}}} +\begin{Declaration}[v2.02]{\Key{\Macro{declaration}}{markboth=\PSet}} +\begin{Declaration}[v2.02]{% + \Key{\Macro{declaration}}{pagestyle=\PName{Seitenstil}}% +} +\begin{Declaration}[v2.02]{\Key{\Macro{declaration}}{columns=\PName{Anzahl}}} +\begin{Declaration}{\Key{\Macro{declaration}}{option=\PSet}} +\begin{Declaration}{\Key{\Macro{declaration}}{supporter=\PName{Unterstützer}}} +\begin{Declaration}{\Key{\Macro{declaration}}{place=\PName{Ort}}} +\begin{Declaration}{\Key{\Macro{declaration}}{closing=\PName{Ende}}} +\begin{Declaration}{\Key{\Macro{declaration}}{company=\PName{Firma}}} +\printdeclarationlist% +% +Dieser Befehl gibt die Selbstständigkeitserklärung und den Sperrvermerk direkt +aufeinanderfolgend aus. Dabei werden die Einstellungen zur Positionierung der +einzelnen Erklärungen, welche über die Zuweisungen \Option{declaration=single} +beziehungsweise \Option{declaration=multiple} sowie \Option{declaration=fill} +respektive \Option{declaration=nofill} erfolgen, beachtet. Er kann sowohl +innerhalb der \Environment{declarations}"=Umgebung als auch außerhalb dieser +direkt im Dokument verwendet werden und akzeptiert im optionalen Argument dabei +alle für die \Environment{declarations}"=Umgebung beschriebenen Parameter. +\ChangedAt{v2.05} +Die Sternversion erzwingt für die Selbstständigkeitserklärung eine Angabe der +mit \Macro{supervisor}[\Parameter{Name(n)}] definierten Betreuer in dieser. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{supporter}[\Parameter{Unterstützer}]} +\begin{Declaration}{\Macro{place}[\Parameter{Ort}]} +\begin{Declaration}{\Macro{confirmationclosing}[\Parameter{Ende}]} +\begin{Declaration}{\Macro{company}[\Parameter{Firma}]} +\printdeclarationlist% +% +Diese Makros ändern~-- im Gegensatz zu den Parametern von +\Macro{confirmation} und \Macro{blocking}~-- die entsprechenden Feldwerte +global. Damit lässt sich die \emph{mehrfache} Angabe eines Parameters +vermeiden, wenn beispielsweise eine Erklärung in unterschiedlichen Sprachen +erzeugt wird. +\index{Selbstständigkeitserklärung|!)}% +\index{Sperrvermerk|!)}% +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + + +\subsection{Lesezeichen} +\index{Lesezeichen}% +% +\begin{Declaration}{\Option{tudbookmarks=\PBoolean}}[true]% +\begin{Declaration}{% + \Macro{tudbookmark}[\OParameter{Ebene}\Parameter{Text}\Parameter{Ankername}]% +}% +\printdeclarationlist% +\index{Titel}% +\index{Umschlagseite}% +\index{Inhaltsverzeichnis}% +\index{Aufgabenstellung}% +\index{Gutachten}% +\index{Aushang}% +% +Diese Option wird wirksam, wenn \Package{hyperref} geladen wurde. Es werden für +die Umschlag- und Titelseite, das Inhaltsverzeichnis sowie~-- bei der +Verwendung des Paketes \Package{tudscrsupervisor}~-- die Aufgabenstellung +Lesezeichen oder auch Outline"=Einträge im PDF"~Dokument erzeugt. +% +\begin{values}{\Option{tudbookmarks}} +\itemfalse + Es erfolgt kein Eintrag von ergänzenden Lesezeichen. +\itemtrue* + Es werden automatisch zusätzliche Lesezeichen eingetragen. +\end{values} +% +Der Befehl \Macro{tudbookmark} arbeitet prinzipiell in der gleichen Weise wie +\Macro{pdfbookmark}(\Package{hyperref})'none' aus \Package{hyperref}. Die +Lesezeichen werden jedoch nur bei aktivierte Option \Option{tudbookmarks} +generiert. +\end{Declaration} +\end{Declaration} + + + +\section{Sprachabhängige Bezeichner} +\tudhyperdef*{sec:localization}% +\index{Bezeichner|!(}% +\index{Titel!Felder|(}% +% +Durch \KOMAScript{} werden Befehle, mit denen sich sprachabhängige Bezeichner +erzeugen oder ändern lassen, zur Verfügung gestellt. Diese werden durch das +\TUDScript-Bundle genutzt, um lokalisierte Begriffe für die Sprachen +\emph{Englisch} und \emph{Deutsch} bereitzustellen. Ein Großteil davon betrifft +Bezeichnungen für Felder auf der Titelseite (\autoref{sec:title}). Hierfür wird +\Macro{providecaptionname}[% + \Parameter{Sprache}\Parameter{Makro}\Parameter{Inhalt}% +](\Package{koma-script})'none' +verwendet, wobei \PName{Sprache} dem geladenen Sprachpaket~-- normalerweise das +Paket \Package{babel}~-- bekannt sein muss. + +Sollte der Anwender die im Folgenden erläuterten oder auch andere Bezeichner, +welche von einem beliebigen (Sprach"~)Paket bereitgestellt werden, ändern +wollen, ist hierfür der Befehl +\Macro{renewcaptionname}[% + \Parameter{Sprache}\Parameter{Makro}\Parameter{Inhalt}% +](\Package{koma-script})'none' +zu verwenden. Es sollte natürlich dabei eine \PName{Sprache} angegeben werden, +welche im Dokument durch \Package{babel} oder ein anderes Sprachpaket verwendet +wird, beispielsweise \PValue{ngerman} oder \PValue{english}. + +Die Makros der Bezeichner und deren Verwendung werden folgend kurz beschrieben +und tabellarisch aufgeführt. Dabei wurde versucht, alle Befehle der Bezeichner +für bestimmte Begriffe auf \Term*{\noexpand\dots{}name} und beschreibende +Texte auf \Term*{\noexpand\dots{}text} enden zu lassen. + +\begin{Declaration}[% + v2.02:Unterscheidung von einem und mehreren Gutachtern% +]{\Term{refereename}} +\begin{Declaration}{\Term{refereeothername}} +\begin{Declaration}[% + v2.05:Unterscheidung von einem und mehreren Fachreferenten% +]{\Term{advisorname}} +\begin{Declaration}{\Term{advisorothername}} +\begin{Declaration}[% + v2.05:Unterscheidung von einem und mehreren Betreuern% +]{\Term{supervisorname}} +\begin{Declaration}{\Term{supervisorothername}} +\begin{Declaration}[% + v2.02:Unterscheidung von einem und mehreren Professoren% +]{\Term{professorname}} +\begin{Declaration}[v2.02]{\Term{professorothername}} +\printdeclarationlist% +\index{Betreuer}% +\index{Gutachter}% +\index{Hochschullehrer}% +\index{Referent}% +% +Diese sprachabhängigen Begriffe sind die Bezeichner für die Titelseitenfelder +von Betreuer (\Macro{supervisor}), Gutachter (\Macro{referee}) und Fachreferent +(\Macro{advisor}). Soll innerhalb eines dieser Felder mehr als eine Person +angegeben werden, so sind die Einzelpersonen jeweils mit dem Befehl \Macro{and} +voneinander zu trennen. In diesem Fall werden alle nach der erstgenannten +folgenden Personen durch den Bezeichner \Term*{\noexpand\dots{}othername} +ergänzt. + +\ChangedAt{v2.02,v2.05} +Bei den Bezeichnung wird unterschieden, ob eine oder mehrere Personen angegeben +wurden. Wird lediglich eine Person genannt, so ist eine Unterscheidung nicht +notwendig und es wird der Singular genutzt. Werden jedoch zwei oder mehr +Personen angegeben, so wird geprüft, ob der dazugehörige Bezeichner für die +Zweitperson (\Term*{\noexpand\dots{}othername}) definiert ist. Falls dies so +ist, wird die alternative Bezeichnung für die erstgenannte Person verwendet, +andernfalls wird der Plural des Bezeichners verwendet. Dies betrifft alle +Felder, die über \Macro{referee}, \Macro{advisor}, \Macro{supervisor} oder +\Macro{professor} angegeben wurden. + +\renewcaptionname{ngerman}{\refereename}{(Erst-)Gutachter} +\renewcaptionname{english}{\refereename}{(First) Referee(s)} +\renewcaptionname{ngerman}{\advisorname}{(Erster) Fachreferent(en)} +\renewcaptionname{english}{\advisorname}{(First) Advisor(s)} +\renewcaptionname{ngerman}{\supervisorname}{(Erst-)Betreuer} +\renewcaptionname{english}{\supervisorname}{(First) Supervisors(s)} +\renewcaptionname{ngerman}{\professorname}{Betreuende(r) Hochschullehrer} +\renewcaptionname{english}{\professorname}{Supervising professor(s)} +\TermTable{% + supervisorname,supervisorothername,refereename,refereeothername,% + advisorname,advisorothername,professorname,professorothername% +} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{dissertationname}} +\begin{Declaration}{\Term{diplomathesisname}} +\begin{Declaration}{\Term{masterthesisname}} +\begin{Declaration}{\Term{bachelorthesisname}} +\begin{Declaration}{\Term{studentthesisname}} +\begin{Declaration}{\Term{studentresearchname}} +\begin{Declaration}{\Term{projectpapername}} +\begin{Declaration}{\Term{seminarpapername}} +\begin{Declaration}{\Term{termpapername}} +\begin{Declaration}{\Term{researchname}} +\begin{Declaration}{\Term{logname}} +\begin{Declaration}{\Term{internshipname}} +\begin{Declaration}{\Term{reportname}} +\printdeclarationlist% +\index{Abschlussarbeit}% +\index{Typisierung}% +% +Diese Bezeichner dienen zur Typisierung speziell für eine Abschlussarbeit. Wie +diese genutzt werden können, ist bei der Erläuterung von \Option*{subjectthesis} +beziehungsweise \Macro*{thesis} und \Macro*{subject}'full' zu finden. +\TermTable{% + dissertationname,diplomathesisname,masterthesisname,bachelorthesisname,% + studentresearchname,projectpapername,seminarpapername,researchname,% + logname,internshipname,reportname% +} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}[v2.02]{\Term{graduationtext}} +\printdeclarationlist% +\index{Abschlussarbeit}% +\index{Typisierung}% +% +Wurde erkannt, dass das aktuelle Dokument eine Abschlussarbeit ist, so kann der +zu erlangende akademische Grad mit dem Befehl \Macro{graduation} angegeben +werden. Bei dessen Ausgabe auf dem Titel wird dabei der entsprechende Text dazu +angegeben. +\TermTable*{graduationtext}{.78\textwidth} +\end{Declaration} + +\begin{Declaration}{\Term{datetext}} +\begin{Declaration}{\Term{defensedatetext}} +\printdeclarationlist% +\index{Abschlussarbeit}% +\index{Datum}% +\index{Datum!Abgabedatum}% +\index{Datum!Verteidigungsdatum}% +% +Wird mit \Macro{date} das (Abgabe-)Datum und mit \Macro{defensedate} ein Datum +der Verteidigung für eine Abschlussarbeit angegeben, so werden auch diese +Felder durch einen Text beschrieben. +\TermTable{datetext,defensedatetext} +\index{Titel!Felder|)}% +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{dateofbirthtext}} +\begin{Declaration}{\Term{placeofbirthtext}} +\begin{Declaration}{\Term{matriculationnumbername}} +\begin{Declaration}{\Term{matriculationyearname}} +\begin{Declaration}{\Term{coursename}} +\begin{Declaration}[v2.02]{\Term{disciplinename}} +\printdeclarationlist% +\index{Autorenangaben}% +\index{Datum!Geburtsdatum}% +% +Werden für den Autor oder die Autoren mit dem entsprechenden Befehl das +Geburtsdatum (\Macro{dateofbirth}), der Geburtsort (\Macro{placeofbirth}), der +Studiengang (\Macro{course}), die Studienrichtung (\Macro{discipline}) oder +auch die Matrikelnummer (\Macro{matriculationnumber}) und/oder das +Immatrikulationsjahr (\Macro{matriculationyear}) angegeben, werden sowohl auf +der Titelseite als auch auf der gegebenenfalls mit \Package{tudscrsupervisor} +erstellten Aufgabenstellung die dazugehörigen Bezeichner vorangestellt. Auf +dem Titel werden diese dabei mit dem durch \Macro{titledelimiter} gegebenen +Trennzeichen vom eigentlichen Feld abgegrenzt. +\TermTable{% + dateofbirthtext,placeofbirthtext,matriculationnumbername,% + matriculationyearname,coursename,disciplinename% +} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{coverpagename}} +\begin{Declaration}{\Term{titlepagename}} +\printdeclarationlist% +\index{Lesezeichen}% +% +Diese beiden Bezeichner werden bei aktivierter \Option{tudbookmarks} für das +Eintragen von Lesezeichen in ein PDF"=Dokument genutzt. +\TermTable{coverpagename,titlepagename} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{abstractname}} +\printdeclarationlist% +\index{Zusammenfassung}% +% +Dieser Bezeichner wird für die Klasse \Class{tudscrbook} definiert, da selbiger +von \KOMAScript{} für die Buchklasse nicht vorgesehen wird. +\TermTable{abstractname} +\end{Declaration} + +\begin{Declaration}{\Term{confirmationname}} +\begin{Declaration}[v2.02]{\Term{blockingname}} +\printdeclarationlist% +\index{Selbstständigkeitserklärung|(}% +\index{Sperrvermerk|(}% +% +Es werden die Bezeichnungen für Selbstständigkeitserklärung und Sperrvermerk +für die dazugehörigen Überschriften definiert. +\TermTable{confirmationname,blockingname} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{confirmationtext}} +\begin{Declaration}[v2.02]{\Term{blockingtext}} +\printdeclarationlist% +% +Die Texte der Erklärungen selbst sind derart aufgebaut, dass sie in +Abhängigkeit von den angegebenen Informationen unterschiedlich ausgeführt +werden. Innerhalb der Selbstständigkeitserklärung (\Macro{confirmation}) werden +gegebenenfalls die Felder für den Titel (\Macro{title}) und die Typisierung der +Abschlussarbeit sowie die angegebenen Unterstützer% +\footnote{% + \Macro{confirmation}[\POParameter{% + \Key{\Macro{confirmation}}{supporter=\PName{Unterstützer}}% + }] + oder \Macro{supporter}[\Parameter{Unterstützer}]% +} +beachtet. Für den Sperrvermerk (\Macro{blocking}) wird neben dem Titel +(\Macro{title}) optional außerdem noch das Feld der externen Firma% +\footnote{% + \Macro{blocking}[% + \POParameter{\Key{\Macro{blocking}}{company=\PName{Firma}}}% + ] + oder \Macro{company}[\Parameter{Firma}]% +} +verwendet. Der Vollständigkeit halber werden im Folgenden noch die Texte für +die Selbstständigkeitserklärung und den Sperrvermerk aufgeführt~-- allerdings +lediglich die deutschsprachige Version. Dabei werden alle möglichen Felder +angezeigt. + +\begingroup + \makeatletter + \def\@@title{\PName{Titel}} + \def\@@thesis{\PName{Abschlussarbeit}} + \def\@supporter{\PName{Vorname Nachname} \and \PName{Vorname Nachname}} + \def\@company{\PName{Firma}} + \makeatother + \vskip\medskipamount\noindent + \textbf{Bezeichner}\quad\Term{confirmationtext}% + \begin{quoting} + \confirmationtext + \end{quoting} + \textbf{Bezeichner}\quad\Term{blockingtext}% + \begin{quoting} + \blockingtext + \end{quoting} + + \makeatletter + \def\@@author{\PName{Vorname Nachname}}% + \def\@supporter{\PName{Vorname Nachname}}% + \makeatother + \newcommand*\showfield[1]{% + \Macro*{getfield}[\PParameter{#1}]'none'~\textrightarrow~\getfield{#1}% + }% + \noindent + Soll eine der Erklärungen geändert und dabei der Inhalt eines Feldes genutzt + werden, lässt sich hierfür \Macro{getfield} verwenden.% + \footnote{% + Titel:~\showfield{title}, Art der Abschlussarbeit:~\showfield{thesis}, + Autor:~\showfield{author}, Firma:~\showfield{company} sowie ebenfalls + Unterstützer:~\showfield{supporter} + } + Gegebenenfalls ist die Definition von \Macro{and} anzupassen. +\endgroup +\index{Selbstständigkeitserklärung|)}% +\index{Sperrvermerk|)}% +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{listingname}} +\begin{Declaration}{\Term{listlistingname}} +\printdeclarationlist% +% +Sollte ein Paket zur Einbindung von externem Quelltext~-- beispielsweise +das Paket \Package{listings}~-- verwendet werden, so werden diese Bezeichnungen +für Quelltextausschnitte und das Quelltextverzeichnis verwendet. +\TermTable{listingname,listlistingname} +\index{Bezeichner|!)}% +\end{Declaration} +\end{Declaration} + +\section{Kompatibilitätseinstellungen zu früheren Versionen} +Bei der Entwicklung von \TUDScript lässt es sich nicht immer vermeiden, dass +Verbesserungen sowie Korrekturen an den Klassen und Paketen zu Änderungen am +Ergebnis der Ausgabe führen, insbesondere bei Umbruch und Layout. Für bereits +archivierte Dokumente, welche mit einer früheren Version erstellt wurden ist +dies jedoch bei einer erneuten Kompilierung unter Umständen eher unerwünscht. + +\begin{Declaration}[v2.03]{\Option{tudscrver=\PName{Version}}}[last] +\printdeclarationlist% +\index{Kompatibilität|!}% +% +Mit dieser Option wird es möglich, auf das (Umbruch-)Verhalten einer älteren +respektive früheren Version von \TUDScript umzuschalten, um nach der +Kompilierung das erwartete Ergebnis zu erhalten. Neue Möglichkeiten, die sich +nicht auf den Umbruch oder das Layout auswirken, sind auch für den Fall +verfügbar, dass per Option die Kompatibilität zu einer älteren Version +ausgewählt wurde. + +Bei der Angabe einer unbekannten Version als Wert wird eine Warnung ausgegeben +und \Option{tudscrver=first} angenommen. Mit \Option{tudscrver=last} wird die +jeweils aktuell verfügbare Version ausgewählt und folglich auf die zukünftige +Kompatibilität des Dokumentes zu der aktuell genutzten Version verzichtet. +Dieses Verhalten entspricht der Voreinstellung. Es ist zu beachten, dass die +Nutzung von \Option{tudscrver} nur als Klassenoption möglich ist. +% +\begin{values}{\Option{tudscrver}} +\item[\PValue{first}/\PValue{2.02}] + \ChangedAt{% + v2.03:Satzspiegel im \CD geändert, Logo von \DDC im Fußbereich + wird ohne vergrößerten Seitenrand verwendet + } + Der Satzspiegel im Layout des \CDs (\seeref{\Option{cdgeometry}}) wurde in + der Version~v2.03 leicht geändert. Der obere Seitenrand wurde verkleinert, + der untere im gleichen Maße vergrößert. Der verfügbare Textbereich ist + folglich identisch. Bei der Aktivierung des \DDC-Logos im Fußbereich der + Seite (\seeref{\Option{ddcfoot}}) wird im Gegensatz zur Version~v2.02 der + gleiche Satzspiegel genutzt. Mit \Option{tudscrver=first} kann dieses + Verhalten deaktiviert werden. +\item[\PValue{2.03}] + \index{Leerraum}% + \index{Schriftgröße}% + \ChangedAt{v2.04:Vertikaler Leerraum abhängig von verwendeter Schriftgröße} + Seit der Version~v2.04 werden mehrere Längen in Abhängigkeit der gewählten + Schriftgröße definiert. Mit der Wahl \Option{tudscrver=2.03} wird diese + Funktionalität deaktiviert, wobei hierfür lediglich die \TUDScript-Option + \Option{relspacing=false} aktiviert wird. +\item[\PValue{2.04}] + \index{Satzspiegel}% + \ChangedAt{% + v2.05:Satzspiegeleinstellungen für die jeweilige ISO/DIN"~Klasse + des Papierformates identisch% + } + Mit der Version~v2.05 werden die vorgegebenen Einstellungen zum Satzspiegel + anhand der B"~ISO/DIN"~Reihe vorgenommen. Damit sind für alle Papierformate + einer spezifischen ISO/DIN"~Klasse die Seitenränder identisch. Mit der Wahl + \Option{tudscrver=2.04} ist der Satzspiegel von der A"~ISO/DIN"~Reihe + abhängig, sodass die B- und C"~Papierformate der gleichen Klasse größere + Seitenränder erhalten, als die D- und A"~Formate. +\item[\PValue{2.05}] + \ChangedAt{v2.06:Griechische Buchstaben standardmäßig kursiv} + Mit dem Wechsel der Hausschrift zu \OpenSans ergaben sich einige Änderungen + bezüglich der Erscheinung des \CDs. Mit dieser Kompatibilitätseinstellung + werden die alten Schriftfamilien \Univers und \DIN + (\Option{cdoldfont=true}, \Option{headings=light}, \Option{ttfont=lmodern}) + aktiviert. Weiterhin wirkt sich für diese Schriftfamilien im Mathematikmodus + die Option \Option{slantedgreek=true} lediglich auf die griechischen + Majuskeln aus. +\item[\PValue{2.06}] + Dies ist Kompatibilitätseinstellung für \TUDScript~\vTUDScript{} und wird für + zukünftige Änderungen bereits vorgehalten. Soll ein mit der momentan + aktuellen Version erzeugtes Dokument auch mit einer späteren Version von + \TUDScript nach einem \hologo{LaTeX}"=Lauf das gleiche Ausgabeergebnis + liefern, muss dies mit \Option{tudscrver=2.06} angegeben werden. +\item[\PValue{last}] + Es werden keine Kompatibilitätseinstellungen für das Dokument vorgenommen. + Mit einer späteren Version von \TUDScript kann ein anderes Umbruchverhalten + innerhalb des Dokumentes auftreten. Dies ist die Standardeinstellung. +\end{values} +\end{Declaration} +\end{Declaration*} +\end{Declaration*} +\end{Declaration*} + +\ToDo[doc]{Wieder rein, falls vernünftig implementiert}[v2.07] +%\subsection{Fußnoten in Überschriften} +%\index{Layout!Überschriften}% +%\index{Fußnoten}% +% +%\begin{Declaration}[% +% v2.02:Fußnoten mit Symbolen in Überschriften möglich% +%]{\Option{footnotes=\PSet}}[nosymbolheadings]% +%\begin{Declaration}[v2.02]{\Counter{symbolheadings}}% +%\printdeclarationlist% +%% +%\ToDo[imp]{Fehler \Macro*{addchap} beheben, Paket \Package*{footmisc}}[v2.06] +%\ToDo[imp]{Zähler auch bei Sternversionen von Kapiteln zurücksetzen}[v2.06] +%\ToDo[imp]{Fußnoten nicht ins Inhaltsverzeichnis und in die Kopfzeile?!}[v2.06] +%\ToDo[imp]{Problem mit \Package*{hyperref} lösbar?}[v2.06] +%% +%Für die Überschriften wird die \KOMAScript-Option \Option{footnotes} erweitert. +%Normalerweise kann diese die Werte \PValue{multiple} und \PValue{nomultiple} +%annehmen, wobei Letzteres der Standardfall ist. Die \TUDScript-Hauptklassen +%erweitern die Option dahingehend, dass auf die Verwendung von Symbolen anstelle +%von Zahlen innerhalb der Überschriften umgeschaltet werden kann. Hierfür wird +%der Zähler \Counter{symbolheadings} definiert, der mit dem Beginn eines neuen +%Kapitels zurückgesetzt wird. +% +%\Attention{% +% Die Option \Option{footnotes=symbolheadings} ist experimentell und kann unter +% Umständen zu Fehlern respektive unerwünschten Ergebnissen führen.% +%} +%% +%\begin{values}{\Option{footnotes}} +%\item[nosymbolheadings/numberheadings] +% Die Fußnoten der Überschriften werden fortlaufend mit denen des Fließtextes +% gesetzt. +%\item[symbolheadings] +% Für die Überschriften werden symbolische Fußnoten mit einem eigenen Zähler +% verwendet. +%\end{values} +%\end{Declaration} +%\end{Declaration} diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-obsolete.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-obsolete.tex new file mode 100644 index 0000000000..c44e01b2c8 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-obsolete.tex @@ -0,0 +1,968 @@ +\setchapterpreamble{\tudhyperdef'{sec:obsolete}} +\chapter{Obsolete sowie vollständig entfernte Optionen und Befehle} +% +\section{Veraltete Optionen und Befehle in \TUDScript} +\index{Kompatibilität}% +% +Einige Optionen und Befehle waren während der Weiterentwicklung von \TUDScript +in ihrer ursprünglichen Form nicht mehr umsetzbar oder wurden~-- unter anderem +aus Gründen der Kompatibilität zu anderen Paketen~-- schlichtweg verworfen. +Dennoch besteht für die meisten entfallenen Direktiven eine Möglichkeit, deren +Funktionalität ohne größere Aufwände mit \TUDScript in der aktuellen Version +\vTUDScript{} darzustellen. Ist dies der Fall, wird hier entsprechend kurz +darauf hingewiesen. + +\newcommand*\ChangesTo[1]{% + Änderungen für \TUDScript~#1% + \ChangedAt*{#1:Änderungen gegenüber der vorhergehenden Version}% +} + +\subsection{\ChangesTo{v2.00}} +\begin{Obsolete}{v2.00}[\Option{cd=\PSet}]{\Option{cd=alternative}} +\begin{Obsolete}{v2.00}[\Option{cdtitle=\PSet}]{\Option{cdtitle=alternative}} +\begin{Obsolete}{v2.00}{\Length{titlecolwidth}} +\begin{Obsolete}{v2.00}{\Term{authortext}} +\printobsoletelist% +% +Die alternative Titelseite ist komplett aus dem \TUDScript-Bundle entfernt +worden. Dementsprechend entfallen auch die dazugehörigen Optionen sowie Länge +und Bezeichner. +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Option{cd}}{\Option{color=\PBoolean}} +\printobsoletelist% +% +Die Einstellungen der farbigen Ausprägung des Dokumentes erfolgt über die +Option \Option*{cd}. +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Option{cdfont}}{\Option{tudfonts=\PBoolean}} +\printobsoletelist% +% +Die Option zur Schrifteinstellung ist wesentlich erweitert worden. Aus Gründen +der Konsistenz wurde diese umbenannt. +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Option{cdfoot}}{\Option{tudfoot=\PBoolean}} +\printobsoletelist% +% +Ebenso wurde die Option \Option*{tudfoot} umbenannt, um dem Namensschema der +restlichen Optionen von \TUDScript zu entsprechen. +\end{Obsolete} + +\begin{Obsolete}{v2.00}{\Option{headfoot=\PSet}}{% + \seeref{\KOMAScript-Optionen \Option*{headinclude} und \Option*{footinclude}}% +} +\printobsoletelist% +% +Diese Option war für \TUDScript in der \emph{Version~v1.0} notwendig, um die +parallele Verwendung der beiden Pakete \Package*{typearea} und +\Package*{geometry} zu ermöglichen. Die Erstellung des Satzspiegels wurde +komplett überarbeitet. Mittlerweile werden an das Paket \Package*{geometry} die +Einstellungen für die \KOMAScript"=Optionen \Option*{headinclude} und +\Option*{footinclude} direkt weitergereicht, sodass die Option +\Option*{headfoot} nicht mehr notwendig ist und deshalb entfernt wurde. +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Option{cleardoublespecialpage}}{% + \Option{partclear=\PBoolean}% +} +\begin{Obsolete}{v2.00:\Option{cleardoublespecialpage}}{% + \Option{chapterclear=\PBoolean}% +} +\printobsoletelist% +% +Beide Optionen sind in der neuen Option \Option*{cleardoublespecialpage} +aufgegangen, womit ein konsistentes Layout erreicht wird. Die ursprünglichen +Optionen entfallen. +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Option{abstract}}{\Option{abstracttotoc=\PBoolean}} +\begin{Obsolete}{v2.00:\Option{abstract}}{\Option{abstractdouble=\PBoolean}} +\printobsoletelist% +% +Beide Optionen wurden in die Option \Option*{abstract} integriert und sind +deshalb überflüssig. +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Macro{headlogo}}{% + \Macro{logofile}[\Parameter{Dateiname}]% +} +\printobsoletelist% +% +Der Befehl \Macro*{logofile} wurde in \Macro*{headlogo} umbenannt, wobei die +Funktionalität weiterhin bestehen bleibt. +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Option{tudbookmarks}}{\Option{bookmarks=\PBoolean}} +\printobsoletelist% +% +Die Option wurde umbenannt, um Überschneidungen mit \Package*{hyperref} zu +vermeiden. +\end{Obsolete} + +\begin{Obsolete}{v2.00}{\Length{signatureheight}} +\printobsoletelist% +% +Die Höhe für die Zeile der Unterschriften wurde dehnbar gestaltet, eine etwaige +Anpassung durch den Anwender ist nicht vonnöten. +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Macro{titledelimiter}}{\Term{titlecoldelim}}% +\printobsoletelist% +% +Das Trennzeichen für Bezeichnungen beziehungsweise beschreibende Texte und dem +eigentlichen Feld auf der Titelseite ist nicht mehr sprachabhängig und wurde +umbenannt. +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Macro{declaration}}{\Macro{confirmationandrestriction}} +\begin{Obsolete}{v2.00:\Macro{declaration}}{\Macro{restrictionandconfirmation}} +\printobsoletelist% +% +Die beiden Befehle entfallen, stattdessen sollte entweder der Befehl +\Macro*{declaration} oder die Umgebung \Environment*{declarations} zusammen mit +den Befehlen \Macro*{confirmation} und \Macro*{blocking} verwendet werden, +wobei sich diese in der Umgebung in beliebiger Reihenfolge anordnen lassen. +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Macro{place}}{\Macro{location}[\Parameter{Ort}]} +\printobsoletelist% +% +In Anlehnung an andere \hologo{LaTeX}"=Pakete und "~Klassen wurde +\Macro*{location} in \Macro*{place} umbenannt. +\end{Obsolete} + +\minisec{\taskname} +\begin{Bundle}{\Package{tudscrsupervisor}} +Die Umgebung für die Erstellung einer Aufgabenstellung für eine +wissenschaftliche Arbeit wurde in das Paket \Package{tudscrsupervisor} +ausgelagert. Dieses muss für die Verwendung der Umgebung \Environment*{task} +und der daraus abgeleiteten standardisierten Form zwingend geladen werden. + +\begin{Obsolete}{v2.00:\Environment{task}}{\Option{cdtask=\PSet}} +\begin{Obsolete}{v2.00}{\Option{taskcompact=\PBoolean}} +\begin{Obsolete}{v2.00}{\Length{taskcolwidth}} +\printobsoletelist% +% +Die Klassenoption \Option*{cdtask} ist komplett entfernt worden, alle +Einstellungen, erfolgen direkt über das optionale Argument der Umgebung +\Environment*{task}. Die Variante eines kompakten Kopfes mit der Option +\Option*{taskcompact} wird nicht mehr bereitgestellt. Die Möglichkeit zur +manuellen Festlegung der Spaltenbreite für den Kopf der Aufgabenstellung mit +\Length*{taskcolwidth} wurde aufgrund der verbesserten automatischen Berechnung +entfernt. +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Macro{taskform}}{% + \Macro{tasks}[\Parameter{Ziele}\Parameter{Schwerpunkte}]% +} +\begin{Obsolete}{v2.00:\Term{focusname}}{\Term{focustext}} +\begin{Obsolete}{v2.00:\Term{objectivesname}}{\Term{objectivestext}} +\printobsoletelist% +% +Der Befehl \Macro*{tasks} wurde in \Macro*{taskform} umbenannt und in der +Funktionalität erweitert. Die darin verendeten Bezeichner wurden ebenfalls +leicht abgewandelt. +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Macro{matriculationnumber}}{% + \Macro{studentid}[\Parameter{Matrikelnummer}]% +} +\begin{Obsolete}{v2.00:\Macro{matriculationyear}}{% + \Macro{enrolmentyear}[\Parameter{Immatrikulationsjahr}]% +} +\begin{Obsolete}{v2.00:\Macro{date}}{\Macro{submissiondate}[\Parameter{Datum}]} +\begin{Obsolete}{v2.00:\Macro{dateofbirth}}{% + \Macro{birthday}[\Parameter{Geburtsdatum}]% +} +\begin{Obsolete}{v2.00:\Macro{placeofbirth}}{% + \Macro{birthplace}[\Parameter{Geburtsort}]% +} +\begin{Obsolete}{v2.00:\Macro{issuedate}}{% + \Macro{startdate}[\Parameter{Ausgabedatum}]% +} +\printobsoletelist% +% +Alle Befehle wurden umbenannt und sind jetzt neben der \taskname{} auch für die +Titelseite im \CD nutzbar. +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.00:\Term{matriculationnumbername}}{\Term{studentidname}} +\begin{Obsolete}{v2.00:\Term{matriculationyearname}}{\Term{enrolmentname}} +\begin{Obsolete}{v2.00:\Term{datetext}}{\Term{submissiontext}} +\begin{Obsolete}{v2.00:\Term{dateofbirthtext}}{\Term{birthdaytext}} +\begin{Obsolete}{v2.00:\Term{placeofbirthtext}}{\Term{birthplacetext}} +\begin{Obsolete}{v2.00:\Term{supervisorothername}}{\Term{supervisorIIname}} +\begin{Obsolete}{v2.00:\Term{defensedatetext}}{\Term{defensetext}} +\begin{Obsolete}{v2.00:\Term{issuedatetext}}{\Term{starttext}} +\begin{Obsolete}{v2.00:\Term{duedatetext}}{\Term{duetext}} +\printobsoletelist% +% +Die Bezeichner wurden in Anlehnung an die dazugehörigen Befehlsnamen umbenannt. +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Bundle} + + +\subsection{\ChangesTo{v2.02}} +\begin{Obsolete}{v2.02:\Option{pageheadingsvskip}}{\Length{chapterheadingvskip}} +\printobsoletelist% +% +Die vertikale Positionierung von Überschriften wurde aufgeteilt. Zum einen kann +diese für Titel"~, Teile- und Kapitelseiten (\Option*{chapterpage=true}) über +die Option \Option*{pageheadingsvskip} geändert werden. Für Kapitelüberschriften +(\Option*{chapterpage=false}) sowie den Titelkopf (\Option*{titlepage=false}) +kann dies unabhängig davon mit \Option*{headingsvskip} erfolgen. +\end{Obsolete} + +\begin{Obsolete}{v2.02:\Macro{graduation}}{% + \Macro{degree}[\OParameter{Abk.}\Parameter{Grad}]% +} +\begin{Obsolete}{v2.02:\Term{graduationtext}}{\Term{degreetext}} +\printobsoletelist% +% +Der Befehl wurde zur Erhöhung der Kompatibilität mit anderen Paketen umbenannt, +der dazugehörige Bezeichner dahingehend angepasst. +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.02:\Macro{blocking}}{% + \Macro{restriction}[\OLParameter{Firma}]% +} +\begin{Obsolete}{v2.02:\Term{blockingname}}{\Term{restrictionname}} +\begin{Obsolete}{v2.02:\Term{blockingtext}}{\Term{restrictiontext}} +\printobsoletelist% +% +Der Befehl wurde zur Erhöhung der Kompatibilität mit anderen Paketen umbenannt, +die dazugehörigen Bezeichner dahingehend angepasst. +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{}{\Environment{tudpage}[\OLParameter{Sprache}]} +\begin{Obsolete}{v2.02:\Key{\Environment{tudpage}}{pagestyle}}{% + \Key{\Environment{tudpage}}{head=\PSet} +} +\begin{Obsolete}{v2.02:\Key{\Environment{tudpage}}{pagestyle}}{% + \Key{\Environment{tudpage}}{foot=\PSet} +} +\printobsoletelist% +% +Diese beiden Parameter der Umgebung \Environment*{tudpage} wurden in ihrer +Funktionalität durch den Parameter \Key*{\Environment{tudpage}}{pagestyle} +ersetzt. +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} + + + +\minisec{Änderungen im Paket \Package{tudscrsupervisor}} +Im Paket \Package{tudscrsupervisor} gab es ein paar kleinere Anpassungen. +\begin{Bundle}{\Package{tudscrsupervisor}} +\begin{Obsolete}{v2.02:\Macro{discipline}}{% + \Macro{branch}[\Parameter{Studienrichtung}]% +} +\begin{Obsolete}{v2.02:\Term{disciplinename}}{\Term{branchname}} +\printobsoletelist% +% +Für die \taskname{} wurden der Befehl sowie der dazugehörige Bezeichner +umbenannt. +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.02:\Macro{contactperson}}{% + \Macro{contact}[\Parameter{Kontaktperson(en)}]% +} +\begin{Obsolete}{v2.02:\Term{contactpersonname}}{\Term{contactname}} +\begin{Obsolete}{v2.02:\Macro{telephone}}{% + \Macro{phone}[\Parameter{Telefonnummer}]% +} +\begin{Obsolete}{v2.02:\Macro{emailaddress}}{% + \Macro{email}[\Parameter{E-Mail-Adresse}]% +} +\printobsoletelist% +% +Alle genannten Befehle und Bezeichner wurden für den \noticename{} umbenannt. +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Bundle} + + +\subsection{\ChangesTo{v2.03}} +\begin{Obsolete}{v2.03:\Option{cdgeometry}}{\Option{geometry=\PBoolean}} +\printobsoletelist% +% +Die Option \Option*{geometry} wurde zur Konsistenz sowie dem Vermeiden +eines möglichen Konfliktes mit einer späteren \KOMAScript-Version umbenannt. +Die Funktionalität bleibt bestehen. +\end{Obsolete} + +\begin{Obsolete}{v2.03:\Option{cdfont}}{\Option{cdfonts=\PBoolean}} +\begin{Obsolete}{v2.03:\Option{cdfont}}{\Option{din=\PBoolean}} +\printobsoletelist% +% +Die Option \Option*{cdfont} wurde erweitert und fungiert als zentrale +Schnittstelle zur Schrifteinstellung. +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.03:\Option{cdmath}}{\Option{sansmath=\PBoolean}} +\printobsoletelist% +% +Die Option \Option*{sansmath} wurde aus Gründen der Konsistenz umbenannt. +Zusätzlich wurde die Funktionalität erweitert. +\end{Obsolete} + +\begin{Obsolete}{v2.03:\Option{cdhead}}{\Option{barfont=\PSet}} +\begin{Obsolete}{v2.03:\Option{cdhead}}{\Option{widehead=\PBoolean}} +\printobsoletelist% +% +Die Optionen \Option*{barfont} und \Option*{widehead} wurden in der Option +\Option*{cdhead} zusammengefasst. +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{}{\Environment{tudpage}[\OLParameter{Sprache}]} +\begin{Obsolete}{v2.03}{\Key{\Environment{tudpage}}{color=\PName{Farbe}}} +\printobsoletelist% +% +Der Parameter \Key*{\Environment{tudpage}}{color=\PValueName{Farbe}} der +\Environment*{tudpage}"=Umgebung wurde ersatzlos entfernt. +\end{Obsolete} +\end{Obsolete} + + +\subsection{\ChangesTo{v2.04}} +\begin{Obsolete}{v2.04}{\Option{fontspec=\PBoolean}}% +\printobsoletelist% +% +Anstatt die Option \Option*{fontspec} zu aktivieren, kann einfach das Paket +\Package{fontspec} in der Dokumentpräambel geladen werden. Dadurch können +anschließend zusätzliche Pakete genutzt werden, welche auf die Verwendung von +\Package{fontspec} angewiesen sind. Sollte die Option \Option*{fontspec} +dennoch genutzt werden, müssen alle auf das Paket \Package{fontspec} +aufbauenden Einstellungen durch den Anwender mit +\Macro*{AfterPackage}[\PParameter{fontspec}\PParameter{\dots}] +verzögert werden. In \fullref{sec:fonts} sind weitere Hinweise zur Verwendung +des Paketes \Package{fontspec} zu finden. +\end{Obsolete} + + +\subsection{\ChangesTo{v2.05}} +\begin{Obsolete}{v2.05:\Option{pageheadingsvskip}}{\Length{pageheadingsvskip}} +\begin{Obsolete}{v2.05:\Option{headingsvskip}}{\Length{headingsvskip}} +\printobsoletelist% +% +Die vertikale Positionierung von speziellen Überschriften erfolgt nicht mehr +über die Längen \Length*{headingsvskip} und \Length*{pageheadingsvskip} sondern +über die Optionen \Option*{headingsvskip} sowie \Option*{pageheadingsvskip}. +\end{Obsolete} +\end{Obsolete} + + +\begin{Obsolete}{v2.05:\Option{footlogoheight}}{\Length{footlogoheight}}% +\printobsoletelist% +% +Auch die Höhe der Logos im Fußbereich der \PageStyle*{tudheadings}"=Seitenstile +wird von nun an mit der Option \Option*{footlogoheight} und nicht mehr mit der +Länge \Length*{footlogoheight} festgelegt. +\end{Obsolete} + + +\subsection{\ChangesTo{v2.06}} +\begin{Declaration}[v2.06]{\Option{cdoldfont}}[false] +\printdeclarationlist% +% +Mit der Version~v2.06 wird standardmäßig \OpenSans als Hausschrift verwendet. +Um jedoch weiterhin ältere Dokumente mit den Schriften \Univers und \DIN +erzeugen zu können, wird diese Option bereitgestellt. +\Attention{% + Diese kann ausschließlich als Klassenoption~-- oder für die Pakete + \Package*{tudscrfonts} und \Package*{fix-tudscrfonts} als Paketoption~-- + genutzt werden. +} Eine späte Optionenwahl mit \Macro*{TUDoption} oder \Macro*{TUDoptions} ist +nicht möglich. Wurden mit \Option{cdoldfont=true} die alten Schriftfamilien +aktiviert, kann jedoch weiterhin die Option \Option*{cdfont} genutzt werden. +% +\begin{values}{\Option{cdoldfont}} +\item[false] + Das Verhalten ist äquivalent zu \Option*{cdfont=false}, die Hausschrift ist + nicht aktiv. +\item[true] + Es werden die alten Hausschriften \Univers für den Fließtext sowie \DIN für + Überschriften der obersten Gliederungsebenen bis einschließlich + \Macro*{subsubsection} genutzt. Die Schriftstärke lässt sich mit + \Option*{cdfont=true} respektive \Option*{cdfont=heavy} anpassen. +\end{values} +% +Für die \TUDScript-Klassen sowie die vom Paket \Package*{fix-tudscrfonts} +unterstützten Dokumentklassen kann die für die Gliederungsebenen verwendete +Schriftart angepasst werden. +% +\begin{values}{\Option{cdoldfont}} +\item[nodin] + Für Überschriften wird \Univers anstatt \DIN verwendet. +\item[din] + Mit dieser Einstellung wird die Schrift \DIN in den Überschriften verwendet. +\item[onlydin] + Hiermit werden nur die Überschriften in \DIN gesetzt, für den Fließtext kommt + nicht \Univers sondern die \hologo{LaTeX}"=Standardschriften respektive die + eines geladenen Schriftpaketes zum Einsatz. +\end{values} +\end{Declaration} + +\begin{Obsolete}{v2.06}{\Macro{univln}} +\begin{Obsolete}{v2.06}{\Macro{textuln}[\Parameter{Text}]} +\begin{Obsolete}{v2.06}{\Macro{univrn}} +\begin{Obsolete}{v2.06}{\Macro{texturn}[\Parameter{Text}]} +\begin{Obsolete}{v2.06}{\Macro{univbn}} +\begin{Obsolete}{v2.06}{\Macro{textubn}[\Parameter{Text}]} +\begin{Obsolete}{v2.06}{\Macro{univxn}} +\begin{Obsolete}{v2.06}{\Macro{textuxn}[\Parameter{Text}]} +\begin{Obsolete}{v2.06}{\Macro{univls}} +\begin{Obsolete}{v2.06}{\Macro{textuls}[\Parameter{Text}]} +\begin{Obsolete}{v2.06}{\Macro{univrs}} +\begin{Obsolete}{v2.06}{\Macro{texturs}[\Parameter{Text}]} +\begin{Obsolete}{v2.06}{\Macro{univbs}} +\begin{Obsolete}{v2.06}{\Macro{textubs}[\Parameter{Text}]} +\begin{Obsolete}{v2.06}{\Macro{univxs}} +\begin{Obsolete}{v2.06}{\Macro{textuxs}[\Parameter{Text}]} +\begin{Obsolete}{v2.06}{\Macro{dinbn}} +\begin{Obsolete}{v2.06}{\Macro{textdbn}[\Parameter{Text}]} +\printobsoletelist% +% +Wird die Option \Option{cdoldfont} nicht aktiviert, werden auch die Befehle zur +expliziten Auswahl eines Schriftschnittes nicht mehr bereitgestellt. +Stattdessen können \Macro*{cdfont} oder \Macro*{textcd}[\Parameter{Text}] +genutzt werden, welche in \autoref{sec:text} zu finden sind. +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.06}[\Option{cdfont=\PSet}]{\Option{cdfont=din}}{% + entfällt, \seeref{\Option{cdoldfont=din}}% +} +\begin{Obsolete}{v2.06}[\Option{cdfont=\PSet}]{\Option{cdfont=nodin}}{% + entfällt, \seeref{\Option{cdoldfont=nodin}}% +} +\printobsoletelist% +% +Die Einstellungen für Überschriften sind mit der Umstellung auf \OpenSans nicht +mehr notwendig. Für die Verwendung der alten Schriftfamilien \Univers und \DIN +muss die Option \Option{cdoldfont} aktiviert werden. +\end{Obsolete} +\end{Obsolete} + +\begin{Obsolete}{v2.06:\Option{cleardoublespecialpage}}{% + \Option{clearcolor=\PBoolean}% +} +\printobsoletelist% +% +Die Option \Option*{clearcolor=\PBoolean} wurde zur Vereinheitlichung der +Benutzerschnittstelle in \Option*{cleardoublespecialpage=\PSet} integriert. +\end{Obsolete} + + +\minisec{Auszeichnungen in Überschriften} +% +Für alle Gliederungsebenen bis einschließlich \Macro*{subsubsection} werden +die Überschriften in Großbuchstaben der Schrift \DIN gesetzt, wenn diese mit +den entsprechenden Einstellungen (\Option*{cdoldfont=true/onyldin}) aktiviert +wurde. Hierfür wird intern \Macro*{MakeTextUppercase}(\Package{textcase})'none' +aus dem Paket \Package{textcase} genutzt, welches zusammen mit den alten +Schriftfamilien geladen wird. Sollen bestimmte Kleinbuchstaben erhalten +bleiben, ist \Macro*{NoCaseChange}(\Package{textcase})'none' zu verwenden. +% +\begin{Example} +In einem Kapitel wird ein einzelnes Wort in Minuskeln geschrieben: +\begin{Code}[escapechar=§] +\chapter{§Ü§berschrift mit \NoCaseChange{kleinem} Wort} +\end{Code} +\end{Example} +% +Die Schrift \DIN durfte laut \CD nur mit Majuskeln (Großbuchstaben) verwendet +werden, weshalb das beschriebene Vorgehen lediglich im \emph{Ausnahmefall} +anzuwenden ist. Die manuellen Nutzung sollte mit +\Macro*{MakeTextUppercase}[% + \PParameter{\Macro{textdbn}[\Parameter{Text}]}% +](\Package{textcase})'none' geschehen. + +\begin{Obsolete}{v2.06}{% + \Macro{ifdin}[\Parameter{Dann-Teil}\Parameter{Sonst-Teil}] +}% +\printobsoletelist% +% +Der Befehl \Macro*{ifdin} prüft, ob die Schriftfamilie \DIN aktiv ist und führt +in diesem Fall \Parameter{Dann-Teil} aus, andernfalls \Parameter{Sonst-Teil}. +\end{Obsolete} + + + +\section{Das Paket \Package{tudscrcomp} -- Umstieg von anderen Klassen} +\begin{Bundle*}{\Package{tudscrcomp}} +\index{Kompatibilität!\Class{tudbook}|(}% +\index{Kompatibilität!\Class{tudmathposter}|(}% + +\noindent\Attention{% + Sollten Sie \Class{tudbook}|?|, \Class{tudletter}|?|, \Class{tudfax}|?|, + \Class{tudhaus}|?|, \Class{tudform}|?| oder auch \Class{tudmathposter}|?| + beziehungsweise eine der \TUDScript-Klassen in der \emph{Version~v1.0} + nie genutzt haben, können Sie dieses \autorefname ohne Weiteres überspringen. + Sämtliche hier vorgestellten Optionen und Befehle sind in der aktuellen + Version von \TUDScript obsolet. +} + +\bigskip\noindent +Zu Beginn der Entwicklung von \TUDScript diente die Klasse \Class{tudbook} als +grundlegende Basis zur Orientierung. Ziel war es, sämtliche Funktionalitäten +dieser Klasse beizubehalten und zusätzlich den vollen Funktionsumfang der +\KOMAScript-Klassen nutzbar zu machen. Bei der kompletten Neuimplementierung +der \TUDScript-Klassen wurde sehr viel verändert und verbessert. Ein Teil der +implementierten Optionen und Befehle war jedoch bereits in der +\emph{Version~v1.0} von \TUDScript unerwünschte Relikte, mit denen lediglich +die Kompatibilität zur \Class{tudbook}"=Klasse und ihren Derivaten +gewährleistet werden sollte. Mit der Version~v2.00 wurden einige der unnötigen +Befehle und Optionen aus Gründen der Konsistenz nur umbenannt, andere wiederum +wurden vollständig entfernt oder über neue Befehle und Optionen in ihrer +Funktionalität ersetzt und erweitert. + +Das Paket \Package{tudscrcomp} dient der Überführung von Dokumenten, welche +entweder mit der \Class{tudbook}"=Klasse, ihren Derivaten, +der Klasse \Class{tudmathposter} oder mit \TUDScript in der \emph{Version~v1.0} +erstellt wurden, auf \TUDScript~\vTUDScript. +\Attention{% + Falls Sie das Paket verwenden wollen, sollte es \textbf{direkt} nach der + Dokumentklasse geladen werden. Andernfalls kann es im Zusammenhang mit + anderen Paketen zu Problemen kommen. +} + +Es werden einige Optionen und Befehle bereitgestellt, welche von den zuvor +genannten Klassen definiert werden, um das entsprechende Verhalten nachzuahmen. +Damit soll vor allem die Kompatibilität bei einer Änderung der Dokumentklasse +sichergestellt werden. Die Intention ist, Dokumente möglichst schnell und +einfach auf die \TUDScript-Klassen portieren zu können. Des Weiteren ist +beschrieben, wie sich die Funktionalität ohne eine Verwendung des Paketes +\Package{tudscrcomp} mit den Mitteln von \TUDScript umsetzen lassen. Für den +Satz neuer Dokumente wird empfohlen, auf den Einsatz dieses Paketes komplett zu +verzichten und stattdessen direkt die \TUDScript-Befehle zu nutzen. + +\begin{Declaration}{\Macro{einrichtung}[\Parameter{Fakultät}]}{% + identisch zu \Macro*{faculty}[\Parameter{Fakultät}]% +} +\begin{Declaration}{\Macro{fachrichtung}[\Parameter{Einrichtung}]}{% + identisch zu \Macro*{department}[\Parameter{Einrichtung}]% +} +\begin{Declaration}{\Macro{institut}[\Parameter{Institut}]}{% + identisch zu \Macro*{institute}[\Parameter{Institut}]% +} +\begin{Declaration}{\Macro{professur}[\Parameter{Lehrstuhl}]}{% + identisch zu \Macro*{chair}[\Parameter{Lehrstuhl}]% +} +\printdeclarationlist% +% +Dies sind die deutschsprachigen Befehle für den Kopf im \CD. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Option{serifmath}}{% + identisch zu \Option*{cdmath=false}% +} +\printdeclarationlist% +% +Die Funktionalität wird durch die Option \Option*{cdmath} bereitgestellt. +\end{Declaration} + +\begin{Declaration}{\Macro{tudfont}[\Parameter{Scriftart}]}{% + identisch zu \Macro*{cdfont}[\Parameter{Scriftart}]% +} +\printdeclarationlist% +% +Die direkte Auswahl der Schriftart sollte mit \Macro*{cdfont} erfolgen. +Zusätzlich gibt es den Befehl \Macro*{textcd}, mit dem die Auszeichnung +eines bestimmten Textes in einer anderen Schriftart erfolgen kann, ohne die +Dokumentschrift umzuschalten. +\end{Declaration} +\index{Kompatibilität!\Class{tudmathposter}|)}% + + +\subsection{Optionen und Befehle aus \Class{tudbook} \& Co.} +% +Die nachfolgenden Optionen, Umgebungen sowie Befehle werden~-- zumindest +teilweise~-- von den Klassen \Class{tudbook}, \Class{tudletter}, +\Class{tudfax}, \Class{tudhaus}, \Class{tudform} sowie dem Paket +\Package{tudthesis}'none' und \TUDScript in der \emph{Version~v1.0} definiert. +Diese werden durch das Paket \Package{tudscrcomp} für \TUDScript~\vTUDScript{} +zur Verfügung gestellt. + +\begin{Declaration}{\Option{colortitle}}{% + identisch zu \Option*{cdtitle=color}% +} +\begin{Declaration}{\Option{nocolortitle}}{% + identisch zu \Option*{cdtitle=true}% +} +\printdeclarationlist% +% +Die Funktionalität wird durch die Option \Option*{cdtitle} bereitgestellt. +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{moreauthor}[\Parameter{Autorenzusatz}]}{% + identisch zu \Macro*{authormore}[\Parameter{Autorenzusatz}]% +} +\printdeclarationlist% +% +Ursprünglich war diese Befehl für das Unterbringen aller möglichen, +zusätzlichen Autoreninformationen gedacht. Auch der Befehl \Macro*{authormore} +ist ein Rudiment davon. Empfohlen wird stattdessen die Verwendung der Befehle +\Macro*{dateofbirth}, \Macro*{placeofbirth}, \Macro*{matriculationnumber} und +\Macro*{matriculationyear} sowie \Macro*{course} und \Macro*{discipline}. +\end{Declaration} + +\begin{Declaration}{\Macro{submitdate}[\Parameter{Datum}]}{% + identisch zu \Macro*{date}[\Parameter{Datum}]% +} +\printdeclarationlist% +% +Die Funktionalität wird durch den erweiterten Standardbefehl \Macro*{date} +abgedeckt. +\end{Declaration} + +\begin{Declaration}{\Macro{supervisorII}[\Parameter{Name}]}{% + identisch zur Verwendung von \Macro*{and} innerhalb von \Macro*{supervisor}% +} +\printdeclarationlist% +% +Es ist \Macro*{supervisor}[\PParameter{\PName{Name} \Macro*{and} \PName{Name}}] +statt \Macro*{supervisorII}[\Parameter{Name}] zu verwenden. +\end{Declaration} + +\begin{Declaration}{\Macro{supervisedby}[\Parameter{Bezeichnung}]}{% + siehe \Term*{supervisorname}% +} +\begin{Declaration}{\Macro{supervisedIIby}[\Parameter{Bezeichnung}]}{% + siehe \Term*{supervisorothername}% +} +\begin{Declaration}{\Macro{submittedon}[\Parameter{Bezeichnung}]}{% + siehe \Term*{datetext}% +} +\printdeclarationlist% +% +Zur Änderung der Bezeichnung der Betreuer sollten die sprachabhängigen +Bezeichner wie in \autoref{sec:localization} beschrieben angepasst werden. Eine +Verwendung der hier beschriebenen Befehle entfernt die Abhängigkeit der +Bezeichner von der verwendeten Sprache. +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Option{ddcfooter}}{% + identisch zu \Option*{ddcfoot=true}% +} +\printdeclarationlist% +% +Die Funktionalität wird durch die Option \Option*{ddcfoot} bereitgestellt. +\end{Declaration} + +\begin{Declaration}{\Macro{dissertation}} +\printdeclarationlist% +% +Die Funktionalität kann durch die Befehle \Macro*{thesis}[\PParameter{diss}] +und \Macro*{referee} sowie die Bezeichner \Term*{refereename} und +\Term*{refereeothername} dargestellt werden. +\end{Declaration} + +\begin{Declaration}{\Macro{chapterpage}} +\printdeclarationlist% +% +Durch diesen Befehl können Kapitelseiten konträr zur eigentlichen Einstellung +aktiviert oder deaktiviert werden. Prinzipiell ist dies auch durch eine +Änderung der Option \Option*{chapterpage} möglich. Allerdings wird davon +abgeraten, da dies zu einem inkonsistenten Layout innerhalb des Dokumentes +führt. +\end{Declaration} + +\begin{Declaration}{\Environment{theglossary}[\OParameter{Präambel}]} +\begin{Declaration}{\Macro{glossitem}[\Parameter{Begriff}]} +\printdeclarationlist% +% +Die \Class{tudbook}"=Klasse stellt eine rudimentäre Umgebung für ein Glossar +bereit. Allerdings gibt es dafür bereits zahlreiche und besser implementierte +Pakete. Daher wird für diese Umgebung keine Portierung vorgenommen, sondern +lediglich die ursprüngliche Definition übernommen. Allerdings sein an dieser +Stelle auf wesentlich bessere Lösungen wie beispielsweise das Paket +\Package{glossaries} oder~-- mit Abstrichen~-- das nicht ganz so umfangreiche +Paket \Package{nomencl} verwiesen. +\end{Declaration} +\end{Declaration} +\index{Kompatibilität!\Class{tudbook}|)}% + +\subsection{Optionen und Befehle aus \Class{tudmathposter}} +\index{Kompatibilität!\Class{tudmathposter}|(}% +% +\ChangedAt{v2.05:Unterstützung von \Class{tudmathposter}} +Die Klasse~\Class{tudmathposter} wird~-- im Gegensatz zu den zuvor genannten +Klassen von Klaus Bergmann~-- weiterhin gepflegt und kann bedenkenlos zum +Setzen von Postern im A0"~Format verwendet werden. Dennoch gab es vermehrt +Anfragen bezüglich einer Posterklasse auf Basis der \TUDScript-Klassen, um +beispielsweise die Schriftgröße oder auch das Papierformat einfach anpassen zu +können. Um von \Class{tudmathposter} einen möglichst einfachen Übergang auf +\Class{tudscrposter} zu gewährleisten, kann zusätzlich letzterer Klasse das +Paket \Package{tudscrcomp} geladen werden, welches die nachfolgend erläuterten +Anwenderbefehle bereitstellt. Von \Package{tudscrcomp} werden außerdem einige +Pakete geladen, welche normalerweise durch \Class{tudmathposter} eingebunden +werden. Dies sind \Package{amsmath}, \Package{amsfonts}, \Package{calc}, +\Package{textcomp} sowie \Package{tabularx}. + +Es ist nicht beabsichtigt, dass bei einem Umstieg von \Class{tudmathposter} auf +\Class{tudscrposter} in Verbindung mit \Package{tudscrcomp} das Ausgabeergebnis +identisch ist. Vielmehr soll damit die Möglichkeit geschaffen werden, auf +\Class{tudmathposter} basierende Dokumente auf die \Class{tudscrposter} zu +überführen. In jedem Fall sollte bei einem Umstieg auf \TUDScript-Posterklasse +beachtet werden, dass für diese Klasse eine explizite Wahl der Schriftgröße +über die Option~\Option{fontsize}(\Package{koma-script})'none' notwendig ist. +Um kongruent zur Klasse \Class{tudmathposter} zu bleiben, ist die Wahl einer +Schriftgröße von \Option*{fontsize=\PValue{34\dots36pt}} sinnvoll. Für weitere +Informationen zu diesem Thema sind in \autoref{sec:fontsize} vorhanden. +Weiterhin sollte für ein ähnliches Ausgabeergebnis die Absatzformatierung über +die \KOMAScript-Option \Option*{parskip=half-} eingestellt werden. Ein blaues +\DDC-Logo im Fußbereich lässt sich über \Option*{ddcfoot=blue} aktivieren. + +\begin{Declaration}{\Option{tudmathposterfoot}}% +\printdeclarationlist% +% +Durch die Klasse \Class{tudmathposter} wird der Fußbereich zweispaltig jedoch +asymmetrisch und ohne Überschriften innerhalb der beiden Spalten gesetzt. +Dieses Verhalten lässt sich mit der Option \Option{tudmathposterfoot} +auswählen. Alternativ kann auch \Option*{cdfoot=tudmathposter}'none' respektive +\Option*{cdfoot=tudscrposter}'none' zum Aktivieren beziehungsweise Deaktivieren +verwendet werden. +\end{Declaration} + +\begin{Declaration}{\Option{bluebg}}{% + identisch zu \Option*{backcolor=true}(\Class{tudscrposter})% +} +\printdeclarationlist% +% +Mit der Klasse \Class{tudscrposter} lässt sich das Verhalten mit der Option +\Option*{backcolor}(\Class{tudscrposter}) umsetzen. +\end{Declaration} + +\begin{Declaration}{\Macro{telefon}[\Parameter{Telefonnummer}]}{identisch zu + \Macro*{telephone}[\Parameter{Telefonnummer}](\Class{tudscrposter})% +} +\begin{Declaration}{\Macro{fax}[\Parameter{Telefaxnummer}]}{identisch zu + \Macro*{telefax}[\Parameter{Telefaxnummer}](\Class{tudscrposter})% +} +\begin{Declaration}{\Macro{email}[\Parameter{E-Mail-Adresse}]}{identisch zu + \Macro*{emailaddress*}[\Parameter{E-Mail-Adresse}]% +} +\begin{Declaration}{\Macro{homepage}[\Parameter{URL}]}{identisch zu + \Macro*{webpage*}[\Parameter{URL}](\Class{tudscrposter})% +} +\printdeclarationlist% +% +Dies sind die von \Class{tudmathposter} definierten Befehle für die Felder im +vordefinierten Fußbereich des Posters. Es ist dabei insbesondere zu beachten, +dass die angegebene E"~Mail-Adresse sowie die URL nicht automatisch formatiert +werden. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{fusszeile}[\Parameter{Inhalt}]}{% + identisch zu \Macro*{footcontent}[\Parameter{Inhalt}] +} +\begin{Declaration}{\Macro{footcolumn0}[\Parameter{Inhalt}]}{% + identisch zu \Macro*{footcontent}[\Parameter{Inhalt}] +} +\begin{Declaration}{\Macro{footcolumn1}[\Parameter{Inhalt}]}{% + identisch zu \Macro*{footcontent}[\Parameter{Inhalt}\POParameter{*}] +} +\begin{Declaration}{\Macro{footcolumn2}[\Parameter{Inhalt}]}{% + identisch zu \Macro*{footcontent}[\PParameter{*}\OParameter{Inhalt}] +} +\printdeclarationlist% +% +Mit diesen Befehlen kann die Gestalt des Fußes angepasst werden, wobei entweder +der Bereich über die gesamte Breite (\Macro{fusszeile}, \Macro{footcolumn0}) +oder lediglich die linke (\Macro{footcolumn1}) respektive die rechte Spalte +(\Macro{footcolumn2}) angepasst wird. Für zusätzliche Hinweise zur Anpassung +des Fußbereichs~-- insbesondere für die Schriftformatierung~-- sollte die +Beschreibung von \Macro*{footcontent}'full' zu Rate gezogen werden. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + + +\begin{Declaration}{\Macro{zweitlogofile}[\Parameter{Dateiname}]}{% + identisch zu \Macro*{headlogo}[\Parameter{Dateiname}] +} +\begin{Declaration}{\Macro{institutslogofile}[\Parameter{Dateiname}]}{% + \seeref{\Macro*{footlogo}}% +} +\begin{Declaration}{\Macro{drittlogofile}[\Parameter{Dateiname}]}{% + \seeref{\Option*{ddc} und \Option*{ddcfoot}}% +} +\printdeclarationlist% +% +Für die Angabe von Logos für den Kopf- und Fußbereich existieren diese Befehle. +Bei der Verwendung von \Macro{institutslogofile}[\Parameter{Dateiname}] ist zu +beachten, dass die angegebene Datei sehr weit rechts im Fußbereich des Posters +gesetzt wird. Dabei kommt bei der Verwendung im Hintergrund der von \TUDScript +für das Setzen von Logos im Fußbereich tatsächlich vorgesehene Befehl in der +Form \Macro*{footlogo}[\PParameter{{{,}{,}{,}{,}{,}{,}{,}\PName{Dateiname}{,}}}] +zum Einsatz. Das Makro \Macro{drittlogofile} wird von \Class{tudmathposter} für +die Angabe eines \DDC-Logos im rechten Seitenfuß bereitgestellt. Für die +\TUDScript-Klassen gibt es hierfür die Optionen \Option*{ddc} beziehungsweise +\Option*{ddcfoot}. +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{zweitlogo}[\Parameter{Definition}]}{% + keine Funktionalität, \seeref{\Macro*{headlogo}} +} +\begin{Declaration}{\Macro{institutslogo}[\Parameter{Definition}]}{% + keine Funktionalität, \seeref{\Macro*{footlogo}} +} +\begin{Declaration}{\Macro{drittlogo}[\Parameter{Definition}]}{% + keine Funktionalität, \seeref{\Option*{ddc} und \Option*{ddcfoot}}% +} +\printdeclarationlist% +% +Mit diesen Befehlen kann der Anwender bei \Class{tudmathposter} die Definition +für das Einbinden diverser Logos selber vornehmen. Dies ist für \TUDScript +nicht vorgesehen. Im Zweifel sollten die Möglichkeiten der korrelierenden +Befehle genutzt werden. Bei der Verwendung eines dieser Makros wird lediglich +eine Warnung ausgegeben. +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{% + \Macro{topsection}[\OParameter{Kurzform}\Parameter{Überschrift}]% +} +\begin{Declaration}{% + \Macro{topsubsection}[\OParameter{Kurzform}\Parameter{Überschrift}]% +} +\printdeclarationlist% +% +Der Grund für die Existenz dieser beiden Befehle bei \Class{tudmathposter} ist +nicht ohne Weiteres nachvollziehbar. Beide entsprechen in ihrem Verhalten den +Standardbefehlen \Macro*{section} und \Macro*{subsection}, setzen allerdings +keinen vertikalen Abstand vor der erzeugten Überschrift. Auch wenn das aus +typographischer Sicht wohl eher unvorteilhaft ist, werden diese beiden Befehle +bereitgestellt. +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{% + \Macro{centersection}[\OParameter{Kurzform}\Parameter{Überschrift}]% +} +\begin{Declaration}{% + \Macro{centersubsection}[\OParameter{Kurzform}\Parameter{Überschrift}]% +} +\begin{Declaration}{% + \Macro{topcentersection}[\OParameter{Kurzform}\Parameter{Überschrift}]% +} +\begin{Declaration}{% + \Macro{topcentersubsection}[\OParameter{Kurzform}\Parameter{Überschrift}]% +} +\printdeclarationlist% +% +Weiterhin werden auch noch eigene Makros zum Setzen zentrierter Überschriften +definiert~-- ein simples Umdefinieren von \Macro*{raggedsection} ist dafür im +Normalfall absolut ausreichend. Und um die Sache vollständig zu machen, gibt es +die zentrierten Überschriften auch noch ohne vorgelagerten, vertikalen Abstand. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Environment{farbtabellen}} +\begin{Declaration}{\Macro{blautabelle}} +\begin{Declaration}{\Macro{grautabelle}} +\printdeclarationlist% +% +Wird innerhalb der \Environment{farbtabellen}"=Umgebung eine Tabelle gesetzt, +so werden die Zeilen alternierend farbig hervorgehoben. Standardmäßig sind +hierfür leichte Blautönen eingestellt, was auch jederzeit mit dem Aufruf von +\Macro{blautabelle} wiederhergestellt werden kann. Alternativ zu dieser +Darstellung kann mit \Macro{grautabelle} auf eine Verwendung von leichten +Grautönen umgestellt werden. +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Environment{figurehere}} +\begin{Declaration}{\Environment{tablehere}} +\printdeclarationlist% +% +Diese beiden Umgebungen können genutzt werden, um nicht"~gleitende Abbildungen +oder Tabellen zu setzen. +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{schnittrand}} +\printdeclarationlist% +% +Wird \Macro{schnittrand} \textbf{vor} dem Laden des Paketes \Package{tudscrcomp} +definiert, so wird der Inhalt des Befehls als Längenwert interpretiert. Dieser +wird verwendet, um den zuvor festgelegten Satzspiegel über die drei Parameter +\Key*{\Macro{geometry}(\Package{geometry})}{paper=\PName{Papierformat}}, +\Key*{\Macro{geometry}(\Package{geometry})}{layout=\PName{Zielformat}} und +\Key*{\Macro{geometry}(\Package{geometry})}{layoutoffset=\PName{Längenwert}} des +Befehls \Macro*{geometry}(\Package{geometry})'none' aus dem Paket +\Package*{geometry} zu setzen und das erzeugte Papierformat um den gegebenen +Längenwert an allen Rändern zu vergrößern. Somit wird eine Beschnittzugabe +hinzugefügt, \emph{ohne dabei die Seitenränder des Entwurfslayouts anzupassen}. +In \fullref{sec:tips:crop} sind zusätzliche Informationen zu diesem Thema zu +finden. +\end{Declaration} +\index{Kompatibilität!\Class{tudmathposter}|)}% +\end{Bundle*} diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-packages.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-packages.tex new file mode 100644 index 0000000000..13ce2d1ec8 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-packages.tex @@ -0,0 +1,1054 @@ +\setchapterpreamble{\tudhyperdef'{sec:packages}} +\chapter{Benötigte, unterstützte und empfehlenswerte Pakete} +\index{Kompatibilität|?}% +% +\section{Notwendige und ergänzende Pakete für \TUDScript} +\tudhyperdef*{sec:packages:needed}% +Diese Pakete werden von den \TUDScript"~Klassen zwingend benötigt und +eingebunden. Möchten Sie eines der im Folgenden aufgezählten Pakete selber +mit bestimmten Optionen nutzen, so sollten diese bereits \emph{vor} dem Laden +der Dokumentklasse an das Paket weitergereicht werden, falls bei der folgenden +Beschreibung des Paketes nichts anderweitiges angegeben wird. +% +\begin{Example} +Das Weiterreichen von Optionen an Pakete muss folgendermaßen erfolgen: +\begin{Code}[escapechar=§] +\PassOptionsToPackage§\Parameter{Paketoptionen}\Parameter{Paket}§ +\documentclass§\OParameter{Klassenoptionen}\PParameter{tudscr\dots}§ +\end{Code} +\end{Example} +% +\begin{packages} +\item[koma-script,typearea,scrbase,scrlayer-scrpage,scrextend] + \begin{Declaration*}{\Class{scrbook}} + \begin{Declaration*}{\Class{scrreprt}} + \begin{Declaration*}{\Class{scrartcl}} + \begin{Declaration*}{\Class{scrlttr2}} + \ChangedAt{% + v2.02:Paket \Package{scrlayer-scrpage} ist für \TUDScript unabdingbar% + }% + Das \KOMAScript-Bundle ist die zentrale Grundlage für \TUDScript. Neben den + Klassen \Class{scrbook}, \Class{scrreprt} und \Class{scrartcl} wird das Paket + \Package{scrbase} benötigt. Dieses erlaubt das Definieren von Klassenoptionen + im Stil von \KOMAScript, welche auch noch nach dem Laden der Klasse mit den + Befehlen \Macro{TUDoption} und \Macro{TUDoptions} geändert werden können. Für + die Bereitstellung der \PageStyle{tudheadings}"=Seitenstile ist das Paket + \Package{scrlayer-scrpage} notwendig. Wenn es nicht durch den Anwender~-- mit + beliebigen Optionen~-- geladen wird, erfolgt dies am Ende der Präambel + automatisch durch \TUDScript. + \end{Declaration*} + \end{Declaration*} + \end{Declaration*} + \end{Declaration*} +\item[opensans,iwona] + \index{Schriftart|!}% + \ChangedAt{% + v2.06:Pakete \Package{opensans}, \Package{iwona} und \Package{mathastext} + sind für \TUDScript zwingend erforderlich% + }% + Das Paket \Package{opensans} stellt die Schriftfamilie \OpenSans sowohl für + den Fließtext als auch den mathematischen Satz zur Verfügung. Es enthält alle + nötigen Schriftschnitte sowohl im Type1- als auch im OpenType-Format. Da die + Schriftfamilie in der aktuellen Version keine mathematischen Glyphen + bereitstellt, werden die Pakete \Package{mathastext} und \Package{iwona} + zusätzlich genutzt, um zumindest einen halbwegs erträglichen mathematischen + Satz mit \OpenSans zu ermöglichen. Werden dabei zusätzliche Symbole benötigt, + wird empfohlen, auf das Paket \Package{amssymb} zu verzichten und anstelle + dessen \Package{mdsymbol} zu laden. +\item[mweights] + \index{Schriftstärke}% + \ChangedAt{% + v2.06:Paket \Package{mweights} ist für \TUDScript zwingend erforderlich% + }% + In \hologo{LaTeXe} existieren die Schriftfamilien für Serifenschriften + (\Macro*{rmfamily}), serifenlose Schriften (\Macro*{sffamily}) sowie die + Schreibmaschinenschriften (\Macro*{ttfamily}). Deren Schriftstärke wird für + gewöhnlich mit den beiden Befehlen \Macro*{mddefault} und \Macro*{bfdefault} + einheitlich festgelegt. Bei der Verwendung unterschiedlicher Schriftpakete + kann es unter Umständen zu Problemen bei den Schriftstärken kommen. Diese + Paket erlaubt die individuelle Definition der Schriftstärke für jede der drei + Schriftfamilien. +\item[geometry] + \index{Satzspiegel}% + Das Paket wird zum Festlegen der Seitenränder respektive des Satzspiegels + verwendet. + \Attention{% + Ein Weiterreichen zusätzlicher Optionen an das Paket wird dringlich nicht + empfohlen. + }% +\item[graphicx] + \index{Grafiken}% + Dies ist das De"~facto"~Standard"~Paket zum Einbinden von Grafiken. Zum + Setzen des Logos der \TnUD im Kopf sowie aller weitere Abbildungen und Logos + wird \Macro{includegraphics}(\Package{graphicx})'none' genutzt. +\item[xcolor] + \index{Farben}% + Damit werden die Farben des \CDs zur Verwendung im Dokument definiert. + Genaueres ist bei der Beschreibung von \Package{tudscrcolor}'auto' zu finden. +\item[kvsetkeys] + Das von \Package{scrbase} geladene Paket \Package{keyval} ermöglicht das + Definieren von Klassen"~ und Paketoptionen sowie Parametern nach dem + Schlüssel"=Wert"=Prinzip. Mit diesem Paket kann das Verhalten für unbekannte + Schlüssel festgelegt werden. +\item[etoolbox,xpatch,letltxmacro,etexcmds] + Diese Pakete stellen viele Funktionen zum Testen und zur Ablaufkontrolle + bereit. Weiterhin wird das Manipulieren vorhandener Makros ermöglicht. +\item[environ] + \index{Befehlsdeklaration}% + Es wird eine verbesserte Deklaration von Umgebungen ermöglicht, bei der auch + beim Abschluss der Umgebung auf die übergebenen Parameter zugegriffen werden + kann. +\item[trimspaces] + Bei mehreren Eingabefeldern für den Anwender werden die Argumente mithilfe + dieses Paketes um eventuell angegebene, unnötige Leerzeichen befreit. +\end{packages} +% + + + +\minisec{Durch \TUDScript direkt unterstütze Pakete} +% +Einige der unter \autoref{sec:packages:recommended} beschriebenen Pakete werden +durch \TUDScript direkt unterstützt und erweitern dessen Funktionalität. Dies +sind namentlich \Package{hyperref}, \Package{multicol}, \Package{quoting}, +\Package{ragged2e} und \Package{crop} sowie \Package{isodate} respektive +\Package{datetime2}. Weitere Informationen dazu ist den nachfolgenden +Beschreibung des jeweiligen Paketes zu entnehmen. + + + +\newcommand*\RecPack{% + \hyperref[sec:packages:recommended]{Paketbeschreibung}:\xspace% +} +\section{Empfehlenswerte Pakete} +\tudhyperdef*{sec:packages:recommended}% +% +In diesem \autorefname wird eine Vielzahl an Paketen~-- zumeist kurz~-- +vorgestellt, welche sich für mich persönlich bei der Arbeit mit \hologo{LaTeX} +bewährt haben. Einige davon werden außerdem im Tutorial \Tutorial{treatise} in +ihrer Anwendung beschrieben. Für detaillierte Informationen sowie bei Fragen zu +den einzelnen Paketen sollte die jeweilige Dokumentation% +\footnote{Kommandozeile/Terminal: \Path{texdoc\,\PName{Paketname}}} +zu Rate gezogen werden, das Lesen der hier gegebenen Kurzbeschreibung ersetzt +dies in keinem Fall. + + +\subsection{Pakete zur Verwendung in jedem Dokument} +Die hier vorgestellten Pakete gehören meiner Meinung nach in die Präambel eines +jeden Dokumentes. Die Dokumentsprache sollte in jedem Fall mit \Package{babel} +oder \Package{polyglossia} definiert werden~-- auch wenn dies Englisch ist. Für +deutschsprachige Dokumente ist für eine annehmbare Worttrennung beim Einsatz +von \Engine{pdfLaTeX} das Paket \Package{hyphsubst} unbedingt zu verwenden. + +\begin{packages} +\item[fontenc,fontspec] + \index{Zeichensatzkodierung}% + \ChangedAt{v2.02:\RecPack \Package{fontspec}} + Die Zeichensatzkodierung des Ausgabefonts sollte immer festgelegt werden. Für + \Engine{pdfLaTeX} ist die Ausgabe als 7"~bit"~kodierte Schrift in der + Voreinstellung gewählt, was unter anderem dazu führt, dass keine echten + Umlaute im erzeugten PDF"~Dokument verwendet werden. Um auf 8"~bit"~Schriften + zu schalten, ist \Macro*{usepackage}[\POParameter{T1}\PParameter{fontenc}] zu + nutzen. + + Für die Unicode"=Textsatzsysteme \Engine{LuaLaTeX} oder \Engine{XeLaTeX} + sollte stattdessen das Paket \Package{fontspec} verwendet werden. Damit + können Systemschriften im OpenType-Format und einer beliebigen + Zeichensatzkodierung eingebunden werden, womit sich die Auswahl der + verwendbaren Schriften stark erweitert. Das Paket wird durch \TUDScript + unterstützt. +\item[microtype] + \index{Typografie}% + Dieses Paket kümmert sich um den optischen Randausgleich% + \footnote{englisch: protrusion, margin kerning} + und das Nivellieren der Wortzwischenräume% + \footnote{englisch: font expansion} + im Dokument. Es funktioniert nicht mit der klassischen \Engine*{TeX}"~Engine, + wohl jedoch mit \Engine*{pdfTeX} oder \Engine*{LuaTeX} sowie \Engine*{XeTeX}. +\item[babel,polyglossia] + \index{Sprachunterstützung}% + \index{Bezeichner}% + Mit dem Paket \Package{babel} erfolgt die Einstellung der im Dokument + verwendeten Sprache(n). Bei mehreren angegebenen Sprachen ist die zuletzt + geladene die Hauptsprache des Dokumentes. Die gewünschten Sprachen sollten + nicht als Paketoption sondern als Klassenoption und gesetzt werden, damit + auch andere Pakete auf die Spracheinstellungen zugreifen können. Für + deutschsprachige Dokumente ist die Option \Option*{ngerman} für die neue oder + \Option*{german} für die alte deutsche Rechtschreibung zu verwenden. + + Mit dem Laden von \Package{babel} und der dazugehörigen Sprachen werden + sowohl die Trennmuster als auch die sprachabhängigen Bezeichner angepasst. + Von einer Verwendung der obsoleten Pakete \Package{german} beziehungsweise + \Package{ngerman} anstelle von \Package{babel} wird abgeraten. Für + \Engine{LuaLaTeX} und \Engine{XeLaTeX} kann das Paket \Package{polyglossia} + genutzt werden. +\item[hyphsubst,dehyph-exptl] + \index{Worttrennung|!}% + Die möglichen Trennstellen von Wörtern wird von \hologo{LaTeX} mithilfe + eines Algorithmus berechnet. Dieser wird für deutschsprachige Texte mit dem + Paket \Package{hyphsubst} entscheidend verbessert. \Engine{LuaLaTeX} und + \Engine{XeLaTeX} nutzen diese Trennmuster automatisch, für \Engine{pdfLaTeX} + müssen diese mit folgendermaßen eingebunden werden: + \begin{Code}[escapechar=§] + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} + \end{Code}\vspace{-\baselineskip}% + In \autoref{sec:tips:hyphenation} wird genauer auf das Zusammenspiel von + \Package{hyphsubst} und \Package{babel} sowie \Package{fontenc} eingegangen, + ein Blick dahin wird dringend empfohlen. Zusätzliche werden dort weitere + Hinweise für eine verbesserte Worttrennung gegeben. +\end{packages} + + +\subsection{Pakete zur situativen Verwendung} +Die nachfolgenden Pakete sollten nicht zwangsweise in jedem Dokument geladen +werden sondern nur, falls dies auch tatsächlich notwendig ist. Zur besseren +Übersicht wurde versucht, diese thematisch passend zu gruppieren. Daraus lässt +sich keinerlei Wertung bezüglich ihrer Nützlichkeit oder meiner persönlichen +Wertschätzung ableiten. + + +\subsubsection{Typografie und Layout} +\index{Typografie|(}% +% +Neben dem zuvor beschriebenem Paket \Package{microtype}, welches verantwortlich +für mikrotypografische Feinheiten ist, existieren weitere Pakete, die vorrangig +die Makrotypografie adressieren. +% +\begin{packages} +\item[setspace] + \index{Zeilenabstand}% + Die Vergrößerung des Zeilenabstandes wird: + % + \begin{enumerate}[itemindent=0pt,labelwidth=*,labelsep=1em,label=\Roman*.] + \stditem viel zu häufig und völlig unnötig gefordert und + \stditem schließlich auch noch zu groß gewählt. + \end{enumerate} + % + Die Forderung nach Erhöhung des Zeilenabstandes~-- in der Typografie als + Durchschuss bezeichnet~-- kommt aus den Zeiten der Textverarbeitung mit der + Schreibmaschine. Ein einzeiliger Zeilenabstand bedeutete hier, dass die + Unterlängen der oberen Zeile genau auf der Höhe der Oberlängen der folgenden + Zeile lagen. Ein anderthalbzeiliger Zeilenabstand erzielte hier somit einen + akzeptablen Durchschuss. Eine Erhöhung des Durchschusses bei der Verwendung + von \hologo{LaTeX} ist an und für sich nicht notwendig. Sinnvoll ist dies + nur, wenn im Fließtext serifenlose Schriften zum Einsatz kommen, um die damit + verbundene schlechte Lesbarkeit etwas zu verbessern. + + Ist die Erhöhung des Durchschusses wirklich notwendig, sollte das Paket + \Package{setspace} genutzt werden. Dieses stellt den Befehl + \Macro{setstretch}[\Parameter{Faktor}](\Package{setspace})'none' zur + Verfügung, mit dem der Durchschuss respektive Zeilenabstand angepasst werden + kann. Der Wert des Faktors ist standardmäßig auf~1 gestellt und sollte + maximal bis~1.25 vergrößert werden. Der Befehl \Macro*{onehalfspacing} aus + diesem Paket setzt diesen Wert auf eben genau~1.25. Allerdings ist hier + anzumerken, dass die Vergrößerung des Zeilenabstandes~-- so wie ich es mir + angelesen habe~-- aus der Sicht eines Typographen keine Spielerei ist sondern + vielmehr allein der Lesbarkeit des Textes dient und möglichst gering + ausfallen sollte. + + Ziel ist es, beim Lesen nach dem Beenden einer Zeile das Auffinden der neuen + Zeile zu vereinfachen. Bei Serifen ist dies durch die Betonung der Grundlinie + sehr gut möglich. Bei serifenlosen Schriften~-- wie der im \TUDCD verwendeten + \OpenSans~-- ist dies schwieriger und ein erweiterter Abstand der Zeilen kann + hierbei hilfreich sein. Jedoch sollte nicht nach dem Motto + \enquote{viel hilft viel} verfahren werden. Für dieses Dokument wurde + \Macro{setstretch}[\PParameter{1.1}](\Package{setspace})'none' für den + Zeilenabstand gewählt. Weitere Tipps sind in \autoref{sec:tips:headings} und + \autoref{sec:tips:headline} zu finden. +\item[multicol] + \index{Satzspiegel!zweispaltig|?}% + \index{Mehrspaltensatz}% + \index{Satzspiegel!mehrspaltig}% + Hiermit kann jeglicher beliebiger Inhalt in zwei oder mehr Spalten ausgegeben + werden, wobei~-- im Gegensatz zum normalen zweispaltigen Satz über die + \KOMAScript-Option \Option{twocolumn}(\Package{typearea})'none'~-- für einen + Spaltenausgleich gesorgt wird. Unterstützt wird das Paket innerhalb der + Umgebungen \Environment{abstract} und \Environment{tudpage}. +\item[balance] + \index{Satzspiegel!zweispaltig}% + Dieses Paket ermöglicht einen Spaltenausgleich im zweispaltigen Satz auf der + letzten Dokumentseite. Alternativ dazu kann auch \Package{multicol} verwendet + werden. +\item[isodate,datetime2] + \index{Datum|?}% + Mit \Macro{printdate}[\Parameter{Datum}](\Package{isodate})'none' formatiert + das Paket \Package{isodate} die Ausgabe eines Datums automatisch in ein + spezifiziertes Format. Die Datumsangabe kann dabei im deutschen, englischen + oder ISO"~Format erfolgen. Alternativ kann auch das Paket \Package{datetime2} + genutzt werden, welches zwingend die Eingabe im ISO"~Format erfordert. Wird + eines der beiden Pakete geladen, werden alle Datumsfelder, welche durch die + \TUDScript-Klassen definiert wurden,% + \footnote{% + \Macro{date}, \Macro{dateofbirth} und \Macro{defensedate} sowie aus + \Package{tudscrsupervisor} \Macro{duedate}(\Package{tudscrsupervisor}) und + \Macro{issuedate}(\Package{tudscrsupervisor})% + } + im durch das jeweilige Paket definierten Ausgabeformat ausgegeben. +\item[quoting] + \index{Zitate}% + \hologo{LaTeX} bietet von Haus aus \emph{zwei} verschiedene Umgebungen~-- + \Environment{quote}(\Package{koma-script})'none' und + \Environment{quotation}(\Package{koma-script})'none'~-- für Zitate und + ähnliches an. Allerdings werden durch beide Umgebungen die \KOMAScript-Option + \Option{parskip=\PName{Methode}}(\Package{koma-script})'none'|declare| + ignoriert. Mit der Umgebung \Environment{quoting}(\Package{quoting})'none' + aus dem gleichnamigen Paket lässt sich dieses Problem umgehen. Wird das Paket + geladen, wird diese innerhalb der \Environment{abstract}"=Umgebung verwendet. +\item[csquotes] + \index{Zitate}% + Das Paket stellt unter anderem den Befehl + \Macro{enquote}[\Parameter{Zitat}](\Package{csquotes})'none' + zur Verfügung, welcher Anführungszeichen in Abhängigkeit der gewählten + Sprache setzt. Zusätzlich werden weitere Kommandos und Optionen für die + spezifischen Anforderungen des Zitierens bei wissenschaftlichen Arbeiten + angeboten. Außerdem wird es durch \Package{biblatex} unterstützt und sollte + zumindest bei dessen Verwendung geladen werden. +\item[noindentafter] + \ChangedAt{v2.02:\RecPack \Package{noindentafter}} + Mit diesem Paket lassen sich automatische Absatzeinzüge für selbst zu + bestimmende Befehle und Umgebungen unterdrücken. +\item[ragged2e] + \index{Worttrennung}% + Das Paket verbessert den Flattersatz, indem für diesen die Worttrennung + aktiviert wird. +\item[fnpct] + \index{Fußnoten|?}% + \ChangedAt{v2.05:\RecPack \Package{fnpct}} + Diese Paket sorgt zum einen für das Einhalten der richtigen Reihenfolge von + Satzzeichen und Fußnoten und zum anderen wird das typografisch korrekte + Setzen mehrerer, nacheinander folgender Fußnoten unterstützt. +\item[xspace,xpunctuate] + \index{Befehlsdeklaration}% + Mit \Package{xspace} kann bei der Definition eigener Makros der Befehl + \Macro{xspace}(\Package{xspace})'none' genutzt werden. Dieser setzt ein + gegebenenfalls notwendiges Leerzeichen automatisch. In + \autoref{sec:tips:xspace} ist die Definition eines solchen Befehls + exemplarisch ausgeführt. Durch das Paket \Package{xpunctuate} wird + \Package{xspace} um die Beachtung von Interpunktionen erweitert. +\item[ellipsis] + \index{Befehlsdeklaration}% + In \hologo{LaTeX} folgen den Befehlen für Auslassungspunkte (\Macro{dots} und + \Macro{textellipsis}) \emph{immer} ein Leerzeichen. Dies kann unter Umständen + unerwünscht sein. Mit dem Paket \Package{ellipsis} wird das nachfolgende + Leerzeichen~-- im Gegensatz zum Standardverhalten~-- nur gesetzt, wenn ein + Satzzeichen und kein Buchstabe folgt, \seeref*{\autoref{sec:tips:dots}}. +\stditem[\Application{DeLig}<delig>, \Package{selnolig}] + \index{Ligaturen}% + Hierbei handelt es sich um ein Java"~Script, das anhand eines Wörterbuches + falsche Ligaturen innerhalb eines Dokumentes automatisiert entfernt. Diese + müssten~-- insbesondere in deutschen Texten aufgrund der vielen Komposita~-- + für einen guten Satz manuell aufgelöst werden.% + \footnote{% + Das sind \enquote{ff}, \enquote{fi}, \enquote{fl}, \enquote{ffi}, und + \enquote{ffl} bei den meisten \hologo{LaTeX}"=Schriften.% + } + Mit \Engine{LuaLaTeX} als Textsatzsystem kann auch \Package{selnolig} + alternativ dazu verwendet werden. +\index{Typografie|)}% +\end{packages} + + +\subsubsection{Rechtschreibung} +\index{Rechtschreibung|(}% +% +Für die Rechtschreibkontrolle zeichnet im Normalfall der verwendete Editor +verantwortlich. Dennoch gibt es einige wenige Pakete, welche sich diesem Thema +widmen. Diese sind jedoch ausschließlich nutzbar, wenn als Textsatzsystem +\Engine{LuaLaTeX} genutzt wird. +\begin{packages} +\item[lua-check-hyphen] + \index{Worttrennung}% + Hiermit lassen sich mit \Engine{LuaLaTeX} Trennstellen am Zeilenende zur + Prüfung markieren. Zum Thema der \textit{korrekten Worttrennung} sei außerdem + auf \autoref{sec:tips:hyphenation} verwiesen. +\item[spelling] + Wird \Engine{LuaLaTeX} als Textsatzsystem verwendet, wird mit diesem Paket + der reine Textanteil aus dem \hologo{LaTeX}"~Dokument extrahiert~-- wobei + Makros und aktive Zeichen entfernt werden~-- und in eine separate Textdatei + geschrieben. Anschließend kann diese Datei mit einer externen Software zur + Rechtschreibprüfung wie \Application{GNU~Aspell}, \Application{Hunspell} oder + \Application{LanguageTool} analysiert und falsch geschriebene Wörter im + PDF"~Dokument hervorgehoben werden. +\index{Rechtschreibung|)}% +\end{packages} + + +\subsubsection{Schriften und Sonderzeichen} +\begin{packages} +\item[lmodern]<lm> + \index{Schriftart}% + Soll mit den klassischen \hologo{LaTeX}"=Standardschriften gearbeitet werden, + empfiehlt sich die Verwendung des Paketes \Package{lmodern}. Dieses + verbessert die Darstellung der Computer~Modern sowohl am Bildschirm als auch + beim finalen Druck. +\item[cfr-lm] + \index{Schriftart}% + Dieses experimentelle Paket liefert weitere Schriftschnitte für das Paket + \Package{lmodern}. +\item[newtx,newtxmath]<newtx> + \index{Schriftart}% + \index{Mathematiksatz}% + Es werden einige alternative Schriften sowohl für den Fließtext + (\textit{Times} und \textit{Helvetica}) als auch den Mathematikmodus + bereitgestellt. +\item[libertine] + \index{Schriftart}% + Das Paket stellt die Schriften Linux~Libertine und Linux~Biolinum zur + Verfügung. Um diese Schriftart auch für den Mathematikmodus verwenden zu + können, sollte \Package{newtxmath} aus dem \Package{newtx}"=Bundle mit + \Macro*{usepackage}[\POParameter{libertine}\PParameter{newtxmath}] in der + Präambel eingebunden werden. Das Paket \Package{libgreek} enthält griechische + Buchstaben für Linux~Libertine. +\item[relsize] + \index{Schriftgröße}% + Die Größe einer Textauszeichnung kann relativ zur aktuellen Schriftgröße + gesetzt werden. +\item[textcomp] + \index{Sonderzeichen}% + Es werden zusätzliche Symbole und Sonderzeichen wie beispielsweise das + Promille- oder Eurozeichen sowie Pfeile für den Fließtext zur Verfügung + gestellt. +\end{packages} +% +\index{Mathematiksatz|(}% +Auch für (serifenlose) Mathematikschriften gibt es einige nützliche Pakete. +Werden die Schriften des \CDs genutzt, sei auf die Option \Option{cdmath} +verwiesen. +% +\begin{packages} +\item[sansmathfonts,sansmath] + Sollten die normalen \hologo{LaTeX}"=Schriften Computer~Modern verwendet + werden, lässt sich dieses Paket zum serifenlosen Setzen mathematischer + Ausdrücke nutzen. Ein alternatives Paket mit der gleichen Zielstellung ist + \Package{sansmath} +\item[sfmath] + Diese Paket verfolgt ein ähnliches Ziel, kann jedoch im Gegensatz zu + \Package{sansmath} nicht nur für Computer~Modern sondern mit der + entsprechenden Option auch für Latin~Modern, Helvetica und + Computer~Modern~Bright verwendet werden. +\item[mathastext] + Mit dem Paket wird das Ziel verfolgt, aus der genutzten Schrift für den + Fließtext alle notwendigen Zeichen für den Mathematiksatz zu extrahieren. +\end{packages} + + +\subsubsection{Mathematiksatz} +Dies sind Pakete, die Umgebungen und Befehle für den Mathematiksatz sowie das +Setzen von Einheiten und Zahlen im Allgemeinen anbieten. + +\begin{packages} + \item[mathtools,amsmath] + Dieses Paket stellt für das De"~facto"~Standard"~Paket \Package{amsmath} + für Mathematikumgebungen Bugfixes zur Verfügung und erweitert dieses. + \item[bm] + Das Paket bietet mit \Macro*{bm} eine Alternative zu \Macro*{boldsymbol} im + \hrfn{http://tex.stackexchange.com/questions/3238}{Mathematiksatz}. Sollten + bei der Nutzung des Paketes Fehler auftreten, sei auf dessen Dokumentation + und insbesondere auf das Makro \Macro*{bmmax} verwiesen. +\end{packages} +% +Die korrekte Formatierung von Zahlen ist häufig ein Problem bei der Verwendung +von \hologo{LaTeX}. Insbesondere, wenn in einem deutschsprachigen Dokument +Daten im englischsprachigen Format verwendet werden, kommt es zu Problemen. +Dafür wird im \TUDScript-Bundle das Paket \Package{mathswap} bereitgestellt. +Dennoch gibt es zu diesem auch Alternativen. +% +\begin{packages} +\index{Zifferngruppierung|(}% + \item[ionumbers] + Dieses Paket ist mir tatsächlich erst bei der Arbeit an \Package{mathswap} + bekannt geworden. Es bietet mehr Funktionalitäten und kann als Alternative + dazu betrachtet werden. + \item[icomma] + Wird im Mathematikmodus nach dem Komma ein Leerzeichen gesetzt, wird dies + bei der Ausgabe beachtet. Der Verfasser muss sich demzufolge jederzeit + selbst um die typografisch korrekte Ausgabe kümmern. + \item[ziffer] + Für deutschsprachige Dokumente wird das Komma als Dezimaltrennzeichen + zwischen zwei Ziffern definiert. Folgt dem Komma keine Ziffer, wird + jederzeit der obligatorische Freiraum gesetzt, was meiner Meinung nach + besser als das Verhalten von \Package{icomma} ist. +\index{Zifferngruppierung|)}% +\end{packages} +% +Für das typografisch korrekte Setzen von Einheiten~-- ein halbes Leerzeichen +zwischen Zahl und \emph{aufrecht} gesetzter Einheit~-- gibt es zwei gut +nutzbare Pakete. +% +\begin{packages} +\index{Einheiten|(}% +\item[units] + Dies ist ein einfaches und sehr zweckdienliches Paket zum Setzen von + Einheiten und für die meisten Anforderungen völlig ausreichend. +\item[siunitx] + Dieses Paket ist in seinem Umfang im Vergleich deutlich erweitert. Neben + Einheiten können zusätzlich auch Zahlen typografisch korrekt gesetzt werden. + Die Ausgabe lässt sich in vielerlei Hinsicht an individuelle Bedürfnisse + anpassen. Für deutschsprachige Dokumenten sollte die Lokalisierung angegeben + werden. Mehr dazu in \autoref{sec:tips:siunitx}. +\index{Einheiten|)}% +\end{packages} +% +Weitere Hinweise zur mathematischen Typografie werden in \autoref{sec:tut} +gegeben. +\index{Mathematiksatz|)}% + + +\subsubsection{Listen} +\index{Listen|?(}% +% +\begin{packages} +\item[enumitem] + Das Paket \Package{enumitem} erweitert die rudimentären Funktionalitäten der + \hologo{LaTeX}"=Standardlisten + \Environment{itemize}(\Package{koma-script},\Package{enumitem})'none', + \Environment{enumerate}(\Package{koma-script},\Package{enumitem})'none' sowie + \Environment{description}(\Package{koma-script},\Package{enumitem})'none' und + ermöglicht die individuelle Anpassung dieser durch die Bereitstellung vieler + optionale Parameter nach dem Schlüssel"=Wert"=Prinzip. Eine von mir sehr + häufig genutzte Funktion ist beispielsweise die Entfernung des zusätzlichen + Abstand zwischen den einzelnen Einträgen einer Liste mit + \Macro{setlist}[\PParameter{noitemsep}](\Package{enumitem})'none'. +\end{packages} +\index{Listen|?)}% + + +\subsubsection{Verzeichnisse aller Art} +\index{Verzeichnisse|?(}% +% +Neben dem Erstellen des eigentlichen Dokumentes sind für eine wissenschaftliche +Arbeit meist auch allerhand Verzeichnisse gefordert. Fester Bestandteil ist +dabei das Literaturverzeichnis, auch ein Abkürzungs- und Formelzeichen- +beziehungsweise Symbolverzeichnis werden häufig gefordert. Gegebenenfalls wird +auch noch ein Glossar benötigt. Hier werden die passenden Pakete vorgestellt. +Sollen im Dokument komplette Quelltexte oder auch nur Auszüge daraus erscheinen +und für diese auch gleich ein entsprechendes Verzeichnis generiert werden, so +sei auf das Paket \Package{listings}'full' verwiesen. + +\begin{packages} +\item[biblatex] + \index{Literaturverzeichnis}% + Das Paket kann als legitimer Nachfolger zu \hologo{BibTeX} gesehen werden. + Ähnlich dazu bietet \Package{biblatex} die Möglichkeit, Literaturdatenbanken + einzubinden und verschiedene Stile der Referenzierung und Darstellung des + Literaturverzeichnisses auszuwählen. + + Mit \Package{biblatex} ist die Anpassung eines bestimmten Stiles wesentlich + besser umsetzbar als mit \hologo{BibTeX}. Wird \Application{biber} für die + Sortierung des Literaturverzeichnisses genutzt, ist die Verwendung einer + UTF"~8"~kodierten Literaturdatenbank problemlos möglich. In Verbindung mit + \Package{biblatex} wird die zusätzliche Nutzung des Paketes + \Package{csquotes} sehr empfohlen. +\item[glossaries,nomencl] + \index{Glossar}% + \index{Abkürzungsverzeichnis}% + \index{Formelzeichenverzeichnis}% + \index{Symbolverzeichnis}% + Dies ist ein sehr mächtiges Paket zum Erstellen eines Glossars sowie + Abkürzungs- und Symbolverzeichnisses. Die mannigfaltige Anzahl an Optionen + ist zu Beginn eventuell etwas abschreckend. Insbesondere wenn Verzeichnisse + für Abkürzungen \emph{und} Formelzeichen respektive Symbole notwendig sind, + sollte dieses Paket in Erwägung gezogen werden. + + Alternativ dazu kann für ein Symbolverzeichnis auch lediglich eine manuell + gesetzte Tabelle genutzt werden. Das hierfür sehr häufig empfohlene Paket + \Package{nomencl} bietet meiner Meinung nach demgegenüber keinerlei Vorteile. +\item[acro,acronym] + \index{Abkürzungsverzeichnis}% + Soll lediglich ein Abkürzungsverzeichnis erstellt werden, ist dieses Paket + die erste Wahl. Es stellt Befehle zur Definition von Abkürzungen sowie zu + deren Verwendung im Text und zur sortierten Ausgabe eines Verzeichnisses + bereit. Alternativ dazu kann das Paket \Package{acronym} verwendet werden. + Die Sortierung des Abkürzungsverzeichnisses muss hier allerdings manuell + durch den Anwender erfolgen. +\index{Verzeichnisse|?)}% +\end{packages} + + +\subsubsection{Gleitobjekte} +\index{Gleitobjekte|?(}% +% +Es werden Pakete für die Beeinflussung von Aussehen, Beschriftung und +Positionierung von Gleitobjekten vorgestellt. Unter \autoref{sec:tips:floats} +sind außerdem Hinweise zur manuellen Manipulation der Gleitobjektplatzierung zu +finden. + +\begin{packages} +\item[caption] + Mit der Option \Option{captions=\PSet}(\Package{koma-script})'none'|declare| + bieten die \KOMAScript-Klassen bereits einige Möglichkeiten zum Formatieren + der Beschriftungen für Gleitobjekte. Dieses Paket ist daher meist nur in + gewissen Ausnahmefällen für spezielle Anweisungen notwendig, allerdings auch + bei der Verwendung unbedenklich. +\item[subcaption] + Diese Paket kann zum einfachen Setzen von Unterabbildungen oder "~tabellen + mit den entsprechenden Beschriftungen genutzt werden. Das dazu alternative + Paket \Package{subfig} sollte vermieden werden, da es nicht mehr gepflegt + wird und es mit diesem im Zusammenspiel mit anderen Paketen des Öfteren zu + Problemen kommt. Sollte der Funktionsumfang von \Package{subcaption} nicht + ausreichen, kann anstelle dessen das Paket \Package{floatrow} verwendet + werden, welches ähnliche Funktionalitäten wie \Package{subfig} bereitstellt. +\item[floatrow] + Mit diesem Paket können global wirksame Einstellungen und Formatierungen für + \emph{alle} Gleitobjekte eines Dokumentes über die Paketoptionen oder mit + \Macro{floatsetup}[\PParameter{\dots}](\Package{floatrow})'none' vorgenommen + werden. So lässt sich unter anderem die verwendete Schrift innerhalb der + Umgebungen \Environment{figure} und \Environment{table} mit + \Macro*{floatsetup}[\PParameter{font=\dots}] einstellen. Mit + \begin{Code} + \floatsetup[figure]{capposition=bottom} + \floatsetup[table]{capposition=top} + \end{Code}\vspace{-\baselineskip}% + lässt sich automatisch das typografisch korrekte Setzen von + Abbildungs\emph{unterschriften} sowie Tabellen\emph{überschriften} + erzwingen~-- unabhängig von der Position des Befehls zur Beschriftung + \Macro{caption}(\Package{koma-script},\Package{caption})'none' + innerhalb der jeweiligen Gleitobjektumgebung. Wird das Verhalten wie + empfohlen eingestellt, sollte für eine gute vertikale Platzierung der + Tabellenüberschriften zusätzlich die + \KOMAScript-Option \Option{captions=tableheading}(\Package{koma-script})'none' + genutzt werden. +\item[placeins] + Mit diesem Paket kann die Ausgabe von Gleitobjekten vor Kapiteln und wahlweise + Unterkapiteln erzwungen werden. +\item[flafter] + Dieses Paket erlaubt die frühestmögliche Platzierung von Gleitobjekten im + ausgegeben Dokument erst an der Stelle ihres Auftretens im Quelltext. Diese + werden dementsprechend nie vor ihrer Definition am Anfang der Seite + erscheinen. +\end{packages} +\index{Gleitobjekte|?)}% + + + +\subsubsection{Tabellen} +\index{Tabellen|?(}% +% +Für den Tabellensatz werden standardmäßig die Umgebungen \Environment{tabbing} +und \Environment{tabular} respektive \Environment{tabular*} bereitgestellt, +welche in ihrer Funktionalität für einen qualitativ hochwertigen Tabellensatz +meist nicht ausreichen. Deshalb werden hier zusätzliche Pakete vorgestellt. +% +\begin{packages} +\item[array] + Dieses Paket ermöglicht mit \Macro{newcolumntype}(\Package{array})'none' das + Erstellen neuer Spaltentypen und die erweiterte Definition von Tabellenspalten + (\PValue{>\PParameter{\dots}}\PName{Spaltentyp}\PValue{<\PParameter{\dots}}), + wobei mithilfe sogenannter \enquote{Hooks} vor und nach Einträgen innerhalb + einer Spalte gezielt Anweisungen gesetzt werden können. Die Zeilenhöhe lässt + sich mit \Macro{extrarowheight}(\Package{array})'none' ändern. +\item[booktabs] + Für einen guten Tabellensatz mit \hologo{LaTeX} gibt es bereits zahlreiche + \hrfn{http://userpage.fu-berlin.de/latex/Materialien/tabsatz.pdf}{Tipps} im + Internet zu finden. Zwei Regeln sollten dabei definitiv beachtet werden: + % + \begin{enumerate}[itemindent=0pt,labelwidth=*,labelsep=1em,label=\Roman*.] + \stditem keine vertikalen Linien + \stditem keine doppelten Linien + \end{enumerate} + % + Das Paket \Package{booktabs} (deutsche Dokumentation \Package*{booktabs-de}) + ist für den Satz von hochwertigen Tabellen eine große Hilfe und stellt die + Befehle \Macro{toprule}(\Package{booktabs})'none', + \Macro{midrule}(\Package{booktabs})'none' sowie + \Macro{cmidrule}(\Package{booktabs})'none' und + \Macro{bottomrule}(\Package{booktabs})'none' + für unterschiedliche horizontale Linien bereit. +\item[widetable] + Mit der Standard"=\hologo{LaTeX}"=Umgebung \Environment{tabular*} kann eine + Tabelle mit einer definierten Breite gesetzt werden. Dieses Paket stellt die + Umgebung \Environment{widetable}(\Package{widetable})'none' zur Verfügung, + die als Alternative genutzt werden kann und eine symmetrische Tabelle erzeugt. +\item[tabularx] + Auch mit diesem Paket kann die Gesamtbreite einer Tabelle spezifiziert + werden. Dafür wird der Spaltentyp \PValue{X} definiert, welcher als Argument + der \Environment{tabularx}(\Package{tabularx})'none'"=Umgebung beliebig + häufig angegeben werden kann + (\Macro*{begin}[\PParameter{tabularx}\Parameter{Breite}\Parameter{Spalten}]). + Die \PValue{X}"~Spalten ähneln denen vom Typ~\PValue{p}\Parameter{Breite}, + wobei die Breite dieser aus der gewünschten Tabellengesamtbreite abzüglich + dem benötigten Platz der gegebenenfalls vorhandenen Standardspalten + automatisch berechnet wird. +\item[tabulary] + Dies ist ein weiteres Paket zur automatischen Berechnung von Spaltenbreiten. + Der zur Verfügung stehende Platz~-- gewünschte Gesamtbreite abzüglich der + notwendigen Breite für Standardspalten~-- wird jedoch nicht wie bei der + \Environment{tabularx}(\Package{tabularx})'none' auf alle Spalten + gleichmäßig verteilt sondern in der + \Environment{tabulary}(\Package{tabulary})'none'"=Umgebung für die + Spaltentypen~\PValue{LCRJ} anhand ihres Zellinhaltes gewichtet vergeben. + (\Macro*{begin}[\PParameter{tabulary}\Parameter{Breite}\Parameter{Spalten}]). +\item[longtable,ltxtable,ltablex] + Sollen mehrseitige Tabellen mit Seitenumbruch erstellt werden, ist dieses + Paket das Mittel der ersten Wahl. Für die Kombination mehrseitiger Tabellen + mit einer \Environment{tabularx}(\Package{tabularx})'none'"=Umgebung können + die Pakete \Package{ltablex} oder besser noch \Package{ltxtable} verwendet + werden. Alternativ dazu lässt sich auch \Package{tabu} nutzen. +\item[multirow] + Es wird der Befehl \Macro{multirow}(\Package{multirow})'none' definiert, der + das Zusammenfassen von mehreren Zeilen in einer Spalte ermöglicht~-- ähnlich + zum Makro \Macro{multicolumn} für Spalten. +\item[tabularborder] + Bei Tabellen wird zwischen Spalten automatisch ein horizontaler Abstand + (\Length{tabcolsep}) gesetzt~-- besser gesagt jeweils vor und nach einer + Spalte. Dies geschieht auch \emph{vor} der ersten und \emph{nach} der letzten + Spalte. Dieser zusätzliche Platz an den äußeren Rändern kann störend wirken, + insbesondere wenn die Tabelle über die komplette Textbreite gesetzt wird. Mit + dem Paket \Package{tabularborder} kann dieser Platz automatisch entfernt + werden. + + Dies funktioniert allerdings nur mit der \Environment{tabular}"=Umgebung. + Die Tabellen aus den Paketen \Package{tabularx}, \Package{tabulary} und + \Package{tabu} werden nicht unterstützt. Wie dieser Abstand bei diesen + manuell entfernt werden kann, ist unter \autoref{sec:tips:table} zu finden. +\item[tabu] + \ChangedAt{% + v2.02:\RecPack \Package{tabu} ist nur bedingt empfehlenswert + } + Dies ist ein relativ neues Paket, welches versucht, viele der zuvor genannten + Funktionalitäten zu implementieren und weitere bereitzustellen. Dafür werden + die Umgebungen \Environment{tabu}(\Package{tabu})'none' und + \Environment{longtabu}(\Package{tabu})'none' definiert. Es + kann alternativ zu \Package{tabularx} verwendet werden und ist insbesondere + als Ersatz für das Paket \Package{ltxtable} empfehlenswert. + + \Attention{% + Für das Paket in der Version~v2.8 wären seit einigen Jahren mehrere + Bugfixes notwendig. Der originäre Autor hatte außerdem die Änderung der + \hrfn{https://groups.google.com/d/topic/comp.text.tex/xRGJTC74uCI}{% + Benutzerschnittstelle in einer zukünftigen Version% + } + angekündigt, anscheinend aber mittlerweile die Pflege des Paketes komplett + eingestellt. + }% + + Durch Änderungen am \hologo{LaTeXe}"~Kernel wurde das Paket unbrauchbar. + Deshalb sind durch das \hrfn{https://github.com/tabu-fixed/tabu}{% + \hologo{LaTeX3}-Projektteam die allernötigsten Anpassungen% + } vorgenommen worden, damit das Paket in der aktuellen Version~v2.9 zumindest + grundsätzlich lauffähig ist. Ein Großteil der ursprünglich sehr guten + Funktionalitäten kann momentan allerdings nicht genutzt werden. Deshalb ist + das Paket aktuell nur bedingt empfehlenswert. +\end{packages} +\index{Tabellen|?)}% + + +\subsubsection{Grafiken und Abbildungen} +\index{Grafiken|?(}% +% +Grafiken für wissenschaftliche Arbeiten sollten als Vektorgrafiken erstellt +werden, um die Skalierbarkeit und hohe Druckqualität zu gewährleisten. +Bestenfalls folgen diese auch dem Stil der dazugehörigen Arbeit.% +\footnote{% + Für qualitativ hochwertige Dokumente sollten übernommene Grafiken nicht + direkt kopiert oder gescannt sondern im gewünschten Zielformat neu erstellt + und mit einer Referenz auf die Quelle eingebunden werden.% +} +Für das Erstellen eigener Vektorgrafiken, welche die \hologo{LaTeX}"=Schriften +und das Layout des Hauptdokumentes nutzen, gibt es zwei mögliche Ansätze. +Entweder die Grafiken werden ähnlich wie das Dokument \enquote{programmiert} +oder Zeichenprogramme, welche wiederum die Ausgabe oder das Weiterreichen von +Text an \hologo{LaTeX} unterstützen, werden genutzt. +Für das Programmieren von Grafiken sollen hier die wichtigsten Pakete +vorgestellt werden. Wie diese zu verwenden sind, ist den dazugehörigen +Paketdokumentationen zu entnehmen. + +\begin{packages} +\item[tikz]<pgf> + Dies ist ein sehr mächtiges Paket für das Programmieren von Vektorgrafiken + und sehr häufig~-- insbesondere bei Einsteigern~-- die erste Wahl bei der + Verwendung von \Engine{pdfLaTeX}. +\item[pstricks] + Diese Paket stellt die zweite Variante zum Programmieren von Grafiken dar. + Da hiermit auf PostScript (direkt) zugegriffen werden kann, existieren + \emph{noch} mehr Möglichkeiten bei der Erstellung eigener Grafiken, wovon + die bereitgestellten Befehle rege Gebrauch machen. + + Daraus resultiert allerdings der Nachteil, dass die mit \Package{pstricks} + erstellten Grafiken nicht direkt in eine PDF"~Datei kompiliert werden können. + Vielmehr müssen die Grafiken aus den Umgebungen + \Environment{pspicture}(\Package{pstricks})'none' zunächst über den Pfad + \Path{latex\,>\,dvips\,>\,ps2pdf} in PDF"~Dateien gewandelt werden. Diese + lassen sich von \Engine{pdfLaTeX} anschließend als Abbildungen einbinden. Um + dieses Vorgehen zu ermöglichen, lassen sich folgende Pakete nutzen: + % + \begin{packages} + \item[pst-pdf] + Dieses Paket stellt Methoden für den Export von PostSript-Grafiken in + PDF"~Datien bereit. Die einzelnen Aufrufe zur Kompilierung von DVI über + PostScript zu PDF müssen durch den Anwender manuell beziehungsweise über + die Ausgaberoutinen des verwendeten Editors durchgeführt werden. + \item[auto-pst-pdf,pdftricks2] + Das Paket automatisiert die Erzeugung der \Package{pstricks}"=Grafiken mit + dem Paket \Package{pst-pdf}. Hierfür muss \Engine{pdfLaTeX} per Option mit + erweiterten Schreibrechten ausgeführt werden. Dazu ist der Aufruf von + \Path{pdflatex} mit der Option \Path{-{}-shell-escape} respektive + \Path{-{}-enable-write18} notwendig. Bitte beachten Sie dazu ebenfalls die + Hinweise in \autoref{sec:tips:auto-pst-pdf}. Eine Alternative dazu ist das + Paket \Package{pdftricks2}. + \end{packages} +\end{packages} +% +Im Tutorial \Tutorial{treatise} wird für \Package{pstricks} und \Package{tikz} +jeweils ein Beispiel gegeben. Um bei der Erstellung von Grafiken mit einem der +beiden Paketen nicht bei jeder Änderung das komplette Dokument kompilieren zu +müssen, können diese in separate Dateien ausgelagert werden. Hierfür sind die +beiden Pakete \Package{standalone} oder \Package{subfiles} sehr nützlich. + +Für das Zeichnen einer Grafik mit einem Bildbearbeitungsprogramm, welches die +Weiterverarbeitung durch \hologo{LaTeX} erlaubt, möchte ich auf die freien +Programme \Application{LaTeXDraw} und \Application{Inkscape} verweisen. +Insbesondere das zuletzt genannte Programm ist sehr empfehlenswert. +% +\begin{packages} +\item[svg] + Mit diesem Paket können alle notwendigen Schritte zum Einfügen einer + SVG"~Grafik in ein \hologo{LaTeX}"~Dokument automatisiert durchgeführt + werden. In \autoref{sec:tips:svg} sind weitere Hinweise hierzu zu finden. +\end{packages} +\index{Grafiken|?)}% + + +\subsubsection{Querverweise und Lesezeichen} +\index{Querverweise|?(}% +\index{Lesezeichen|?(}% +% +Für das Erzeugen von Querverweisen auf bestimmte Gliederungsebenen, Tabellen, +Abbildungen oder auch Gleichungen muss für diese besagten Elemente zunächst mit +\Macro{label}[\Parameter{Label}] ein \emph{eindeutiges} Label erzeugt werden, +auf welches im Dokument entweder mit \Macro{ref} oder nach dem Laden von +\Package{hyperref} besser noch mit \Macro{autoref}(\Package{hyperref})'none' +referenziert werden kann. In \autoref{sec:tips:references} sind diesbezüglich +weitere Informationen zu finden. +% +\begin{packages} +\item[hyperref] + Hiermit können in einem PDF"~Dokument Lesezeichen, Querverweise und + Hyperlinks erstellt werden. Wird es geladen, sind außerdem die Option + \Option{tudbookmarks} sowie der Befehl \Macro{tudbookmark} nutzbar. Das + Paket \Package{bookmark} erweitert die Unterstützung nochmals. Beide + genannten Pakete sollten~-- bis auf sehr wenige Ausnahmen wie beispielsweise + \Package{glossaries}~-- als letztes in der Präambel eingebunden werden. +\item[bookmark] + Dieses Paket verbessert und erweitert die von \Package{hyperref} angebotenen + Möglichkeiten zur Erstellung von Lesezeichen~-- auch Outline"=Einträge~-- im + PDF"~Dokument. Zum Beispiel können Schriftfarbe- und "~stil geändert werden. +\item[varioref] + Mit diesem Paket lassen sich sehr gute Verweise auf bestimmte Seiten + erzeugen. Insbesondere, wenn der Querverweis auf die aktuelle, die + vorhergehende oder nachfolgende sowie im doppelseitigen Satz auf die + gegenüberliegende Seite erfolgt, werden passende Textbausteine für diesen + verwendet. +\item[cleveref] + Dieses Paket vereint die Vorzüge der automatischen Benennung referenzierter + Objekte mit dem Befehl \Macro{autoref}(\Package{hyperref})'none' aus dem + Paket \Package{hyperref} und der Verwendung von \Package{varioref}. +\end{packages} +\index{Lesezeichen|?)}% +\index{Querverweise|?)}% + + +\subsubsection{Aufteilung des Hauptdokumentes in Unterdateien} +Um während des Entwurfes eines Dokumentes die Zeitdauer für das Kompilieren zu +verkürzen, kann dieses in Unterdokumente gegliedert werden. Dadurch wird es +möglich, nur den momentan bearbeiteten Dokumentteil~-- respektive die aktuelle +\Package{tikz}"~ oder \Package{pstricks}"=Grafik~-- zu kompilieren. Die meiner +Meinung nach besten Pakete für dieses Unterfangen werden folgend vorgestellt. +% +\begin{packages} +\item[standalone] + \ChangedAt{% + v2.02:Bugfix für Verwendung der Klasse \Class{standalone} aus dem Paket + \Package{standalone}% + } + Dieses Paket ist für das Erstellen eigenständiger (Unter)"~Dokumente gedacht, + welche später in ein Hauptdokument eingebunden werden können. Jedes dieser + Teildokumente benötigt eine eigene Präambel. Optional lassen sich die + Präambeln der Unterdokumente automatisch in ein Hauptdokument einbinden. +\item[subfiles] +\ChangedAt{v2.02:\RecPack \Package{subfiles}} + Dieses Paket wählt einen etwas anderen Ansatz als \Package{standalone}. Es + ist von Anfang an dafür gedacht, ein dediziertes Hauptdokument zu verwenden. + Die darin mit \Macro{subfiles}(\Package{subfiles})'none' eingebundenen + Unterdateien nutzen bei der autarken Kompilierung dessen Präambel. +\end{packages} +% +Unabhängig davon, ob Sie eines der beiden Pakete nutzen oder alles in einem +Dokument belassen, ist es ratsam, eigens definierte Befehle, Umgebungen und +ähnliches in ein separates Paket auszulagern. Dafür müssen Sie lediglich ein +leeres \hologo{LaTeX}"=Dokument erzeugen und es unter \File*{mypreamble.sty} +oder einem anderen Namen im gleichen Ordner wie das Hauptdokument speichern. +Dann können Sie in dieser Datei ihre Deklarationen ausführen und diese mit +\Macro*{usepackage}[\PParameter{mypreamble}] in das Dokument einbinden. Dies +hat den Vorteil, dass das Hauptdokument zum einen übersichtlich bleibt und Sie +zum anderen Ihre persönliche Präambel generisch wachsen lassen und für andere +Dokumente wiederverwenden können. + + +\subsubsection{Die kleinen und großen Helfer\dots} +Hier taucht alles auf, was nicht in die vorherigen Kategorien eingeordnet +werden konnte. +% +\begin{packages} +\item[marginnote] + \index{Randnotizen}% + Mit dem Befehl \Macro{marginpar}(\Package{koma-script})'none' lassen sich + Randnotizen erzeugen. Diese sind in \hologo{LaTeX} spezielle Gleitobjekte, + wodurch selbige nicht immer direkt an der ursprünglich intendierten Stelle am + Blattrand gesetzt werden. Das Paket \Package{marginnote} stellt den Befehl + \Macro{marginnote}(\Package{marginnote})'none' für nicht"~gleitende + Randnotizen zur Verfügung. Eine Alternative dazu ist Paket \Package{mparhack}. +\item[todonotes] + \index{Randnotizen}% + Mit \Package{todonotes} können noch offene Aufgaben in unterschiedlicher + Formatierung am Blattrand oder im direkt Fließtext ausgegeben werden. Aus + allen Anmerkungen lässt sich eine Liste aller offenen Punkte erzeugen. +\item[xparse] + \index{Befehlsdeklaration}% + Dieses mächtige Paket entstammt dem \hologo{LaTeX3}"=Projekt und bietet für + die Erstellung eigener Befehle und Umgebungen einen alternativen Ansatz zu + den bekannten \hologo{LaTeX}"=Deklarationsbefehlen \Macro*{newcommand} und + \Macro*{newenvironment} sowie deren Derivaten. Mit \Package{xparse} wird es + möglich, obligatorische und optionale Argumente an beliebigen Stellen + innerhalb des Befehlskonstruktes zu definieren. Auch die Verwendung anderer + Zeichen als eckige Klammern für die Spezifizierung eines optionalen + Argumentes ist möglich. +\item[xkeyval,keyval,kvoptions,pgfkeys] + \index{Befehlsdeklaration}% + \ChangedAt{v2.02:\RecPack \Package{xkeyval}} + Das \KOMAScript"=Bundle lädt das Paket \Package{keyval}, um Optionen mit + einer Schlüssel"=Wert"=Syntax deklarieren zu können. Zusätzlich wird von + \TUDScript das Paket \Package{kvsetkeys} geladen, um auf nicht definierte + Schlüssel reagieren zu können. Die Schlüssel"=Wert"=Syntax kann auch für + eigens definierte Makros genutzt werden, um sich das exzessive Verwenden von + optionalen Argumenten zu ersparen. Damit wäre folgende Definition möglich: + \Macro*{newcommand}[% + \Macro*{Befehl}[\OParameter{Schlüssel"=Wert"=Liste}\Parameter{Argument}]% + ] + + Das Paket \Package{xkeyval} erweitert insbesondere die Möglichkeiten zur + Deklaration unterschiedlicher Typen von Schlüsseln. Sollten die bereits durch + \TUDScript geladenen Pakete \Package{keyval} und \Package{kvsetkeys} in ihrer + Funktionalität nicht ausreichen, kann dieses Paket verwendet werden. Für die + Entwicklung eigener Pakete, deren Optionen das Schlüssel"=Wert"=Format + unterstützen, kann das Paket \Package{scrbase} genutzt werden. Soll aus einem + Grund auf \KOMAScript{} gänzlich verzichtet werden, sind die beiden Pakete + \Package{kvoptions} oder \Package{pgfkeys} eine Alternative. +\item[scrlfile] + \index{Paketabhängigkeiten} + \ChangedAt{v2.05:\RecPack \Package{scrlfile}} + Dieses \KOMAScript-Paket erlaubt es, auf das Laden von Klassen oder Paketen + direkt davor oder danach zu reagieren, um beispielsweise Paketabhängigkeiten + aufzulösen oder nach dem Laden eines bestimmten Paketes gezielt Befehle + anzupassen. Mehr dazu ist im \scrguide zu finden. +\item[calc] + \index{Berechnungen}% + Normalerweise lassen sich Berechnungen im Dokument lediglich mit + Low"~Level"~\hologo{TeX}"=Primitiven durchführen. Dieses Paket stellt eine + einfachere Syntax für Rechenoperationen der vier Grundrechenarten zur + Verfügung. Zusätzlich werden neue Befehle zur Bestimmung der Höhe und Breite + bestimmter Textauszüge definiert. +\item[mwe,blindtext] + \index{Minimalbeispiel|?}% + \ChangedAt{v2.02:\RecPack \Package{mwe}} + Mit dem Paket \Package{mwe} lassen sich sehr einfach Minimalbeispiele + erzeugen, die sowohl Blindtexte als auch Abbildungen enthalten sollen. Werden + keine Grafiken sondern lediglich Textabschnitte etc. benötigt, ist das Laden + von \Package{blindtext} ausreichend. +\item[filecontents] + \index{Minimalbeispiel|?}% + Dieses Paket erweitert die im \hologo{LaTeX}"=Kernel definierte Umgebung + \Environment{filecontents}(\Package{filecontents})'none' dahingehend, + dass bereits existierende Dateien überschrieben werden können. +\item[pdfpages] + Das Paket ermöglicht die Einbindung von einzelnen oder mehreren PDF"~Dateien. +\item[crop] + \index{Beschnittzugabe}\index{Schnittmarken}% + Hiermit können eine Beschnittzugabe sowie Schnittmarken~-- beispielsweise für + Poster~-- erzeugt werden. Hierzu ist in \autoref{sec:tips:crop} ein Beispiel + zu finden. +\item[pagecolor] + \index{Farben}% + Mit dem Paket kann die Hintergrundfarbe der Seiten im Dokument geändert + werden. +\item[afterpage] + Der Befehl \Macro{afterpage}[\PParameter{\dots}](\Package{afterpage})'none' + kann genutzt werden, um den Inhalt aus dessen Argument direkt nach der + Ausgabe der aktuellen Seite auszuführen. +\item[filemod] + Wird entweder \Engine{pdfLaTeX} oder \Engine{LuaLaTeX} als Textsatzsystem + eingesetzt, können mit diesem Paket das Änderungsdatum zweier Dateien + miteinander verglichen und in Abhängigkeit davon definierbare Aktionen + ausgeführt werden. +\item[listings] + \index{Quelltextdokumentation}% + Dieses Paket eignet sich hervorragend zur Quelltextdokumentation in + \hologo{LaTeX}. Es bietet die Möglichkeit, externe Quelldateien einzulesen + und darzustellen sowie die Syntax in Abhängigkeit der verwendeten + Programmiersprache hervorzuheben. Zusätzlich lässt sich ein Verzeichnis mit + allen eingebundenen sowie direkt im Dokument angegebenen Quelltextauszügen + erstellen. + \ChangedAt{v2.02:\RecPack \Package{listings}} + Wird \Package{listings} in Dokumenten mit UTF"~8"~Kodierung verwendet, + sollte direkt nach dem Laden des Paketes in der Präambel Folgendes + hinzugefügt werden: + \begin{Code} + \lstset{% + inputencoding=utf8,extendedchars=true, + literate=% + {ä}{{\"a}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {~}{{\textasciitilde}}1 {ß}{{\ss}}1 + } + \end{Code}\vspace{-\baselineskip}% +\item[coseoul] + Mit diesem Paket kann die Struktur der Gliederung relativ erstellt werden. + Es wird keine absolute Gliederungsebene (\Macro*{chapter}, \Macro*{section}) + angegeben sondern die Relation zwischen vorheriger und aktueller Ebene + (\Macro*{levelup}, \Macro*{levelstay}, \Macro*{leveldown}). +\item[selinput,inputenc] + \index{Eingabekodierung}% + \index{Minimalbeispiel|?}% + Die verwendete Eingabekodierung ist standardmäßig auf \PValue{utf8} + festgelegt, was von (fast) allen \LaTeX-Editoren unterstützt wird. Dies + sollte im Normalfall auch nicht geändert werden. Ältere Dokumente sind aber + vielleicht noch in einer anderen Eingabekodierung gespeichert. Kann diese + nicht geändert werden, so ist es für \Engine{pdfLaTeX} möglich, eine + andere~-- im \hyperref[sec:tips:editor]{Editor (\autoref{sec:tips:editor})} + vom Anwender eingestellte~-- Eingabekodierungen zu nutzen. Diese kann mit dem + Paket \Package{selinput} (automatisch) für \LaTeX{} festgelegt werden Mit: + \begin{Code} + \usepackage{selinput} + \SelectInputMappings{adieresis={ä},germandbls={ß}} + \end{Code}\vspace{-\baselineskip}% + wird es verwendet. Alternativ dazu lässt sich mit dem Paket + \Package{inputenc} die Eingabekodierung manuell mit + \Macro*{usepackage}[\OParameter{Eingabekodierung}\PParameter{inputenc}] + einstellen. Das Paket \Package{fontenc} sollte in jedem Fall \emph{zuvor} + geladen werden. +\end{packages} + + +\subsubsection{Bugfixes} +\begin{packages} +\item[scrhack]<koma-script> + Das Paket behebt Kompatibilitätsprobleme der \KOMAScript-Klassen mit den + Paketen \Package{hyperref}, \Package{float}, \Package{floatrow} und + \Package{listings}. Es ist durchaus empfehlenswert, jedoch sollte unbedingt + die Dokumentation beachtet werden. +\item[scrwfile,morewrites] + Falls der Fehler \texttt{No room for a new \textbackslash write} erscheint, + kann dieser möglicherweise mit einem dieser beiden Pakete behonben werden. + Mehr dazu in \autoref{sec:tips:write}. +\item[mparhack] + Zur Behebung falsch gesetzter Randnotizen wird ein Bugfix für + \Macro{marginpar}(\Package{koma-script})'none' bereitgestellt. Alternativ + dazu lässt sich auch \Package{marginnote} verwenden. +\item[fix-cm] + Sollte bei einer Schriftgrößenänderung eine oder mehrere Warnungen der Form + \begin{Code} + Font shape `T1/cmr/m/n' in size <...> not available + \end{Code}\vspace{-\baselineskip}% + erscheinen, so sollte das Paket \Package{fix-cm} \emph{vor} der Klasse + geladen werden. Siehe dazu auch die Hinweise in \autoref{sec:tips:fontsize}. +\end{packages} diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-poster.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-poster.tex new file mode 100644 index 0000000000..6c895d7a33 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-poster.tex @@ -0,0 +1,371 @@ +\setchapterpreamble{\tudhyperdef'{sec:poster}} +\chapter[Die Posterklasse \Class*{tudscrposter}]{Die Posterklasse} +% +\begin{Bundle*}[v2.05]{\Class{tudscrposter}} +\index{Posterklasse|!}% +\printchangedatlist% +% +Ergänzend zu den Hauptklassen, welche für das Setzen von Dokumenten im \TUDCD +angeboten werden, wird die Klasse \Class{tudscrposter} bereitgestellt. Mit +dieser wird das Erstellen von Postern im gleichen Layout mit \hologo{LaTeX} +ermöglicht. Die Basis hierfür ist \Class{tudscrartcl} und \emph{fast} alle +durch diese Klasse angebotenen Befehle und Optionen können gleichermaßen mit +\Class{tudscrposter} verwendet werden. Ein Minimalbeispiel zur Verwendung der +Klasse ist in \fullref{sec:exmpl:poster} zu finden. + +Der größte Unterschied zu den Hauptklassen ist insbesondere ein vereinfachter +Titel. Eine Umschlagseite steht für \Class{tudscrposter} nicht zur Verfügung, +die entsprechende Option \Option*{cdcover} sowie der dazugehörige Befehl +\Macro*{makecover} sind nicht definiert. Der Titel selbst kann mit +\Macro{maketitle} lediglich als Titelkopf gesetzt werden, eine separate +Titelseite existiert nicht. Aus diesem Grund sind mit \Macro{title}, +\Macro{subtitle}, \Macro{subject} und \Macro{titlehead}(\Package{koma-script}) +auch nur eine reduzierte Anzahl an Befehlen für den Titel verfügbar, die wie +gewohnt genutzt werden können. Prinzipiell lassen sich auch noch die beiden +Befehle für den Schmutztitel \Macro{extratitle}(\Package{koma-script}) sowie +\Macro{frontispiece}(\Package{koma-script}) nutzen, wobei deren Verwendung für +ein Poster eher fraglich ist. + +Alle weiteren in \autoref{sec:title} vorgestellten Befehle und Optionen sind +für \Class{tudscrposter} nicht definiert. Dies betrifft zum einen sowohl das +Schriftelement \Font*{thesis} als auch die Befehle \Macro*{titledelimiter}, +\Macro*{thesis}, \Macro*{referee}, \Macro*{advisor}, \Macro*{graduation} und +\Macro*{defensedate}. Zum anderen stehen die Makros für ergänzende +Autorenangaben \Macro*{dateofbirth}, \Macro*{placeofbirth}, +\Macro*{matriculationyear} und \Macro*{matriculationnumber} wie auch +die Option \Option*{subjectthesis} \emph{nicht} zur Verfügung. Die durch +\KOMAScript{} für eine Titelseite bereitgestellten Befehle +\Macro*{date}, \Macro*{publishers}(\Package{koma-script}) und +\Macro*{dedication}(\Package{koma-script}) sowie +\Macro*{uppertitleback}(\Package{koma-script}) und +\Macro*{lowertitleback}(\Package{koma-script}) haben bei der Klasse +\Class{tudscrposter} keinerlei Funktionalität. Die Befehle \Macro{author} und +\Macro{authormore} existieren weiterhin, werden allerdings nicht für den Titel +wohl jedoch für den speziellen Fußbereich eines Posters verwendet, welcher in +\autoref{sec:poster:foot} weiterführend beschrieben wird. + +Neben der signifikanten Vereinfachung des Titels entfallen für die Klasse +\Class{tudscrposter} einige weitere Befehle und Umgebungen. Namentlich sind +dies die Umgebung \Environment*{tudpage}, die Optionen \Option*{headingsvskip} +und \Option*{pageheadingsvskip} sowie alle zu Selbstständigkeitserklärung und +Sperrvermerk gehörigen Elemente, wie die Option (\Option*{declaration}), die +Umgebung (\Environment*{declarations}) und die Befehle (\Macro*{declaration}, +\Macro*{confirmation}, \Macro*{blocking}). Die Umgebung \Environment{abstract} +kann weiterhin genutzt werden, allerdings kann mit der Option \Option{abstract} +lediglich noch die Gliederungsebene der Überschrift angepasst werden. + +\section{Layout und Formatierung eines Posters} +% +Die augenscheinlichsten Einstellungen für die Gestaltung eines Posters sind +sicherlich das verwendete Papierformat und die farbliche Ausprägung sowie die +Auswahl der Schriftart und deren Größe. Als Grundeinstellung für die Klasse +\Class{tudscrposter} sind die Schriften des \TUDCDs aktiviert. Diese lassen +sich~-- wie auch bei den Hauptklassen~-- anpassen. Weitere Informationen hierzu +sind der Erläuterung zur Option \Option{cdfont}'full' zu entnehmen. + +Nachfolgend wird kurz erläutert, wie sich allgemeine Formatierung eines mit +\Class{tudscrposter} erstellten Posters anpassen lässt. Der Inhalt kann völlig +frei gestaltet werden, es gibt hierfür bisher keinerlei von \TUDScript +vordefinierte Befehle und Optionen, welche die Inhalte in ein bestimmtes Layout +übersetzen. + + + +\subsection{Die Wahl von Papierformat und Schriftgröße} +\tudhyperdef*{sec:fontsize}% +\index{Papierformat|!}% +\index{Schriftgröße|!}% + +Die Festlegung von \emph{Papierformat} und \emph{Schriftgröße} ist essentiell +für das Erstellen eines Posters und sollten \emph{immer} vorgenommen werden. +\Attention{Beide Einstellungen müssen zwingend als Klassenoption erfolgen.} +Bei der Schriftgrößenauswahl ist darauf zu achten, ob der Satz des Posters +ein- oder mehrspaltig erfolgen soll. Für letzteres Unterfangen ist die +\Environment{multicols}(\Package{multicol})'none'"~Umgebung aus dem Paket +\Package{multicol} sehr empfehlenswert. + +Zur Festlegung des Papierformats ist die \KOMAScript-Option +\Option{paper=\PSet}(\Package{typearea})'none'|declare| zu verwenden. Dabei +lassen sich mit \Option{paper=\PValueName{Format}}(\Package{typearea})'none' +unter anderem die gängigen Klassen der ISO/DIN"~Reihen A~bis~D als auch Quer- +oder Längsformat auswählen. Ein beliebiges Format kann mit der Einstellung +\Option{paper=\PValueName{Höhe}{:}\PValueName{Breite}}(\Package{typearea})'none' +gewählt werden. Für zusätzliche Hinweise ist das \scrguide zu Rate zu ziehen. + +Passend zum ausgewählten Papierformat sowie der gewünschten Anzahl an +Textspalten des Posters sollte unbedingt die Schriftgröße mit +\Option{fontsize=\PName{Schriftgröße}}(\Package{koma-script})'none'|declare| +angegeben werden. Für eine passend abgestimmte Auswahl von Papierformat und +Schriftgröße ist \autoref{tab:font+paper} als Referenz zu nutzen. Sollten Sie +aufgrund der Schriftgrößenänderung eine oder mehrere Warnungen vom Typ +% +\begin{quoting} +\begin{Code} +Font shape `T1/cmr/m/n' in size <...> not available +\end{Code} +\end{quoting} +% +erhalten, so beachten Sie bitte die Hinweise aus \autoref{sec:tips:fontsize}. + + +\begin{table} + \index{Papierformat|!}% + \index{Schriftgröße|!}% + \newcommand*\mtm{\small min\dots{}max}% + \newcommand*\rng[2]{\small #1\dots{}#2pt}% + \ttabbox[\linewidth]{% + \setlength\tabcolsep{5pt}% + \centering% + \begin{subfloatrow}% + \ttabbox{% +\begin{tabular}{r*{7}c} + \toprule + &\multicolumn{7}{c}{Klasse} \tabularnewline\midrule + & 6 & 5 & 4 & 3 & 2 & 1 & 0 \tabularnewline\midrule +Reihe & \mtm & \mtm & \mtm & \mtm & \mtm & \mtm & \mtm \tabularnewline\midrule + D &\rng{05}{07} &\rng{06}{09} &\rng{10}{14} &\rng{14}{20}% + &\rng{20}{29} &\rng{28}{40} &\rng{40}{60} \tabularnewline\midrule + A &\rng{06}{08} &\rng{07}{10} &\rng{11}{16} &\rng{16}{23}% + &\rng{23}{33} &\rng{32}{46} &\rng{45}{66} \tabularnewline\midrule + C &\rng{07}{09} &\rng{08}{11} &\rng{12}{18} &\rng{18}{26}% + &\rng{26}{37} &\rng{36}{52} &\rng{50}{72} \tabularnewline\midrule + B &\rng{08}{10} &\rng{09}{12} &\rng{13}{20} &\rng{20}{29}% + &\rng{29}{41} &\rng{40}{58} &\rng{55}{78} \tabularnewline\bottomrule +\end{tabular} + }{\caption{Einspaltiges Layout}}% + \end{subfloatrow}% + \par\medskip + \begin{subfloatrow}% + \ttabbox{% +\begin{tabular}{r*{4}c} + \toprule + &\multicolumn{4}{c}{Klasse} \tabularnewline\midrule + & 3 & 2 & 1 & 0 \tabularnewline\midrule + Reihe & \mtm & \mtm & \mtm & \mtm \tabularnewline\midrule +D&\rng{07}{10}&\rng{10}{14}&\rng{14}{19}&\rng{19}{28}\tabularnewline\midrule +A&\rng{08}{11}&\rng{11}{16}&\rng{16}{22}&\rng{22}{32}\tabularnewline\midrule +C&\rng{09}{12}&\rng{12}{18}&\rng{18}{25}&\rng{25}{36}\tabularnewline\midrule +B&\rng{10}{13}&\rng{13}{20}&\rng{20}{28}&\rng{28}{40}\tabularnewline\bottomrule +\end{tabular} + }{\caption{Zweispaltiges Layout}}% + \ttabbox{% +\begin{tabular}{r*{2}c} + \toprule + &\multicolumn{2}{c}{Klasse} \tabularnewline\midrule + & 1 & 0 \tabularnewline\midrule + Reihe & \mtm & \mtm \tabularnewline\midrule + D &\rng{07}{10} &\rng{10}{14} \tabularnewline\midrule + A &\rng{08}{11} &\rng{11}{16} \tabularnewline\midrule + C &\rng{09}{12} &\rng{12}{18} \tabularnewline\midrule + B &\rng{10}{13} &\rng{13}{20} \tabularnewline\bottomrule +\end{tabular} + }{\caption{Dreispaltiges Layout}}% + \end{subfloatrow}% + }{% + \caption{% + Empfohlene Kombinationen für die Wahl von Papierformat + (\Option{paper}(\Package{typearea})'none') und Schriftgröße + (\Option{fontsize}(\Package{koma-script})'none')% + }% + \label{tab:font+paper}% + }% +\end{table} + + + +\subsection{Die Gestalt eines Posters} + +Die Festlegung der Farbausprägung eines Posters erfolgt mit der Option +\Option{cd}, welche nachfolgend beschrieben wird. Dabei kann aus einigen +Varianten zur Farbgestaltung gewählt werden. Sollte keiner dieser +vordefinierten Werte das gewünschte Layout zur Verfügung stellen, lässt sich +dieses mit den Optionen \Option{cdhead} und \Option{cdfoot} sowie +\Option{cdtitle}, \Option{cdpart} und \Option{cdsection} nachträglich +noch genauer anpassen. + + +\begin{Declaration}{\Option{cd=\PSet}}[bicolor] +\printdeclarationlist% +% +Äquivalent zu den \TUDScript-Hauptklassen wird mit dieser Option die Verwendung +des \TUDCDs für das Poster festgelegt. Sie hat Einfluss auf die Farbgestaltung +der Gliederungsüberschriften sowie des Seitenstils, welcher standardmäßig auf +\PageStyle{empty.tudheadings} gesetzt wird. +% +\begin{values}{\Option{cd}} +\itemfalse + Hiermit wird das \CD komplett deaktiviert und es werden keine spezifischen + Einstellungen für ein Poster vorgenommen. Lediglich der Seitenstil wird auf + \PageStyle{empty} festgelegt. +\itemtrue*[nocolor/monochrome] + Es wird schwarze Schrift für Überschriften und den Seitenkopf verwendet. Der + Fußbereich wird nicht farbig akzentuiert. +\item[lightcolor/pale] + Die Einstellung entspricht weitestgehend der Option \Option{cd=true}, + allerdings wird die primäre Hausfarbe \Color{HKS41} für Kopf sowie Fuß und + die Überschriften genutzt. +\item[barcolor] + Zusätzlich zur vorherigen Einstellung wird außerdem der Querbalken farbig + abgesetzt. +\item[bicolor/color/fullcolor] + Der Kopf wird mit einem farbigen Hintergrund in der primären Hausfarbe + \Color{HKS41} gesetzt, der Querbalken wird farbig abgesetzt. Ebenso wird für + alle Überschriften die Hausfarbe verwendet, der Fußbereich erhält ebenfalls + einen farbigen Hintergrund. +\end{values} +\end{Declaration} + +\begin{Declaration}{\Option{backcolor=\PSet}}[true] +\printdeclarationlist% +% +Mit dieser Option kann die Hintergrundfarbe eines Posters definiert werden. +% +\begin{values}{\Option{backcolor}} +\itemfalse[nocolor] + Es wird keine Farbe festgelegt, der Hintergrund erscheint weiß. +\itemtrue*[color] + Der Seitenhintergrund wird in der primären Hausfarbe \Color{HKS41} gewählt. +\item[\PValueName{Farbe}] + Die angegebene \PName{Farbe} wird als Hintergrund für das Poster genutzt. +\end{values} +\end{Declaration} + +\begin{Declaration}{\Option{bleedmargin=\PName{Längenwert}}}[0.2in] +\printdeclarationlist% +\index{Beschnittzugabe|?}% +\index{Schnittmarken|?}% +% +Soll das Poster in einem Papierformat gedruckt werden, welches anschließend +noch auf das Zielformat zugeschnitten wird, weil beispielsweise ein randloses +Drucken nicht möglich ist, kann diese Option genutzt werden, um die farbigen +Elemente des Layouts in den Bereich der Beschnittzugabe respektive Überfüllung +zu vergrößern. Damit ist ein \enquote{Zuschneiden in die Farbe} sehr einfach +und ohne große Probleme realisierbar. + +Die von der Einstellung \Option{bleedmargin=\PName{Längenwert}} abhängigen +Elemente sind zum einen Kopf- und Fußbereich, beeinflusst durch die Optionen +\Option{cdhead} und \Option{cdfoot}. Werden diese farbig gesetzt, so werden +diese um den angegebenen \PName{Längenwert} über das gewünschte Zielformat +hinaus vergrößert. Zum anderen wird auch der mit \Option{backcolor} +gegebenenfalls eingestellte, farbige Seitenhintergrund erweitert. Wie sich der +Entwurf eines Posters in einem bestimmten Zielformat auf einem übergroßem +Papierbogen tatsächlich realisieren lässt, wird in \fullref{sec:tips:crop} +exemplarisch dargestellt. +\end{Declaration} + + + +\section{Felder für den Fußbereich} +\tudhyperdef*{sec:poster:foot}% +% +Der Fußbereich eines Posters kann mit \Macro{footcontent} eigens und frei +definiert werden. Geschieht dies nicht, wird standardmäßig ein vordefinierte +Fuß gesetzt, welcher Angaben von bestimmten Feldern ausgibt, die insbesondere +als Kontaktinformationen gedacht sind. Welche das im Einzelnen sind, wird +nachfolgend erläutert. Die farbliche Ausprägung des Fußes wird durch die Option +\Option{cdfoot} festgelegt. + +\begin{Declaration}{% + \Macro{faculty}[\OParameter{Fußzeile}\Parameter{Fakultät}]% +} +\begin{Declaration}{% + \Macro{department}[\OParameter{Fußzeile}\Parameter{Einrichtung}]% +} +\begin{Declaration}{% + \Macro{institute}[\OParameter{Fußzeile}\Parameter{Institut}]% +} +\begin{Declaration}{% + \Macro{chair}[\OParameter{Fußzeile}\Parameter{Lehrstuhl}]% +} +\printdeclarationlist% +% +Die mit diesen Befehlen gemachten Angaben werden nicht nur im Kopf sondern +zusätzlich auch im linken Teil des Fußbereichs ausgegeben. Sollen diese für den +Fußbereich angepasst werden, lässt das optionale Argument hierfür verwenden, +wobei die Angabe eines leeren optionalen Argumentes das Feld für den Fuß +komplett unterdrückt. Vor allen Angaben wird der Bezeichner \Term{contactname} +in fetter Schrift ausgegeben. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + + +\begin{Declaration}{\Macro{professor}[\Parameter{Name}]} +\printdeclarationlist% +% +Zusätzlich zu den Angaben der Einrichtung kann mit \Macro{professor} der +aktuelle Inhaber der genannten Professur im linken Fußbereich angegeben werden. +\end{Declaration} + +\begin{Declaration}{\Macro{author}[\Parameter{Autor(en)}]} +\begin{Declaration}{\Macro{contactperson}[\Parameter{Name(n)}]} +\begin{Declaration}{\Macro{authormore}[\Parameter{Autorenzusatz}]} +\begin{Declaration}{\Macro{course}[\Parameter{Studiengang}]} +\begin{Declaration}{\Macro{discipline}[\Parameter{Studienrichtung}]} +\begin{Declaration}{\Macro{office}[\Parameter{Adresse/Gebäude}]} +\begin{Declaration}{\Macro{telephone}[\Parameter{Telefonnummer}]} +\begin{Declaration}{\Macro{telefax}[\Parameter{Telefaxnummer}]} +\printdeclarationlist% +% +Der oder die mit \Macro{author} angegebenen Autoren werden im rechten Teil des +Fußbereichs (nacheinander) ausgegeben, mehrere Autoren sind mit \Macro{and} +voneinander zu trennen. Die Befehle \Macro{authormore}, \Macro{course} und +\Macro{discipline} sowie \Macro{office}, \Macro{telephone}, \Macro{telefax} und +\Macro{emailaddress} können für zusätzliche Angaben zu jedem Autor innerhalb +des Argumentes von \Macro{author} verwendet werden. Vor der Ausgabe aller +Autoreninformationen wird der Bezeichner \Term{authorname} in fetter Schrift +gesetzt. Ohne die Angabe von \Macro{author} erfolgt keine Ausgabe. + +Danach folgen alle mit \Macro{contactperson} gemachten Angaben. Auch hier ist +\Macro{and} für eine Trennung mehrerer Personen zu nutzen, wobei hier lediglich +die Befehle \Macro{emailaddress}, \Macro{office}, \Macro{telephone} und +\Macro{telefax} nicht jedoch \Macro{authormore} sowie \Macro{course} und +\Macro{discipline} für zusätzliche Angaben zu verwenden sind. Bevor die +Ansprechpartner ausgegeben werden, wird der Bezeichner \Term{contactpersonname} +in fetter Schrift gesetzt. Es ist natürlich auch möglich nur Autor(en) oder +Ansprechpartner anzugeben. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Macro{webpage}[\OParameter{Einstellungen}\Parameter{URL}]} +\begin{Declaration}{\Macro{webpage*}[\Parameter{URL}]} +\printdeclarationlist% +% +Ganz zum Schluss kann für die rechte Spalte des Fußbereichs eine Homepage +angegeben werden. Wurde das Paket \Package{hyperref} geladen, wird diese in +einen Hyperlink gewandelt. Über das optionale Argument können beliebige +Einstellungen an \Macro{hypersetup}(\Package{hyperref})'none' aus besagtem +Paket übergeben werden. Soll die Formatierung des Eintrags manuell erfolgen, so +kann die Sternversion \Macro{webpage*} verwendet werden, wobei alle gewünschten +Einstellungen innerhalb des Argumentes~-- gegebenenfalls in einer Gruppe~-- +vorgenommen werden müssen. +\end{Declaration} +\end{Declaration} + + +\section{Sprachabhängige Bezeichner für den Fußbereich} + +\begin{Declaration}{\Term{contactname}} +\begin{Declaration}{\Term{authorname}} +\begin{Declaration}{\Term{contactpersonname}} +\printdeclarationlist% +% +Wie bereits zuvor erläutert, werden diese Bezeichner in der linken respektive +rechten Spalte im Fuß vor der Ausgabe der eigentlichen Felder gesetzt. +\TermTable{contactname,authorname,contactpersonname} +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\ToDo[imp]{% + Symbole für Telefon, Fax und E-Mail in \autoref{sec:poster:foot}? + Woher? marvosym?%\Email\fax\Faxmachine\FAX\Letter\Mobilefone\Telefon +}[v2.07] +\end{Bundle*} diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-preface.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-preface.tex new file mode 100644 index 0000000000..b37950fb16 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-preface.tex @@ -0,0 +1,57 @@ +\addchap[tocentry={}]{\prefacename} +In diesem Handbuch werden die für das Erstellen von \hologo{LaTeX}"=Dokumenten +im \hrfn{https://tu-dresden.de/cd/}{\TUDCD} entwickelten Klassen und Pakete +beschrieben. Diese basieren auf den gerade im deutschsprachigen Raum häufig +verwendeten \KOMAScript"=Klassen, die eine Vielzahl von Einstellmöglichkeiten +bieten, welche weit über die Möglichkeiten der \hologo{LaTeX}"=Standardklassen +hinausgehen. Zusätzlich bietet das \TUDScript-Bundle weitere, insbesondere das +Dokumentlayout betreffende Auswahlmöglichkeiten. + +Es sei angemerkt, dass die hier beschriebenen Klassen eine Abweichung vom +\TUDCD zulassen, da dieses gerade unter typografischen Gesichtspunkten +durchaus als diskussionswürdig zu erachten ist. Prinzipiell ist es mit den +entsprechenden Einstellungen möglich, auf das Layout der \KOMAScript"=Klassen +zurückzuschalten. Ohne die gezielte Verwendung dieser Optionen durch den +Anwender werden per Voreinstellung alle Vorgaben des \CDs umgesetzt. + +Dieses Handbuch enthält eine Beschreibung der \emph{zusätzlich} zu den +\KOMAScript"=Klassen nutzbaren Optionen und Befehle. Dabei werden +Grundkenntnisse in der Verwendung von \hologo{LaTeX} vorausgesetzt. Sollten +diese nicht vorhanden sein, wird das Lesen der \hologo{LaTeXe}"=Kurzbeschreibung +\hrfn{http://mirrors.ctan.org/info/lshort/german/l2kurz.pdf}{\File{l2kurz.pdf}} +dringend empfohlen. Für den vertiefenden Einstieg in \hologo{LaTeX} stellt +Nicola~L.~C.~Talbot sehr ausführliche Tutorials für +\hrfn{http://www.dickimaw-books.com/latex/novices/}{\hologo{LaTeX}-Novizen} +und \hrfn{http://www.dickimaw-books.com/latex/thesis/}{Dissertationen} zur +freien Verfügung. Zusätzlich werden in \autoref{part:additional} dieses +Handbuchs Minimalbeispiele sowie etwas ausführlichere Tutorials angeboten. + +Des Weiteren sollte \emph{jeder} Anwender das \hologo{LaTeXe}"=Sündenregister +\hrfn{http://mirrors.ctan.org/info/l2tabu/german/l2tabu.pdf}{\File{l2tabu.pdf}} +kennen, um typische Fehler zu vermeiden. Antworten auf häufig gestellte Fragen +liefert \hrfn{http://projekte.dante.de/DanteFAQ/WebHome}{DanteFAQ}. Falls der +Nutzer unerfahren bei der Verwendung von \KOMAScript{} sein sollte, so ist ein +Blick in das \scrguide[dazugehörige Handbuch] sehr zu empfehlen, wenn nicht +sogar unumgänglich. + +Der aktuelle Stand der Klassen und Pakete aus dem \TUDScript-Bundle in der +Version~\vTUDScript{} wurde nach bestem Wissen und Gewissen auf Herz und Nieren +getestet. Dennoch kann nicht für das Ausbleiben von Fehlern garantiert werden. +Beim Auftreten eines Problems sollte dieses genauso wie Inkompatibilitäten mit +anderen Paketen im \Forum* respektive im \GitHubRepo*[issues] unter +\begin{quoting} +\Forum'\newline\GitHubRepo'[issues]% +\end{quoting} +gemeldet werden. Für eine schnelle und erfolgreiche Fehlersuche sollte bitte +ein \hrfn{http://www.komascript.de/minimalbeispiel}{\textbf{Minimalbeispiel}} +bereitgestellt werden. Auf Anfragen ohne dieses werde ich gegebenenfalls +verspätet oder gar nicht reagieren. Ebenso sind im genannten Forum auch +\emph{Fragen}, \emph{Kritik} und \emph{Verbesserungsvorschläge}~-- sowohl das +Bundle selbst als auch die Dokumentation betreffend~-- gerne gesehen. Da dieses +Bundle in meiner Freizeit entstanden ist und auch gepflegt wird, bitte ich um +Nachsicht, falls ich nicht sofort antworte und/oder eine Fehlerkorrektur +vornehmen kann. + +\bigskip +\noindent Falk Hanisch\newline +Dresden, \getfield{date} diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr-supervisor.tex b/macros/latex/contrib/tudscr/source/doc/tudscr-supervisor.tex new file mode 100644 index 0000000000..845fdd3360 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr-supervisor.tex @@ -0,0 +1,411 @@ +\setchapterpreamble{\tudhyperdef'{sec:supervisor}} +\chapter[Das Paket \Package*{tudscrsupervisor} -- Studentische Betreuung]{% + Betreuung studentischer Arbeiten +} +\begin{Bundle*}{\Package{tudscrsupervisor}} +% +Dieses Paket stellt für das Erstellen von Aufgabenstellungen und Gutachten +wissenschaftlicher Arbeiten sowie offiziellen Aushängen im \CD passende +Umgebungen und Befehle für den Anwender bereit. Deshalb richtet es sich +vornehmlich an Mitarbeiter an der \TnUD, kann jedoch natürlich auch von +Studenten genutzt werden. + + +\section{Aufgabenstellung für eine wissenschaftliche Arbeit} +\index{Aufgabenstellung|!(}% +% +\begin{Declaration}{\Environment{task}[\OLParameter{Überschrift}]}{% + \Environment{tudpage}'auto'% +} +\begin{Declaration}{\Key{\Environment{task}}{headline=\PName{Überschrift}}} +\begin{Declaration}[v2.05]{\Key{\Environment{task}}{style=\PName{Stil}}} +\printdeclarationlist% +% +Mit der \Environment{task}"=Umgebung kann ein Aufgabenstellung für eine +wissenschaftliche Arbeit ausgegeben werden. Diese basiert auf der Umgebung +\Environment{tudpage} und akzeptiert deshalb im optionalen Argument alle +Parameter, welche bei der Beschreibung von \Environment{tudpage}'full' +erläutert wurden. + +Für die Aufgabenstellung wird normalerweise eine Überschrift gesetzt, welche +sich aus \Term{taskname} und~-- falls der Typ der Abschlussarbeit angegeben +wurde~-- noch aus \Term{tasktext} und \Macro{thesis} zusammensetzt. Der +Parameter \Key{\Environment{task}}{headline} kann genutzt werden, um diese +automatisch generierte Überschrift anzupassen. + +Zu Beginn der Aufgabenstellung erscheint eine Tabelle mit den angegebenen +Informationen zum Autor respektive zu den Autoren der Abschlussarbeit. Zwingend +anzugeben sind dafür lediglich der Name des oder der Verfasser (\Macro{author}) +sowie der Titel der Arbeit (\Macro{title}), welcher am Ende der Tabelle in +fetter Schrift aufgeführt wird. Optional werden noch die Felder für den +Studiengang (\Macro{course}), die Fachrichtung (\Macro{discipline}) sowie die +Matrikelnummer (\Macro{matriculationnumber}) und das Immatrikulationsjahr +(\Macro{matriculationyear}) ausgegeben, wobei nicht angegebene Felder bei der +Ausgabe ignoriert werden. Der eigentliche Inhalt der Umgebung~-- sprich die +Aufgabenstellung selbst~-- wird nach dem generierten Kopf ausgegeben + +Dem Inhalt der Aufgabenstellung folgt eine zeilenweise Auflistung des oder der +definierten Gutachter beziehungsweise Prüfer (\Macro{referee}) sowie Betreuer +(\Macro{supervisor}). Dabei wird vor dem jeweiligen Namen der dazugehörige +Bezeichner (\Term{refereename}, \Term{refereeothername} respektive +\Term{supervisorname}, \Term{supervisorothername}) gesetzt. +\ChangedAt{v2.05} +Dies ist das voreingestellte Verhalten und kann über die Wahl des Parameters +\Key{\Environment{task}}{style=\PValue{table}} aktiviert werden. Wird hingegen +der Parameter \Key{\Environment{task}}{style=\PValue{inline}} gesetzt, so +erfolgt die Ausgabe von mehreren Prüfern und Betreuern in einer Zeile. Die +Bezeichner sind problemlos anpassbar, siehe dazu \autoref{sec:localization}. +Danach erscheinen das Ausgabedatum (\Macro{issuedate}) sowie der verpflichtende +Abgabetermin (\Macro{duedate}). Zum Schluss wird die Unterschriftzeile für den +Prüfungsausschussvorsitzenden (\Macro{chairman}) und den betreuenden +Hochschullehrer (\Macro{professor}) gesetzt. Für genannte Personen werden unter +dem Namen selbst die Bezeichner ausgegeben (\Term{chairmanname} und +\Term{professorname}). +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{% + \Macro{taskform}[\LParameter\Parameter{Ziele}\Parameter{Schwerpunkte}]% +} +\printdeclarationlist% +% +Zusätzlich zur der frei gestaltbaren Umgebung \Environment{task} zur Erstellung +einer Aufgabenstellung wird ein separater Befehl für eine standardisierte +Ausgabe zur Verfügung gestellt. Dieser strukturiert die Aufgabenstellung in die +zwei Bereiche \emph{Ziele} und \emph{Schwerpunkte} der Arbeit mit dazugehörigen +Überschriften (\Term{objectivesname}, \Term{focusname}). + +Im optionalen Argument können alle Parameter der Umgebung \Environment{task} +verwendet werden. Im ersten obligatorischen Argument sollte ein Text mit einer +kurzen thematischen Einordnung und dem eigentlichen Ziel der Arbeit erscheinen, +im zweiten Argument sollen die thematischen Schwerpunkte in Stichpunkten +benannt werden. Der Inhalt des zweiten notwendigen Argumentes wird in einer +\Environment{itemize}(\Package{koma-script},\Package{enumitem})'none'"=Umgebung +gesetzt. Deshalb \emph{muss} jedem Stichpunkt +\Macro{item}(\Package{koma-script},\Package{enumitem})'none' vorangestellt +werden. +\end{Declaration} +% +\begin{Example} +Die empfohlene Verwendung des Befehls \Macro{taskform} ist wie folgt: +\begin{Code}[escapechar=§] +\taskform{% + Motivation der Arbeit im ersten Absatz§\dots§ + + Ziele der Arbeit im zweiten Absatz§\dots§ +}{% + \item Schwerpunkt 1 + \item Schwerpunkt 2 +} +\end{Code} +Hierzu sei auch auf das Minimalbeispiel in \autoref{sec:exmpl:task} verwiesen. +\index{Aufgabenstellung|!)}% +\end{Example} + +\begin{Declaration}{\Macro{chairman}[\Parameter{Prüfungsausschussvorsitzender}]} +\printdeclarationlist% +% +Wird dieses Feld genutzt, wird neben dem betreuenden Hochschullehrer +(\Macro{professor}) auch der Vorsitzende des Prüfungsausschusses am Ende der +Aufgabenstellung aufgeführt. Dies wird zumeist für Abschlussarbeiten wie +beispielsweise \masterthesisname{} oder \diplomathesisname{} benötigt. +\end{Declaration} + +\begin{Declaration}{\Macro{issuedate}[\Parameter{Ausgabedatum}]} +\begin{Declaration}{\Macro{duedate}[\Parameter{Abgabetermin}]} +\printdeclarationlist% +% +Mit diesen beiden Befehlen sollte das Datum der Ausgabe der Aufgabenstellung +sowie der spätest mögliche Abgabetermin angegeben werden. Wurde das Paket +\Package{isodate} oder \Package{datetime2} geladen, wird die damit eingestellte +Ausgabeformatierung des Datums mit \Macro{printdate}(\Package{isodate})'none' +beziehungsweise \Macro{DTMDate}(\Package{datetime2})'none' für \Macro{duedate} +und \Macro{issuedate} verwendet. +\end{Declaration} +\end{Declaration} + + +\section{Gutachten für wissenschaftliche Arbeiten} +\index{Gutachten|!(}% +% +\begin{Declaration}{\Environment{evaluation}[\OLParameter{Überschrift}]}{% + \Environment{tudpage}'auto'% +} +\begin{Declaration}{% + \Key{\Environment{evaluation}}{headline=\PName{Überschrift}}% +} +\begin{Declaration}{\Key{\Environment{evaluation}}{grade=\PName{Note}}} +\printdeclarationlist% +% +Diese Umgebung wird für das Erstellen eines Gutachtens einer wissenschaftlichen +Arbeit bereitgestellt. Auch diese unterstützt alle Parameter, welche für die +Umgebung \Environment{tudpage}'full' beschrieben wurden. + +Für ein Gutachten wird gewöhnlich eine Überschrift aus \Term{evaluationname} +und~-- falls der Abschlussarbeitstyp angegeben wurde~-- \Term{evaluationtext} +sowie \Macro{thesis} generiert. Diese automatisch generierte Überschrift kann +mit dem Parameter \Key{\Environment{evaluation}}{headline} ersetzt werden. Am +Ende des Gutachtens wird die mit \Key{\Environment{evaluation}}{grade} +gegebene Note in fetter Schrift ausgezeichnet. + +Am Anfang der \Environment{evaluation}"=Umgebung wird die gleiche Tabelle mit +Autorenangaben ausgegeben, wie dies bei der \Environment{task}"=Umgebung der +Fall ist. Nach dem Tabellenkopf folgt auch hier der eigentliche Inhalt, sprich +das Gutachten der Abschlussarbeit. Abgeschlossen wird die Umgebung mit der +gegebenen Note~-- welche innerhalb von \Term{gradetext} ausgegeben wird~-- +sowie der Orts- und Datumsangabe (\Macro{place}, \Macro{date}) und der +darauffolgenden Unterschriftzeile für den oder die Gutachter (\Macro{referee}), +welche wiederum mit den entsprechenden sprachabhängigen Bezeichner +(\Term{refereename}, \Term{refereeothername}) ergänzt werden. +\end{Declaration} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{% + \hskip-.06em\Macro{evaluationform}[% + \LParameter\Parameter{Aufgabe}\Parameter{Inhalt}% + \Parameter{Bewertung}\Parameter{Note}\hskip-.06em% + ]% +} +\printdeclarationlist% +% +Neben der individuell nutzbaren Umgebung \Environment{evaluation} wird ein +separater Befehl zur Erstellung eines standardisierten Gutachtens +bereitgestellt. Dieser strukturiert die Ausgabe in die vier Bereiche +\emph{Aufgabe}, \emph{Inhalt}, \emph{Bewertung} und \emph{Note} und versieht +diese jeweils mit der dazugehörigen Überschrift beziehungsweise Textausgabe +(\Term{taskname}, \Term{contentname}, \Term{assessmentname} und +\Term{gradetext}). Das optionale Argument unterstützt alle Parameter der +\Environment{evaluation}"=Umgebung. +\end{Declaration} +% +\begin{Example} +Die empfohlene Verwendung des Befehls \Macro{evaluationform} ist wie folgt: +\begin{Code}[escapechar=§] +\evaluationform{% + Kurzbeschreibung der Aufgabenstellung§\dots§ +}{% + Zusammenfassung von Inhalt und Struktur§\dots§ +}{% + Bewertung der schriftlichen Abschlussarbeit§\dots§ +}{% + Zahl (Note) +} +\end{Code} +Hierzu sei auch auf das Minimalbeispiel in \autoref{sec:exmpl:evaluation} +verwiesen. +\index{Gutachten|!)}% +\end{Example} + +\begin{Declaration}{\Macro{grade}[\Parameter{Note}]} +\printdeclarationlist% +% +Neben der Angabe der Note für ein Gutachten über den Parameter +\Key{\Environment{evaluation}}{grade} der Umgebung \Environment{evaluation} +kann dafür auch dieser global wirkende Befehl verwendet werden. +\end{Declaration} + + +\section{Aushang} +\index{Aushang|!(}% +% +\begin{Declaration}{\Environment{notice}[\OLParameter{Überschrift}]}{% + \Environment{tudpage}'auto'% +} +\begin{Declaration}{\Key{\Environment{notice}}{headline=\PName{Überschrift}}} +\printdeclarationlist% +% +Für das Anfertigen eines Aushangs kann diese Umgebung verwendet werden. Diese +basiert abermals auf der Umgebung \Environment{tudpage} und unterstützt alle +deren Parameter. + +Wurde ein Datum angegeben, wird dieses standardmäßig rechtsbündig oberhalb des +Textbereiches angezeigt (\seeref{\Key{\Environment{tudpage}}{cdhead}}). Danach +erfolgt die Ausgabe der Überschrift, welche für gewöhnlich dem Inhalt von +\Term{noticename} entspricht und mit \Key{\Environment{notice}}{headline} +geändert werden kann. Nach der Überschrift folgt der Inhalt der Umgebung. Wurde +mit \Macro{contactperson} ein oder mehrere Ansprechpartner angegeben, werden +diese Informationen am Ende der Umgebung gesetzt. +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{% + \Macro{noticeform}[\LParameter\Parameter{Inhalt}\Parameter{Schwerpunkte}]% +} +\printdeclarationlist% +% +Auch für diese Umgebung gibt es einen Befehl für eine normierte Form. Diese +soll vor allem Verwendung für den Aushang studentischer Arbeitsthemen finden. +Für das optionale Argument können sämtliche Parameter verwendet werden, die +auch die \Environment{notice}"=Umgebung unterstützt. + +Das erste obligatorische Argument wird für eine kurze Inhaltsbeschreibung +verwendet. Neben dem Text sollte hier wenn möglich eine thematisch passende +Abbildung eingefügt werden (\Macro{includegraphics}(\Package{graphicx})'none'). +Das zweite Argument wird~-- wie schon bei \Macro{taskform}~-- dazu verwendet, +einige Schwerpunkte aufzuzählen. Auch hier kommt nach der gliedernden +Überschrift (\Term{focusname}) eine +\Environment{itemize}(\Package{koma-script},\Package{enumitem})'none'"=Umgebung +zum Einsatz, allen Schwerpunkten muss ein +\Macro{item}(\Package{koma-script},\Package{enumitem})'none' vorangestellt +werden. +\end{Declaration} +% +\begin{Example} +Die empfohlene Verwendung des Befehls \Macro{noticeform} ist wie folgt: +\begin{Code}[escapechar=§] +\noticeform{% + Kurzbeschreibung des Inhaltes der studentischen Arbeit§\dots§ + + Bild (optional), einzubinden mit: + \includegraphics[§\PName{Einstellungen}§]{§\PName{Datei}§} +}{% + \item Schwerpunkt 1 + \item Schwerpunkt 2 +} +\end{Code} +Hierzu sei auch auf das Minimalbeispiel in \autoref{sec:exmpl:notice} verwiesen. +\index{Aushang|!)}% +\end{Example} + +\begin{Declaration}[v2.02]{\Macro{contactperson}[\Parameter{Kontaktperson(en)}]} +\begin{Declaration}{\Macro{office}[\Parameter{Dienstsitz}]} +\begin{Declaration}[v2.02]{\Macro{telephone}[\Parameter{Telefonnummer}]} +\begin{Declaration}[v2.05]{\Macro{telefax}[\Parameter{Telefaxnummer}]} + +\printdeclarationlist% +% +Am Ende eines Aushangs können mit \Macro{contactperson} Kontaktinformationen +für eine oder mehrere Ansprechpartner angegeben werden. Soll mehr als eine +Kontaktperson genannt werden, so müssen diese innerhalb des Befehls +\Macro{contactperson} mit dem Befehl \Macro{and} getrennt werden. Für jede +Person kann innerhalb des Argumentes von \Macro{contactperson} der Dienstsitz +(\Macro{office}), die dienstliche Telefon- (\Macro{telephone}) sowie "~faxnummer +(\Macro{telefax}) und die geschäftliche E"~Mail"=Adresse (\Macro{emailaddress}) +angegeben werden. +\end{Declaration} +\end{Declaration} +\end{Declaration} +\end{Declaration} + + + +\section{Zusätzliche sprachabhängige Bezeichner} +\index{Bezeichner|!(}% +% +Für das Paket \Package{tudscrsupervisor} werden für die zusätzlichen Befehle +und Umgebungen weitere Bezeichner definiert. Für eine etwaige Anpassung dieser +sei auf \autoref{sec:localization} verwiesen. + +\begin{Declaration}{\Term{taskname}} +\begin{Declaration}{\Term{tasktext}} +\printdeclarationlist% +% +Die Bezeichnung der Aufgabenstellung selbst ist in \Term{taskname} enthalten. +Für die Generierung einer Überschrift wird dieser verwendet. Wurde außerdem mit +\Macro{thesis} oder \Macro{subject} der Typ der Abschlussarbeit% +\footnote{% + \Option{subjectthesis} oder spezieller Wert aus \autoref{tab:thesis}% +} +angegeben, wird die Überschrift zusammen mit dem Bezeichner \Term{tasktext} +um die Typisierung erweitert. Falls gewünscht, kann die automatisch generierte +Überschrift mit dem Parameter \Key{\Environment{task}}{headline} der Umgebung +\Environment{task} überschrieben werden. +\TermTable{taskname,tasktext} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}[v2.04]{\Term{namesname}} +\begin{Declaration}{\Term{titlename}} +\printdeclarationlist% +% +Diese beiden Bezeichner werden in der Tabelle mit den Autoreninformationen zu +Beginn der Aufgabenstellung verwendet. +\TermTable{namesname,titlename} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{issuedatetext}} +\begin{Declaration}{\Term{duedatetext}} +\printdeclarationlist% +% +Am Ende der Aufgabenstellung wird nach dem oder der Betreuer das Ausgabedatum +und der Abgabetermin (\Macro{issuedate}, \Macro{duedate}) der Abschlussarbeit +mit folgenden Bezeichner erläutert. +\TermTable{issuedatetext,duedatetext} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{chairmanname}} +\printdeclarationlist% +% +Wurde der Prüfungsausschussvorsitzende (\Macro{chairman}) angegeben, erfolgt +unter dem Namen selbst die Ausgabe des Bezeichners. +\TermTable{chairmanname} +\end{Declaration} + +\begin{Declaration}{\Term{focusname}} +\begin{Declaration}{\Term{objectivesname}} +\printdeclarationlist% +% +Die Standardformen für Aufgabenstellung (\Macro{taskform}) respektive Aushang +(\Macro{noticeform}) nutzen für die gesetzten Überschriften diese Bezeichner. +\TermTable{focusname,objectivesname} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{evaluationname}} +\begin{Declaration}{\Term{evaluationtext}} +\printdeclarationlist% +% +Die Bezeichnung des Gutachten selbst ist in \Term{evaluationname} enthalten. +Für die Generierung der Überschrift wird der Bezeichner \Term{evaluationtext} +sowie der mit \Macro{thesis} oder gegebenenfalls mit \Macro{subject} gegebenen +Typ der Abschlussarbeit verwendet. Diese automatisch generierte Überschrift +kann mit dem Parameter \Key{\Environment{evaluation}}{headline} der +Umgebung \Environment{evaluation} durch den Anwender überschrieben werden. +\TermTable{evaluationname,evaluationtext} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{contentname}} +\begin{Declaration}{\Term{assessmentname}} +\printdeclarationlist% +% +Bei der standardisierten Form des Gutachtens (\Macro{evaluationform}) werden +die darin~-- für eine strukturierte Gliederung~-- erzeugten Überschriften mit +den Bezeichnern \Term{taskname}, \Term{contentname} und \Term{assessmentname} +gesetzt. +\TermTable{taskname,contentname,assessmentname} +\end{Declaration} +\end{Declaration} + +\begin{Declaration}{\Term{gradetext}} +\printdeclarationlist% +% +Wird für das Gutachten einer wissenschaftlichen Arbeit die erzielte Note +entweder mit dem Befehl \Macro{grade}[\Parameter{Note}] oder alternativ dazu +mit dem Parameter \Key{\Environment{evaluation}}{grade=\PName{Note}} der +Umgebung \Environment{evaluation} angegeben, so wird diese innerhalb von +\Term{gradetext} verwendet. +\grade{\PName{Note}} +\TermTable*{gradetext}{.8\textwidth} +\end{Declaration} + +\begin{Declaration}{\Term{noticename}} +\begin{Declaration}[v2.02]{\Term{contactpersonname}} +\printdeclarationlist% +% +Die Bezeichnung des Aushangs selbst ist in \Term{noticename} enthalten. Für +die Generierung einer Überschrift wird dieser verwendet. Falls gewünscht, kann +diese mit dem Parameter \Key{\Environment{notice}}{headline} der Umgebung +\Environment{notice} überschrieben werden. Wurde eine Kontaktperson mit dem +Befehl \Macro{contactperson} angegeben, wird als Überschrift der Kontaktdaten +der Bezeichner \Term{contactpersonname} verwendet. + +\TermTable{noticename,contactpersonname} +\end{Declaration} +\end{Declaration} +\index{Bezeichner|!)}% +\end{Bundle*} diff --git a/macros/latex/contrib/tudscr/source/doc/tudscr.tex b/macros/latex/contrib/tudscr/source/doc/tudscr.tex new file mode 100644 index 0000000000..23ecb82dce --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tudscr.tex @@ -0,0 +1,162 @@ +\documentclass[english,ngerman,ttfont=roboto]{tudscrmanual} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\lstset{% + inputencoding=utf8,extendedchars=true, + literate=% + {ä}{{\"a}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {~}{{\textasciitilde}}1 {ß}{{\ss}}1 +} +\usepackage{bookmark} + +\TUDoption{ToDo}{true} +\KOMAoptions{headings=optiontoheadandtoc} + +%\tracinglabels[all] +%\tracingmarkup +%\tracingbundle + +\begin{document} +\newrobustcmd*\cdurl{% + \begingroup% + \hypersetup{hidelinks}% + \href{https://tu-dresden.de/cd/}{https://tu-dresden.de/cd}% + \endgroup% +} +\faculty{\cdurl} +\date{27.08.2019} +\author{% + Falk Hanisch% + \expandafter\emailaddress\expandafter{\tudscrmail}% +} +\publishers{\GitHubRepo'[]} +\subject{\TUDScript \vTUDScript{} basierend auf \KOMAScript} +\title{Ein {LaTeX}-Bundle für Dokumente im \TUDCD} +\ifdef{\tudprintflag}{% + \subtitle{Benutzerhandbuch\thanks{\href{tudscr}{Online-Version}}}% +}{% + \subtitle{Benutzerhandbuch\thanks{\href{tudscr_print}{Druckversion}}}% +} + + +\makeatletter +\begingroup% + \def\and{, }% + \let\thanks\@gobble% + \let\footnote\@gobble% + \let\emailaddress\@gobble% + \hypersetup{% + pdfauthor = {\@author},% + pdftitle = {\@title},% + pdfsubject = {Benutzerhandbuch für \TUDScript},% + pdfkeywords = {LaTeX, \TUDScript, Benutzerhandbuch},% + }% +\endgroup% +\makeatother + + +\maketitle + + +\include{tudscr-preface} +\tableofcontents +\include{tudscr-introduction} + + + +\setpartpreamble{% + \begin{abstract} + \hypersetup{linkcolor=red} + \noindent Dies ist der Hauptteil des \TUDScript-Bundles. Hier findet der + Anwender alle verfügbaren Optionen, Umgebungen und Befehle, die über + die Funktionalität von \KOMAScript{} hinausgehen. + \end{abstract} +}% +\part{Das \TUDScript-Bundle} +\label{part:main} +\include{tudscr-mainclasses} +\include{tudscr-poster} +\include{tudscr-supervisor} +\include{tudscr-bundle} + + + +\setpartpreamble{% + \begin{abstract} + \hypersetup{linkcolor=red} + \noindent Für die Verwendung des \TUDScript-Bundles ist es nicht notwendig, + diesen Teil zu lesen. In \autoref{sec:exmpl} werden insbesondere für + \hologo{LaTeX}"=Neulinge sowie neue Anwender des \TUDScript-Bundles + mehrere einfache Beispiele gezeigt. Zusätzlich sind in \autoref{sec:tut} + umfangreichere Tutorials für das Erstellen von wissenschaftlichen Arbeiten + zu finden. Die darin gegebenen Empfehlungen sind nicht auf \TUDScript + beschränkt sondern lassen sich auch mit anderen \hologo{LaTeX}"=Klassen + umsetzen. In \autoref{sec:packages} werden Einsteigern~-- und versierten + \hologo{LaTeX}-Nutzern~-- meiner Meinung nach empfehlenswerte Pakete kurz + vorgestellt. + + Anwendungshinweise sowie der eine oder andere allgemeine Hinweis bei der + Verwendung von \hologo{LaTeXe} wird in \autoref{sec:tips} gegeben. Dabei + sind diese durchaus für die Verwendung sowohl des \TUDScript-Bundles als + auch anderer \hologo{LaTeX}-Klassen interessant. Für Anregungen, Hinweise, + Ratschläge oder Empfehlungen zu weiteren Pakete sowie Tipps bin ich + jederzeit empfänglich. + \end{abstract} +} +\part{Ergänzungen und Hinweise} +\label{part:additional} +\include{tudscr-examples} +\include{tudscr-packages} +\include{tudscr-hints} + + + +\part{Anhang} +\appendix +\include{tudscr-installation} +\include{tudscr-obsolete} +\include{tudscr-additional} +\include{tudscr-index} + + + +\clearpage + +\ToDo[imp,doc]{% + Benutzerdefinierte Anpassungen von \TUDScript, Kapitelstile, Farbeinsatz etc.% +}[v2.07] +\ToDo[imp]{% + Spezialseite zur freien Gestaltung mit Hintergrundebene für Bilder und Texte + (CD-Handbuch S. 80 ff.); Seitenstil: \PageStyle*{special.tudheadings} +}[v2.07] +\ToDo[doc,imp]{% + Rückseite bei Kapitelseiten (auch bei Teilen?) im doppelseitigen Satz per + Option nicht als Vakatseite setzen. Implementierung von farbigen Seiten + davor (\Option*{open=right}) sowie danach (\Option*{open=left}). Setzen von + speziellen Inhalten auf diesen Seiten äquivalent zu \Macro*{setpartpreamble} + bzw. \Macro*{setchapterpreamble}; ggf. temporär umschalten bzw. Warnung bei + Konflikt. + \url{http://latex.wcms-file3.tu-dresden.de/phpBB3/viewtopic.php?f=11&t=396} +}[v2.07] + +\ToDo[imp]{LyX: layout-Dateien in das Projekt integrieren lassen?}[v2.07] +\ToDo[imp]{\Package*{glossaries}: Paket für Stile aus Tutorial}[v2.07] + +\ToDo[imp]{TeXstudio: cwl-Dateien über docstrip, separate .ins-Datei}[v2.07] +\ToDo[rls]{TeXstudio: alle *.cwl erneuern, automatisch über *.dtx} + +\ToDo[rls]{GitHub auf offene Issues prüfen} +\ToDo[rls]{\emph{alle} dtx-Dateien der vorherigen Version mit WinMerge sichten} +\ToDo[rls]{Layout und Umbrüche kontrollieren} +\ToDo[rls]{Datum in tudscr-version.dtx, tudscr-comp.dtx, Handbuch \& README} +\ToDo[rls]{% + Release auf GitHub und CTAN, Tag für Homepage und im Forum ändern\\ + {\small\url{http://latex.wcms-file3.tu-dresden.de/phpBB3/viewtopic.php?t=303}}% +} +\ListOfToDo +\end{document} diff --git a/macros/latex/contrib/tudscr/source/doc/tutorials/mathswap.tex b/macros/latex/contrib/tudscr/source/doc/tutorials/mathswap.tex new file mode 100644 index 0000000000..92e081b5b6 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tutorials/mathswap.tex @@ -0,0 +1,227 @@ +\documentclass[english,ngerman]{tudscrartcl} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} + +\usepackage{tudscrtutorial} +\lstset{% + inputencoding=utf8,extendedchars=true, + literate=% + {ä}{{\"a}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {~}{{\textasciitilde}}1 {ß}{{\ss}}1 +} + +\usepackage{mathswap} +\usepackage{bookmark} + +\begin{document} +\begin{Bundle}{\Package{mathswap}} +\date{07.11.2016} +\author{Falk Hanisch\thanks{\noexpand\scriptsize\noexpand\mailto{\tudscrmail}}} +\title{Änderung der Trennzeichen im Mathematikmodus} +\makeatletter +\begingroup% + \def\and{, }% + \let\thanks\@gobble% + \let\footnote\@gobble% + \hypersetup{% + pdfauthor = {\@author},% + pdftitle = {\@title},% + pdfsubject = {Mathematiksatz in \hologo{LaTeXe}},% + pdfkeywords = {LaTeX, \TUDScript, Tutorial, Mathematiksatz},% + }% +\endgroup% +\markright{\@title} +\makeatother +\StartTutorial[% + Werden in einer wissenschaftlichen Abhandlung vielerlei Daten importiert und + beispielsweise tabellarisch dargestellt, kann es durchaus sein, dass diese + importierten Datensätze bezüglich der darin enthaltenen Gruppierungs- und + Dezimaltrennzeichen nicht dem Zahlenformat entsprechen, welches für die + verwendete Dokumentsprache normalerweise notwendig wäre. + + Dieses Tutorial behandelt die typografischen Eigenheiten von Gruppierungs- + und Dezimaltrennzeichen bei der Angabe von Zahlen in einem + \hologo{LaTeXe}"=Dokument. Sowohl bei der Einbindung von externen Daten als + auch bei der Erstellung von fremdsprachigen Dokumenten ist dies ein durchaus + relevantes Thema. Um sich die manuelle Konvertierung der Daten zu ersparen, + kann alternativ dazu die Möglichkeit genutzt werden, dies mit Hilfe von + \hologo{LaTeXe} selbst zu bewerkstelligen. + + Es wird beschrieben, wie das \TUDScript-Paket \Package{mathswap}'manual' für + diese Zwecke genutzt werden kann. Wird es in einer der \TUDScript-Klassen + geladen, so wird das angenommene Zahlenformat an die gewählte Dokumentsprache + angepasst. Alternativ dazu kann auch das Paket \Package{ionumbers}()'manual' + verwendet werden. +] +Bevor das eigentliche Tutorial beginnt, werden sowohl eine Dokumentklasse als +auch die für jedes \hologo{pdfLaTeX}-Dokument meiner Meinung nach sinnvollen +Pakete geladen. +% +\begin{Preamble} +\documentclass[english,ngerman]{tudscrartcl}% andere Klassen möglich +\usepackage[T1]{fontenc} +\ifpdftex{\usepackage[ngerman=ngerman-x-latest]{hyphsubst}}{} +\usepackage{babel} +\usepackage{microtype} + +\end{Preamble} +% +Zusätzlich wird das Paket \Package{mathswap}'manual' aus dem \TUDScript-Bundle +geladen, welches die Änderung der Gruppierungs- und Dezimaltrennzeichen im +Mathematikmodus ermöglicht. Dadurch werden einerseits Zahlen im zur jeweiligen +Dokumentsprache gehörigen Format typografisch korrekt gesetzt. Andererseits ist +es so möglich, Zahlen im englischen Format typografisch korrekt in deutschen +Texten zu setzen~-- et vice versa. +% +\begin{Preamble} +\usepackage{mathswap} +\end{Preamble} +% +\addsec{Typografisch korrekte Ausgabe für deutschsprachige Dokumente} +% +Für dieses Tutorial wird zunächst angenommen, dass die wissenschaftlichen +Abhandlung in deutscher Sprache verfasst wird. Ohne die Nutzung eines +speziellen Paketes zur Ausgabeformatierung von Zahlen werden diese durch +\hologo{LaTeXe} im mathematischen Modus bei der Angabe im deutschen +Zahlenformat~-- Punkt~(\PValue{.}) als Gruppierungs- und Komma~(\PValue{,}) als +Dezimaltrennzeichen~-- folgendermaßen ausgegeben:% +\footnote{% + Da in der Präambel dieses Dokumentes das Paket \Package{mathswap}'manual' + bereits geladen wurde, wird mit \Macro{mathswapoff}'manual' auf das + Standardverhalten von \hologo{LaTeXe} geschaltet. Die Funktionalität wird mit + \Macro{mathswapon}'manual' wieder aktiviert.% +} +% +\CodePreamble{% + Ohne \Package{mathswap}'manual' keine typografische Zifferngruppierung% +} +\begin{Trunk*} +\mathswapoff +\(4.523,58\) +\mathswapon + +\end{Trunk*} +% +Mit dem Paket \Package{mathswap}'manual' wird das Ziel verfolgt, unabhängig vom +genutzten Zahlenformat für die Eingabe, eine typografisch korrekte Ausgabe zu +erzeugen. Wird das Paket zusammen mit einer \TUDScript-Klasse verwendet, werden +die Gruppierungs- und Dezimaltrennzeichen bei der Eingabe im Mathematikmodus +sprachabhängig interpretiert. Bei der Nutzung einer \KOMAScript-Dokumentklasse +respektive einer \hologo{LaTeX}-Standardklasse werden diese im Mathematikmodus +immer nach dem englischen Zahlenformat~-- Komma~(\PValue{,}) als Gruppierungs- +und Punkt~(\PValue{,}) als Dezimaltrennzeichen~-- betrachtet. + +Da dieses Dokument mit einer \TUDScript-Klasse (\TUDClassName) gesetzt wird und +die Spracheinstellung~\PValue{ngerman} gewählt wurde, wird für die folgenden +Zahlen das deutsche Eingabeformat angenommen. Wird nun die bereits zuvor +verwendete Zahl bei aktiver Funktionalität von \Package{mathswap}'manual' im +Mathematikmodus angegeben werden, so wird diese den typografischen Konventionen +folgend~-- halbes Leerzeichen zur Zahlengruppierung und Komma ohne umgebenden +Leerraum als Dezimaltrennzeichen~-- entsprechend ausgegeben: +% +\CodePreamble{% + Zifferngruppierung korrekt (Spracheinstellung~\PValue{ngerman})% +} +\begin{Trunk*} +\(4.523,58\) + +\end{Trunk*} +% +Wird die gleiche Zahl in englischer Formatierung angegeben, funktioniert dies +nicht mehr: +% +\CodePreamble{% + Zifferngruppierung falsch (Spracheinstellung~\PValue{ngerman})% +} +\begin{Trunk*} +\(4,523.58\) + +\end{Trunk*} +% +Um nun Zahlen, welche in englischer Formatierung eingegeben oder importiert +werden, in deutschsprachigen Dokumenten typografisch korrekt auszugeben, können +die beiden Befehle \Macro{commaswap}[\PParameter{\dots}]'manual' sowie +\Macro{dotswap}[\PParameter{\dots}]'manual' genutzt werden. Mit diesen lässt +sich festlegen, wie die im Mathematikmodus zur Zifferngruppierung eingegeben +Trennzeichen~-- Komma~(\PValue{,}) und Punkt~(\PValue{.})~-- substituiert +werden sollen, um damit die gewünschte Typografie zu erhalten. Die Argumente +der beiden Befehle geben also an, wodurch im mathematischen Modus Komma und +Punkt bei der Ausgabe ersetzt werden sollen. + +Im englischen Zahlenformat wird bei der Eingabe das Komma~(\PValue{,}) als +Gruppierungs- und der Punkt~(\PValue{.}) als Dezimaltrennzeichen genutzt. Bei +der Ausgabe für deutschsprachige Dokumente nach den typografischen Konventionen +muss folglich das Komma durch ein halbes Leerzeichen (\Macro*{,}) ersetzt +werden. Dies lässt sich mit \Macro{commaswap}[\PParameter{\Macro*{,}}] +bewerkstelligen. Der Punkt ist demzufolge mit einem Komma durch die Angabe von +\Macro{dotswap}[\PParameter{,}] zu ersetzen:% +\footnote{% + Die Verwendung von \Macro*{begingroup} und \Macro*{endgroup} führt hierbei + dazu, dass die Änderungen der beiden Trennzeichen nur lokal innerhalb dieser + Gruppe erfolgt. +} +% +\CodePreamble{% + Englisches Zahlenformat in korrekter deutscher Zifferngruppierung% +} +\begin{Trunk*} +\begingroup + \commaswap{\,} + \dotswap{,} + \(4,523.58\) +\endgroup + +\end{Trunk*} +% +Somit können in einem deutschsprachigen Dokument Zahlen im englischen Format +problemlos verwendet beziehungsweise importiert und dennoch typografisch +korrekt gesetzt werden. +% +\addsec{Typografisch korrekte Ausgabe für englischsprachige Dokumente} +% +Wird das Paket \Package{mathswap}'manual' zusammen mit einer \TUDScript-Klasse +verwendet, werden die Gruppierungs- und Dezimaltrennzeichen im Mathematikmodus +sprachabhängig definiert. Wird also die Dokumentsprache auf \PValue{english} +gesetzt, so werden die Trennzeichen standardmäßig nach dem englischsprachigen +Zahlenformat interpretiert. +% +\CodePreamble{% + Zifferngruppierung (Spracheinstellung~\PValue{english})% +} +\begin{Trunk*} +\begingroup + \selectlanguage{english}% + \(4,523.58\)\newline + \(4.523,58\) +\endgroup + +\end{Trunk*} +% +Für englischsprachige Dokumente wird für die Auszeichnung der Gruppierung von +Ziffern ebenfalls ein halbes Leerzeichen und als Dezimaltrennzeichen ein Punkt +verwendet. Werden nun Zahlen in der deutschen Formatierung eingelesen, so muss +folglich das Komma durch einen Punkt \Macro{commaswap}[\PParameter{.}] und der +Punkt mit \Macro{dotswap}[\PParameter{\Macro*{,}}] durch ein halbes Leerzeichen +ersetzt werden:% +% +\CodePreamble{% + Deutsches Zahlenformat in korrekter englischer Zifferngruppierung% +} +\begin{Trunk*} +\begingroup + \selectlanguage{english}% + \commaswap{.} + \dotswap{\,} + \(4.523,58\) +\endgroup +\end{Trunk*} +% +\FinishTutorial +\ListOfToDo +\end{Bundle} +\end{document} diff --git a/macros/latex/contrib/tudscr/source/doc/tutorials/mathtype.tex b/macros/latex/contrib/tudscr/source/doc/tutorials/mathtype.tex new file mode 100644 index 0000000000..9f9625ab7b --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tutorials/mathtype.tex @@ -0,0 +1,204 @@ +\documentclass[english,ngerman]{tudscrartcl} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} + +\usepackage{tudscrtutorial} +\lstset{% + inputencoding=utf8,extendedchars=true, + literate=% + {ä}{{\"a}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {~}{{\textasciitilde}}1 {ß}{{\ss}}1 +} + +\usepackage{mathtools} +\usepackage{bookmark} + +\begin{document} +\date{07.11.2016} +\author{Falk Hanisch\thanks{\noexpand\scriptsize\noexpand\mailto{\tudscrmail}}} +\title{Ein Beitrag zum mathematischen Satz in \hologo{LaTeX}} +\makeatletter +\begingroup% + \def\and{, }% + \let\thanks\@gobble% + \let\footnote\@gobble% + \hypersetup{% + pdfauthor = {\@author},% + pdftitle = {\@title},% + pdfsubject = {Mathematiksatz in \hologo{LaTeXe}},% + pdfkeywords = {LaTeX, \TUDScript, Tutorial, Mathematiksatz},% + }% +\endgroup% +\markright{\@title} +\makeatother +\StartTutorial[% + Im mathematischen Satz sollten lediglich Formelzeichen für physikalische + Größen und Variablen sowie Funktions- und Operatorzeichen mit frei wählbarer + Bedeutung kursiv geschrieben werden. Dagegen werden Einheiten und ihre + Vorsätze, Zahlen, Funktions- und Operatorzeichen mit feststehender Bedeutung + sowie Chemische Elemente und Verbindungen aufrecht gesetzt. Weiterhin werden + Indizes, welche ein Formelzeichen näher beschreiben, ebenfalls aufrecht + gesetzt. Dieses Tutorial zeigt, wie mit einfachen Mitteln die Auszeichnung + von beschreibenden Indizes bei Formelzeichen typografisch korrekt erfolgen + kann. +] +Bevor das eigentliche Tutorial beginnt, werden sowohl eine Dokumentklasse als +auch die für jedes \hologo{pdfLaTeX}-Dokument meiner Meinung nach sinnvollen +Pakete geladen. +% +\begin{Preamble} +\documentclass[ngerman]{tudscrartcl}% andere Klassen sind möglich +\usepackage[T1]{fontenc} +\ifpdftex{\usepackage[ngerman=ngerman-x-latest]{hyphsubst}}{} +\usepackage{babel} +\usepackage{microtype} + +\end{Preamble} +% +Zusätzlich wird das Paket \Package{amsmath} geladen, welches unter anderem die +in diesem Tutorial verwendeten Mathematikumgebungen \Environment{equation}, +\Environment{gathered} und \Environment{aligned} zur Verfügung stellt. +% +\begin{Preamble} +\usepackage{amsmath} +\end{Preamble} +% +Zunächst wird ein kurzes Beispiel gegeben, welches für die nachfolgenden +Ausführungen als Grundlage dienen soll. +% +\CodePreamble{}% +\begin{Trunk*} +\begin{equation*} +\begin{gathered} +M_{EM} = \frac{M_{Rad}}{i_g \cdot i_A} - M_{VM} \\ +\textrm{für } +\begin{aligned} +0\leq M_{VM}\leq M_{VMmax} \\ +M_{EMmin}\leq M_{EM}\leq M_{EMmax} +\end{aligned} +\end{gathered} +\end{equation*} + +\end{Trunk*} +% +Ein guter Mathematiksatz ist in \hologo{LaTeX} durchaus Sisyphusarbeit. Wenn +mikrotypografisch alles richtig gemacht werden soll, gibt es einiges zu +beachten. Generell gilt, dass Variablen kursiv oder geneigt, Bezeichnungen und +Konstanten aufrecht gesetzt werden. Um beschreibende Indizes formal richtig zu +setzen, ist ohne weitere Maßnahmen die exzessive Nutzung der Befehle +\Macro{mathrm}[\PParameter{\dots}] und \Macro{mathit}[\PParameter{\dots}] +respektive \Macro{mathnormal}[\PParameter{\dots}] wohl oder übel notwendig. +Aus dem vorhergehenden Beispiel wird mit ziemlich viel Anpassungsarbeit: +% +\CodePreamble{}% +\begin{Trunk*} +\begin{equation*} +\begin{gathered} +M_\mathrm{EM} = \frac{M_\mathrm{Rad}}{i_g \cdot i_A} - M_\mathrm{VM} \\ +\textrm{für } +\begin{aligned} +0\leq M_\mathrm{VM}\leq M_\mathrm{VM_{max}} \\ +M_\mathrm{EM_{min}}\leq M_\mathrm{EM}\leq M_\mathrm{EM_{max}} +\end{aligned} +\end{gathered} +\end{equation*} + +\end{Trunk*} +% +Augenscheinlich ist dabei sehr viel Handarbeit notwendig. Allerdings lässt sich +dies relativ gut vereinfachen. Zu diesem Zwecke wird für das Setzen von Indizes +bei Formelzeichen der Befehl \Macro{ind}[\PParameter{\dots}] definiert. Danach +können~-- wenn dies für nötig und sinnvoll erachtet wird~-- noch zusätzliche +Befehle für häufig verwendete Ausdrücke definiert werden. Als Beispiel wird das +schon eben genutzte Drehmoment \ensuremath{M} verwendet. Hierfür wäre folgende +Definition möglich:% +\footnote{% + Dabei sorgt \Macro*{kern.03em} für das Einfügen eins kleinen Abstandes + zwischen kursiver Variable und dem aufrechten Index. Abhängig von der + verwendeten Schriftart sollte dieser Abstand leicht angepasst werden. +} +% +\CodeHook{\let\newcommand\renewcommand} +\begin{Trunk*} +\newcommand*{\ind}[1]{\ensuremath{\kern.03em_\mathrm{#1}}} +\newcommand*{\M}[1]{\ensuremath{M\ind{#1}}} + +\end{Trunk*} +\CodePreamble{} +\begin{Trunk*} +\begin{equation*} +\begin{gathered} +\M{EM} = \frac{\M{Rad}}{i_g \cdot i_A} - \M{VM} \\ +\textrm{für } +\begin{aligned} +0\leq \M{VM}\leq \M{VM_{max}} \\ +\M{EM_{min}}\leq \M{EM}\leq \M{EM_{max}} +\end{aligned} +\end{gathered} +\end{equation*} + +\end{Trunk*} +% +Ein gewünschter Nebeneffekt der vorhergehenden Definition ist, dass dieser +Befehl aufgrund der Verwendung von \Macro{ensuremath}[\PParameter{\dots}] nun +auch im Fließtext verwenden werden kann. Beispielsweise lässt sich im Textteil +das induzierten Moment einer Verbrennungskraftmaschine~\M{VM_{ind}} angeben +(\Macro{M}[\PParameter{VM\_\PParameter{ind}}]). + +Für noch mehr Bequemlichkeit bei der Nutzung kann eine Lösung gefunden werden, +mit welcher~-- im Gegensatz zur Standardbefehlsdefinition in \hologo{LaTeXe}~-- +\textbf{nach} dem obligatorischen noch ein optionales Argument für einen +zusätzlichen Subindex angegeben werden kann, um damit der natürlichen +Schreibweise zu entsprechen. Es wird der Befehl \Macro{M} so definiert, das +dieser entweder mit \Macro{M}[\Parameter{Index}] oder in der Variante +\Macro{M}[\Parameter{Index}\OParameter{Indexindex}] mit nachgelagertem +optionalen Argument genutzt werden kann. +% +\CodeHook{\let\newcommand\renewcommand} +\begin{Trunk*} +\makeatletter +\renewcommand*{\M}[1]{\@ifnextchar[{\o@M{#1}}{\n@M{#1}}} +\newcommand*{\n@M}{} +\newcommand*{\o@M}{} +\def\n@M#1{\ensuremath{M\ind{#1}}} +\def\o@M#1[#2]{\ensuremath{M\ind{#1_{#2}}}} +\makeatother + +\end{Trunk*} +% +Somit vereinfacht sich das zu Beginn vorgestellte Beispiel recht deutlich: +% +\begin{Trunk*} +\begin{equation*} +\begin{gathered} +\M{EM} = \frac{\M{Rad}}{i_g \cdot i_A} - \M{VM} \\ +\textrm{für } +\begin{aligned} +0\leq \M{VM}\leq \M{VM}[max] \\ +\M{EM}[min]\leq \M{EM}\leq \M{EM}[max] +\end{aligned} +\end{gathered} +\end{equation*} +\end{Trunk*} +% +Das Definieren von \Macro{M}[\Parameter{Index}\OParameter{Indexindex}] mit +angehängtem optionalen Argument ist ehrlich gesagt nur ein wenig Spielerei und +soll zeigen, wie dies prinzipiell mit \hologo{LaTeXe}"=Mitteln funktioniert. +Das Paket \Package{xparse} könnte alternativ zum hier vorgestellten Vorgehen +für die Befehlsdeklaration des optionalen \textbf{nach} dem obligatorischen +Argument genutzt werden. Damit würde die Befehlsdeklaration für \Macro{M} +folgendermaßen lauten: +\begin{Hint} +\NewDocumentCommand \M { m o } {% + \ensuremath{M\ind{#1\IfValueT{#2}{_{#2}}}}% +} +\end{Hint} +% +\FinishTutorial +\ListOfToDo +\end{document} diff --git a/macros/latex/contrib/tudscr/source/doc/tutorials/treatise.tex b/macros/latex/contrib/tudscr/source/doc/tutorials/treatise.tex new file mode 100644 index 0000000000..30b1399ce8 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/doc/tutorials/treatise.tex @@ -0,0 +1,3351 @@ +\RequirePackage{fix-cm} +\documentclass[% + english,ngerman,% + cdgeometry=no,DIV=12,automark% +]{tudscrartcl} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} + +\usepackage{tudscrtutorial} +\lstset{% + inputencoding=utf8,extendedchars=true, + literate=% + {ä}{{\"a}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {~}{{\textasciitilde}}1 {ß}{{\ss}}1 +} +\lstset{escapechar=§} + +\usepackage{lmodern} +\TUDoptions{cdfont=false} +\KOMAoptions{headings=normal} + +\usepackage{tudscrsupervisor} +\usepackage{array} +\usepackage{tabu} +\usepackage{tabularx} +\usepackage{tabulary} +\usepackage{booktabs} +\usepackage{siunitx} +\sisetup{% + locale = DE,% + input-decimal-markers={,},% + input-ignore={.},% + group-separator={\,},% + group-minimum-digits=3% +} +\usepackage{xfrac} +\AfterPackage*{hyperref}{% + \usepackage[% + automake,% + xindy={language=german-din},% + acronym,% + symbols,% + nomain,% + translate=babel,% + nogroupskip,% + nostyles,% + ]{glossaries} + \renewcommand*{\glsglossarymark}[1]{} + \newignoredglossary{abbreviation} + \newcommand*\newabbreviation[4][]{% + \newacronym[type=abbreviation,#1]{#2}{#3}{#4}% + }% + \makeglossaries +} +\usepackage{csquotes} +\usepackage[backend=biber,style=alphabetic]{biblatex} +\addbibresource{\jobname.bib} +\DefineBibliographyStrings{ngerman}{urlseen = {Am:}} + +\usepackage{enumitem} + +\usepackage{caption} +\DeclareCaptionSubType[alph]{figure} +\DeclareCaptionSubType[alph]{table} +\usepackage{floatrow} +\renewcommand{\floatpagefraction}{0.7} + +\usepackage{tikz} +\usetikzlibrary{chains} +\usetikzlibrary{decorations.markings} +\tikzset{on grid} + +\usepackage{pstricks,pst-node} + +\makeatletter +\newcommand*\pcolumnfuzz[1]{\pretocmd{\@endpbox}{\hfuzz=#1}{}{}} +\makeatother + +\usepackage{bookmark} + +\begin{filecontents}{\jobname.bib} +@book{talbot2012, + author = {Nicola L. C. Talbot}, + title = {{\LaTeX} for Complete Novices}, + publisher = {Dickimaw Books}, + series = {Dickimaw {\LaTeX} Series}, + volume = {1}, + isbn = {978-1-909440-00-5}, + address = {Norfolk, UK}, + year = {2012}, + url = {http://www.dickimaw-books.com/latex/novices/}, + urldate = {2014-12-01}, +} +@book{talbot2013, + author = {Nicola L. C. Talbot}, + title = {Using {\LaTeX} to Write a PhD Thesis}, + publisher = {Dickimaw Books}, + series = {Dickimaw {\LaTeX} Series}, + volume = {2}, + isbn = {978-1-909440-02-9}, + address = {Norfolk, UK}, + year = {2013}, + url = {http://www.dickimaw-books.com/latex/thesis/}, + urldate = {2014-12-01}, +} +@online{reichert2012, + author = {Reichert, Axel and Voß, Herbert}, + title = {\LaTeX~-- Satz von Tabellen}, + organization = {Freie Universität Berlin}, + date = {2012-01-12}, + url = {http://userpage.fu-berlin.de/latex/Materialien/tabsatz.pdf}, + urldate = {2014-12-01} +} +@article{neubauer1996, + author = {Marion Neubauer}, + title = {Feinheiten bei wissenschaftlichen Publikationen~-- + Mikrotypographie"=Regeln, Teil~I}, + journaltitle = {Die \TeX{}nische Komödie}, + year = {1997}, + month = {2}, + volume = {4/96}, + pages = {23-40}, + url = {http://www.dante.de/tex/Dokumente/dtk-neubauer.pdf}, + urldate = {2014-12-01}, +} +@article{neubauer1997, + author = {Marion Neubauer}, + title = {Feinheiten bei wissenschaftlichen Publikationen~-- + Mikrotypographie"=Regeln, Teil~II}, + journaltitle = {Die \TeX{}nische Komödie}, + year = {1997}, + month = {5}, + volume = {1/97}, + pages = {25--44}, + url = {http://www.dante.de/tex/Dokumente/dtk-neubauer.pdf}, + urldate = {2014-12-01}, +} +@online{struckmann2007, + author = {Struckmann, Werner}, + title = {Einige typographische Grundregeln und ihre Umsetzung in \LaTeX}, + date = {2007-09-03}, + url = {http://www2.informatik.hu-berlin.de/sv/lehre/typographie.pdf}, + urldate = {2014-12-01} +} +@online{bier2009, + author = {Bier, Christoph}, + title = {typokurz~-- Einige wichtige typografische Regeln}, + date = {2009-05-21}, + url = {http://zvisionwelt.wordpress.com/downloads/#typokurz}, + urldate = {2014-12-01} +} +\end{filecontents} + + +\begin{document} +\date{29.03.2017} +\author{Falk Hanisch\thanks{\noexpand\scriptsize\noexpand\mailto{\tudscrmail}}} +\title{% + Ein Anwenderleitfaden für das Erstellen einer wissenschaftlichen Abhandlung% +} +\makeatletter +\begingroup% + \def\and{, }% + \let\thanks\@gobble% + \let\footnote\@gobble% + \hypersetup{% + pdfauthor = {\@author},% + pdftitle = {\@title},% + pdfsubject = {Tutorial für \hologo{LaTeXe}},% + pdfkeywords = {LaTeX, \TUDScript, Tutorial, Anwenderleitfaden},% + }% +\endgroup% +\makeatother +\StartTutorial[% + Der Versuch, ein allumfassendes Tutorial für eine wissenschaftliche Arbeit + zur Verfügung zu stellen gleicht der beschwerlichen Suche nach einer + eierlegenden Wollmilchsau. Es ist quasi nicht möglich, alle potenziellen + Anforderungen an eine wissenschaftliche Arbeit in einem Dokument abzudecken, + insbesondere weil es für diese fast von jedem Lehrstuhl mehr oder weniger + unterschiedliche Vorgaben zu Formatierung und Layout gibt. Dennoch soll hier + versucht werden, einen Großteil der für gewöhnlich auftretenden Erfordernisse + zu bearbeiten. + + Dieses Tutorial hat \emph{nicht} die Intention, \hologo{LaTeX}"=Einsteigern + sämtliche Grundlagen zu erläutern. Vielmehr wird davon ausgegangen, dass Sie + bereits erste Erfahrungen mit \hologo{LaTeXe} gesammelt haben. Dennoch wird + versucht, alle Schritte möglichst leicht nachvollziehbar zu gestalten. Sollte + Ihnen beim Lesen und Durcharbeiten des Tutorials etwas auf- oder missfallen, + so dürfen Sie mich gerne per E"~Mail kontaktieren. Auch Anregungen und + Wünsche dürfen sie mir gegenüber gerne kommunizieren. + + Für absolute Neueinsteiger gibt es einige freie Tutorials, welche die ersten + Schritte mit \hologo{LaTeXe} stark erleichtern. Nicola~L.~C.~Talbot stellt + sehr gute Tutorials für + \hrfn{http://www.dickimaw-books.com/latex/novices/}{\hologo{LaTeX}-Novizen} + \cite{talbot2012} sowie + \hrfn{http://www.dickimaw-books.com/latex/thesis/}{Dissertationen} + \cite{talbot2013} zur freien Verfügung. + + In erster Linie ist dieser Leitfaden für Anwender gedacht, die für ihre + wissenschaftliche Arbeit eine \TUDScript"=Dokumentklasse verwenden wollen. + Das vorgestellte Vorgehen kann jedoch~-- natürlich mit gewissen Abstrichen~-- + auch mit anderen Klassen, insbesondere denen aus dem \KOMAScript"=Bundle, + umgesetzt werden. Viele der hier im Folgenden verwendeten Optionen und + Befehle aus dem \TUDScript-Bundle werden lediglich sporadisch in ihrer + Grundfunktion erläutert. Allerdings lassen sich detaillierte Erläuterung über + die türkisfarbigen Hyperlinks zum \tudhyperref{}{\TUDScript-Handbuch} + jederzeit sehr einfach öffnen. Des Weiteren wird auf eine Vielzahl von + Paketen verwiesen, deren Dokumentation über die magentafarbigen Links im + \CTAN* geöffnet werden kann. Alternativ kann dies auch über das Terminal + respektive die Kommandozeile mit dem Aufruf \Path{texdoc~\PName{Paket}} + direkt lokal erfolgen. Ein Großteil dieser Pakete wird zusätzlich kurz im + \TUDScript-Handbuch beschrieben. + + Der Anwenderleitfaden muss nicht zwingend vollständig nachvollzogen werden. + Dieser ist in einzelne Abschnitte untergliedert, damit Sie sich bestimmte + Aspekte erarbeiten können. Sollten Querbezüge zu den einzelnen Abschnitten + bestehen, werden diese auch genannt. Zu guter Letzt findet sich am Ende + dieses Dokumentes das komplette Tutorial als ausführbarer Quelltext. +] +\tableofcontents +\listoffigures +\listoftables + + + +\section{Einleitung} +\label{sec:introduction}% +% +Zu Beginn werden einige Pakete geladen, die quasi in jedem neu erstellten +Dokument verwendet werden sollten. Alle weiteren in diesem Tutorial genutzten +und/oder empfohlenen Pakete werden in den relevanten Abschnitten des Tutorials +genauer erläutert. + +Beim Laden der Klasse mit \Macro*{documentclass} können Sie globale Optionen +angeben. Diese werden sowohl an die Klasse selbst weitergereicht als auch allen +in der Präambel geladenen Pakete zur Verfügung gestellt. Falls das Paket +\Package{babel} für die Sprachauswahl im Dokument verwendet wird, sollten auf +alle Fälle die verwendeten Sprachen als Klassenoption angegeben werden, wobei +die zuletzt angegebene als aktuelle Sprache aktiviert wird. Dadurch werden +diese nicht nur an das Paket \Package{babel} sondern auch an andere Pakete +übergeben, welche sprachspezifische Einstellungen vornehmen. +% +\begin{Preamble} +\documentclass[english,ngerman]{tudscrreprt} +\usepackage{babel} +\end{Preamble} +% +Mit dem Paket \Package{fontenc} lässt sich die Kodierung der für die Ausgabe +der verwendeten Schriften im Dokument spezifizieren, wobei die europäische +Zeichenkodierung mit der Option~\Option{T1}(\Package{fontenc}) aktiviert wird. +Kommt mit \Engine{LuaLaTeX} oder \Engine{XeLaTeX} ein Unicode"=Textsatzsystem +zum Einsatz, sollte besser das Paket \Package{fontspec} geladen werden. + +Weiterhin kann die Eingabekodierung der kompilierten Datei eingestellt werden. +Diese ist standardmäßig \PValue{utf8}. Bei der Verwendung von \Engine{pdfLaTeX} +sind auch andere Kodierungen möglich.% +\footnote{% + Sollte die Datei in einer anderen Kodierung gespeichert sein, so kann das + Paket \Package{selinput} genutzt werden, um die Kodierung automatisch zu + erkennen. Alternativ lässt sich die Eingabekodierung auch mit dem Paket + \Package{inputenc} auch manuell festgelegen. In beiden Fällen sollte das + Paket \Package{fontenc} \emph{vorher} geladen worden sein. +} + +Wurde ein Sprachpaket für die deutsche Sprache geladen (\Package{babel} oder +\Package{polyglossia}), so werden für \Engine{LuaLaTeX} und \Engine{XeLaTeX} +erweiterte Trennmuster verwendet. Für \Engine{pdfLaTeX} lässt sich eine +wesentlich verbesserte Worttrennung für die deutsche Sprache mit dem Paket +\Package{hyphsubst} aktivieren. In \autoref{sec:hyphenation} können Sie weitere +Informationen zur Verwendung von \Package{hyphsubst} sowie zum Thema +\emph{Worttrennung} finden. +% +\begin{Preamble} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\end{Preamble} +% +Für die \KOMAScript-Klassen wird außerdem das Paket \Package{scrhack} +bereitgestellt. Dieses behebt einige Probleme bei der Kompatibilität mit +anderen Paketen bezüglich des Erstellens von Verzeichnissen. Deshalb sollte +dieses bei Bedarf frühzeitig in der Präambel geladen werden. +% +\begin{Preamble} +\usepackage{scrhack} +\end{Preamble} +% +Damit sind die allgemein notwendigen Pakete eingebunden. Es werden zwar weitere +benötigt, diese werden allerdings in den einzelnen Abschnitten dieses Tutorials +aufgeführt. + + + +\section{Makrotypografie} +\subsection{Satzspiegel} +Gleich zu Beginn und bevor das eigentliche Verfassen der Arbeit beginnt, sollte +sich der Verfasser Gedanken über das zu nutzenden Layout und den Satzspiegel +machen, um bei der Finalisierung des Dokumentes keine böse Überraschung bei +Seitenumbrüchen oder der Position von Gleitobjekten zu erleben. + +Zuerst gilt es zu entscheiden, ob das Dokument einseitig oder beidseitig +gesetzt werden soll. Ist Letzteres der Fall, so sollte die \KOMAScript-Option +\Option{twoside}(\Package{typearea}) als Klassenoption angegeben werden. Im +nächsten Schritt ist der zu verwendende Satzspiegel festzulegen. Hierfür kann +die \TUDScript-Option \Option{cdgeometry}'manual' verwendet werden, welche im +\TUDScript-Handbuch beschrieben ist. Normalerweise wird das Dokument im +asymmetrischen Layout des \CDs gesetzt. +% +Dieses Verhalten wird mit \Option*{cdgeometry=false}'manual' deaktiviert und +der Satzspiegel durch das Paket \Package{typearea} nach typografischen +Gesichtspunkten konstruiert. Dabei ist für dessen Aufteilung maßgeblich die +\KOMAScript-Option \Option{DIV}(\Package{typearea}) verantwortlich, mit der +\KOMAScript"=Option \Option{BCOR}(\Package{typearea}) wird die Bindekorrektur +angegeben. Diese wird in \autoref{sec:bcor} erläutert. + +\subsection{Änderung des Zeilenabstandes (Durchschuss)} +Auf eine Änderung des Zeilenabstandes sollte aus typografischer Sicht bei der +Verwendung einer Standardschrift im Normalfall verzichtet werden. Die Gründe +hierfür werden im Handbuch von \TUDScript bei der Vorstellung des Paketes +\Package{setspace} erklärt, welches für dieses Anliegen den Befehl +\Macro{setstretch}[\Parameter{Faktor}](\Package{setspace}) bereitstellt. Wird +die \OpenSans-Hausschrift der \TnUD verwendet, sollte der Faktor im Bereich +\PValue{1.05}--\PValue{1.1} liegen. + +\subsection{Bindekorrektur} +\label{sec:bcor}% +% +Falls die Arbeit nach der Fertigstellung gebunden werden soll, so ist auf den +notwendigen Binderand zu achten, quasi der Teil einer Seite, welcher durch die +Bindung \enquote{verschwindet} und nicht mehr als sichtbarer Teil der Seite +vorhanden ist. Als Faustregel gilt, dass die erforderliche Bindekorrektur in +etwa der halben Höhe des Buchblocks entsprechen sollte. Dessen Höhe wiederum +ist abhängig von der Anzahl der Seiten sowie der Papierdichte. + +Wird qualitativ höherwertiges Papier mit einer Dichte von \SI{100}{g/m^2} +verwendet, so entsprechen 100~Blatt einer Buchblockhöhe von zirka~\SI{12}{mm}. +Dementsprechend wäre in diesem Beispiel eine Bindekorrektur von~\SI{6}{mm} +notwendig, die sich mit der Klassenoption \Option*{BCOR=6mm} einstellen ließe. +Sollte die erwartete Seitenzahl davon abweichen, kann die einzustellende +Bindekorrektur linear skaliert werden. Für differierende Papierdichten sollte +die Buchblockhöhe für die geschätzte Gesamtseitenanzahl in Erfahrung gebracht +werden. + + + +\section{Umschlagseite und Titel} +Die Umschlagseite und der Titel sind sich in ihrer Gestalt sehr ähnlich. +Allerdings gibt es ein paar kleine Unterschiede. Einerseits werden auf dem +Cover weniger Informationen als auf der Titelseite ausgegeben. Andererseits +wird der Titel immer im Satzspiegel des restlichen Dokumentes ausgegeben, +wohingegen die Umschlagseite~-- ohne weitere Optionen~-- im asymmetrischen +Layout des \CDs der \TnUD erscheint. Wie dieses Verhalten geändert werden kann, +ist im Handbuch für \Macro{makecover}'manual' erläutert. Die resultierende +Ausgabe des nachfolgenden Quelltextauszugs ist in \autoref{fig:title} zu sehen +und stellt eine mögliche Ausprägung von Umschlagseite und Titel dar. +% +\begin{figure} +\IncludeStandalone{title}[1,2] +\caption{Umschlagseite und Titel} +\label{fig:title} +\end{figure} + +\begin{Trunk!}{title} +\faculty{Juristische Fakultät} +\department{Fachrichtung Strafrecht} +\institute{Institut für Kriminologie} +\chair{Lehrstuhl für Kriminalprognose} +\title{% + Entwicklung eines optimalen Verfahrens zur Eroberung des + Geldspeichers in Entenhausen +} +\thesis{master} +\graduation[M.Sc.]{Master of Science} +\author{% + Mickey Mouse% + \matriculationnumber{12345678}% + \dateofbirth{2.1.1990}% + \placeofbirth{Dresden}% + \course{Klinische Prognostik}% + \discipline{Individualprognose}% +\and% + Donald Duck% + \matriculationnumber{87654321}% + \dateofbirth{1.2.1990}% + \placeofbirth{Berlin}% + \course{Statistische Prognostik}% + \discipline{Makrosoziologische Prognosen}% +} +\matriculationyear{2010} +\supervisor{Dagobert Duck \and Mac Moneysac} +\professor{Prof. Dr. Kater Karlo} +\date{10.09.2014} +\makecover +\maketitle + +\end{Trunk!} + + + +\section{Vor- und Nachspann} +In den folgenden Unterabschnitten werden Elemente vorgestellt, welche häufig +als Bestandteil einer wissenschaftlichen (Abschluss"~)Arbeit gefordert werden. +Die Platzierung oder Position der vorgestellten Elemente innerhalb der Arbeit +ist nicht eindeutig durch eine Norm oder dergleichen festgelegt. Vielmehr gibt +es meist eine Richtlinie vom verantwortlichen Prüfungsamt oder eine konkrete +Vorgabe des betreuenden wissenschaftlichen Mitarbeiters oder Hochschullehrers. + +Verwenden Sie für ihre Arbeit eine Buchklasse, so können die entsprechenden +Abschnitte mit \Macro{frontmatter}(\Package{koma-script}) (Vorspann), +\Macro{mainmatter}(\Package{koma-script}) (Hauptteil) und +\Macro{backmatter}(\Package{koma-script}) (Nachspann) gekennzeichnet werden. +Einen Anhang starten Sie mit \Macro{appendix}(\Package{koma-script}), womit +unter anderem die Kapitelnummerierung auf Großbuchstaben umgeschaltet wird. +Weitere Hinweise zu den genannten Befehlen sind im \scrguide nachzulesen. + + +\subsection{Aufgabenstellung} +\label{sec:task}% +% +Das Erstellen der Aufgabenstellung einer Abschlussarbeit im \CD der \TnUD muss +das Paket \Package{tudscrsupervisor}'manual' geladen werden. +% +\begin{Preamble} +\usepackage{tudscrsupervisor} + +\end{Preamble} +% +Dieses Paket stellt die Umgebung \Environment{task}'manual' sowie den Befehl +\Macro{taskform}'manual' bereit. Bei beiden Varianten wird zu Beginn eine +Tabelle mit Autoreninformationen erzeugt. Am Ende werden der oder die Betreuer +der Arbeit sowie Professor und gegebenenfalls der Prüfungsausschussvorsitzende +ausgegeben. Mit der Umgebung \Environment{task}'manual' kann zwischen Kopf und +Fuß ein beliebiger Inhalt gesetzt werden. Der Befehl \Macro{taskform}'manual' +hingegen erzeugt eine standardisierte Ausgabe, wobei der Inhalt des zweiten +obligatorischen Arguments in einer +\Environment{itemize}(\Package{koma-script},\Package{enumitem})-Umgebung +verwendet wird und somit \Macro{item}(\Package{koma-script},\Package{enumitem}) +zu nutzen ist. Das Resultat des folgenden Quelltextes ist in \autoref{fig:task} +zu sehen. +% +\begin{figure} +\IncludeStandalone{task}[1,2] +\caption{Aufgabenstellung in freier und standardisierter Form} +\label{fig:task} +\end{figure} + +\begin{Hint!}{task} +\faculty{Juristische Fakultät} +\department{Fachrichtung Strafrecht} +\institute{Institut für Kriminologie} +\chair{Lehrstuhl für Kriminalprognose} +\title{% + Entwicklung eines optimalen Verfahrens zur Eroberung des + Geldspeichers in Entenhausen +} +\thesis{master} +\author{% + Mickey Mouse% + \matriculationnumber{12345678}% + \course{Klinische Prognostik}% + \discipline{Individualprognose}% +\and% + Donald Duck% + \matriculationnumber{87654321}% + \course{Statistische Prognostik}% + \discipline{Makrosoziologische Prognosen}% +} +\matriculationyear{2010} +\issuedate{1.2.2015} +\duedate{1.8.2015} +\supervisor{Dagobert Duck \and Mac Moneysac} +\chairman{Prof. Dr. Primus von Quack} +\professor{Prof. Dr. Kater Karlo} + +\newcommand{\taskcontent}{% + Momentan ist das besagte Thema in aller Munde. Insbesondere wird es + gerade in vielen~-- wenn nicht sogar in allen~-- Medien diskutiert. + Es ist momentan noch nicht abzusehen, ob und wann sich diese Situation + ändert. Eine kurzfristige Verlagerung aus dem Fokus der Öffentlichkeit + wird nicht erwartet. + + Als Ziel dieser Arbeit soll identifiziert werden, warum das Thema + gerade so omnipräsent ist und wie dieser Effekt abgeschwächt werden + könnte. Zusätzlich sind Methoden zu entwickeln, mit denen sich ein + ähnlicher Vorgang zukünftig vermeiden lässt. +} + +\begin{task} +\smallskip +\par\noindent +\taskcontent +\end{task} + +\taskform[pagestyle=empty]{\taskcontent}{% + \item Recherche + \item Analyse + \item Entwicklung eines Konzeptes + \item Anwendung der entwickelten Methodik + \item Dokumentation und grafische Aufbereitung der Ergebnisse +} + +\end{Hint!} +\begin{Trunk+} +\newcommand{\taskcontent}{% + Momentan ist das besagte Thema in aller Munde. Insbesondere wird es + gerade in vielen~-- wenn nicht sogar in allen~-- Medien diskutiert. + Es ist momentan noch nicht abzusehen, ob und wann sich diese Situation + ändert. Eine kurzfristige Verlagerung aus dem Fokus der Öffentlichkeit + wird nicht erwartet. + + Als Ziel dieser Arbeit soll identifiziert werden, warum das Thema + gerade so omnipräsent ist und wie dieser Effekt abgeschwächt werden + könnte. Zusätzlich sind Methoden zu entwickeln, mit denen sich ein + ähnlicher Vorgang zukünftig vermeiden lässt. +} +\taskform[pagestyle=empty]{\taskcontent}{% + \item Recherche + \item Analyse + \item Entwicklung eines Konzeptes + \item Anwendung der entwickelten Methodik + \item Dokumentation und grafische Aufbereitung der Ergebnisse +} + +\end{Trunk+} + + +\subsection{Zusammenfassung} +Häufig wird zu Beginn einer wissenschaftliche Arbeit die Motivation und der +Inhalt dieser zusammengefasst, um den Leser die Thematik der Abhandlung +vorzustellen. in den meisten Fällen wird diese dabei in deutscher und +englischer Sprache verfasst. Hierfür stellt \KOMAScript{} bereits die Umgebung +\Environment{abstract}'manual' bereit. Vielfach wird der Wunsch geäußert, +sowohl die deutsche als auch die englische Zusammenfassung auf derselben Seite +zu setzen. Diese Variante kann mithilfe der \TUDScript-Klassen sehr einfach +umgesetzt werden, wie der nachfolgende Quelltextauszug zeigt. Die resultierende +Ausgabe ist in \autoref{fig:abstr} zu sehen. +% +\begin{figure} +\centering +\IncludeStandalone[width=.5\textwidth]{abstract} +\caption{Zusammenfassung in deutscher und englischer Sprache} +\label{fig:abstr} +\end{figure} + +\begin{Trunk!}{abstract} +\TUDoption{abstract}{multiple,section} +\begin{abstract} + Dies ist der deutschsprachige Teil der Zusammenfassung, in dem die + Motivation sowie der Inhalt der nachfolgenden wissenschaftlichen + Abhandlung kurz dargestellt werden. +\nextabstract[english] + This is the english part of the summary, in which the motivation and + the content of the following academic treatise are briefly presented. +\end{abstract} + +\end{Trunk!} + + + +\subsection{Selbstständigkeitserklärung und Sperrvermerk} +Für die meisten Abschlussarbeiten an der \TnUD wird vom Verfasser eine +Selbstständigkeitserklärung verlangt. Für diese wird ein Standardtext +bereitgestellt. Dieser kann mit dem Befehl \Macro{confirmation}'manual' +ausgegeben werden. Wurde das Thema in Kooperation mit einem Unternehmen +bearbeitet, so wird zumeist auch ein Sperrvermerk gefordert, welcher mit +\Macro{blocking}'manual' erzeugt werden kann. Mit \Macro{declaration}'manual' +lassen sich beide Erklärungen direkt nacheinander erzeugen. Die verwendete +Überschrift und ein möglicher Eintrag in das Inhaltsverzeichnis können über die +Option \Option{declaration}'manual' reguliert werden. Eine mögliche Ausprägung +der Erklärungen ist in \autoref{fig:decl} abgebildet. +% +\begin{figure} +\centering +\IncludeStandalone[width=.5\textwidth]{declaration} +\caption{Selbstständigkeitserklärung und Sperrvermerk} +\label{fig:decl} +\end{figure} + +\begin{Hint!}{declaration} +\title{% + Entwicklung eines optimalen Verfahrens zur Eroberung des + Geldspeichers in Entenhausen +} +\author{Mickey Mouse\and Donald Duck} +\declaration[company=FIRMA] +\end{Hint!} +\begin{Trunk+} +\declaration[company=FIRMA] + +\end{Trunk+} + +\subsection{Inhalts-, Abbildungs-, und Tabellenverzeichnis} +Das Inhaltsverzeichnis wird mit \Macro{tableofcontents}(\Package{koma-script}) +erzeugt und führt die Gliederung des erstellten Dokumentes entsprechend der +verwendeten Befehle% +\footnote{% + \Macro{part}(\Package{koma-script}), + \Macro{addpart}(\Package{koma-script}), + \Macro{chapter}(\Package{koma-script}), + \Macro{addchap}(\Package{koma-script}), + \Macro{section}(\Package{koma-script}), + \Macro{addsec}(\Package{koma-script}) etc.% +} +auf. Wurde das Paket \Package{hyperref} geladen, so werden im +Inhaltsverzeichnis PDF"~Hyperlinks auf die einzelnen Abschnitte erzeugt. + +Sowohl Abbildungen als auch Tabellen werden in \hologo{LaTeX} normalerweise +mit speziellen Umgebungen~-- \Environment{figure} und \Environment{table}~-- +eingebunden. Innerhalb dieser sogenannten Gleitumgebungen kann der Befehl +\Macro{caption}[% + \OParameter{Verzeichniseintrag}\Parameter{Bezeichnung}% +](\Package{koma-script},\Package{caption}) genutzt werden, um diesen eine +Bezeichnung hinzuzufügen. Mit \Macro{listoffigures}(\Package{koma-script}) +beziehungsweise \Macro{listoftables}(\Package{koma-script}) lassen sich +Verzeichnisse erstellen, in denen alle Gleitobjekte des jeweiligen Typs +ausgegeben werden, falls diese denn eine Bezeichnung hinzugefügt wurde. + +Sollen Abbildungen oder Tabellen außerhalb ihrer angestammten Gleitumgebung +\Environment{figure} beziehungsweise \Environment{table} genutzt und benannt +werden, kann dies entweder mit dem Befehl +\Macro{captionof}[% + \Parameter{Typ}\OParameter{Verzeichniseintrag}\Parameter{Bezeichnung}% +](\Package{koma-script}) oder~-- falls die beiden Pakete \Package{caption} und +\Package{hyperref} genutzt werden~-- auch wie gewohnt mit +\Macro{caption}(\Package{koma-script},\Package{caption}) allerdings zusätzlich +ergänzt mit einem zuvor aufgerufenem +\Macro{captionsetup}[\PParameter{type=figure/table}](\Package{caption}) +erfolgen. Weitere Informationen diesbezüglich sind dem \scrguide respektive der +Anleitung zu \Package{caption} zu entnehmen. In \autoref{sec:floats} wird +genauer auf Gleitumgebungen eingegangen. +% +\begin{Trunk} +\tableofcontents +\listoffigures +\listoftables + +\end{Trunk} +\begin{Trunk+} +\printacronyms[style=acrotabu] +\printsymbols[style=symblongtabu] + +\setchapterpreamble{% + \renewcommand*{\dictumwidth}{.4\textwidth}% + \dictum[Johann Wolfgang von Goethe]{% + Es irrt der Mensch, solang er strebt.% + }% + \bigskip +} +\chapter{Einleitung} +Nachdem nun der Vorspann und~-- bis auf das Literaturverzeichnis am +Ende des Dokumentes auf Seite~\pageref{sec:bibliography}~-- alle +Verzeichnisse erfolgreich ausgegeben wurden, wird nun die Verwendung +der weiteren Umgebungen und Befehle demonstriert, welche im Tutorial +\texturn{treatise.pdf} vorgestellt wurden. + +\end{Trunk+} + + +\subsection{Abkürzungs- und Symbolverzeichnis} +\label{sec:glossaries}% +% +Für die Auszeichnung von Abkürzungen gibt es zwei sehr gute Pakete, die dieses +Unterfangen stark vereinfachen. Die einfachere~-- jedoch nicht so mächtige~-- +der beiden Varianten ist die Nutzung des Paketes \Package{acro}. Sollen nur +Abkürzungen und gegebenenfalls eine sortierte Liste dieser gesetzt werden, ist +dieses allerdings absolut ausreichend. Für ein Symbolverzeichnis lässt sich in +dieser Variante das Paket \Package{nomencl} nutzen. Dieses bietet meiner +Meinung nach jedoch keine großen Vorteile, stattdessen kann auch einfach eine +Tabelle händisch erzeugt werden. Das Paket \Package{acro} ist sehr gut und +ausführlich dokumentiert. Deshalb wird hier auf eine exemplarische Erläuterung +verzichtet und stattdessen auf dessen Dokumentationen verwiesen. Alternativ +kann auch das Paket \Package{acronym} verwendet werden, wobei die alphabetische +Sortierung der Abkürzungen durch den Anwender erfolgen muss, weshalb ich von +diesem eher abrate. + +Die andere Möglichkeit ist die Nutzung des Paketes \Package{glossaries}, das +eine große Zahl an Einstellmöglichkeiten und Optionen besitzt, allerdings auch +etwas Zeit für die Einarbeitung und Studium der Dokumentation benötigt. Der +ursprüngliche Einsatzzweck dieses Paketes ist das Setzen eines fachsprachlichen +oder technischen Glossars. Es bietet zusätzlich die Mittel zum Erzeugen eines +Abkürzungs- sowie Symbolverzeichnis. Es soll folgend hier kurz erläutert +werden, wie das Paket zu verwenden ist. Für weiterführende Beispiele sollte +die Dokumentationen zu Rate gezogen werden, welche dahingehend keine Wünsche +offen lässt. + +Das Paket \Package{glossaries} sollte immer \emph{nach} \Package{hyperref} +geladen werden. Entweder Sie achten explizit darauf oder Sie verwenden den +Befehl \Macro{AfterPackage*}(\Package{scrbase}) aus dem \KOMAScript-Bundle. Mit +diesem können Sie die Quelltext nach dem Laden eines Paketes ausführen. +\Attention{% + Es ist allerdings darauf zu achten, dass der Quelltext nur ausgeführt wird, + wenn das avisierte Zielpaket auch tatsächlich geladen wird. +} +Falls Sie demnach auf \Package{hyperref} jedoch nicht auf \Package{glossaries} +verzichten möchten, sollte der nachfolgende Quelltext am Ende der Präambel +eingefügt werden. + +Die für \Package{glossaries} verwendeten Optionen werden kurz erläutert. +% +\begin{Preamble+} +\AfterPackage*{hyperref}{% +\end{Preamble+} +\begin{Preamble} +\usepackage[% +\end{Preamble} +% +Die zwei Paketoptionen \Option{acronym}(\Package{glossaries}) sowie +\Option{symbols}(\Package{glossaries}) erzeugen die beiden Verzeichnisse für +Abkürzungen und Symbole. Die Option \Option{nomain}(\Package{glossaries}) wird +immer dann verwendet, wenn im Dokument kein zusätzliches allgemeines oder +technisches Glossar erzeugt werden soll. +% +\begin{Preamble} + acronym,% Abkürzungen + symbols,% Formelzeichen + nomain,% kein Glossar +\end{Preamble} +% +Durch \Option{nogroupskip}(\Package{glossaries}) wird der automatische Abstand +zwischen den Einträgen zur Gruppierung innerhalb eines Glossars entfernt, die +Option \Option{toc}(\Package{glossaries}) fügt alle erzeugten Verzeichnisse +dem Inhaltsverzeichnis hinzu, \Option{section}(\Package{glossaries}) bestimmt +die Gliederungsebene der Überschrift. +% +\begin{Preamble} + nogroupskip,% + toc,% + section=chapter,% +\end{Preamble} +% +Mit der Option \Option{nostyles}(\Package{glossaries}) kann man gegebenenfalls +das Laden der von \Package{glossaries} vordefinierten Stilen verhindern. Dies +ist insbesondere sinnvoll, wenn für die einzelnen Glossare und Verzeichnisse +ohnehin eigene Stile erstellt werden, wie dies nachfolgend geschieht. +% +\begin{Preamble} + nostyles,% +\end{Preamble} +% +Mit der Option \Option{translate}(\Package{glossaries}) werden die Überschriften +aller Glossare in der Dokumentsprache gesetzt, wobei \Option*{translate=babel} +die Nutzung des Paketes \Package{babel} erzwingt. +% +\begin{Preamble} + translate=babel,% +\end{Preamble} +% +Das Paket \Package{glossaries} erstellt bei der Kompilierung des Dokumentes +Hilfsdateien, anhand derer die Indexe erzeugt und sortiert werden können. Da +\Engine{pdfLaTeX} diese Funktionalität nicht bereitstellt, ist hierfür der +Aufruf einer passenden Anwendung notwendig. Die meisten Distributionen stellen +dafür \Application{makeindex} bereit. Dieses Programm kann prinzipiell zwar +Einträge alphabetisch sortieren, bietet allerdings weder die Nutzung von +Unicode-Symbolen noch eine Sprachunterstützung. Aufgrund der genannten +Nachteile ist \Application{xindy} zum Sortieren der Einträge zu empfehlen, da +dieses Programm sowohl eine Unterstützung von Unicode als auch die Möglichkeit, +nach sprachabhängigen Regeln zu sortieren, bietet. Allein für die deutsche +Sprache gibt es beispielsweise zwei Varianten der Sortierung~-- nach DIN und +nach Duden. + +Ohne weiteres Zutun des Anwenders wird vom Paket \Package{glossaries} in der +Grundeinstellung \Application{makeindex} genutzt. Soll stattdessen für die +Sortierung der Glossar- und Verzeichniseinträge \Application{xindy} zum Einsatz +kommen, muss die Option \Option{xindy}(\Package{glossaries}) aktiviert werden. +Dieser kann zusätzlich sowohl die zu nutzende Spracheinstellung zur Sortierung +als auch die gewünschte Eingabekodierung an \Application{xindy} übergeben +werden. Beispielsweise wird mit \Option*{xindy=\PParameter{language=german-din}} +die deutsche Sortierung nach~DIN aktiviert. +% +% +\begin{Hint} +% mit Tex Live einfach verwendbar + xindy=§\{§language=german-din§\}§, +\end{Hint} +\begin{Preamble+} +% mit Tex Live einfach verwendbar + xindy={language=german-din}, +\end{Preamble+} +% +Das Erstellen aller Glossare~-- unabhängig davon, ob \Application{xindy} oder +\Application{makeindex} für die Sortierung zum Einsatz kommt~-- sollte das +Perl"~Skript \File{makeglossaries}(\Package{glossaries}) verwendet werden, +welches alle notwendigen Optionen an die jeweilige Anwendung weiterleitet. + +\Attention{% + Für den Aufruf von \Application{xindy} selbst als auch für die Ausführung des + Skriptes \File{makeglossaries}(\Package{glossaries}) ist ein Perl"=Interpreter + notwendig. Dieser wird lediglich von \Distribution{\hologo{TeX}~Live} nicht + jedoch von \Distribution{\hologo{MiKTeX}} direkt bereitgestellt. Wird die + letztgenannte Distribution verwendet, muss der Anwender gegebenenfalls diesen + zusätzlich installieren. +} + +Kann das Skript \File{makeglossaries}(\Package{glossaries}) nicht genutzt +werden, kann alternativ dazu die Option \Option{automake}(\Package{glossaries}) +aktiviert werden. Diese sorgt dafür, dass am Ende des \Engine{pdfLaTeX}"~Laufs +der Aufruf von \Application{xindy} oder \Application{makeindex} direkt erfolgt. +Soll \Application{xindy} verwendet werden, sind dafür allerdings erweiterte +Schreibrechte notwendig, weshalb für diese Variante \Engine{pdfLaTeX} mit der +Option \Option{-{}-shell-escape}(\Engine{pdfLaTeX}) respektive +\Option{-{}-enable-write18}(\Engine{pdfLaTeX}) aufgerufen werden muss. Für +\Application{xindy} ist außerdem die Angabe der Sprache über die Option +\Option*{xindy=\PParameter{language=\dots}} zwingend notwendig. + +Ist weder die Nutzung des Skriptes \File{makeglossaries}(\Package{glossaries}) +noch der~-- im Zweifel sicherheitskritische~-- Aufruf von \Engine{pdfLaTeX} mit +erweiterten Schreibrechten möglich, so muss die gewünschte Anwendung für die +Sortierung explizit durch den Anwender aufgerufen werden, wobei auf die Angabe +der richtigen Parameter zu achten ist. Genaueres hierzu sowie Lösungen für +Probleme beim Erstellen der Glossare und Verzeichnisse sind in der Dokumentation +von \Package{glossaries} zu finden. +% +\begin{Hint} + automake,% +\end{Hint} +% +Damit sind alle verwendeten Optionen erläutert. Schließlich sorgt der Befehl +\Macro{makeglossaries}(\Package{glossaries}) für das Erstellen der +optionsabhängigen Stildateien für \Application{makeindex} respektive +\Application{xindy} sowie das Erzeugen der benötigten Hilfsdateien. +% +\begin{Preamble} +]{glossaries} +\makeglossaries +\end{Preamble} +\begin{Preamble+} +}% Ende von AfterPackage + +\AfterPackage*{glossaries}{% +\end{Preamble+} +% +Damit wäre der erste Teil zur Initialisierung überstanden und wir können zum +eigentlichen Problem kommen. Wie wird nun ein Abkürzungs- und/oder +Symbolverzeichnis erstellt? + +\subsubsection{Abkürzungsverzeichnis} +Das Paket \Package{glossaries} stellt für die Definition von Abkürzungen einen +speziellen Befehl bereit. Mit \Macro{newacronym}[% + \LParameter\Parameter{Label}\Parameter{Abkürzung}\Parameter{Wortgruppe}% +](\Package{glossaries}) wird eine Abkürzung definiert und kann später über +\Parameter{Label} genutzt werden. Die möglichen optionalen Parameter können in +der Dokumentation zu \Package{glossaries} nachgeschlagen werden. Für ein +kleines Beispiel werden drei Abkürzungen erstellt\dots +% +\begin{Trunk+} +\section{Die Verwendung von Akronymen und Symbolen} +\end{Trunk+} +\begin{Trunk*} +\newacronym{apsp}{APSP}{All-Pairs Shortest Path} +\newacronym{spsp}{SPSP}{Single-Pair Shortest Path} +\newacronym{sssp}{SSSP}{Single-Source Shortest Path} + +\end{Trunk*} +% +\dots und diese in einer kurzen Textpassage mit dem \Package{glossaries}"=Befehl +\Macro{gls}[\Parameter{Label}](\Package{glossaries}) verwendet. +% +\begin{Trunk*} +In der Graphentheorie wird häufig die Lösung des Problems des kürzesten +Pfades zwischen zwei Knoten gesucht. Dieses Problem wird häufig auch +mit \gls{spsp} bezeichnet. Es lässt sich auf die Variationen \gls{sssp} +und \gls{apsp} erweitern. Für die Lösung von \gls{spsp}, \gls{sssp} +oder \gls{apsp} kommen unterschiedliche Algorithmen zum Einsatz. + +\end{Trunk*} +% +Gut zu sehen ist, dass sich die Ausgabe der Abkürzung bei der ersten Verwendung +mit \Macro{gls}(\Package{glossaries}) von der zweiten~-- und jeder weiteren~-- +unterscheidet. Das Verhalten lässt sich über verschiedene Stile mit +\Macro{setacronymstyle}(\Package{glossaries}) anpassen. Die Ausgabe einer Liste +aller Abkürzungen erfolgt mit: +% +\begin{Hint} +\printacronyms +\end{Hint} +\newglossarystyle{simple}{% + \renewenvironment{theglossary}{}{\par}% + \renewcommand*{\glossentry}[2]{% + \noindent% + \textsbn{\glsentryitem{##1}\glstarget{##1}\glossentryname{##1}}\quad + \glossentrydesc{##1}\glspostdescription\space ##2% + \par% + }% +} +\begin{quoting}[rightmargin=0pt] +\glsdisablehyper +\printacronyms[style=simple] +\end{quoting} +% +Dabei werden die Akronyme in einer \Environment*{description}"=Umgebung gesetzt, +was absolut ausreichend ist. Mir persönlich ist allerdings die Darstellung in +einer quasi"~tabellarischen Form lieber. Dabei soll der Stil mit fettgedruckten +Abkürzungen beibehalten werden. Das \Package{glossaries}"=Paket stellt zwar +auch eine Vielzahl an Stilen in Tabellenform bereit, allerdings nicht in dem +gewünschten. Deshalb wird nachfolgend gezeigt, wie sich ein eigener Stil in +Tabellenform kreieren lässt. + +Es bieten sich die Umgebungen \Environment{tabularx}(\Package{tabularx}) oder +\Environment{tabu}(\Package{tabu}) an, bei denen die Spaltenbreite teilweise +automatisch berechnet wird, um sich manuelle Formatierungsarbeiten zu sparen. +Folgend werden beide Varianten vorgestellt. Falls Sie noch keine Erfahrungen +mit dem Tabellensatz in \hologo{LaTeXe} haben, lohnt sich vorher ein Blick in +\autoref{sec:tables}, um die verwendeten Befehle und Umgebungen zu verstehen. +Wie Sie Stile definieren, die Seitenumbrüche in einer Tabelle zulassen, können +Sie in diesem \autorefname[sec:glossaries] bei der Symbolverzeichniserstellung +erfahren. + +\minisec{Eigener Stil mit \Environment*{tabularx}} +Ein eigener Glossarstil kann mit \Macro{newglossarystyle}(\Package{glossaries}) +definiert werden, wobei für den neu definierten Stil die Umgebung +\Environment{theglossary}(\Package{glossaries}) umdefiniert wird. Als erstes +kommt die Tabellenumgebung \Environment{tabularx}(\Package{tabularx}) aus dem +gleichnamigen Paket, welches in \autoref{sec:tabularx} vorgestellt wird, zum +Einsatz. + +Es werden in der Tabelle drei Spalten definiert. Die erste und letzte Spalte +sind schlicht linksbündige Standardspalten~(\PValue{l}). In diesen werden die +Abkürzungen selbst sowie die Seitenzahlen eingetragen. Die Verwendung +von~\PValue{@\PParameter{}} führt dazu, dass der normalerweise vor der ersten +und nach der letzten Spalte eingefügte Abstand von \Length{tabcolsep} entfällt. +Die Breite der Spalte vom Typ~\PValue{X} wird automatisch berechnet. + +Aufgrund der Implementierung von \Environment{tabularx}(\Package{tabularx}) +lässt sich diese nicht als verschachtelte Umgebung verwenden. Allerdings kann +stattdessen die mit \Macro*{tabularx} sowie \Macro*{endtabularx} die +Low"~Level"~Variante genutzt werden. Die Definition des neuen Stils +\PValue{acrotabularx} wird nachfolgend ausgegeben, die weitergehende +Erläuterung schließt sich daran an. +% +\CodeHook{\let\newglossarystyle\renewglossarystyle} +\begin{Hint*} +\newglossarystyle{acrotabularx}{% + \renewenvironment{theglossary}{% + \tabularx{\linewidth}{@{}lXl@{}}% + }{% + \endtabularx\par\bigskip% + }% + \renewcommand*{\glossaryheader}{}% + \renewcommand*{\glsgroupheading}[1]{}% + \renewcommand*{\glsgroupskip}{}% + \renewcommand*{\glossentry}[2]{% + \glsentryitem{##1}% Entry number if required + \glstarget{##1}{\sffamily\bfseries\glossentryname{##1}} & + \glsentrydesc{##1} & + ##2\tabularnewline + } +} + +\end{Hint*} +% +Der Rest des Stils ist schnell erläutert. Zunächst wird auf Tabellenköpfe +(\Macro{glossaryheader}(\Package{glossaries})) sowie Überschriften und Abstände +bei Gruppierungen (\Macro{glsgroupheading}(\Package{glossaries}) sowie +\Macro{glsgroupskip}(\Package{glossaries})) verzichtet. Der Befehl +\Macro{glossentry}(\Package{glossaries}) ist verantwortlich für die +Formatierung der Einträge im Abkürzungsverzeichnis. Dieser wird intern durch +\Package{glossaries} mit zwei obligatorischen Argumenten aufgerufen. Das erste +enthält das entsprechende Label, das zweite ein kommaseparierte Liste der +Seitenzahlen. Dabei stehen verschiedene Makros zur Auswahl, um anhand des +gegebenen Labels die gewünschten Informationen zu extrahieren.% +\footnote{% + bspw. mit \Macro{glossentryname}(\Package{glossaries}) die Bezeichnung oder + mit \Macro{glsentrydesc}(\Package{glossaries}) die dazugehörige Beschreibung% +} + +Der Befehl \Macro{glossentry}(\Package{glossaries}) wurde so definiert, dass +für jeden Eintrag eine separate Zeile in der Tabelle erzeugt wird, wo in der +ersten Spalte die Abkürzung selbst, in der zweiten die Langform und in der +dritten Spalte schließlich die Liste der Seiten, auf welchen die jeweilige +Abkürzung mit \Macro{gls}[\Parameter{Label}](\Package{glossaries}) verwendet +wurde, ausgegeben wird. Zum Abschluss die resultierende Ausgabe des +Abkürzungsverzeichnisses im neuen Stil. +% +\begin{Hint} +\printacronyms[style=acrotabularx] +\end{Hint} +\begin{quoting}[rightmargin=0pt] +\InputCode +\end{quoting} +% +Sollte der Platz für die Erläuterungen wie in diesem Beispiel in der mittleren +Spalte mehr als ausreichend sein und kein Zeilenumbruch benötigt werden, kann +auch einfach eine \Environment{tabular}"=Umgebung mit einer \PValue{l}"~Spalte +anstelle von \PValue{X} verwendet werden. + +\minisec{Eigener Stil mit \Environment*{tabu}} +Die sehr komfortabel zu nutzende Umgebung \Environment{tabu}(\Package{tabu}) +wird durch das Paket \Package{tabu} bereitgestellt. Es wird später in +\autoref{sec:tabu} vorgestellt, wobei die dortigen Anmerkungen \emph{unbedingt} +zu beachten sind. Für die bereits verwendeten +\Environment{tabularx}(\Package{tabularx})"=Tabellen muss generell eine feste +Tabellenbreite angegeben werden. Die Breite der \PValue{X}"~Spalten wird anhand +der angegebenen Gesamtbreite und dem für andere Spalten vom +Typ~\PValue{l},~\PValue{r}~und~\PValue{c} benötigten Platz berechnet. + +Wie \Environment{tabularx}(\Package{tabularx}) bietet auch die Umgebung +\Environment{tabu}(\Package{tabu}) einen \PValue{X}"~Spaltentyp. Für diese kann +jedoch anstelle einer fest vorgegebenen Breite auch \PValue{spread~0pt} +angegeben werden. Dadurch werden \PValue{X}"~Spalten anfänglich in ihrer +natürlichen Breite gesetzt. Sobald jedoch die Gesamtbreite der Tabelle den zur +Verfügung stehenden Platz bis zum Zeilenende überschreiten würde, werden die +\PValue{X}"~Spalten automatisch umbrochen. + +In umbrochenen Spalten gibt es beim Paket \Package{tabu} jedoch ein kleineres +Problem. In diesen setzt \Package{tabu} zu wenig vertikalen Leerraum am unteren +Ende. Um dieses Manko zu beheben, wird am Schluss jeder \PValue{X}"~Spalte mit +\PValue{X<\PParameter{\Macro{strut}}} einfach der Befehl \Macro{strut} +angehängt, der vertikalen Leerraum ober- und unterhalb der aktuellen Grundlinie +einfügt. In \autoref{sec:tables} wird ein Ansatz aufgezeigt, wie dies +automatisiert über einen neuen Spaltenstil ausgemerzt werden kann. Der Rest des +Stils ist identisch zu \PValue{acrotabularx}. +% +\CodeHook{\let\newglossarystyle\renewglossarystyle} +\begin{Preamble*} +\newglossarystyle{acrotabu}{% + \renewenvironment{theglossary}{% + \begin{tabu}{@{}lX<{\strut}l@{}}% 'spread 0pt' defekt in v2.9 + }{% + \end{tabu}\par\bigskip% + }% + \renewcommand*{\glossaryheader}{}% + \renewcommand*{\glsgroupheading}[1]{}% + \renewcommand*{\glsgroupskip}{}% + \renewcommand*{\glossentry}[2]{% + \glsentryitem{##1}% Entry number if required + \glstarget{##1}{\sffamily\bfseries\glossentryname{##1}} & + \glsentrydesc{##1} & + ##2\tabularnewline + } +} + +\end{Preamble*} +\begin{Hint} +\printacronyms[style=acrotabu] +\end{Hint} +\begin{quoting}[rightmargin=0pt] +\glsdisablehyper +\InputCode +\end{quoting} +% +Welche Variante gewählt wird, ist letztendlich eine Frage, was für spezifische +Anforderungen an die Formatierung des Abkürzungsverzeichnis gestellt werden. +Natürlich ist auch die Definition eines eigenen Stils möglich. Wenn Sie wissen +wollen, wie Sie einen Stil in Tabellenform erstellen können, welcher einen +Seitenumbruch zulässt, sollte Sie den nächsten Abschnitt lesen. + + +\subsubsection{Symbolverzeichnis} +Für das Erzeugen eines Symbolverzeichnisses kann ebenfalls \Package{glossaries} +verwendet werden. Allerdings muss dazu ein wenig mehr Aufwand getrieben werden, +da das Paket hierfür keine dedizierte Schnittstelle bereitstellt. Wurde die +Paketoption \Option{symbols}(\Package{glossaries}) angegeben wird jedoch +zumindest das notwendige Glossar erstellt. + +Als erstes sollte ein gut nutzbarer Befehl zum Definieren eines neuen Symbols +erstellt werden. In Anlehnung an den Befehl für Abkürzungen \Macro*{newacronym} +wird er \Macro{newformulasymbol}|?| genannt. Dieser hat ein optionales und vier +obligatorische Argumente, wobei das optionale Argument prinzipiell alle +Schlüssel"~Wert"~Paare enthalten kann, die durch das Paket \Package{glossaries} +akzeptiert werden. Welche davon letztlich auch Auswirkungen haben, hängt +allerdings von der Gestaltung des Stils durch den Anwender ab. Der Befehl hat +folgende Definition: +% +\begin{quoting}[leftmargin=\parindent] +\Macro{newformulasymbol}[% + \LParameter\Parameter{Label}\Parameter{Name}% + \Parameter{Symbol}\Parameter{Einheit}% +]|?|% +\end{quoting} +% +Mit \PName{Label} erfolgt die eindeutige Kennzeichnung des Symbols. Außerdem +wird dies standardmäßig für die Sortierung verwendet, was unter Umständen etwas +problematisch sein könnte. In diesem Fall ist eine manuelle Festlegung für den +dazugehörigen Schlüssel durch den Anwender über das optionale Argument mit +\PValue{sort=}\PName{Sortierung} eventuell sinnvoll. Nach dem \PName{Label} +schließt der \PName{Name} für das Formelzeichen an, gefolgt vom \PName{Symbol} +sowie der dazugehörige physikalische \PName{Einheit}. +% +\CodeHook{\let\newcommand\renewcommand} +\begin{Preamble*} +\newcommand*{\newformulasymbol}[5][]{% + \newglossaryentry{#2}{% + type=symbols,% + name={#3},% + description={\nopostdesc},% + symbol={\ensuremath{#4}},% + user1={\ensuremath{\mathrm{#5}}},% + sort={#2},% + #1% + }% +} + +\end{Preamble*} +% +Da es sich zumeist um mathematische Symbole handelt, wird für das Symbol und +die Einheit mit \Macro{ensuremath} Sorge getragen, dass diese auch im +Textmodus ohne Probleme verwendet werden können. Für das aufrechte Setzen der +Einheit wird für diese außerdem \Macro{mathrm} verwendet. Als Alternative dazu +könnte der Befehl \Macro{si}(\Package{siunitx}) aus dem Paket \Package{siunitx} +genutzt werden. Für ein kleines Beispiel werden folgend fünf Formelzeichen +definiert. Damit die Darstellung der mathematischen Brüche auch für den +Fließtext gut genutzt werden kann und ansehnlich ist, wird für diese der Befehl +\Macro{sfrac}(\Package{xfrac}) aus dem Paket \Package{xfrac} genutzt. +% +\begin{Trunk*} +\newformulasymbol{l}{Länge}{l}{m} +\newformulasymbol{m}{Masse}{m}{kg} +\newformulasymbol{a}{Beschleunigung}{a}{\sfrac{m}{s^2}} +\newformulasymbol{t}{Zeit}{t}{s} +\newformulasymbol{f}{Frequenz}{f}{s^{-1}} +\newformulasymbol{F}{Kraft}{F}{m \cdot kg \cdot s^{-2} = \sfrac{J}{m}} + +\end{Trunk*} +% +Die soeben definierten Symbole werden für ein kleines Beispiel mit dem Befehl +\Macro{gls}[\Parameter{Label}](\Package{glossaries}) in einer kurzen +Textpassage verwendet. +% +\begin{Hint*} +Die Einheiten für die \gls{f} sowie die \gls{F} werden aus den +SI"=Einheiten der Basisgrößen \gls{l}, \gls{m} und \gls{t} abgeleitet. +Und dann gibt es noch die Grundgleichung der Mechanik, welche für den +Fall einer konstanten Kraftwirkung in die Bewegungsrichtung einer +Punktmasse lautet: +\[\gls{F} = \gls{m} \cdot \gls{a}\] +\end{Hint*} +% +Das Ergebnis ist nur bedingt befriedigend. Sowohl im Fließtext als auch im +Mathematikmodus werden lediglich die Bezeichnungen jedoch nicht die Symbole +selbst verwendet. Damit die Formelzeichen auch für den mathematischen Satz +sinnvoll nutzbar sind, sollte das Erscheinungsbild der Einträge mit +\Macro{defglsentryfmt}(\Package{glossaries}) angepasst werden. +% +\begin{Preamble*} +\defglsentryfmt[symbols]{% + \ifmmode% + \glssymbol{\glslabel}% + \else% + \glsgenentryfmt~\glsentrysymbol{\glslabel}% + \fi% +} +\end{Preamble*} +% +Bei der Verwendung von \Macro{gls}[\Parameter{Label}](\Package{glossaries}) +führt diese Definition dazu, dass im Mathematikmodus allein das Symbol +verwendet wird. Im Fließtext wird diesem zusätzlich die Bezeichnung +vorangestellt. Das nachfolgende Beispiel macht dies deutlich. +% +\begin{Trunk*} +Die Einheiten für die \gls{f} sowie die \gls{F} werden aus den +SI"=Einheiten der Basisgrößen \gls{l}, \gls{m} und \gls{t} abgeleitet. +Und dann gibt es noch die Grundgleichung der Mechanik, welche für den +Fall einer konstanten Kraftwirkung in die Bewegungsrichtung einer +Punktmasse lautet: +\[\gls{F} = \gls{m} \cdot \gls{a}\] + +\end{Trunk*} +% +Als nächstes kümmern wir uns um die Ausgabe des Symbolverzeichnisses. Momentan +erzeugt der Befehl \Macro{printsymbols}(\Package{glossaries}) jedenfalls kein +sinnvolles Verzeichnis: +% +\begin{Hint} +\printsymbols +\end{Hint} +\begin{quoting}[rightmargin=0pt] +\glsdisablehyper +\printsymbols[style=simple] +\end{quoting} +% +Für dieses muss erst ein Stil definiert werden, was nachfolgend ähnlich zum +Stil \PValue{acrotabularx} respektive \PValue{acrotabu} geschieht. Allerdings +wird hier eine Variante gezeigt, mit der die Tabelle einen Seitenumbruch +zulässt. + +\minisec{Eigener Stil mit \Environment*{tabularx} und \Environment*{longtable}} +Soweit mir bekannt ist, lassen sich umbruchfähige Tabellen nicht direkt mit +\Environment{tabularx}(\Package{tabularx}) setzen. Vielmehr ist für die +Verwendung der Umgebung \Environment{longtable}(\Package{longtable}) das Paket +\Package{ltxtable} notwendig. Dieses wiederum verlangt, dass die zu setzende +Tabelle in einer separaten Datei abgelegt wird. Soll diese dennoch innerhalb +des Hauptdokumentes erstellt werden, kann für dieses Unterfangen die Umgebung +\Environment{filecontents}(\Package{filecontents}) aus dem gleichnamigen Paket +genutzt werden, womit \emph{bereits existierende Dateien} überschrieben werden. + +Leider habe ich keine Möglichkeit gefunden, diesen Prozess ohne wahnsinnig +großen Aufwand für das Erstellen eines Glossars zu portieren. Für umbruchfähige +Tabellen mit automatisch berechneten Spaltenbreiten kommt meines Wissens nach +momentan nur die Umgebung \Environment{longtabu}(\Package{tabu}) aus dem Paket +\Package{tabu} infrage. + +\minisec{Eigener Stil mit \Environment*{longtabu}} +Das Paket \Package{tabu} definiert für umbruchfähige Tabellen die Umgebung +\Environment{longtabu}(\Package{tabu}), welche wiederum auf der Umgebung +\Environment{longtable}(\Package{longtable}) basiert und nachfolgend verwendet +wird. Damit diese linksbündig gesetzt wird, muss vor dem obligatorischen +Argument mit den Spaltendefinitionen noch das optionale Argument \OParameter{l} +angegeben werden. Die im nachfolgend definierten Stil verwendeten Befehle +\Macro{toprule}(\Package{booktabs}), \Macro{midrule}(\Package{booktabs}) sowie +\Macro{cmidrule}(\Package{booktabs}) und \Macro{bottomrule}(\Package{booktabs}) +für unterschiedliche horizontale Linien stammen allesamt aus dem Paket +\Package{booktabs}, welches für den Satz von hochwertigen Tabellen eine große +Hilfe ist. +% +\CodeHook{\let\newglossarystyle\renewglossarystyle} +\begin{Preamble*} +\newglossarystyle{symblongtabu}{% + \renewenvironment{theglossary}{% + \begin{longtabu}[l]{ccX<{\strut}l}% 'spread 0pt' defekt in v2.9 + }{% + \end{longtabu}% + }% + \renewcommand*{\glsgroupheading}[1]{}% + \renewcommand*{\glsgroupskip}{}% + \renewcommand*{\glossaryheader}{% + \toprule + \bfseries Symbol & \bfseries Einheit & + \bfseries Bezeichnung & \bfseries Seite(n) + \tabularnewline\midrule\endhead% + \bottomrule\endfoot% + }% + \renewcommand*{\glossentry}[2]{% + \glsentryitem{##1}% Entry number if required + \glstarget{##1}{\glossentrysymbol{##1}} & + \glsentryuseri{##1} & + \glossentryname{##1} & + ##2\tabularnewline% + }% +} +\end{Preamble*} +% +Innerhalb von \Macro{newglossarystyle}(\Package{glossaries}) wird der Befehl +\Macro{glossaryheader}(\Package{glossaries}) für einen Tabellenkopf definiert, +wie er auch für eine \Environment{longtable}(\Package{longtable})"=Umgebung +erscheinen würde. In hier vorgestellten Fall werden der Kopf mit dem Makro +\Macro{endhead}(\Package{longtable}) beziehungsweise der Fuß durch +\Macro{endfoot}(\Package{longtable}) terminiert. Diese werden beim +einem möglichen Seitenumbruch zu Beginn und am Ende auf jeder Seite gesetzt. +% +\begin{Preamble+} +}% Ende von AfterPackage + +\end{Preamble+} +% +Das Symbolverzeichnis kann sich nun durchaus sehen lassen. +% +\begin{Hint} +\printsymbols[style=symblongtabu] +\end{Hint} +\begin{quoting}[rightmargin=0pt] +\newglossarystyle{symbtabu}{% + \setglossarystyle{symblongtabu}% + \renewenvironment{theglossary}{% + \begin{tabu}{ccX<{\strut}l}% 'spread 0pt' defekt in v2.9 + }{% + \bottomrule\end{tabu}% + }% + \renewcommand*{\glossaryheader}{% + \toprule + \bfseries Symbol & \bfseries Einheit & + \bfseries Bezeichnung & \bfseries Seite(n) + \tabularnewline\midrule% + }% +} +\printsymbols[style=symbtabu] +\end{quoting} + +\minisec{Unterteilung nach griechischen und lateinischen Symbolen} +Oftmals wird es für Abschlussarbeiten verlangt, das Symbolverzeichnis nach +griechischen und lateinischen Formelzeichen zu untergliedern. Für die Umsetzung +dieser Anforderung ist die zuvor beschriebene Lösung prinzipiell nutzbar, +allerdings muss diese etwas erweitert werden. + +Realisiert wird das Ganze, indem die zwei Kategorien respektive Elterneinträge +\PValue{greekletters} sowie \PValue{romanletters} definiert und sämtliche +Formelzeichen einem der beiden als Untereintrag zugeordnet werden. +% +\begin{Hint*} +\providecommand*\greeklettersname{Greek letters} +\providecommand*\romanlettersname{Roman letters} +\newglossaryentry{greekletters}{% + type=symbols,% + name={\greeklettersname},% + description={\nopostdesc},% + sort={a}% +} +\newglossaryentry{romanletters}{% + type=symbols,% + name={\romanlettersname},% + description={\nopostdesc},% + sort={b}% +} +\end{Hint*} +% +Die Bezeichnungen der beiden Kategorien könnten auch als Parameter von +\Macro*{newglossaryentry} mit \PValue{name=\PName{Bezeichung}} direkt +eingetragen werden. Um bei der Definition jedoch eine gewisse Flexibilität zu +gewährleisten, wird dies über die zwei Befehle \Macro*{greeklettersname} sowie +\Macro*{romanlettersname} realisiert. Diese werden mit \KOMAScript-Mitteln +als sprachabhängige Bezeichner definiert. +% +\begin{Hint*} +\providecaptionname{% + american,australian,british,canadian,english,newzealand% +}{\greeklettersname}{Greek letters} +\providecaptionname{% + german,ngerman,austrian,naustrian,swissgerman,nswissgerman% +}{\greeklettersname}{Griechische Symbole} +\providecaptionname{% + american,australian,british,canadian,english,newzealand% +}{\romanlettersname}{Roman letters} +\providecaptionname{% + german,ngerman,austrian,naustrian,swissgerman,nswissgerman% +}{\romanlettersname}{Lateinische Symbole} +\end{Hint*} +% +Für die Ausgabe wird der Glossarstil \PValue{symbsplitlongtabu} in ähnlicher +Manier wie die Stile zuvor definiert. Dieser wird darauf ausgelegt, dass alle +aufzulistenden Formelzeichen als Untereintrag von einem der beiden zuvor +erstellten Elterneinträge angegeben werden. Allerdings ist bei diesem Stil +aufgrund der Verwendung von \Environment{longtabu}(\Package{tabu}) etwas +Aufwand zu betreiben, um die gewünschte Ausgabe zu erhalten. Das grundlegende +Problem ist das Setzen von Überschriften und dem folgenden Tabellenkopf +innerhalb der Tabelle. Die Erläuterung des Quelltextauszugs erfolgt nach dessen +Ausgabe. +% +\CodeHook{\let\newglossarystyle\renewglossarystyle} +\begin{Hint*} +\newglossarystyle{symbsplitlongtabu}{% + \newcommand*\symbollevel{-1}% + \renewenvironment{theglossary}{% + \begin{longtabu}[l]{ccX<{\strut}l}% 'spread 0pt' defekt in v2.9 + }{% + \end{longtabu}% + }% + \renewcommand*{\glsgroupheading}[1]{}% + \renewcommand*{\glsgroupskip}{}% + \newcommand*\symbolhead{% + \toprule + \bfseries Symbol & \bfseries Einheit & + \bfseries Bezeichnung & \bfseries Seite(n) + \tabularnewline\midrule + }% + \renewcommand*{\glossaryheader}{% + \endfirsthead% + \symbolhead\endhead% + \bottomrule\endfoot% + \gdef\symbollevel{-1}% + }% + \renewcommand*{\glossentry}[2]{% + \ifglshaschildren{##1}{% + \ifnum\symbollevel>0\relax% + \tabularnewline\bottomrule\tabularnewline[\smallskipamount]% + \fi + \gdef\symbollevel{0}% + \tabularnewline[% + \arraystretch\dimexpr-\ht\strutbox-\dp\strutbox\relax% + ]% + \multicolumn{4}{@{}l@{}}{\minisec{\glsentryname{##1}}}% + }{% + \GlossariesWarning{% + There are no childrens for entry ##1.\MessageBreak + Nothing will be printed. Maybe you should\MessageBreak + specify ##1 as a child entry. + }% + }% + }% + \renewcommand*{\subglossentry}[3]{% + \ifnum\symbollevel=0\relax% + \tabularnewline[\medskipamount]\symbolhead% + \else% + \tabularnewline + \fi% + \gdef\symbollevel{##1}% + \glsentryitem{##2}% Entry number if required + \glstarget{##2}{\glossentrysymbol{##2}} & + \glsentryuseri{##2} & + \glossentryname{##2} & + ##3% + }% +} +\end{Hint*} +% +Der neu definierte Befehl \Macro*{symbollevel} wird benötigt, um bei der +Ausgabe zu überprüfen, um es sich beim zuletzt gesetzten Eintrag um einen +Elterneintrag (\Macro*{glossentry}) oder Untereintrag (\Macro*{subglossentry}) +gehandelt hat. Im Makro \Macro*{symbolhead} wird die Definition für den zu +setzenden Tabellenkopf gespeichert. Der Inhalt von \Macro*{glossaryheader} wird +direkt zu Beginn der Umgebung \Environment{theglossary}(\Package{glossaries}) +ausgeführt. Dieser wird so umdefiniert, dass die Tabelle keinen Kopf vor der +ersten Überschrift erhält, jedoch nach einem Seitenumbruch sehr wohl der +Tabellenkopf gesetzt wird. Abgeschlossen wird die Tabelle mit einer Fußlinie. + +Danach erfolgt die Formatierung der Einträge. Der Befehl \Macro*{glossentry} +setzt \enquote{\greeklettersname} und \enquote{\romanlettersname} sowie +gegebenenfalls weitere Elterneinträge als Überschriften. Bevor dies passieren +kann wird eine vorher begonnene Tabelle mit einer Fußlinie beendet. Um die +Überschrift innerhalb von \Environment{longtabu}(\Package{tabu}) linksbündig zu +setzen, wird mit \Macro*{multicolumn} gearbeitet. Dieser Befehl muss in der +ersten Zelle zwingend als aller erstes genutzt werden. Um dies sicherzustellen, +wird zuvor eine neue Tabellenspalte eingefügt. Damit jedoch kein zusätzlicher +Leerraum entsteht, wird diese über das optionale Argument nach oben verschoben. +Die Einträge für Formelzeichen selber erfolgen mit \Macro*{subglossentry}. Im +Gegensatz zum vorher beschriebenen Stil \PValue{symblongtabu} wird zusätzlich +der notwendige Tabellenkopf nach der Überschrift gesetzt, falls es sich um den +\emph{ersten} Untereintrags handelt. + +Jetzt könnte man den Glossarstil \PValue{symbsplitlongtabu} bereits verwenden +und jedem Formelzeichen bei der Definition mit +\begin{quoting}[leftmargin=\parindent] +\Macro{newformulasymbol}[% + \POParameter{parent={greekletters/romanletters}}% + \PParameter{\dots}\PParameter{\dots}\PParameter{\dots}\PParameter{\dots}% +]|?|% +\end{quoting} +eine der beiden Elterneinträge zuweisen. Für wenige Formelzeichen mag dies +ausreichen. Komfortabler wäre es natürlich, wenn die Zuweisung zu einer der +beiden Kategorien automatisch erfolgen würde. Ein Ansatz für dieses Unterfangen +wird folgend vorgestellt. + +\Attention{% + Es kann nicht garantiert werden, dass dieser Ansatz in jedem Fall und für + sämtliche Anwendungsszenarien funktioniert. Tatsächlich ist die Idee auf eine + \hrfn{http://latex.wcms-file3.tu-dresden.de/phpBB3/viewtopic.php?f=11&t=427}{% + Frage aus dem \Forum*% + } + heraus entstanden. Für auftretende Probleme bei der Verwendung ist dort der + beste Anlaufpunkt. +} + +Die Grundidee ist, das zu definierende Formelzeichen mit einer Liste der Makros +für griechische Buchstaben abzugleichen und so zu entscheiden, in welche der +beiden Kategorien das Symbol einzuordnen ist. Hierfür werden nachfolgend eine +Liste \Macro*{greeksymbollist} aller griechischen Buchstaben sowie der Befehl +\Macro*{ifisgreeksymbol}[\Parameter{Symbol}\Parameter{Dann}\Parameter{Sonst}] +zur Fallunterscheidung definiert. Problematisch bei der Umsetzung ist, dass ein +als Argument übergebenes Formelzeichen auch mit diakritischen Zeichen und +Indizes verwendet werden kann~-- beispielsweise $\dot{\varphi}_{\mathrm{max}}$ +(% + \Macro*{dot}[\PParameter{\Macro*{varphi}}]\PValue{\textunderscore}% + \PParameter{\Macro*{mathrm}[\PParameter{max}]}% +). Deshalb werden bei der Ausführung von \Macro*{ifisgreeksymbol} temporär alle +diakritische Zeichen sowie \Macro*{boldsymbol} für den Mathematikmodus +\enquote{unschädlich} gemacht und das Argument \Parameter{Symbol} expandiert. +Anschließend werden alle Anteile für Hoch- sowie Tiefstellung abgeschnitten und +das Resultat mit der Liste \Macro*{greeksymbollist} abgeglichen. +% +\CodeHook{\let\newcommand\renewcommand} +\begin{Hint*} +\makeatletter +\newcommand*\greeksymbollist{} +\def\@tempa#1{\ifdefvoid{#1}{}{\listadd\greeksymbollist{#1}}} +\forcsvlist{\@tempa}{% + \alpha,\beta,\varbeta,\gamma,\delta,\epsilon,\varepsilon,\zeta,% + \eta,\theta,\vartheta,\iota,\kappa,\varkappa,\lambda,\mu,\nu,% + \xi,\omicron,\pi,\varpi,\rho,\varrho,\sigma,\varsigma,\tau,% + \upsilon,\phi,\varphi,\chi,\psi,\omega,% + \Alpha,\Beta,\Gamma,\Delta,\Epsilon,\Zeta,\Eta,\Theta,\Iota,% + \Kappa,\Lambda,\Mu,\Nu,\Xi,\Omicron,\Pi,\Rho,\Sigma,\Tau,\Upsilon,% + \Phi,\Chi,\Psi,\Omega% +} +\newcommand*\ifisgreeksymbol[1]{% + \begingroup% + \def\@tempa##1{\let##1\@firstofone}% + \forcsvlist{\@tempa}{% + \acute,\bar,\breve,\check,\dot,\ddot,\dddot,\ddddot,% + \hat,\widehat,\grave,\tilde,\widetilde,\vec,% + \Acute,\Bar,\Breve,\Check,\Dot,\Ddot,\Hat,\Grave,\Tilde,\Vec% + }% + \def\boldsymbol{}% + \protected@edef\@tempa{#1}% + \def\@tempb##1_##2\relax{\def\@tempa{##1}}% + \expandafter\@tempb\@tempa_\relax\relax% + \def\@tempb##1^##2\relax{\def\@tempa{##1}}% + \expandafter\@tempb\@tempa^\relax\relax% + \expandafter\ifinlist\expandafter{\@tempa}{\greeksymbollist}{% + \aftergroup\@firstoftwo% + }{% + \aftergroup\@secondoftwo% + }% + \endgroup% +} +\makeatother +\end{Hint*} +% +Mit \Macro*{ifisgreeksymbol} kann jetzt auf die Art des Symbols getestet. Dies +wird innerhalb von \Macro{newformulasymbol}|?| genutzt, um den passenden +Elterneintrag auszuwählen. Über das optionale Argument kann jederzeit mit +\POParameter{parent={greekletters/romanletters}} der automatische ermittelte +Elterneintrag überschrieben werden. +% +\begin{Hint} +\newcommand*\symbollettergroup{} +\newcommand*{\newformulasymbol}[5][]{% + \ifisgreeksymbol{#4}{% + \renewcommand*{\symbollettergroup}{greekletters}% + }{% + \renewcommand*{\symbollettergroup}{romanletters}% + }% + \newglossaryentry{#2}{% + type=symbols,% + name={#3},% + description={\nopostdesc},% + symbol={\ensuremath{#4}},% + user1={\ensuremath{\mathrm{#5}}},% + sort={#2},% + parent={\symbollettergroup},% + #1% + }% +} +\end{Hint} + + +\subsection{Literaturverzeichnis} +\label{sec:biblatex}% +% +Für das Erstellen eines Literaturverzeichnisses wurde in der Vergangenheit fast +ausschließlich \hologo{BibTeX} verwendet. Leider wird auch heute immer noch +darauf verwiesen, obwohl es seit einigen Jahren das Paket \Package{biblatex} +gibt, welches insbesondere für neue Dokumente den Vorzug erhalten sollte. Auch +die Umstellung älterer \hologo{BibTeX}"=Datenbanken ist mit wenigen Handgriffen +realisierbar. Für \Package{biblatex} existieren eine Menge unterschiedlicher, +vordefinierter Zitierstile, welche sich im Vergleich zu \hologo{BibTeX} auch +wesentlich leichter an die individuellen Bedürfnisse anpassen lassen. + +Ein weiterer Vorteil ist die Unterstützung von Datenbanken, welche eine +UTF"~8"~Kodierung nutzen, wenn \Application{biber} zur Sortierung der Einträge +verwendet wird. Zitierstil und Backend zur Sortierung lassen sich durch das +optionale Argument beim Laden des Paketes festlegen. Damit die Zitierstile das +optimale Ergebnis erzielen wird das Laden von \Package{csquotes} sehr empfohlen. +% +\begin{Preamble} +\usepackage{csquotes} +\usepackage[backend=biber,style=alphabetic]{biblatex} + +\end{Preamble} +% +Die Erstellung einer Literaturdatenbank kann entweder von Hand oder mithilfe +einer externen Anwendung erfolgen. Für die letztgenannte Variante sind die +Programme \Application{Citavi} respektive \Application{JabRef} empfehlenswert. +Auf eine Einführung in diese Anwendungen wird jedoch verzichtet. + +Die \Environment{filecontents}(\Package{filecontents})"=Umgebung kann verwendet +werden, um innerhalb eines \hologo{LaTeX}"=Dokumentes externe Dateien direkt +beim Kompilieren zu erstellen. Damit wird nachfolgend für dieses Tutorial eine +Literaturdatenbank \File{\jobname-temp.bib} mit drei Einträgen manuell erzeugt. +Die Umgebung gehört standardmäßig zu den Bordmitteln von \hologo{LaTeXe}. Das +Paket \Package{filecontents} erweitert die Umgebung dahingehend, dass +\emph{bereits existierende Dateien} überschrieben werden. Hier ist folglich +Vorsicht geboten. Der große Vorteil ist jedoch, dass die erweiterte +\Environment{filecontents}(\Package{filecontents})"=Umgebung~-- im Gegensatz +zur Standardversion~-- die Dateien in der gleichen Eingabekodierung erzeugt, +wie das verwendete Dokument. Diese Funktionalität wird für dieses Tutorial +benötigt, weshalb auf das Laden des Paketes \Package{filecontents} nicht +verzichtet werden kann. +% +\begin{Preamble} +\usepackage{filecontents} +\end{Preamble} +% +Folgend wird eine Literaturdatenbank mit drei Einträge definiert. Jeder Eintrag +einer \File*{.bib}"~Datei beginnt mit \PValue{@}\PName{Eintragstyp}. Direkt +danach ist für jeden Eintrag ein \emph{eindeutiges} \PParameter{Label} +festzulegen. Anschließend können für unterschiedliche Felder die dazugehörigen +Werte eingetragen werden. Die verwendbaren Eintragstypen sowie die für den +jeweiligen Typ obligatorischen und optionalen Felder sind in der Dokumentation +von \Package{biblatex} zu finden. +% +\begin{Preamble*} +\begin{filecontents}{\jobname-temp.bib} +@book{goossens94, + author = {Goossens, Michel and Mittelbach, Frank + and Samarin, Alexander}, + title = {The LaTeX Companion}, + date = {1994}, + publisher = {Addison-Wesley}, + location = {Reading, Massachusetts}, + language = {english}, +} +@book{knuth84, + author = {Knuth, Donald E.}, + title = {The \TeX book}, + date = {1984}, + maintitle = {Computers \& Typesetting}, + volume = {A}, + publisher = {Addison-Wesley}, + location = {Reading, Massachusetts}, + language = {english}, +} +@manual{hanisch14, + author = {Hanisch, Falk}, + title = {Ein \LaTeX"=Bundle für Dokumente im neuen Corporate + Design der Technischen Universität Dresden}, + date = {2014}, + subtitle = {Benutzerhandbuch}, + location = {Dresden}, + language = {german}, +} +\end{filecontents} +\end{Preamble*} +% +Nachdem die Literaturdatenbank erstellt wurde, muss diese auch noch eingebunden +werden: +% +\begin{Preamble} +\addbibresource{\jobname-temp.bib} + +\end{Preamble} +% +Im einfachsten Fall werden die gewünschten Einträge der Literaturdatenbank im +Dokument mit \Macro{cite}[\Parameter{macro}](\Package{biblatex}) referenziert, +von \Package{biblatex} werden zusätzliche Möglichkeiten angeboten. +% +\begin{refsection}[\jobname-temp.bib] +\begin{Trunk+} +\section{Referenzen und das Literaturverzeichnis} +Das Literaturverzeichnis wird auf Basis der nachfolgend verwendeten +Zitate erstellt und ist auf Seite~\pageref{sec:bibliography} zu finden. +\end{Trunk+} +\begin{Trunk*} +In diesem Textabschnitt werden die zwei bekannten \LaTeX-Bücher +\cite{knuth84} und \cite{goossens94} sowie das Anwenderhandbuch +\cite{hanisch14} zitiert. + +\end{Trunk*} +% +Das Literaturverzeichnis wird mit \Macro{printbibliography}(\Package{biblatex}) +ausgegeben, wobei nicht alle Einträge der Literaturdatenbank sondern lediglich +die tatsächlich referenzierten verwendet werden. Der Parameter +\PValue{heading=bibintoc} führt zu einem Eintrag in das Inhaltsverzeichnis. +% +\begin{Hint} +\printbibliography[heading=bibintoc] +\end{Hint} +\begin{quoting}[rightmargin=0pt] +\makeatletter +\let\markboth\@gobbletwo +\let\markright\@gobble +\makeatother +\printbibliography +\end{quoting} +\end{refsection} + + + +\section{Anfangszitat oder Schlauer Spruch} +\renewcommand*\dictumwidth{.4\textwidth}% +\dictum[Johann Wolfgang von Goethe]{Es irrt der Mensch, solang er strebt.}% +\bigskip\noindent +Oftmals möchte der Autor einer wissenschaftlichen Arbeit für das erste oder +auch jedes Kapitel ein Zitat oder ähnliches voranstellen. Dies kann mit dem +Befehl \Macro{dictum}[\OParameter{Autor}\Parameter{Text}](\Package{koma-script}) +erfolgen. Damit wird der im obligatorischen Argument angegeben Ausspruch in +einer \Macro{parbox} ausgegeben. Das optionale Argument kann für die Angabe des +Autors verwendet werden. Soll das Ganze für einen Teil oder ein Kapitel +erfolgen, sollte der Befehl \Macro{dictum}(\Package{koma-script}) innerhalb von +\Macro{setpartpreamble}(\Package{koma-script}) beziehungsweise +\Macro{setchapterpreamble}(\Package{koma-script}) verwendet werden. Genaueres +hierzu und zu den weiteren Möglichkeiten, die Gestalt eines Zitats zu +beeinflussen, ist in der \scrguide[Anleitung von \KOMAScript] zu finden. Es +folgt ein Beispiel zur Verwendung. +% +\begin{Hint} +\setchapterpreamble{% + \dictum[Johann Wolfgang von Goethe]{% + Es irrt der Mensch, solang er strebt.% + }% + \bigskip +} +\chapter{Einleitung} + +\end{Hint} + + + +\section{Gleitumgebungen für Abbildungen und Tabellen} +\label{sec:floats}% +% +Die Positionierung von Abbildungen mit \hologo{LaTeX} kann zu Beginn für viele +Anfänger durchaus frustrierend sein. Das liegt häufig am Missverständnis der +beiden Standard"=Gleitobjektumgebungen für Tabellen (\Environment{table}) und +Abbildungen (\Environment{figure}). Diese sind in erster Linie zur Ergänzung +des Fließtextes gedacht und sollten für das prinzipielle Verständnis des +Geschriebenen nicht notwendig sein. Das oft geforderte Verhalten, ein +Gleitobjekt an einer ganz bestimmten und explizit festgelegten Position im Text +zu setzen, ist nicht erforderlich, insbesondere weil dadurch der Lesefluss +unnötig unterbrochen wird. + +Vielmehr ist es sinnvoll, Gleitobjekte entweder am Anfang oder Ende einer Seite +zu platzieren, wo sie den Lesefluss deutlich weniger stören. Allerdings sollte +auf jedes Gleitobjekt im Fließtext über eine Referenz~-- beispielsweise mit dem +Befehl \Macro{autoref}(\Package{hyperref}) aus dem Paket \Package{hyperref}~-- +Bezug genommen und gegebenenfalls eine kurze Erläuterung gegeben werden. +Zusätzliche Erläuterungen zum Thema \emph{Querverweise} sind unter +\autoref{sec:references} zu finden. + +Ein weitere Grund, \hologo{LaTeX} die Platzierung von Tabellen und Abbildungen +vollständig zu überlassen, ist die Ungewissheit über den vorhandenen Platz auf +der momentan erzeugten Seite. In nicht wenigen Fällen kann es passieren, dass +das einzufügende Objekt zu groß für die aktuelle Seite ist, was einen wahrlich +schlechten Seitenumbruch mit einer schlecht gefüllten Seite zur Folge hätte. +Die Verwendung einer Gleitumgebung für eine Abbildung wird im nachfolgenden +Quelltextauszug exemplarisch gezeigt, das Ergebnis ist in \autoref{fig:example} +zu sehen. Bei Gleitobjekten sollte in jedem Fall darauf geachtet werden, dass +der Befehl \Macro{label} immer erst \emph{nach} +\Macro{caption}(\Package{koma-script},\Package{caption}) verwendet wird, da +der erzeugte Anker sich sonst nicht auf das Objekt bezieht. +% +\begin{Trunk+} +\section{Grafiken und Tabellen in Gleitumgebungen} +Es folgt die Demonstration von Gleitumgebungen, welche sowohl für +Grafiken als auch Tabellen verwendet werden sollten. Im vorliegenden +Beispiel kann unter Umständen der Eindruck entstehen, dass diese Seite +etwas zu überladen mit Gleitobjekten ist. Dies liegt nicht an der +Verwendung der Gleitobjekte sondern vielmehr am zu geringen Textvolumen +und den eingeschränkten Möglichkeiten von \LaTeX{}, diese an geeigneten +Stellen zu platzieren. + +\subsection{Abbildungen als Gleitobjekte und das Einbinden von Grafiken} +In \autoref{fig:example} wird dargestellt, wie eine Grafik im PDF"~Format +in ein Dokument eingebunden und auf diese verwiesen werden kann. Ein +Querverweis auf ein Gleitobjekt sollte im Fließtext am besten mit Befehl +\texttt{\textbackslash autoref\{\emph{<Label>}\}} erstellt werden. +Hierfür ist ein entsprechender Anker am zu referenzierenden Objekt nötig, +welcher mit dem Makro \texttt{\textbackslash label} erzeugt wird. Dabei +ist entscheidend, dass dieser Anker erst \emph{nach} der Beschriftung des +Objektes, welche mit \texttt{\textbackslash caption} zu erstellen ist, +definiert werden sollte. + +\end{Trunk+} +\begin{Trunk} +\begin{figure} +\centering +\includegraphics{TUD-black} +\caption{Beispielgrafik}\label{fig:example} +\end{figure} + +\end{Trunk} +\InputCode\noindent +% +In der Konsequenz ist dies hier ein Plädoyer, bei der Platzierung von Tabellen +und Abbildungen vollständig auf \hologo{LaTeX} zu vertrauen. Anfangs kann der +Anwender dies als Kontrollverlust empfinden. Sobald Sie jedoch Änderungen am +Dokument vornehmen und eventuell in einem Kapitel einen Absatz ergänzen oder +gar einen ganzen Abschnitt hinzufügen werden sie dankbar sein, sich in der +Folge nicht mit der Neupositionierung sämtlicher Objekte herumschlagen zu +müssen. Leidgeprüfte Anwender einschlägiger Textverarbeitungsprogramme können +gewiss ein Lied darüber singen. + + + +\subsection{Gleitobjektlayout} +\label{sec:floatlayout}% +% +Es wurde bis jetzt das prinzipielle Vorgehen bei der Nutzung von Gleitobjekten +beschrieben. Allerdings gibt es auch noch einige typografische Aspekte, welche +zu beachten sind. Zum einen sollte beachtet werden, dass die Beschriftung einer +Abbildung immer unterhalb dieser erfolgen sollte, bei Tabellen hingegen eine +Überschrift gesetzt wird. Hierfür muss der Anwender ohne die Verwendung eines +zusätzlichen Paketes selber Sorge tragen, indem er den Befehl +\Macro{caption}(\Package{koma-script},\Package{caption}) entweder vor oder +nach dem eigentlichen Objekt in der Gleitumgebung verwendet. Der zweite Punkt +ist die verwendete Schrift innerhalb der Gleitumgebungen. + +Damit sich der Inhalt dieser besser vom restlichen Fließtext abhebt und vom +Leser direkt als nicht dazugehörig erkannt werden kann ist es ratsam, diesen in +serifenloser Schrift zu setzen~-- die Verwendung einer Serifenschrift für den +Fließtext vorausgesetzt. Das Paket \Package{floatrow} bietet die Möglichkeiten, +diese beiden Punkte automatisiert umzusetzen. Außerdem wird zur Formatierung +der Beschriftungen das Paket \Package{caption} benötigt. Sollten Sie noch keine +Erfahrung mit dem Setzen von Tabellen mit \hologo{LaTeX} haben, so wäre zuvor +ein Blick in \autoref{sec:tables} sehr sinnvoll. + +\newcommand*\tableexample[1][]{% + \begin{tabularx}{.75\textwidth}{@{}XXX@{}} + \toprule + \textbf{Erste Spalte} & \textbf{Zweite Spalte} & + \textbf{Dritte Spalte} \tabularnewline\midrule + Etwas Blindtext für die erste Spalte & + Etwas Blindtext für die zweite Spalte & + Etwas Blindtext für die dritte Spalte + \tabularnewline\bottomrule + \end{tabularx} + #1% +} +\begin{table} +\tableexample[% + \caption{Eine Tabelle in einer Gleitumgebung}\label{tab:tabular}% +] +\end{table} + +Normalerweise wird eine Tabelle sowie deren Beschriftung innerhalb einer +\Environment{table}"=Gleitumgebung in der selben Schrift wie der Fließtext +gesetzt, die korrekte Platzierung der Bezeichnungen bleibt dem Anwender +überlassen. Zu sehen ist dies in \autoref{tab:tabular}. Im Folgenden wird +gezeigt, wie sich dies automatisiert für alle Gleitobjekte im Dokument ändern +lässt. Die \emph{Formatierung} der Bezeichnungen von Gleitobjekten kann +mithilfe des Paketes \Package{caption} angepasst werden. +% +\begin{Preamble} +\usepackage{caption} +\end{Preamble} +% +Diese stellt den Befehl \Macro{captionsetup}(\Package{caption}) bereit. Mit +diesem werden die Beschriftungen in Serifenlosen und das Label zur besseren +Unterscheidung im fetter Schriftstärke gesetzt. +% +\begin{Preamble*} +\captionsetup{font=sf,labelfont=bf,labelsep=space} +\end{Preamble*} +% +Um die \emph{Platzierung} der Beschriftungen beeinflussen sowie den Inhalt +einer Gleitumgebung formatieren zu können, wird \Package{floatrow} geladen. +\begin{Preamble} +\usepackage{floatrow} +\end{Preamble} +% +Der Inhalt von Gleitobjekten wird~-- entgegen des normalen Verhaltens~-- durch +\Package{floatrow} automatisch zentriert gesetzt. Zusätzlich soll der Inhalt +noch die serifenlose Schriftfamilie verwenden. Dies lässt sich mit der Nutzung +des Befehls \Macro{floatsetup}(\Package{floatrow}) realisieren. +% +\begin{Preamble*} +\floatsetup{font=sf} +\end{Preamble*} +% +Ohne weitere Maßnahmen werden durch \Package{floatrow} alle Beschriftungen +unterhalb der Gleitobjekte ausgegeben. Da das Ziel jedoch die Verwendung von +Tabellenüberschriften und Abbildungsunterschriften ist, wird dies für Tabellen +angepasst. +% +\begin{Preamble*} +\floatsetup[table]{style=plaintop} +\end{Preamble*} +% +\begin{table} +\tableexample[% + \caption{% + Eine Tabelle in einer Gleitumgebung mit einer angepassten Formatierung% + }% + \label{tab:tabularnew}% +] +\end{table}% +% +Damit wären alle Einstellungen soweit erfolgt, in \autoref{tab:tabularnew} ist +das Ergebnis zu sehen. Zumeist soll die Beschriftung für Gleitobjekte nicht +zentriert sondern linksbündig gesetzt werden. Dies lässt sich ebenfalls mit den +Mitteln des Paketes \Package{caption} und der passenden Paketoption +\Option{justification}(\Package{caption}) erreichen. Damit dies auch für +einzeilige Beschriftungen angewendet wird, muss zusätzlich die Einstellung +\Option{singlelinecheck}(\Package{caption}) deaktiviert werden. Mit der +Paketoption \Option{format}(\Package{caption}) kann außerdem beeinflusst +werden, ob eine mehrzeilige Beschriftung nach einem Zeilenumbruch direkt unter +dem Label oder mit Einzug fortgesetzt werden soll. +% +\begin{Preamble*} +\captionsetup{singlelinecheck=off,format=hang,justification=raggedright} +\end{Preamble*} +% +In \autoref{tab:tabularnew} fällt die Beschriftung auf, welche die Breite der +Tabelle überragt. Falls linksbündige Gleitumgebungsbezeichnungen verwendet +werden, wie dies gerade eingestellt wurde, besteht das Problem quasi bei jeder +Beschriftung, da diese immer am linken Seitenrand beginnen. Auch hierfür stellt +das Paket \Package{floatrow} die Befehle \Macro{ttabbox}(\Package{floatrow}) +für Tabellen sowie \Macro{ffigbox}(\Package{floatrow}) für Abbildungen bereit. + +Beide Makros erwarten im ersten obligatorischen Argument den Befehl +\Macro{caption}(\Package{koma-script},\Package{caption}) für die Beschriftung +gegebenenfalls gefolgt von einem mit \Macro{label} gesetzten Textanker. Im +zweiten Argument wird das Objekt selbst~-- sprich Tabelle oder Abbildung~-- +angegeben. Zu verwenden sind diese folgendermaßen: +% +\begin{Hint} +\begin{table} +\ttabbox + §\Parameter{Tabellendefinition}§ + {\caption§\Parameter{Beschriftung}§\label§\Parameter{Label}§} +\end{table} +\begin{figure} +\ffigbox + §\Parameter{Abbildungsdefinition}§ + {\caption§\Parameter{Beschriftung}§\label§\Parameter{Label}§} +\end{figure} +\end{Hint} +% +Diese beiden Befehle sorgen dafür, dass die Beschriftungen in der jeweiligen +Breite des Objektes gesetzt werden. Entspricht das zu setzende Objekt in seiner +Breite dem Wert \Length{textwidth}~-- es ist genauso Breit wie die Laufweite +des Fließtextes~--, so ist deren Gebrauch nicht notwendig. Das Ergebnis der +Verwendung von des Befehls \Macro{ttabbox}(\Package{floatrow}) ist in +\autoref{tab:tabularbox} zu sehen. + +Bei der Nutzung der beiden Befehle sollte darauf geachtet werden, dass zwischen +dem Ende des Objektes und der schließender Klammer des zweiten Argumentes kein +ungewolltes Leerzeichen gesetzt wird. Dies lässt sich leicht vermeiden, indem +direkt nach dem Ende des Objektes mit \Macro*{end}[\PParameter{tabularx}], +\Macro*{end}[\PParameter{tabu}], \Macro*{end}[\PParameter{tikz}] etc. die +schließende Klammer des zweiten Argumentes oder das Zeichen für einen Kommentar +\PValue{\%} folgt. + +\begin{table} +\ttabbox{\tableexample}{% + \caption[% + Eine mit \Macro{ttabbox}(\Package{floatrow}) gesetzte Tabelle in einer + Gleitumgebung% + ]{% + Eine in einer Gleitumgebung gesetzte Tabelle in Verbindung mit dem Befehl + \Macro{ttabbox}(\Package{floatrow}), der durch das Paket \Package{floatrow} + für Beschriftungen in Objektbreite zur Verfügung gestellt wird% + }% + \label{tab:tabularbox}% +} +\end{table} + + +\subsection{Untergleitobjekte} +\label{sec:subfloats}% +% +Das Paket \Package{floatrow} stellt allerhand Möglichkeiten zur Erstellung von +nebeneinanderliegenden Gleitobjekten sowie \enquote{Untergleitobjekten} bereit +und ist insbesondere in Verbindung mit den Fähigkeiten von \Package{caption} +respektive \Package{subcaption} sehr gut für dieses Unterfangen nutzbar. Dafür +werden die Umgebungen \Environment{floatrow}(\Package{floatrow}) sowie +\Environment{subfloatrow}(\Package{floatrow}) angeboten, wobei die letztere für +ein Beispiel verwendet wird. Als erstes muss der Typ der zu erzeugenden Labels +für Abbildungen und Tabellen definiert werden. Dies geschieht mit dem Befehl +\Macro{DeclareCaptionSubType}(\Package{subcaption}) aus dem Paket +\Package{subcaption}. +% +\begin{Preamble} +\DeclareCaptionSubType[alph]{figure} +\DeclareCaptionSubType[alph]{table} +\end{Preamble} +% +Anschließend werden die Untergleitobjekte formatiert. Dabei wird zum einen nach +dem alphanumerischen Label eine schließende Klammer gesetzt. Zum andern wird +ein Eintragen der Untergleitobjekte in das Abbildungsverzeichnis unterdrückt. +Lediglich die Bildunterschrift der Hauptabbildung wird in dieses eingetragen. +% +\begin{Preamble*} +\captionsetup[subfloat]{labelformat=brace,list=off} + +\end{Preamble*} +% +Mit diesen Einstellungen wird eine gleitende Abbildung erstellt, welche in +\autoref{fig:logos} zu sehen ist. Wurde der entsprechende Anker gesetzt, kann +zusätzlich auf die untergeordnete \autoref{fig:tud} sowie \autoref{fig:ddc} +verwiesen werden. +% +\begin{Trunk+} +\subsection{Untergleitobjekte} +Nachdem nun schon eine gleitende Abbildung und zwei gleitende Tabellen +erstellt wurden, folgt jetzt noch eine gleitende Abbildung mit zwei +Unterabbildungen. Durch die drei gesetzten Anker kann im Fließtext +sowohl auf \autoref{fig:logos} als auch auf \autoref{fig:tud} sowie +\autoref{fig:ddc} verwiesen werden. + +\end{Trunk+} +\begin{Trunk} +\begin{figure} +\ffigbox[\FBwidth]% + {\begin{subfloatrow}% + \ffigbox[\FBwidth]% + {\fbox{\includegraphics[height=2cm]{TUD-black}}}% + {\caption{Eine Abbildung}\label{fig:tud}}% + \ffigbox[\FBwidth]% + {\fbox{\includegraphics[height=2cm]{DDC-21}}}% + {\caption{Eine weitere Abbildung}\label{fig:ddc}}% + \end{subfloatrow}}% + {\caption{Eine Gleitumgebung mit zwei Abbildungen}\label{fig:logos}}% +\end{figure} + +\end{Trunk} +\InputCode + + +\subsection{Beeinflussung des Gleitprozesses} +Sobald das Dokument inhaltlich den finalen Zustand erreicht hat, haben Sie sich +zu diesem Zeitpunkt schon mit Sicherheit an das standardmäßige Vorgehen von +\hologo{LaTeX} gewöhnt und müssen respektive wollen gegebenenfalls nur noch bei +wenigen Gleitobjekten~-- über das optionale Argument der Gleitumgebungen zur +individuellen Empfehlung für die Platzierung~-- nachjustieren. Mögliche Werte +sind: +% +\begin{description}[labelindent=\parindent,leftmargin=*,style=nextline] +\item[\POParameter{h} (here)] + An der Stelle, wo es im Quelltext angegeben wurde~-- falls genügend Platz + vorhanden ist +\item[\POParameter{t} (top)] + Am oberen Ende der aktuellen oder der folgenden Seite +\item[\POParameter{b} (bottom)] + Am unteren Ende der aktuellen Seite +\item[\POParameter{p} (page)] + Auf einer separaten Seite für mindestens ein Gleitobjekt +\end{description} +% +Sie können eine, mehrere oder alle Optionen angeben, wobei die Reihenfolge +keine Rolle spielt. Der Algorithmus arbeitet alle ihm zur Verfügung gestellten +Optionen immer in der zuvor aufgezählten Reihenfolge ab, wobei diese nur als +Empfehlung und nicht als Verpflichtung angesehen werden. Es gibt folglich keine +Garantie, dass Ihr Vorschlag akzeptiert wird. Fügen sie dem optionalen Argument +ein~\PValue{!} an, so verhindern Sie, dass \hologo{LaTeX} weitere Optionen +evaluiert. Das Gleitobjekt wird anhand der optionalen Parameter positioniert, +selbst wenn dabei ein unschönes Seitenlayout entsteht. Kann das Gleitobjekt +technisch unmöglich auf die angegebene Weise positioniert werden, wird dieses +sowie alle folgenden aufgeschoben und am Ende des Abschnitts oder Kapitels +angehängt. Dieser Effekt ist wohl in den seltensten Fällen gewollt. + +Außerdem können die Pakete \Package{flafter} sowie \Package{placeins} genutzt +werden. Das erstgenannte verhindert das Auftreten von Gleitobjekten im Dokument +vor ihrer Definition im Quelltext. In der Konsequent bedeutet dies, dass die +Option \POParameter{t} Gleitobjekte nur am oberen Ende der nächsten Seite +jedoch nicht auf der aktuellen zulässt. Mit dem zweiten Paket können Barrieren +definiert werden, an welchen die Ausgabe aller noch in der Warteschlange +befindlichen Gleitobjekte forciert wird~-- beispielsweise vor bestimmten +Gliederungsüberschriften. Im Handbuch zu \TUDScript findet sich außerdem zum +Thema \enquote{\tudhyperref{sec:tips:floats}{Platzierung von Gleitobjekten}} +ein eigener Abschnitt mit weiterführenden Informationen. + + +\subsection{Abstellen des Gleitprozesses} +Trotz der zuvor genannten Vorteile von Gleitobjekten wird oftmals verlangt, den +Gleitprozess vollständig abzustellen. Dies bringt jedoch in den meisten Fällen +einige Probleme mit sich. Die Folge sind ein sehr unruhiges Erscheinungsbild +des Satzspiegels aufgrund schlecht gefüllter Seiten, außerdem im Zweifelsfall +viel Handarbeit mit hart kodierten Seitenumbrüchen sowie daraus resultierend +ein gegenüber von Umbruchänderungen äußerst anfälliges Dokument. Sollte es in +\emph{Einzelfällen} dennoch erforderlich sein, dass eine Abbildung oder Tabelle +nicht gleitet, ist die einzig logische Konsequenz, auf die Verwendung einer +Gleitumgebung gänzlich zu verzichten. + +Hierfür eignet sich beispielsweise die Umgebung \Environment{center}, welche +zum einen etwas Abstand vor und nach dem Objekt zum umgebenden Text erzeugt +und zum anderen die Grafik respektive Tabelle und die dazugehörige Bezeichnung +zusammenhält. \KOMAScript{} stellt für diesen Anwendungsfall das Makro +\Macro{captionof}(\Package{koma-script}) für die Beschriftung zur Verfügung. +Werden die Pakete \Package{caption} und \Package{hyperref} geladen, sollte +weiterhin \Macro{caption}(\Package{koma-script},\Package{caption}) ergänzt um +ein zuvor aufgerufenes +\Macro{captionsetup}[\PParameter{type=figure/table}](\Package{caption}) +genutzt werden. Damit lassen sich Bildunter- sowie Tabellenüberschriften auch +ohne die bekannten Gleitumgebungen \Environment{figure} respektive +\Environment{table} erzeugen. Das Vorgehen wird folgend demonstriert, in +\autoref{fig:nonfloating-A} ist das Ergebnis zu sehen. +% +\begin{Hint} +\begin{center} +\captionsetup{type=figure} +\includegraphics{TUD-black} +\caption{Eine nichtgleitende Grafik in einer \texttt{center}"=Umgebung} +\label{fig:nonfloating-A} +\end{center} + +\end{Hint} +\InputCode\noindent +% +Alternativ zu diesem Ansatz kann das Paket \Package{float} zum Einsatz kommen, +welches für Gleitumgebungen den Platzierungsparameter \POParameter{H} +bereitstellt. Das Resultat ist identisch zu \autoref{fig:nonfloating-A}. +% +\begin{Hint} +\begin{figure}[H] +\includegraphics{TUD-black} +\caption{Eine nichtgleitende Grafik in einer \texttt{figure}"=Umgebung} +\label{fig:nonfloating-B} +\end{figure} + +\end{Hint} +% +Mit den Mitteln des Paketes \Package{floatrow} lässt sich eine etwas bessere +Variante entwickeln, wobei für eine mehrmalige Anwendung ein eigenes Makro mit +den passenden Argumenten definiert werden sollte. Zum besseren Verständnis des +Quelltextauszuges ist die Dokumentation von \Package{floatrow} zu beachten. +% +\begin{Hint} +\floatbox[\captionsetup{type=figure}]{figure}[\FBwidth][% + \dimexpr\FBheight+\abovedisplayskip\relax% +][b]{\includegraphics{TUD-black}}{% + \caption{% + Eine nichtgleitende Grafik mit \texttt{\textbackslash floatbox}% + }% + \label{fig:nonfloating-C}% +} +\end{Hint} +\InputCode\noindent +% +Es wird hier trotz der vorhergehenden Ausführungen abermals ausdrücklich +empfohlen, Tabellen und Abbildungen in Gleitumgebungen zu setzen und die +korrekte Platzierung dem \hologo{LaTeX}"=Algorithmus zu überlassen. + + + + +\section{Tabellensatz} +\label{sec:tables}% +% +Zum Thema \enquote{Tabellensatz mit \hologo{LaTeX}} sind bereits zahlreiche +\hrfn{http://userpage.fu-berlin.de/latex/Materialien/tabsatz.pdf}{Leitfäden} +\cite{reichert2012} im Internet zu finden. Deshalb werde ich meine Ausführungen +zu diesem Punkt relativ kurz halten. Zwei Regeln sollten beim Satz von Tabellen +in jedem Fall beachtet werden: +% +\begin{enumerate}[% + itemindent=0pt,noitemsep,% + labelwidth=*,labelsep=1em,label=\Roman*.% +] +\item keine vertikalen Linien +\item keine doppelten Linien +\end{enumerate} +% +Das Paket \Package{booktabs} ist für den Satz von hochwertigen Tabellen eine +große Hilfe und stellt die Befehle \Macro{toprule}(\Package{booktabs}), +\Macro{midrule}(\Package{booktabs}) sowie \Macro{cmidrule}(\Package{booktabs}) +und \Macro{bottomrule}(\Package{booktabs}) für unterschiedliche horizontale +Linien bereit. +% +\begin{Preamble} +\usepackage{booktabs} +\end{Preamble} +% +Außerdem existiert das Paket \Package{array}, welches mit dem Befehl +\Macro{newcolumntype}(\Package{array}) die Definition eigener Spaltentypen +sowie die Verwendung von \enquote{Hooks} vor (\PValue{>\PParameter{\dots}}) und +nach (\PValue{<\PParameter{\dots}}) Einträgen innerhalb einer Spalte +(\PValue{>\PParameter{\dots}}\PName{Spaltentyp}\PValue{<\PParameter{\dots}}) +ermöglicht. +% +\begin{Preamble} +\usepackage{array} +\end{Preamble} +% +Für alle im Folgenden vorgestellten Umgebungen zum Setzen von Tabellen gilt, +dass die Inhalte zeilenweise angegeben werden, wobei die Einträge für die +einzelnen Spalten mit~\PValue{\&} voneinander zu trennen sind. Das Beenden +einer Tabellenzeile und der Wechsel zur nächsten erfolgt normalerweise mit +\PValue{\textbackslash\textbackslash}. Da jedoch einige \hologo{LaTeX}"=Pakete +diesen Befehl innerhalb von Tabellen lokal ändern ist es zur Vermeidung +unnötiger Fehler wesentlich sicherer, das Zeilenende ausschließlich mit +\Macro{tabularnewline} zu setzen. + +Im Folgenden wird in einigen Tabellen bei der Definition der Spalten vor der +ersten und nach der letzten das Konstrukt~\PValue{@\PParameter{}} verwendet, +was das \tudhyperref{sec:tips:table}{Einrücken der Tabellenspalten verhindert} +und im Handbuch genauer erläutert wird. + + +\subsection{Die Standardumgebung \Environment*{tabular}} +Normalerweise gibt es für \Environment{tabular} vier unterschiedliche +Spaltentypen. Die drei Spaltentypen~\PValue{l},~\PValue{c}~und~\PValue{r} +stehen für linksbündige, zentrierte und rechtsbündige Spalten zu Verfügung, +welche allerdings keinen Zeilenumbruch erlauben. Der Inhalt wird quasi wie in +einer \Macro{mbox} gesetzt, wodurch die Spalten sehr breit werden und über den +Seitenrand hinausragen können. + +Der Spaltentyp~\PValue{p}\Parameter{Breite} hingegen legt die Spaltenbreite +fest und setzt die Zellinhalte in einer \Macro{parbox}, wobei diese mit ihrer +obersten Zeile an der Grundlinie ausgerichtet wird. Das Paket \Package{array} +stellt außerdem die Spaltentypen~\PValue{m}\Parameter{Breite} +und~\PValue{b}\Parameter{Breite} bereit, welche ebenfalls mit \Macro{parbox} +gesetzt werden, die Ausrichtung an der Grundlinie jedoch zentriert respektive +an der unteren Zeile erfolgt. Es folgt ein Beispiel zur Nutzung der +\Environment{tabular}"=Umgebung. +% +\begingroup +\pcolumnfuzz{70pt} +\begin{Hint*} +\begin{tabular}{lcrp{33mm}} +\toprule +\textbf{Linksbündig} & \textbf{Zentriert} & +\textbf{Rechtsbündig} & \textbf{Blocksatz} \tabularnewline\midrule +a & b & c & Dieser Text wird im Blocksatz gesetzt\tabularnewline +aa & bb & cc & Auch Zeilenumbrüche sind vorhanden\tabularnewline +aaa & bbb & ccc & Worttrennungsmusterkontrolle\tabularnewline +\bottomrule +\end{tabular} +\end{Hint*} +\endgroup +% +Die Tabellenbreite ergibt sich aus der Breite der einzelnen Spalten. Bei dieser +Umgebung liegt es allein beim Anwender, auf die korrekte Breite der Tabelle zu +achten, damit diese nicht über die Seitenränder hinausragt. Das kann auf Dauer +recht aufwändig werden. Das Festlegen der Gesamtbreite einer Tabelle und das +automatische Berechnen einiger oder aller Spaltenbreiten ist sicher die +angenehmere Variante. Wie sich dies sehr komfortabel bewerkstelligen lässt, +wird~-- ebenso wie die Lösung des Problems eines nicht umbrochenen Eintrags wie +in der letzten Spalte der dritten Zeile der obigen Tabelle~-- im nachfolgenden +Abschnitt demonstriert. + + +\subsection{Tabellen mit variabler Spaltenbreite} +Die Pakete \Package{tabularx}, \Package{tabulary} oder auch \Package{tabu} +stehen für das Setzen von Tabellen mit dynamisch berechneter Spaltenbreite bei +fest vorgegebener Gesamtbreite zur Verfügung, welche nun kurz vorgestellt +werden sollen. Die beiden erstgenannte Pakete \Package{tabularx} sowie +\Package{tabulary} stammen vom gleichen Paketautor und haben sich als sehr +stabil erwiesen. Das Paket \Package{tabu} ist relativ neu und versucht, viele +Funktionalitäten ganz unterschiedlicher Pakete für den Tabellensatz in sich zu +vereinen und glänzt insbesondere durch seine Vielseitigkeit. +% +\begin{Preamble} +\usepackage{tabularx} +\usepackage{tabulary} +\usepackage{tabu} +\usepackage{longtable} + +\end{Preamble} +% +Jedes der Pakete stellt einen oder mehrere neue Spaltentypen zur Verfügung. +Dies bedeutet jedoch nicht, dass in den dazugehörigen Tabellenumgebungen +lediglich diese genutzt werden können. Vielmehr werden diese zusätzlich +angeboten, was bedeutet, dass auch in den neuen Tabellenumgebungen weiterhin +die gewohnten Spaltentypen~\PValue{l},~\PValue{c},~\PValue{r}~und~\PValue{p} +verfügbar sind. + +\subsubsection{Die Tabellenumgebung \Environment*{tabularx}} +\label{sec:tabularx}% +% +Das Paket \Package{tabularx} stellt den Spaltentyp~\PValue{X} bereit, welcher +prinzipiell dem Spaltentyp~\PValue{p} entspricht. Auch für diesen wird eine +\Macro{parbox} verwendet, allerdings wird deren Breite \emph{automatisch} +berechnet. Die Umgebung \Environment{tabularx}(\Package{tabularx}) erwartet vor +der Spaltentypenangabe als obligatorisches Argument die gewünschte Breite der +Tabelle. Spalten vom Typ~\PValue{l},~\PValue{c}~und~\PValue{r} werden jedoch +weiterhin \emph{ohne} Zeilenumbruch gesetzt werden. Nur für Spalten vom +Typ~\PValue{X} und deren Derivate wird aus dem verbliebenen Platz die Breite +berechnet. Für die \Environment{tabularx}(\Package{tabularx})"~Umgebung wird +das vorherige Beispiel wiederholt. +% +\begingroup +\pcolumnfuzz{70pt} +\begin{Hint*} +\begin{tabularx}{11.7cm}{lcrX} +\toprule +\textbf{Linksbündig} & \textbf{Zentriert} & +\textbf{Rechtsbündig} & \textbf{Blocksatz} \tabularnewline\midrule +a & b & c & Dieser Text wird im Blocksatz gesetzt\tabularnewline +aa & bb & cc & Auch Zeilenumbrüche sind vorhanden\tabularnewline +aaa & bbb & ccc & Worttrennungsmusterkontrolle\tabularnewline +aaaa & bbbb & cccc & \hspace{0pt}Worttrennungsmusterkontrolle +\tabularnewline\bottomrule +\end{tabularx} +\end{Hint*} +\endgroup +% +Die Breite der letzten Spalte wurde dabei aus der Angabe der Gesamtbreite mit +\PValue{11.7cm} berechnet. Des Weiteren ist zu sehen, wie das Problem des +Zeilenumbruchs behandelt werden kann. Normalerweise wird das erste Wort in +einem Absatz von \hologo{LaTeX} \emph{nie} umbrochen. Dies kann durch das +Einfügen eines breitenlosen Leerzeichens mit \Macro{hspace}[\PParameter{0pt}] +umgangen werden. Die gefundene Lösung ist allerdings alles andere als elegant. + +Mit den Möglichkeiten des Paketes \Package{array} ist das Problem relativ +schnell gelöst. Es wird mit \Macro{newcolumntype}(\Package{array}) ein neuer +Spaltentyp definiert. Das erste Argument legt den Namen des Spaltentyps fest. +Mit \PValue{>\Parameter{Definitionen}}\Parameter{Typ} wird im zweiten Argument +das Ausführen von \PName{Definitionen} vor dem Setzen des eigentlichen Inhaltes +in einer \Parameter{Typ}"~Spalte definiert. Es wird ein neuer, auf der +\PValue{X}"~Spalte basierender Typ~\PValue{Y} definiert, welcher zu Beginn der +Spalte den Phantomabstand automatisch einfügt. Darauf basierend werden drei +Spaltentypen für den links- und rechtsbündigen sowie zentrierten Textsatz mit +einem möglichen Zeilenumbruch erstellt. +% +\begin{Trunk+} +\subsection{Tabellen als Gleitobjekte} +Tabellen sollten in der \texttt{table}"=Gleitumgebung gesetzt werden. +Welche Umgebung für die Tabelle selbst dabei genutzt wird ist dabei +nicht relevant. Es können sowohl die normale \texttt{tabular}"=Umgebung +als auch die Umgebungen \texttt{tabularx}, \texttt{tabulary} sowie +\texttt{tabu} für variable Spaltenbreiten bei einer fest vorgegebenen +Tabellenbreite oder jede andere Tabellenumgebung genutzt werden. +Nachfolgend wird dies an mehreren Beispielen demonstriert. + +\subsubsection{Eine gleitende tabularx-Tabelle} +Es wird eine Tabelle mithilfe der \texttt{tabularx}"=Umgebung erstellt. +Zu sehen ist diese in \autoref{tab:tabularx}. Für diese werden zuvor +neue Spaltentypen definiert. + +\end{Trunk+} +\CodeHook{\renewcommand*{\newcolumntype}[2]{}} +\begin{Trunk*} +\newcolumntype{Y}{>{\hspace{0pt}}X} +\newcolumntype{D}{>{\raggedright}Y} +\newcolumntype{E}{>{\centering}Y} +\newcolumntype{F}{>{\raggedleft}Y} + +\end{Trunk*} +% +Nachfolgend wird die Tabelle gesetzt mit den neuen Spaltentypen gesetzt. +% +\begin{Trunk} +\begin{table} +\begin{tabularx}{\textwidth}{@{}DEFY@{}} +\toprule +\textbf{Linksbündig} & \textbf{Zentriert} & +\textbf{Rechtsbündig} & \textbf{Blocksatz} \tabularnewline +\midrule +Ein linksbündiger Blindtext zur Demonstration einer S"~Spalte & +Ein zentrierter Blindtext zur Demonstration einer T"~Spalte & +Ein rechtsbündiger Blindtext zur Demonstration einer U"~Spalte & +Ein längerer Blindtext im Blocksatz zur besseren Demonstration +einer Y"~Spalte\tabularnewline +\bottomrule +\end{tabularx} +\caption{Eine \texttt{tabularx}"=Tabelle}\label{tab:tabularx} +\end{table} + +\end{Trunk} +\InputCode\noindent +% +Die Breite der einzelnen \PValue{X}"~Spalten und deren Derivaten ist dabei +identisch. Ein Gewichten der Spaltenbreiten untereinander ist prinzipiell +möglich, allerdings mit einigen Einschränkungen verbunden. Genaueres hierzu ist +der Dokumentation des Paketes \Package{tabularx} zu entnehmen. + +\subsubsection{Die Tabellenumgebung \Environment*{tabulary}} +\label{sec:tabulary}% +% +Das Paket \Package{tabulary} verfolgt im Vergleich zum zuvor beschrieben Paket +\Package{tabularx} einen etwas anderen Ansatz. Anstatt die verfügbare Breite +über alle Spalten gleichmäßig zu verteilen, werden die Spaltenbreite anhand des +jeweils darin befindlichen Inhaltes zueinander gewichtet. Dafür werden die vier +Spaltentypen~\PValue{L},~\PValue{C},~\PValue{R}~sowie~\PValue{J} zur Verfügung +gestellt. Diese entsprechen prinzipiell dem Spaltentyp~\PValue{p}, allerdings +wird deren Breite \emph{automatisch} berechnet, wobei Spalten mit mehr Inhalt +breiter gesetzt werden. Für die automatische Berechnung der Spaltenbreiten muss +verständlicherweise die gewünschte Gesamtbreite der Tabelle angegeben werden, +was bei der \Environment{tabulary}(\Package{tabulary})"~Umgebung mit dem ersten +obligatorischen Argument vor der Angabe der Spaltendefinition erfolgt. Werden +eine oder mehrere Spalten vom Typ~\PValue{l},~\PValue{c}~und~\PValue{r} +angegeben, so werden diese weiterhin in ihrer natürlichen Breite und ohne +Zeilenumbruch gesetzt. + +Die Gewichtung der Spalten vom Typ~\PValue{LCRJ} und deren Derivate wird aus +dem verbliebenen Platz die Breite berechnet. Die Berechnung der Spaltenbreite +kann durch den Anwender außerdem über zwei Längen beeinflusst werden. Mit +\Length{tymin}(\Package{tabulary}) wird die Mindestgröße für Spalten +festgelegt. Sollten Sie wissen, dass eine Spalte sehr schmal wird, können Sie +allerdings auch einfach eine der Standardspalten~\PValue{lcrp} nutzen. Mit der +Länge \Length{tymax}(\Package{tabulary}) kann die maximale Ausdehnung einer der +Spalten vom Typ~\PValue{LCRJ} festgelegt werden. + +Für die \Environment{tabulary}(\Package{tabulary})"~Umgebung wird das vorherige +Beispiel wiederholt. Zu beachten ist, dass die Spaltentypen~\PValue{LCRJ} mit +dem Makro \Macro{tyformat}(\Package{tabulary}) bereits ein breitenloses +Leerzeichen einsetzen, womit sich das manuelle Einfügen von selbigem durch den +Anwender erübrigt. +% +\begin{Trunk+} +\subsubsection{Eine gleitende tabulary-Tabelle} +Es wird eine Tabelle mithilfe der \texttt{tabulary}"=Umgebung erstellt. +Zu sehen ist diese in \autoref{tab:tabulary}. + +\end{Trunk+} +\begin{Trunk} +\begin{table} +\begin{tabulary}{\textwidth}{@{}LCRJ@{}} +\toprule +\textbf{Linksbündig} & \textbf{Zentriert} & +\textbf{Rechtsbündig} & \textbf{Blocksatz} \tabularnewline\midrule +Ein linksbündiger Blindtext zur Demonstration einer L"~Spalte & +Ein zentrierter Blindtext zur Demonstration einer C"~Spalte & +Ein rechtsbündiger Blindtext zur Demonstration einer R"~Spalte & +Ein wesentlich längerer und absolut inhaltsleerer Blindtext im +Blocksatz für eine um einiges bessere Demonstration einer J"~Spalte +\tabularnewline\bottomrule +\end{tabulary} +\caption{Eine \texttt{tabulary}"=Tabelle}\label{tab:tabulary} +\end{table} + +\end{Trunk} +\InputCode + + +\subsubsection{Die Tabellenumgebung \Environment*{tabu}} +\label{sec:tabu}% +% +Das Paket \Package{tabu} bietet eine mächtige und komfortable Alternative zu +\Package{tabularx}. Es kam in diesem Tutorial bereits für die Verzeichnisse von +Abkürzungen und Symbolen in \autoref{sec:glossaries} zum Einsatz. Leider ist +das Paket in er aktuellen Version~v2.8 mit Vorsicht zu genießen. Zum einen +wären für das Paket in der aktuellen Version seit geraumer Zeit ein paar +kleinere Bugfixes notwendig, mehr dazu sehen Sie später. Außerdem wird sich die +\hrfn{https://groups.google.com/d/topic/comp.text.tex/xRGJTC74uCI}{% + Benutzerschnittstelle in einer zukünftigen Version% +} +sehr stark ändern. Sie sollten sich bewusst sein, dass mit der Version~v2.8 +gesetzte Dokumente gegebenenfalls später angepasst werden müssen. + +Nichtsdestotrotz soll hier folgend die individuelle Verwendung einer +\Environment{tabu}(\Package{tabu})"~Umgebung gezeigt werden, insbesondere weil +für das Setzen umbruchfähiger Tabellen mit automatisch berechneten +Spaltenbreiten momentan (fast) keine Alternative zu der Umgebung +\Environment{longtabu}(\Package{tabu}) existiert. + +Dieses Paket definiert ebenso einen Spaltentyp~\PValue{X}, welchem allerdings +zusätzlich ein optionales Argument angehangen werden kann. Mit diesem lässt +sich sowohl die Gewichtung der automatisch berechneten Spalten untereinander +als auch die Positionierung zur Grundlinie sowie die Ausrichtung des Inhaltes +ändern. +% +\begingroup +\pcolumnfuzz{70pt} +\begin{Hint*} +\begin{tabu} to 11.7cm {lcrX} +\toprule +\textbf{Linksbündig} & \textbf{Zentriert} & +\textbf{Rechtsbündig} & \textbf{Blocksatz} \tabularnewline\midrule +a & b & c & Dieser Text wird im Blocksatz gesetzt\tabularnewline +aa & bb & cc & Auch Zeilenumbrüche sind vorhanden\tabularnewline +aaaa & bbbb & cccc & Worttrennungsmus\-terkontrolle\tabularnewline +aaa & bbb & ccc & Worttrennungsmusterkontrolle +\tabularnewline\bottomrule +\end{tabu} +\end{Hint*} +\endgroup +% +Das Beispiel zeigt auch gleich das momentan meiner Meinung nach größte Problem +des Paketes: Bei mehrzeiligen Zellen fehlt vertikale Zwischenraum zur nächsten +Tabellenzeile. Nun besteht entweder die Möglichkeit, bei jeder Angabe einer +Spalte im Tabellenkopf, welche eine \Macro{parbox} verwendet, mit dem Ausdruck +\PValue{>\PParameter{\Macro{strut}}} die fehlenden Unterlänge auszugleichen +oder es wird abermals ein entsprechender Spaltentyp definiert. Das ist für +die \PValue{X}"~Spalten der Umgebung \Environment{tabu}(\Package{tabu}) etwas +schwieriger, da \Macro{newcolumntype}(\Package{array}) normalerweise die +Definition eines optionalen Argumentes nicht vorgesehen ist. Mit ein wenig +Trickserei ist das dennoch möglich: +% +\begin{Trunk+} +\subsubsection{Eine gleitende tabu-Tabelle} +In \autoref{tab:tabu} ist eine weitere Tabelle mit variabler Breite der +Spalten und festgelegter Gesamtbreite zu sehen, welche in der Umgebung +\texttt{tabu} gesetzt wurde. Auch für diese wird zuerst ein neuer +Spaltentyp definiert, der die Unzulänglichkeiten der Umgebung reduziert. +Mit \texttt{\textbackslash ttabbox} aus dem Paket \texttt{floatrow} wird +die Beschriftung auf die Breite der Tabelle begrenzt. + +\end{Trunk+} +\CodeHook{\renewcommand*{\newcolumntype}[2]{}} +\begin{Trunk*} +\makeatletter +\newcolumntype{Z}{} +\renewcommand*{\NC@rewrite@Z}[1][]{% + \NC@find>{\hspace{0pt}}X[#1]<{\@finalstrut\@arstrutbox}% +} +\makeatother + +\end{Trunk*} +% +Anschließend kann der \PValue{Z}"~Spaltentyp äquivalent zu \PValue{X} genutzt +werden. Zu beachten ist dabei insbesondere die Möglichkeit, die Spalten in +ihrer resultierenden Breite sehr einfach zueinander gewichten zu können~-- im +Gegensatz zur Umgebung \Environment*{tabularx}, wo dieses Unterfangen etwas +schwieriger ist. Das Ergebnis ist in \autoref{tab:tabu} zu sehen. Zu beachten +ist die Verwendung von \Macro{ttabbox}(\Package{floatrow}) aus dem Paket +\Package{floatrow}, um die Beschriftung an die Breite der Tabelle anzupassen. +Genaueres dazu in \autoref{sec:floatlayout}. +% +\begin{Trunk} +\begin{table} +\ttabbox{% + \begin{tabu} to .8\textwidth {@{}Z[3,l]Z[3,c]Z[3,r]Z[2,j]@{}} + \toprule + \textbf{Linksbündig} & \textbf{Zentriert} & + \textbf{Rechtsbündig} & \textbf{Blocksatz} \tabularnewline\midrule + Ein linksbündiger Blindtext zur Demonstration einer Z[l]"~Spalte & + Ein zentrierter Blindtext zur Demonstration einer Z[c]"~Spalte & + Ein rechtsbündiger Blindtext zur Demonstration einer Z[r]"~Spalte & + Ein Blindtext im Blocksatz innerhalb einer Z"~Spalte + \tabularnewline\bottomrule + \end{tabu}% +}{% + \caption[Eine \texttt{tabu}"=Tabelle]{% + Eine \texttt{tabu}"=Tabelle in Verbindung mit dem Befehl + \texttt{\textbackslash ttabbox}, welcher vom Paket \texttt{floatrow} + für Beschriftungen in Objektbreite bereitgestellt wird% + }% + \label{tab:tabu}% +} +\end{table} + +\end{Trunk} +\InputCode + + + +\section{Querverweise} +\label{sec:references}% +% +Damit alle möglichen Querverweise in einem PDF"~Dokument automatisch verlinkt +werden, sollte das Paket \Package{hyperref} geladen werden. Um die erzeugten +Links verträglich aussehen zu lassen, werden die beiden Paketoptionen +\Option{colorlinks}(\Package{hyperref}) sowie \Option*{linkcolor=blue} +verwendet. Da \Package{hyperref} allerhand Veränderungen an vielen +Standardbefehlen vornimmt, sollte dieses als letztes in der Präambel +eingebunden werden. Nur Pakete, bei denen in der Dokumentation explizit darauf +hingewiesen wird, dass diese nach \Package{hyperref} zu laden sind, sollten +auch danach folgen. Eines dieser wenigen Pakete ist das in diesem Tutorial +verwendete \Package{glossaries}. +% +\begin{Hint} +\usepackage[colorlinks,linkcolor=blue]{hyperref} + +\end{Hint} +% +Um auf ein bestimmtes Objekt wie beispielsweise eine Tabelle, eine Abbildung +oder einen bestimmten Anschnitt im Dokument referenzieren zu können, muss mit +\Macro{label}[\Parameter{label}] ein Anker für selbiges an der entsprechenden +Stelle gesetzt werden. Bei Überschriften sollte dies direkt nach der Nutzung +des Gliederungsbefehls% +\footnote{% + \Macro{chapter}(\Package{koma-script}), + \Macro{section}(\Package{koma-script}) etc.% +} +erfolgen. Für Abbildungen, Tabellen oder andere Objekte in Gleitumgebungen muss +der Anker unmittelbar nach der Verwendung von +\Macro{caption}(\Package{koma-script},\Package{caption}) respektive +\Macro{captionof}(\Package{koma-script}) erstellt werden. Um nun auf diesen +Anker zu referenzieren, sollte nicht \Macro{ref} sondern +\Macro{autoref}(\Package{hyperref}) im Fließtext genutzt werden. Letztgenannter +Befehl erzeugt nicht nur einen Link mit der dazugehörigen Nummerierung sondern +stellt dieser die Bezeichnung des referenzierten Objektes% +\footnote{\enquote{Abbildung}, \enquote{Tabelle}, \dots} +voran. + +Mit dem Befehl \Macro{pageref} lässt sich auf die Seite eines Ankers verweisen. +Das Paket \Package{varioref} kann dabei unterscheiden, ob der Anker sich auf +der aktuellen Seite, auf einer Seite direkt davor beziehungsweise danach oder +auf einer entfernteren Seite befindet und dementsprechend einen Hinweis darauf +ausgeben. Hierfür werden die Befehle \Macro{vref}(\Package{varioref}) sowie +\Macro{vpageref}(\Package{varioref}) zur Verfügung gestellt. Das Paket +\Package{cleveref} vereint die Vorzüge von \Macro{autoref}(\Package{hyperref}) +in Verbindung mit \Macro{vref}(\Package{varioref}) durch den Befehl +\Macro{cref}(\Package{cleverref}). + + + +\section{Zitate} +Für das wörtliche Zitieren kann das Paket \Package{csquotes} verwendet werden. +Dieses stellt den Befehl \Macro{enquote}(\Package{csquotes}) bereit, der die +kennzeichnenden Anführungszeichen automatisch in Abhängigkeit der verwendeten +Dokumentsprache setzt. +% +\begin{Hint} +\usepackage{csquotes} +\end{Hint} +% +Da für die unterschiedlichen Fachdisziplinen teils sehr unterschiedliche +Zitierrichtlinien existieren, kann hier keine allgemeingültige Empfehlung zu +Stilfragen gegeben werden. Zu beachten ist auf jeden Fall, dass zu wörtlichen +Zitaten eine Quellenangabe erfolgen \emph{muss}. Dabei sollte darauf geachtet +werden, dass nicht nur die Quelle selbst sondern zumindest auch die Seitenzahl +des Zitats angegeben wird. +% +\begin{refsection}[\jobname-temp.bib] +\begin{Trunk+} +\section{Zitate} +Bei der Verwendung von wörtlichen Zitaten sollten diese als solche +gekennzeichnet werden. +\end{Trunk+} +\begin{Trunk*} +\enquote{Dies ist ein zugegebenermaßen nicht sehr sinnvolles Zitat.} +\cite[58]{hanisch14} +\end{Trunk*} +\begin{Trunk+} +Für eine möglichst gut nachvollziehbare Referenz sollte nicht nur +das Werk selber sondern zumindest die Seitenzahl und gegebenenfalls +der Absatz der originalen Textstelle angegeben werden. +\end{Trunk+} +% +Längere Zitate sollten abgesetzt vom Fließtext ausgegeben werden. Hierfür +bieten sowohl die Standard"~ als auch die \KOMAScript-Klassen standardmäßig +die Umgebungen \Environment{quote}(\Package{koma-script}) und +\Environment{quotation}(\Package{koma-script}) an. Allerdings verwenden beide +fest eingestellte Absatzauszeichnungen. Sollen jedoch die mit der Option +\Option{parskip}(\Package{koma-script}) vorgegebenen Einstellungen für Absätze +beachtet werden, so bietet sich das Paket \Package{quoting} an, welches die +gleichnamige Umgebung \Environment{quoting}(\Package{quoting}) definiert und +die Absätze wie im restlichen Dokument auszeichnet. +% +\begin{Preamble} +\usepackage{quoting} + +\end{Preamble} +% +\begin{Trunk*} +\begin{quoting} +\enquote{% + Dies ist ein noch sinnloseres Zitat. Allerdings wird zumindest die + Wirkung der Umgebung \texttt{quoting} bei der Absatzauszeichnung + deutlich. + + Wie zu sehen ist, wird der zweite Absatz~-- wie jeder weitere~-- + aufgrund der Option \texttt{parskip=false} eingezogen. +} +\cite[sinngemäß nach][\pno{} 12, zweiter Absatz]{hanisch14} +\end{quoting} +\end{Trunk*} +\begin{Trunk+} +Ebenfalls sollten sinngemäße Zitate mit einer möglichst genauen Referenz +angegeben werden. Dies kann im Laufe der Arbeit auch für einen selbst von +Vorteil sein, wenn beispielsweise die originale Textpassage noch einmal +analysiert werden soll. + +\end{Trunk+} +\begin{quoting}[rightmargin=0pt] +\makeatletter +\let\markboth\@gobbletwo +\let\markright\@gobble +\makeatother +\printbibliography +\end{quoting} +\end{refsection} + + + +\section{Worttrennungen} +\label{sec:hyphenation}% +% +Bei der Verwendung von \hologo{LaTeXe} gibt es ab und an das Problem, dass +bestimmte Wörter am Zeilenende falsch getrennt werden. Dies hat historische +Gründe. Als \hologo{TeX} in den 1980er"~Jahren entwickelt wurde, war es +aufgrund der zu dieser Zeit zur Verfügung stehenden Speichergrößen schier +unmöglich, die Worttrennungen mit einem Wörterbuchansatz umzusetzen. +Stattdessen wurde~-- um den benötigten Speicherbedarf möglichst gering zu +halten~-- ein Algorithmus entworfen, der mögliche Trennstellen in einem Wort +mit einer Mustererkennung ermittelt. Die verwendeten Muster basieren jedoch +auf der englischen Sprache, weshalb in nicht"~englischsprachigen Texten auch +heute noch teilweise falsche Trennstellen gefunden werden. + +In \autoref{sec:introduction} wurde bereits auf das Paket +\Package{hyphsubst} hingewiesen, welches dieses Manko~-- aufgrund der nicht +mehr so stark gegebenen Restriktionen bezüglich des Speicherbedarfes~-- mit +einem Wörterbuch behebt. Dieses Paket muss für \Engine{pdfLaTeX} vom Anwender +eingebunden werden, \Engine{LuaLaTeX} und \Engine{XeLaTeX} verwenden die +Trennmuster~-- ein geladenes Sprachpaket wie \Package{polyglossia} oder +\Package{babel} vorausgesetzt~-- automatisch. Damit auch Wörter mit Umlauten +richtig getrennt werden, ist zudem das Paket \Package{fontenc} mit der +\PValue{T1}"~Schriftkodierung respektive \Package{fontspec} notwendig. Der +Beginn einer Dokumentpräambel könnte folgendermaßen aussehen: +% +\begin{Hint} +\documentclass[ngerman,§\PName{Klassenoptionen}§]§\Parameter{Dokumentklasse}§ +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\end{Hint} +% +Die Option \Option{ngerman}(\Package{hyphsubst}) lädt dabei die Trennmuster für +die neue deutsche Rechtschreibung, wobei der Wert \PValue{ngerman-x-latest} die +neuesten aller verfügbaren Trennmuster lädt. Für die alte Orthografie ist +stattdessen die Option \Option{german}(\Package{hyphsubst}) mit dem Wert +\PValue{german-x-lastest} zu verwenden. + + +\subsection{Einmalige und globale Worttrennungskorrektur} +Sollte es dennoch passieren, dass ein Wort nicht korrekt getrennt wird, lässt +sich dies manuell korrigieren. Dafür stellt das Paket \Package{babel} mehrere +Kurzbefehle zur Verfügung. Mit dem Makro \Macro{hyphenation} lassen sich für +ein bestimmtes Wort außerdem alle potenziellen Trennstellen angeben. Zum Thema +\tudhyperref{sec:tips:hyphenation}{Worttrennungen in deutschsprachigen Texten} +ist im \TUDScript-Handbuch unter dem Kapitel Tipps~\&~Tricks mehr zu finden. +Dort wird auch erläutert, wie das Problem der alleinigen Trennung von Wörtern +mit Bindestrich an selbigem umgangen werden kann. + + +\subsection{Worttrennung im Flattersatz} +Normalerweise ist bei \hologo{LaTeXe} die Worttrennung für den Flattersatz% +\footnote{\Macro{raggedright}, \Macro{raggedleft}, \Macro{centering}} +deaktiviert. Mit dem Paket \Package{ragged2e} kann diese aktiviert werden. Nach +dem Laden stehen die Befehle \Macro{Centering}(\Package{ragged2e}), +\Macro{RaggedLeft}(\Package{ragged2e}) sowie +\Macro{RaggedRight}(\Package{ragged2e}) für den Anwender zur Verfügung, um +Worttrennungen im Flattersatz zu verwenden. Die Option +\Option{newcommands}(\Package{ragged2e}) überschreibt die originalen Befehle +\Macro{centering}, \Macro{raggedleft} und \Macro{raggedright} mit den +korrelierten Befehlen aus dem Paket. Genaueres dazu ist der Dokumentation des +Paketes zu entnehmen. + + + +\section{Mikrotypografische Feinheiten} +Unter Mikrotypografie oder Detailtypografie wird die Gestaltung folgender +Feinheiten des Schriftsatzes verstanden: +\begin{itemize}[noitemsep] +\item korrekte Anwendung der Satzzeichen +\item Schriftart, Kapitälchen und Ligaturen +\item Wortabstände sowie Laufweite (Buchstaben- und Zeichenabstände) +\item optischer Randausgleich +\end{itemize} + +\noindent Die letzten beiden Punkte werden sensationell gut durch das Paket +\Package{microtype} bearbeitet. Dieses muss lediglich in der Präambel geladen +werden, wobei es nicht mit der klassischen \hologo{TeX}"~Engine, wohl jedoch +mit \Engine{pdfTeX} als auch \Engine{LuaTeX} sowie \Engine{XeTeX} funktioniert. +% +\begin{Preamble} +\usepackage[babel]{microtype} + +\end{Preamble} +% +Die Option \Option{babel}(\Package{microtype}) ist nur notwendig, wenn einzelne +Textpassagen oder das gesamte Dokument in Englisch oder Französisch verfasst +werden und hierfür die genutzte Sprache mit den entsprechenden Möglichkeiten +von \Package{babel} eingestellt wird. + +Das korrekte Anwenden von Satzzeichen wird für deutschsprachige Texte bereits +in mehreren Artikeln \cite{neubauer1996,neubauer1997,struckmann2007,bier2009} +sehr gut erläutert, weshalb ein Hinweis auf diese Arbeiten für weitergehende +Informationen zu dieser Thematik absolut ausreichend ist. Nachfolgend werden +Tipps gegeben sowie einige \hologo{LaTeXe}"=Pakete vorgestellt, die bei der +Umsetzung der in den genannten Artikeln erläuterten Empfehlungen helfen. + + +\subsection{Abkürzungen} +In \cite{struckmann2007} wird gleich zu Beginn darauf hingewiesen, wie häufig +verwendete Abkürzungen sehr einfach im Dokument verwendet werden können und +dabei typografisch richtig gesetzt werden. Beispielsweise gelingt dies für die +Abkürzung \enquote{zum~Beispiel~(z.\,B.)} mit dieser Definition: +% +\begin{Hint} +\newcommand{\zB}{\mbox{z.\,B.}\xspace} +\end{Hint} +% +Wenn ohnehin das Paket \Package{glossaries} für Akronyme verwendet wird, kann +alternativ dazu auch dessen Funktionalität genutzt werden. Nach dem Einbinden +muss in der Präambel lediglich Folgendes eingefügt werden: +% +\begin{Hint} + \newignoredglossary{abbreviation} + \newcommand*{\newabbreviation}[4][]{% + \newacronym[type=abbreviation,#1]{#2}{\mbox{#3\xspace}}{#4}% + }% +\end{Hint} +% +Mit \Macro{newignoredglossary}(\Package{glossaries}) wird dabei ein Glossar +erstellt, welche bei der Ausgabe aller Glossare mit +\Macro{printglossaries}(\Package{glossaries}) ignoriert wird. Im Dokument kann +die gewünschte Abkürzung mit +% +\begin{Hint*} +\newabbreviation{zB}{z.\,B.}{zum Beispiel} +\end{Hint*} +% +definiert und über die gewohnten Befehlen aus \Package{glossaries} verwendet +werden. +% +\begin{Hint*} +Die Ausgabe der soeben definierten Abkürzung \enquote{\acrshort{zB}} +erfolgt mit dem Befehl \texttt{\textbackslash acrshort}. Wurde das +Paket \texttt{glossaries} mit der Option \texttt{shortcut} geladen, +kann auch das Makro \texttt{\textbackslash acs} genutzt werden. +\end{Hint*} + + +\subsection{Listen} +\label{sec:lists}% +% +Für Auflistungen aller Art bietet \hologo{LaTeX} die drei Standardumgebungen +\Environment{itemize}(\Package{koma-script},\Package{enumitem}), +\Environment{enumerate}(\Package{koma-script},\Package{enumitem}) und +\Environment{description}(\Package{koma-script},\Package{enumitem}). Das +häufigste Anliegen bei der Verwendung dieser Umgebungen ist das Reduzieren +der Abstände zwischen den einzelnen, mit +\Macro{item}(\Package{koma-script},\Package{enumitem}) gesetzten Punkten, +welche sehr häufig als zu groß empfunden werden. Eine Aufzählung erscheint ohne +Anpassungen wie folgt: +% +\CodePreamble{Aufzählung mit vertikalen Standardabständen} +\begin{Hint*} +\begin{itemize} +\item erster Punkt +\item zweiter Punkt +\item dritter Punkt +\end{itemize} +\end{Hint*} +% +Dabei wirken die Abstände zwischen den Punkten tatsächlich etwas +überdimensioniert. Mit \Package{enumitem} können alle Listenumgebungen an die +individuellen Bedürfnisse angepasst werden. +% +\begin{Preamble} +\usepackage{enumitem} +\end{Preamble} +% +Um diese ungewollten Abstände zwischen den Listenpunkten zu entfernen, kann der +Schlüssel \Option{noitemsep}(\Package{enumitem}) verwendet werden. Mit dem +Befehl \Macro{setlist}(\Package{enumitem}) werden~-- ohne zusätzliche Angaben +im optionalen Argument~-- alle Umgebungen für Aufzählungen global geändert. +Hier soll dies lediglich für die Umgebung \Environment*{itemize} geschehen: +\begin{Preamble*} +\setlist[itemize]{noitemsep} + +\end{Preamble*} +\CodePreamble{Aufzählung ohne vertikale Abstände} +\begin{Hint*} +\begin{itemize} +\item erster Punkt +\item zweiter Punkt +\item dritter Punkt +\end{itemize} + +\end{Hint*} +% +Alternativ zur globalen Änderung einer speziellen oder aller Aufzählungslisten +kann der Schlüssel \PValue{noitemsep} auch nur gezielt an einzelne Umgebung +über das optionale Argument weitergereicht werden +(\Macro*{begin}[\PParameter{itemize}\POParameter{noitemsep}]). + +Natürlich erlaubt das Paket noch weitergehende Einstellungen für die Umgebungen +\Environment{itemize}(\Package{koma-script},\Package{enumitem}), +\Environment{enumerate}(\Package{koma-script},\Package{enumitem}) und +\Environment{description}(\Package{koma-script},\Package{enumitem}). +Zusätzlich können diese für eigene Aufzählungsumgebungen geklont und den +eigenen Bedürfnissen angepasst werden. Genaueres hierzu ist der Dokumentation +des Paketes \Package{enumitem} entnehmen. + + +\subsection{Ligaturen} +Die meisten \hologo{LaTeX}"=Schriftfamilien enthalten Ligaturen, die für einen +typografisch sauberen Satz bei zusammengesetzten Wörtern, wie sie gerade im +Deutschen häufig vorkommen, aufgetrennt werden müssten. Mit der Anwendung +\Application{DeLig}<delig> kann dies automatisiert geschehen. Wird +\Engine{LuaLaTeX} als Textsatzsystem genutzt, kann alternativ das Paket +\Package{selnolig} verwendet werden. + + +\subsection{Auslassungspunkte} +Das typografisch richtige Setzen von Auslassungspunkten mit den Befehlen +\Macro{dots} respektive \Macro{textellipsis} wird im Handbuch unter +\tudhyperref{sec:tips:dots}{Das Setzen von Auslassungspunkten} genauer +beschrieben, weshalb hier nur kurz darauf eingegangen wird. Es wird das Paket +\Package{ellipsis} benötigt. +% +\begin{Preamble} +\usepackage{ellipsis} +\end{Preamble} +% +Für deutschsprachige Texte sollten außerdem noch folgendes ausgeführt werden: +% +\begin{Preamble} +\let\ellipsispunctuation\relax + +\end{Preamble} + + +\subsection{Mathematiksatz} +Von \hologo{LaTeXe} werden einige Umgebungen für das Setzen mathematischer +Formeln und Ausdrücke bereitgestellt, welche meist jedoch nicht \emph{alle} +Anforderungen eines Nutzers an den Mathematiksatz erfüllen können. Das Paket +\Package{amsmath} bietet deshalb eine Reihe weiterführender Umgebungen für das +Setzen von einzeiligen und mehrzeiligen sowie ausgerichteter Formeln zur +Verfügung. Auf eine Einführung in das Paket wird~-- aufgrund der bereits in +großer Zahl vorhandenen Einführungen~-- in diesem Tutorial verzichtet. Außerdem +stehen mit \Tutorial{mathtype} und \Tutorial{mathswap} zwei weitere Tutorials +zur Verfügung, die sich explizit mit der Thematik eines guten mathematischen +Satz beschäftigen. + +Das Paket \Package{amsmath} stellt für \hologo{LaTeXe} den De"~facto"~Standard +für den mathematischen Satz dar. Allerdings wird es~-- insbesondere aus diesem +Grund~-- sehr \enquote{vorsichtig} weiterentwickelt. Für das Setzen neuer +Dokumente sollte deshalb das Paket \Package{mathtools} verwendet werden, das +auf \Package{amsmath} basiert und dieses um zusätzliche Funktionalitäten +ergänzt sowie Bugfixes bereithält. + + +\subsection{Darstellung von mathematischen Brüchen} +Für ansehnliche und insbesondere im Fließtext gut lesbare mathematische Brüche +stellt das Paket \Package{xfrac} den Befehl \Macro{sfrac}(\Package{xfrac}) zur +Verfügung. +% +\begin{Preamble} +\usepackage{xfrac} + +\end{Preamble} + + +\subsection{Einheiten} +Mit dem Paket \Package{siunitx} lassen sich sowohl physikalische Einheiten als +auch Zahlen typografisch korrekt setzen. Sollen die Funktionalitäten in einem +deutschsprachigen Dokument problemlos nutzbar sein, so sind die Hinweise zum +\tudhyperref{sec:tips:siunitx}{Setzen von Einheiten mit \Package{siunitx}} im +\TUDScript-Handbuch zu beachten. Das Paket \Package{units} ist nicht ganz so +mächtig wie \Package{siunitx}, kann allerdings als pragmatische Alternative +gesehen und genutzt werden. + + +\subsection{Datumsformatierung} +Das Paket \Package{isodate} stellt \Macro{printdate}(\Package{isodate}) bereit. +Dieser Befehl kann für die Formatierung von Datumsangaben verwendet werden. +Wird das Paket mit einer der Dokumentklassen aus dem \TUDScript-Bundle geladen, +wird der genannte Befehl automatisch für alle bereitgestellten Datumsfelder +verwendet. Alternativ dazu kann das Paket \Package{datetime2} genutzt werden, +dessen Befehl \Macro{DTMDate}(\Package{datetime2}) wird ebenfalls unterstützt. +% +\begin{Preamble} +\usepackage{isodate} + +\end{Preamble} + + + +\section{Erstellen von Abbildungen} +\label{sec:figures}% +% +Die einfachste Möglichkeit, in einer wissenschaftlichen Abhandlung Grafiken zu +verwenden, ist sicherlich das Einbinden von externen Abbildungen mit dem Befehl +\Macro{includegraphics}(\Package{graphicx}) aus dem Paket \Package{graphicx}. +Allerdings ist für eine wissenschaftliche Arbeit in höchster Qualität meiner +Meinung nach das bloße Einfügen einer gescannten oder heruntergeladenen Grafik +unzureichend. Vielmehr sollte diese zum einen als skalierbare Vektorgrafik +vorliegen, um sowohl die höchste Druckqualität als auch die +Wiederverwendbarkeit sicherzustellen, und zum anderen in ihrer Gestaltung dem +verwendeten Layout des verfassten Dokumentes entsprechen. Dies betrifft sowohl +die eingesetzten Farben und Schriften als auch die Stärke der verwendeten +Linien. + +Zum Zeichnen von Grafiken sind die freien Programme \Application{LaTeXDraw} und +besonders \Application{Inkscape} empfehlenswert, da diese die Verwendung der +Dokumentschriften innerhalb der erstellten Grafiken ermöglichen. Im Handbuch zu +\TUDScript wird dies für \tudhyperref{sec:tips:svg}{\Application{Inkscape}} +genauer erläutert. Eine andere Variante ist das \enquote{Programmieren} von +Grafiken. Die zwei bekanntesten \hologo{LaTeX}"=Pakete sind \Package{tikz}<pgf> +und \Package{pstricks}<pstricks-base>. Mit beiden wird folgend eine Abbildung +exemplarisch erstellt, ohne dabei ins Detail zu gehen, da es~-- neben den +umfangreichen Dokumentationen~-- zahlreiche Beispiele und Erläuterungen im +Internet gibt. + + + +\subsection{Das Paket \Package{tikz}} +Zur Verwendung von \Package{tikz}<pgf> ist nicht viel zu sagen. Einfach in der +Dokumentpräambel einbinden und es kann losgehen. Für das nachfolgende Beispiel +sind außerdem noch zwei weitere Programmbibliotheken für \Package{tikz}<pgf> +notwendig. +% +\begin{Hint} +\usepackage{tikz} +\usetikzlibrary{chains} +\usetikzlibrary{decorations.markings} +\tikzset{on grid} +\end{Hint} +% +Ein kurze Anmerkungen zur Skalierung der Grafiken möchte ich mir erlauben. +Normalerweise verwendet \Package{tikz}<pgf> Koordinaten im Zentimeter"=Raster. +Ich persönlich bevorzuge der relativierte Skalierung auf die Textbreite des +Dokumentes, wobei eine Einheit genau \SI{1}{\percent} dieser entspricht. Das +kann mit folgendem Quelltext erreicht werden: +% +\CodeHook{\renewcommand\newlength[1]{}} +\begin{Hint*} +\newlength{\tikzunit} +\setlength{\tikzunit}{.01\textwidth} +\tikzset{x=\tikzunit,y=\tikzunit} +\end{Hint*} +% +Nachfolgend wird eine Grafik innerhalb einer Gleitumgebung exemplarisch +erstellt. Das Ergebnis ist in \autoref{fig:tikz} zu sehen. + +\begin{Hint?} +\begin{figure} +\begin{tikzpicture} + \tikzstyle{inner box}=[% + text width=17\tikzunit, + align=center, + rectangle, + inner sep=.5\tikzunit, + minimum height=8\tikzunit, + font=\hspace{0pt}, + draw + ] + \tikzstyle{inner label}=[align=center, font=\scriptsize] + \tikzstyle{inner box chain}=[every node/.style={on chain}] + \tikzstyle{inner box chain below}=[% + inner box chain, node distance=8\tikzunit,continue chain=going below + ] + \tikzstyle{inner box chain right}=[% + inner box chain,node distance=35\tikzunit,continue chain=going right + ] + \tikzstyle{inner box chain above}=[% + inner box chain,node distance=16\tikzunit,continue chain=going above + ] + \tikzstyle{pstarrow->}=[% + decoration={markings, + mark=at position 1 with {\arrow[xscale=1.5]{stealth}}; + }, + postaction={decorate}, + shorten >=0.7pt + ] + \newcommand{\tikzparbox}[2][9]{% + \parbox{#1\tikzunit}{\centering\hspace{0pt}#2}% + } + \begin{scope}[start chain] + \begin{scope}[inner box chain below] + \node(NE)[inner box]{Navigations\-ebene}; + \node(NB)[inner label]{gewählte Fahrtroute\\ zeitlicher Ablauf}; + \node(BE)[inner box]{{Bahnführungs\-ebene}}; + \node(BS)[inner label]{% + gewählte Führungsgrößen:\\ Sollspur, Sollgeschwindigkeit% + }; + \node(SE)[inner box]{Stabilisierungs\-ebene}; + \end{scope} + \begin{scope}[inner box chain right] + \node(LQ)[inner box]{Längs- und Querdynamik}; + \node(FO)[inner box]{Fahrbahn\-oberfläche}; + \end{scope} + \begin{scope}[inner box chain above] + \node(FR)[inner box]{Fahrraum\\ \smallskip{\scriptsize Straße + und\\ \vspace{-1.5ex}Verkehrssituation}}; + \node(SN)[inner box]{Straßennetz}; + \end{scope} + \end{scope} + \begin{scope}[inner label,minimum size=0pt] + \draw [pstarrow->] (FO) -| ++(13.5,-12) to + node [above]{Istspur, Istgeschwindigkeit} ++(-97,0) |- (SE); + \draw [pstarrow->] (FR) -| ++(14 ,-32) to + node [above]{Bereich sicherer Führungsgrößen} ++(-98,0) |- (BE); + \draw [pstarrow->] (SN) -| ++(14.5 ,-52) to + node [above]{mögliche Fahrtroute} ++(-99,0) |- (NE); + \end{scope} + \begin{scope}[inner label] + \draw (NE) to (NB); + \draw [pstarrow->] (NB) to (BE); + \draw (BE) to (BS); + \draw [pstarrow->] (BS) to (SE); + \draw [pstarrow->] (SE) to + node[above] {\tikzparbox{Stell\-größen}} + node[below] {\tikzparbox{Lenken Gasgeben Bremsen}} + (LQ); + \draw [pstarrow->] (LQ) to + node[above]{\tikzparbox{Regel\-größen}} + node[below]{\tikzparbox{Fahrzeugbewegung}} + (FO); + \draw [pstarrow->] (LQ)+(24,0) |- (FR); + \draw [pstarrow->] (LQ)+(24,0) |- (SN); + \end{scope} + \begin{scope}[very thick,rounded corners=5\tikzunit] + \draw (-12.5,-40) rectangle (12.5,14); + \draw ( 22.5,-40) rectangle (47.5,-18); + \draw ( 57.5,-40) rectangle (82.5,14); + \end{scope} + \begin{scope}[font=\bfseries] + \node at (0,9) {Fahrer}; + \node at (35,-23) {Fahrzeug}; + \node at (70,9) {Umwelt}; + \end{scope} +\end{tikzpicture} +\caption{Eine mit TikZ erstellte Grafik}\label{fig:tikz} +\end{figure} +\end{Hint?} + + + +\subsection{Das Paket \Package{pstricks}} +Die zuvor mit \Package{tikz}<pgf> erstellte Grafik wird nachfolgend mit dem +Paket \Package{pstricks} erstellt. Mit diesem lassen sich PostScript"=Grafiken +erstellen. Ähnlich wie bei \Package{tikz}<pgf> gibt es ein Kernpaket und +zusätzliche Ergänzungen. Diese werden jedoch nicht als Programmbibliotheken +sondern ganz normal als \hologo{LaTeX}"=Pakete eingebunden. +% +\begin{Hint} +\usepackage{pstricks,pst-node} +\end{Hint} +% +Die Verwendung von PostScript hat zahlreiche Vorteile, macht die direkte +Nutzung von \Engine{pdfLaTeX} etwas schwierig. Das Paket \Package{auto-pst-pdf} +schafft hier jedoch Abhilfe. Wird das Textsatzsystem \Engine{pdfLaTeX} über die +zusätzliche Option \Option{-{}-shell-escape}(\Engine{pdfLaTeX}) beziehungsweise +\Option{-{}-enable-write18}(\Engine{pdfLaTeX}) mit erweiterten Schreibrechten +aufgerufen, so werden die Abbildungen automatisch im PDF"~Format erzeugt und +eingebunden. +% +\begin{Hint} +\usepackage{auto-pst-pdf} +\end{Hint} +% +Bei einigen Pakete kommt es in der Kombination mit \Package{auto-pst-pdf} zu +kleineren Problemen, die sich jedoch meist relativ leicht beheben lassen. Im +Handbuch wird die \tudhyperref{sec:tips:auto-pst-pdf}{gleichzeitige Verwendung} +von \Package{auto-pst-pdf} in Kombination mit den Paketen \Package{tikz}<pgf>, +\Package{todonotes} sowie \Package{floatrow}~-- bei der Nutzung des Befehls +\Macro{ffigbox}(\Package{floatrow})~-- erklärt. Diese Hinweise sollten Sie +gegebenenfalls beachten. + +Ähnlich wie zuvor bei der \Package{tikz}<pgf>"~Grafik wird die nachfolgende +\Package{pstricks}"=Abbildung auf die Textbreite des Dokumentes skaliert, wobei +eine Einheit genau \SI{1}{\percent} dieser entspricht. Außerdem werden noch ein +paar weitere Einstellungen gemacht. Dies geschieht mit: +% +\begin{Hint*} +\psset{% + unit=.01\textwidth,% + cornersize=absolute,% + labelsep=.8ex,% + linewidth=.4pt,% + arrowscale=1.5,% +} +\end{Hint*} +% +Die innerhalb einer Gleitumgebung erzeugte \Package{pstricks}"=Grafik ist in +\autoref{fig:pstricks} dargestellt. +% +\begin{Hint?} +\begin{figure} +\begin{pspicture}(0,-2)(100,64) +\newcommand{\fnodetext}{} +\def\fnodetext(#1)#2#3{% + \fnode[framesize=18 8](#1){#2}% + \rput(#1){\parbox{17\psunit}{\centering\hspace{0pt}#3}}% +} +\newcommand{\scriptbox}[2][24]{% + \parbox{#1\psunit}{\scriptsize\centering\hspace{0pt}#2}% +} +\rput(15,10){% + \rput(0,49){\textbf{Fahrer}} + \fnodetext(0,40){NE}{Navigations\-ebene} + \fnodetext(0,24){BE}{Bahnführungs\-ebene} + \fnodetext(0,08){SE}{Stabilisierungs\-ebene} + \ncline{->}{NE}{BE} + \ncput*{\scriptbox{gewählte Fahrtroute\\ zeitlicher Ablauf}} + \ncline{->}{BE}{SE} + \ncput*{% + \scriptbox{gewählte Führungsgrößen:\\ Sollspur,~Sollgeschwindigkeit}% + } + \psframe[dimen=middle,linewidth=1.2pt,linearc=5](-12.5,0)(12.5,54) +} +\rput(50,10){% + \rput(0,17){\textbf{Fahrzeug}} + \fnodetext(0,8){FZ}{Längs- und\\ Querdynamik} + \psframe[dimen=middle,linewidth=1.2pt,linearc=5](-12.5,0)(12.5,22) +} +\rput(85,10){% + \rput(0,49){\textbf{Umwelt}} + \fnodetext(0,40){SN}{Straßennetz} + \fnodetext(0,24){FR}{% + Fahrraum\\ \smallskip\scriptsize{Straße und Verkehrssituation}% + } + \fnodetext(0,08){FO}{Fahrbahn\-oberfläche} + \psframe[dimen=middle,linewidth=1.2pt,linearc=5](-12.5,0)(12.5,54) +} + +\ncline{->}{SE}{FZ} +\naput{\scriptbox[9]{Stell\-größen}} +\nbput{\scriptbox[9]{Lenken Gasgeben Bremsen}} +\ncline{->}{FZ}{FO} +\naput{\scriptbox[9]{Regel\-größen}} +\nbput{\scriptbox[9]{Fahrzeugbewegung}} + +\psset{armA=15,armB=0,angleA=0,angleB=180} +\ncangles{->}{FZ}{FR} +\ncangles{->}{FZ}{SN} + +\psset{angleA=180,angleB=0} +\ncloop[loopsize=12,arm=4.5]{<-}{SE}{FO} +\naput{\scriptbox{Istspur, Istgeschwindigkeit}} +\ncloop[loopsize=32,arm=5]{<-}{BE}{FR} +\naput{\scriptbox[30]{Bereich sicherer Führungsgrößen}} +\ncloop[loopsize=52,arm=5.5]{<-}{NE}{SN} +\naput{\scriptbox{mögliche Fahrtroute}} +\end{pspicture} +\caption{Eine mit pstricks erstellte Grafik}\label{fig:pstricks} +\end{figure} +\end{Hint?} + + +\subsection{Auslagern von Grafiken in separate Dateien} +Damit \enquote{programmierte} Grafiken zum einen das Dokument respektive dessen +Struktur nicht unnötig unübersichtlich machen und zum anderen nur nach einer +Änderung abermals kompiliert werden, um die Kompilierungsdauer möglichst gering +zu halten, können diese in separate Dateien ausgelagert werden. Hierfür bieten +sich die Pakete \Package{subfiles}'manual' und \Package{standalone}'manual' an. + + + +\section{Dokumentation von Quelltexten} +Sollen in einer Dokument Quelltextauszüge beschrieben werden oder ganze +Quelltextdateien eingebunden werden, so empfiehlt sich für dieses Vorhaben das +Paket \Package{listings}. Neben der bloßen Einbindung der Quelltexte bietet es +zusätzlich die Möglichkeit, die Syntax in Abhängigkeit der verwendeten +Programmiersprache hervorzuheben. Zusätzlich lässt sich ein Verzeichnis mit +allen eingebundenen sowie direkt im Dokument angegebenen Quelltextauszügen +erstellen. +% +\begin{Hint} +\usepackage{listings} +\end{Hint} +% +Wird das Paket in einem Dokument mit UTF"~8"~Kodierung verwendet, muss dies dem +Paket in der Präambel mitgeteilt werden: +% +\begin{Hint} +\lstset{% + inputencoding=utf8,extendedchars=true, + literate=% + {ä}{{\"a}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {~}{{\textasciitilde}}1 {ß}{{\ss}}1 +} +\end{Hint} +% +Nachdem nun die Grundeinstellungen erfolgt sind, kann ein eigener Stil für eine +gewünschte Programmiersprache definiert werden. Im folgenden Beispiel wird dies +für ein MATLAB"~Skript demonstriert. Als erstes wird mit dem Befehl +\Macro{lstdefinestyle}(\Package{listings}) ein eigener \Package{listings}"~Stil +erstellt: +% +\begin{Hint*} +\lstdefinestyle{matlab}{% + language=Matlab,% + basicstyle=\ttfamily,% + commentstyle={\color{green!50!black}}, + keywordstyle={\color{blue!75!black}},% + columns=flexible,keepspaces,% +} +\end{Hint*} +% +Dabei wird die verwendete Programmiersprache definiert sowie die Formatierung +für die Quelltextauszüge festgelegt. Für weitere Einstellungsmöglichkeiten +sollte die Dokumentation zum Paket zu Rate gezogen werden. Der so definierte +Stil lässt sich anschließend folgendermaßen verwenden. +% +\begin{Hint} +\begin{lstlisting}[style=matlab] +§\dots§ +\end{lstlisting} +\end{Hint} +% +Soll innerhalb eines Quelltextauszuges ein Abschnitt nicht ausgegeben sondern +als \hologo{LaTeX}"~Code interpretiert und ausgeführt werden, lässt sich mit +\Macro{lstset}[% + \PParameter{\PValue{escapechar=\PName{Zeichen}}}% +](\Package{listings}) ein spezielles Escape-Zeichen definieren. Alle innerhalb +einer \Package{listings}"=Umgebung zwischen zwei Escape-Zeichen eingefügten +Angaben in der Form \PName{Zeichen}\PValue{\dots}\PName{Zeichen} werden als +\hologo{LaTeX}"~Code gelesen und ausgeführt. Außerdem ist es mit dem Befehl +\Macro{lstnewenvironment}(\Package{listings}) möglich, eine individuelle +\Package{listings}"=Umgebung zu definieren. + +Das Einbinden und Darstellen von externen Quelldateien in ein Dokument ist über +den Befehl +\Macro{lstinputlisting}[\LParameter\Parameter{Dateiname}](\Package{listings}) +möglich, wobei dabei im optionalen Argument ebenfalls der definierte Stil +angegeben werden sollte. Es folgt die Ausgabe eines kurzen Beispiels mit dem +zuvor definierten Stil~\PValue{matlab}. +% +\begin{lstlisting}[style=matlab] +function perfect = isperfect(test_value) + % This function checks to see if the given number is "perfect"; + % a "perfect" number is an integer whose factors + % (excluding itself) add up to it. + % + % Example: 6 is a perfect number: 1 + 2 + 3 = 6 == 6 + % 8 is not: 1 + 2 + 4 = 7 ~= 8 + % 28 is a perfect number: 1 + 2 + 4 + 7 + 14 = 28 == 28 + % + % Arguments: + % test_value (input) check to see if this value + % is perfect or not + % perfect (output) if yes, set this to 1 + % if no, set this to 0 + % + % this will keep track of the sum of all integer divisors + tempsum = 0; + % we check all possible divisors + for (divisor = 1 : test_value - 1) + div_result = test_value / divisor; + if (div_result == floor(div_result)) + % this is an integer divisor, so add it to the sum + tempsum = tempsum + divisor; + end + end + % now, does the sum equal the test_value? + if (tempsum == test_value) + perfect = 1; + else + perfect = 0; + end +end +\end{lstlisting} + + + + +\section{Und ganz zum Schluss \dots} +Mit Sicherheit werden Sie im Laufe der Zeit auf die eine oder andere Frage zu +\hologo{LaTeXe} stoßen, die in diesem Tutorial nicht behandelt wurde. Sollten +Sie an diesen Punkt gelangen, so empfehle zunächst einen Blick in die Kapitel +\tudhyperref{sec:packages}{Benötigte, unterstützte und empfehlenswerte Pakete} +sowie \tudhyperref{sec:tips}{Praktische Tipps \& Tricks} im Handbuch zu +\TUDScript. Sollte Ihre Frage trotzdem unbeantwortet bleiben, so wäre der +Besuch eines \hologo{LaTeX}"=Forums der nächste Schritt. Für allgemeine +Anfragen kann ich unter anderem folgende Foren empfehlen: +% +\begin{itemize} +\item \hrfn{http://mrunix.de/forums/forumdisplay.php?38-LaTeX-Forum}{mrunix} +\item \hrfn{http://golatex.de/}{golatex} +\item \hrfn{http://tex.stackexchange.com/}{\hologo{LaTeX} Stack Exchange} +\item \hrfn{http://www.latex-community.org/forum/}{\hologo{LaTeX} Community} +\end{itemize} +% +Insbesondere alle \TUDScript betreffende Fragen sollten natürlich direkt im +dazugehörigen \Forum gestellt werden. + +\begin{Trunk+} +\printbibliography[heading=bibintoc]\label{sec:bibliography}% +\end{Trunk+} +\printbibliography[heading=bibintoc] + +\begin{Preamble+} +\usepackage[colorlinks,linkcolor=blue]{hyperref} + +\end{Preamble+} + +\addsec{Index} +Da das Tutorial etwas umfangreicher ist, wird für alle erläuterten Optionen, +Umgebungen und Befehle ein Index erstellt. Bei Elementen, die weder \TUDScript +noch \KOMAScript{} zuzuordnen sind, wird das dazugehörige Paket mit angeführt. +\PrintIndex + +\FinishTutorial[% + Um das im kopierten Beispiel erstellte Literaturverzeichnis in das Dokument + einbinden zu können, bedarf es dem einmaligen Aufruf von \Application{biber} + frühestens nach dem ersten Durchlauf von \Engine{pdfLaTeX}. Dies erfolgt mit + dem Aufruf \Path{biber }\PName{Dateiname}. Für das Erzeugen von Abkürzungs- + und Symbolverzeichnis ist das Ausführen des Perl"=Skriptes + \Path{makeglossaries }\PName{Dateiname} ausreichend. Danach ist ein weiteres + mal die Verwendung von \Path{pdflatex }\PName{Dateiname} notwendig, um die + Verzeichnisse in das Dokument einzubinden. Gegebenenfalls ist für korrekte + Seitenangaben in Abkürzungs- und Symbolverzeichnis ein abermaliges Ausführen + des Skriptes notwendig. + \Attention{% + Nutzer von \Distribution{\hologo{MiKTeX}} müssen für die Verwendung des + Perl"~Skriptes \File{makeglossaries}(\Package{glossaries}) unter Umständen + einen separaten Perl"=Interpreter installieren. In \autoref{sec:glossaries} + ist dazu mehr zu finden.% + }% +] +\ListOfToDo +\end{document} diff --git a/macros/latex/contrib/tudscr/source/tudscr-area.dtx b/macros/latex/contrib/tudscr/source/tudscr-area.dtx new file mode 100644 index 0000000000..818f3e0097 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-area.dtx @@ -0,0 +1,2317 @@ +% \CheckSum{2247} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-area.dtx +%<*dtx> +% \fi% +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-area.dtx}[2019/07/19 v2.06c TUD-Script\space% + (type or page area)% +] +% +% \iffalse +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-area.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \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}{Seitenstil für Poster}^^A +% \changes{v2.05}{2016/04/03}{Unterstützung von Schnittmarken mit den Paketen +% \pkg{geometry} und \pkg{crop}}^^A +% +% \section{Der Satzspiegel für \TUDScript} +% +% Das \CD verlangt (eigentlich) einen fest vorgegebenen Satzspiegel. Für das +% Setzen längerer wissenschaftlicher Abhandlungen ist dieser jedoch alles +% andere als glücklich gewählt. Insbesondere für den doppelseitigen Satz ist +% das Standardlayout nicht gut nutzbar. Für die \TUDScript-Klassen wird +% deshalb die Abweichung vom sonst fest vorgegebenen Satzspiegel ermöglicht. +% \ToDo{% +% Unterstützung von PDF-Boxen für die Druckausgabe +%^^A\url{https://groups.google.com/forum/#!topic/de.comp.text.tex/1gouJ0Zov6o} +%^^A\url{http://tex.stackexchange.com/questions/248902/} +%^^A\url{https://wiki.scribus.net/canvas/PDF_Boxes_:_mediabox,_cropbox,_bleedbox,_trimbox,_artbox} +%^^A\url{http://www.prepressure.com/pdf/basics/page-boxes} +% }[v2.07] +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*class&body> +% \fi +% +% \subsection{Kompatibilität der Satzspiegeleinstellungen mit weiteren Paketen} +% \subsubsection{Unterstützung von Schnittmarken mit dem Paket \pkg{crop}} +% +% Insbesondere für das Erstelen von Postern sollen häufig Schnittmarken auf dem +% ausgegebenen Papierbogen erscheinen. Dies lässt sich entweder mit den Mitteln +% des Paketes \pkg{geometry} oder aber durch das Paket \pkg{crop} realisieren. +% Für letzteres ist dafür ein kleiner Patch notwendig. +% +% \begin{macro}{\if@tud@x@crop@center} +% \changes{v2.05}{2016/04/03}{neu}^^A +% \begin{macro}{\CROP@center} +% \changes{v2.05}{2016/04/03}{neu}^^A +% Das Paket \pkg{crop} bietet die Option, den Satzspiegel auf dem Papierbogen +% zu zentrieren. Diese Einstellung geht beim Laden eines neuen Satzspiegels mit +% \cs{loadgeometry} verloren. Hiermit wird das Problem behoben. +% \begin{macrocode} +\newif\if@tud@x@crop@center +\AfterPackage{crop}{% + \CheckCommand*\CROP@center{% + \voffset\stockheight + \advance\voffset-\paperheight + \voffset.5\voffset + \hoffset\stockwidth + \advance\hoffset-\paperwidth + \hoffset.5\hoffset + }% + \pretocmd{\CROP@center}{% + \@tud@x@crop@centertrue% + }{}{\tud@patch@wrn{CROP@center}}% +} +% \end{macrocode} +% \end{macro}^^A \CROP@center +% \end{macro}^^A \if@tud@x@crop@center +% +% \subsubsection{Unterstützung der Klasse \cls{standalone}} +% +% \changes{v2.02}{2014/07/25}{Unterstützung der \cls{standalone}-Klasse}^^A +% +% Mit der Klasse~\cls{standalone} können insbesondere Grafiken als separate +% (PDF-)Dateien erzeugt und später im Dokument eingebunden werden. Diese Klasse +% ändert allerhand an den Einstellungen der Seitenränder. Damit sich diese bei +% der Verwendung mit den \TUDScript-Klassen nicht in die Quere kommen, müssen +% für einige Einstellungen unterdrückt werden. +% +% \begin{macro}{\if@tud@x@standalone@crop} +% \changes{v2.02}{2014/09/08}{neu}^^A +% Mit diesem Makro kann die Verwendung der Option \opt{crop} mit der Klasse +% \cls{standalone} geprüft werden. Das erste Argument wird ausgeführt, wenn +% die Klasse geladen und die Option aktiv ist. Das zweite Argument wird +% ausgeführt, wenn entweder die Option \opt{crop} deaktiviert ist oder die +% Klasse \cls{standalone} gar nicht geladen wurde. +% \begin{macrocode} +\newif\if@tud@x@standalone@crop +\AfterClass*{standalone}{\let\if@tud@x@standalone@crop\ifsa@crop} +% \end{macrocode} +% \end{macro}^^A \if@tud@x@standalone@crop +% +% \subsection{Definition der Größen und Maße in abhängig vom Papierformat} +% +% Die \TUDScript-Klassen sollen neben den vom \CD vorgegebenen Seitenrändern +% weitere Satzspiegel ermöglichen und u.\,a. auch die Nutzung des Paketes +% \pkg{typearea} erlauben. Damit ein einheitliches Verfahren zur Wahl bzw. +% Umschaltung des Satzspiegels genutzt werden kann, wird momentan das Paket +% \pkg{geometry} genutzt. Dabei werden entweder die gewünschten Maße der +% Seitenränder direkt gewählt oder aber die mit \pkg{typearea} berechneten Maße +% an \pkg{geometry} durchgereicht. +% +% \begin{length}{\tud@len@widemargin} +% \begin{length}{\tud@len@slimmargin} +% \begin{length}{\tud@len@both} +% Die Seitenränder für links und rechts sowie deren Summe, welche später für +% weitere Satzspiegeleinstelungen dazu verwendet wird, diese anteilig zu +% verteilen. +% \begin{macrocode} +\newlength\tud@len@widemargin +\newlength\tud@len@slimmargin +\newlength\tud@len@both +% \end{macrocode} +% \end{length}^^A \tud@len@both +% \end{length}^^A \tud@len@slimmargin +% \end{length}^^A \tud@len@widemargin +% \begin{length}{\tud@len@topmargin} +% \begin{length}{\tud@len@barheight} +% \begin{length}{\tud@len@headsep} +% \begin{length}{\tud@len@footsep} +% Es folgen die speziellen Maße für die Seiten mit dem TUD-Kopf, also die Höhe +% oberhalb des Querbalkens, die Höhe des Querbalkens selbst sowie der vertikale +% (Mindest"~)Abstand zwischen Querbalken und Textkörper sowie der Fußzeile. +% \begin{macrocode} +\newlength\tud@len@topmargin +\newlength\tud@len@barheight +\newlength\tud@len@headsep +\newlength\tud@len@footsep +% \end{macrocode} +% \end{length}^^A \tud@len@footsep +% \end{length}^^A \tud@len@headsep +% \end{length}^^A \tud@len@barheight +% \end{length}^^A \tud@len@topmargin +% \begin{length}{\tud@len@logox} +% \begin{length}{\tud@len@logoy} +% \begin{length}{\tud@len@logowidth} +% Außerdem müssen Abmessungen und Position des TUD-Logos definiert werden, +% genauer der horizontale (Soll"~)Abstand zwischen linkem Seitenrand und Logo, +% der vertikale (Soll"~)Abstand zwischen oberem Seitenrand und Logo sowie die +% Breite und Höhe\footnote{Proportionen sind durch die Grafik vorgegeben} des +% Logos. +% \begin{macrocode} +\newlength\tud@len@logox +\newlength\tud@len@logoy +\newlength\tud@len@logowidth +% \end{macrocode} +% \end{length}^^A \tud@len@logowidth +% \end{length}^^A \tud@len@logoy +% \end{length}^^A \tud@len@logox +% \begin{length}{\tud@len@line} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{length}{\tud@len@heavyline} +% \begin{length}{\tud@len@thinline} +% Die Linienstärke der Outline im Kopf ist für ein monochromes Layout schmaler +% als im Layout mit farbigem Hintergrund.\footnote{monochrom +% \cs{tud@len@thinline}, koloriert \cs{tud@len@heavyline}} Da im Dokument beide +% Varianten vorkommen können, wird die Breite \cs{tud@len@line} durch den +% Seitenstil situativ entweder auf den Wert von \cs{tud@len@thinline} oder aber +% \cs{tud@len@heavyline} gesetzt. +% \begin{macrocode} +\newlength\tud@len@line +\newlength\tud@len@heavyline +\newlength\tud@len@thinline +% \end{macrocode} +% \end{length}^^A \tud@len@thinline +% \end{length}^^A \tud@len@heavyline +% \end{length}^^A \tud@len@line +% \begin{length}{\tud@len@areaheadvskip} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{length}{\tud@len@areadiff} +% \begin{length}{\tud@len@areavskip} +% Die Längen für den vertikalen Standardversatz der Überschriften sowie die +% Differenz der Kopfhöhen von normalem und TUD-Kopf-Satzspiegel. Die Differenz +% zwischen den unterschiedlichen Kopfhöhen der Satzspiegelvarianten wird durch +% \cs{tud@cdgeometry@@process} berechnet und dabei in \cs{tud@len@areadiff} +% gespeichert. Dabei muss unterschieden werden, ober der Satzspiegel des \CDs +% oder der durch \pkg{typearea} berechnete respektive durch den Anwender mit +% \pkg{geometry} vorgegebene genutzt wird. Davon abhängig wird zum Ausgleich +% die Länge \cs{tud@len@areavskip} definiert. +% \begin{macrocode} +\newlength\tud@len@areaheadvskip +\newlength\tud@len@areadiff +\newlength\tud@len@areavskip +% \end{macrocode} +% \end{length}^^A \tud@len@areavskip +% \end{length}^^A \tud@len@areadiff +% \end{length}^^A \tud@len@areaheadvskip +% \begin{length}{\tud@len@ddcdiff} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Zu guter Letzt noch die Länge \cs{tud@len@ddcdiff} für den Höhenausgleich des +% Seitenfußes, welcher bei der Verwendung des \DDC-Logos in der Fußzeile bei +% Version~v2.02 für den Satzspiegel notwendig war. Dieser etwas verschrobene +% Satzspiegel wird im Kompatibilitätsmodus weiterhin angeboten. +% \begin{macrocode} +\tud@if@v@lower{2.03}{\newlength\tud@len@ddcdiff}{} +% \end{macrocode} +% \end{length}^^A \tud@len@ddcdiff +% \begin{macro}{\tud@head@fontsize} +% Für den Querbalken wird außerdem die zu verwendende Schriftgröße definiert. +% \begin{macrocode} +\newcommand*\tud@head@fontsize{} +% \end{macrocode} +% \end{macro}^^A \tud@head@fontsize +% \begin{macro}{\tud@cdgeometry@set} +% \changes{v2.03}{2015/01/23}{Längenberechnung für den Satzspiegel an +% Referenzlänge \cs{tud@len@widemargin} gekoppelt}^^A +% \changes{v2.05}{2015/07/15}{Fallunterscheidung an DIN-B-Reihe angepasst}^^A +% \changes{v2.05}{2016/04/03}{Option \opt{layout} von \pkg{geometry} möglich}^^A +% \begin{macro}{\if@tud@cdgeometry@adjust} +% \changes{v2.05}{2015/11/29}{neu}^^A +% \begin{macro}{\tud@cdgeometry@assignlayout} +% \changes{v2.06}{2018/08/13}{neu}^^A +% \begin{length}{\tud@len@layoutwidth} +% \changes{v2.05}{2016/04/03}{neu}^^A +% \begin{length}{\tud@len@layoutheight} +% \changes{v2.05}{2016/04/03}{neu}^^A +% \begin{length}{\tud@len@layouthoffset} +% \changes{v2.05}{2016/04/03}{neu}^^A +% \begin{length}{\tud@len@layoutvoffset} +% \changes{v2.05}{2016/04/03}{neu}^^A +% Hiermit werden in Abhängigkeit der gewählten Papiergröße die Maße für die +% Größe der Kopfzeile, die Position des Logos, die Seitenränder sowie die +% Schriftgröße in der Kopfzeile definiert. Aufgerufen wird der Befehl durch +% \cs{tud@cdgeometry@@process}. Dabei fungiert \cs{tud@len@widemargin} als +% Bezugslänge. Die maßgebliche Papiergröße ist DIN~A4 bzw. DIN~B4. Die Längen +% für alle anderen Papiermaße unterscheiden sich um den Faktor~$\sqrt{2}$, +% wobei das Format DIN~A5 nach den Vorgaben des \CDs übersprungen wird. +% +% Um die Überschriften und den Satzspiegel auch in diesem Fall vertikal richtig +% zu positionieren, wird der Schalter \cs{if@tud@cdgeometry@adjust} benötigt. +% Mit der Einstellung \opt{cdgeometry}|=|\val{adapted} wird auch das Format +% DIN~A5 mit den skalierten Seitenrändern erstellt. +% \begin{macrocode} +\newif\if@tud@cdgeometry@adjust +\newlength\tud@len@layoutwidth +\newlength\tud@len@layoutheight +\newlength\tud@len@layouthoffset +\newlength\tud@len@layoutvoffset +% \end{macrocode} +% Mit \cs{tud@cdgeometry@assignlayout} wird die Layoutgröße, welche ggf. mit +% dem Paket \pkg{geometry} angegeben wurde, entsprechend gesetzt. +% \begin{macrocode} +\newcommand*\tud@cdgeometry@assignlayout{% + \ifdim\tud@len@layoutwidth<\p@\relax% + \setlength\tud@len@layoutwidth{\paperwidth}% + \fi% + \ifdim\tud@len@layoutheight<\p@\relax% + \setlength\tud@len@layoutheight{\paperheight}% + \fi% +} +\newcommand*\tud@cdgeometry@set{% + \tud@cdgeometry@assignlayout% + \tud@if@v@lower{2.05}{% + \ifdim\tud@len@layoutheight<\dimexpr105mm+1.5mm\relax% + \def\@tempa{0}% + \else\ifdim\tud@len@layoutheight<\dimexpr148mm+1.5mm\relax% + \def\@tempa{1}% + \else\ifdim\tud@len@layoutheight<\dimexpr229mm+2mm\relax% + \def\@tempa{2}% + \else\ifdim\tud@len@layoutheight<\dimexpr297mm+2mm\relax% + \def\@tempa{3}% + \else\ifdim\tud@len@layoutheight<\dimexpr420mm+2mm\relax% + \def\@tempa{4}% + \else\ifdim\tud@len@layoutheight<\dimexpr594mm+2mm\relax% + \def\@tempa{5}% + \else\ifdim\tud@len@layoutheight<\dimexpr841mm+3mm\relax% + \def\@tempa{6}% + \else\ifdim\tud@len@layoutheight<\dimexpr1189mm+3mm\relax% + \def\@tempa{7}% + \else% + \def\@tempa{8}% + \fi\fi\fi\fi\fi\fi\fi\fi% + }{% + \ifdim\tud@len@layoutheight<\dimexpr125mm+1.5mm\relax% + \def\@tempa{0}% + \else\ifdim\tud@len@layoutheight<\dimexpr176mm+2mm\relax% + \def\@tempa{1}% + \else\ifdim\tud@len@layoutheight<\dimexpr250mm+2mm\relax% + \def\@tempa{2}% + \else\ifdim\tud@len@layoutheight<\dimexpr353mm+2mm\relax% + \def\@tempa{3}% + \else\ifdim\tud@len@layoutheight<\dimexpr500mm+2mm\relax% + \def\@tempa{4}% + \else\ifdim\tud@len@layoutheight<\dimexpr707mm+3mm\relax% + \def\@tempa{5}% + \else\ifdim\tud@len@layoutheight<\dimexpr1000mm+3mm\relax% + \def\@tempa{6}% + \else\ifdim\tud@len@layoutheight<\dimexpr1414mm+3mm\relax% + \def\@tempa{7}% + \else% + \def\@tempa{8}% + \fi\fi\fi\fi\fi\fi\fi\fi% + }% +% \end{macrocode} +% In Abhängigkeit von der gefundenen Gestaltungshöhe wird nun der Satzspiegel +% definiert. Dabei wird geprüft, ob dieser im entweder innerhalb des durch das +% \CD vorgegebenen Rasters erzeugt oder anhand der Gestaltungshöhe berechnet +% werden soll. +% \begin{macrocode} + \@tud@cdgeometry@adjustfalse% +% \end{macrocode} +% Eine Berechnung des Satzspiegels findet in jedem Fall außerhalb des Rasters +% statt. Ansonsten wird DIN~A4 als Referenzformat ausgewählt. +% \begin{macrocode} + \ifnum\tud@cdgeometry@calc@num=\tw@\relax% + \ifnum\@tempa>\z@\relax% + \ifnum\@tempa<8\relax% + \def\@tempa{3}% + \fi% + \fi% + \fi% +% \end{macrocode} +% Bei Formaten, welche kleiner als das Raster sind, wird die Gestaltungshöhe +% für DIN~A6 als Referenz genommen, um den Satzspiegel zu brechnen. +% \begin{macrocode} + \ifcase\@tempa\relax% <=A7/B7 + \ifnum\tud@cdgeometry@calc@num=\tw@\relax\else% + \ClassWarning{\TUD@Class@Name}{% + There's no type area defined for such a\MessageBreak% + small paper height. It is recommended to increase\MessageBreak% + the paper size. Nevertheless, it will be tried to\MessageBreak% + calculate a proper type area% + }% + \fi% + \tud@divide\@tempa{\tud@len@layoutheight}{148mm}% + \setlength\tud@len@widemargin{15mm}% + \setlength\tud@len@widemargin{\@tempa\tud@len@widemargin}% + \setlength\tud@len@heavyline{0.5pt}% + \setlength\tud@len@heavyline{\@tempa\tud@len@heavyline}% + \setlength\tud@len@thinline{0.25pt}% + \setlength\tud@len@thinline{\@tempa\tud@len@thinline}% + \setlength\@tempdima{4.5pt}% + \setlength\@tempdima{\@tempa\@tempdima}% + \edef\tud@head@fontsize{\strip@pt\@tempdima}% + \or% <=A6/B6 + \setlength\tud@len@widemargin{15mm}% + \setlength\tud@len@heavyline{0.5pt}% + \setlength\tud@len@thinline{0.25pt}% + \renewcommand*\tud@head@fontsize{4.5}% +% \end{macrocode} +% Für Formate der Klasse~5 gibt es zwei Varianten. Entweder, es wird sich an +% das Raster des \CDs geahtlen oder es wird ein eigener Satzspiegel für das +% Papierformat definiert. Wird das Raster gehalten, muss bei den Überschriften +% etwas getrickst werden, weshalb der Schalter \cs{if@tud@cdgeometry@adjust} +% gesetzt wird. +% \begin{macrocode} + \or% <=A5/B5 + \ifnum\tud@cdgeometry@calc@num=\z@\relax% restricted + \@tud@cdgeometry@adjusttrue% + \setlength\tud@len@widemargin{30mm}% + \setlength\tud@len@heavyline{1pt}% + \setlength\tud@len@thinline{0.5pt}% + \renewcommand*\tud@head@fontsize{9}% + \else% + \setlength\tud@len@widemargin{21.213203mm}% + \setlength\tud@len@heavyline{0.707107pt}% + \setlength\tud@len@thinline{0.353553pt}% + \renewcommand*\tud@head@fontsize{6.363961}% + \fi% + \or% <=A4/B4 + \setlength\tud@len@widemargin{30mm}% + \setlength\tud@len@heavyline{1pt}% + \setlength\tud@len@thinline{0.5pt}% + \renewcommand*\tud@head@fontsize{9}% + \or% <=A3/B3 + \setlength\tud@len@widemargin{42.426407mm}% + \setlength\tud@len@heavyline{1.414214pt}% + \setlength\tud@len@thinline{0.707107pt}% + \renewcommand*\tud@head@fontsize{12.727922}% + \or% <=A2/B2 + \setlength\tud@len@widemargin{60mm}% + \setlength\tud@len@heavyline{2pt}% + \setlength\tud@len@thinline{1pt}% + \renewcommand*\tud@head@fontsize{18}% + \or% <=A1/B1 + \setlength\tud@len@widemargin{84.852814mm}% + \setlength\tud@len@heavyline{2.828427pt}% + \setlength\tud@len@thinline{1.414214pt}% + \renewcommand*\tud@head@fontsize{25.455844}% + \or% <=A0/B0 + \setlength\tud@len@widemargin{120mm}% + \setlength\tud@len@heavyline{4pt}% + \setlength\tud@len@thinline{2pt}% + \renewcommand*\tud@head@fontsize{36}% + \else% >A0/B0 +% \end{macrocode} +% Wei bei zu kleinen Formaten wird auch bei Formaten oberhalb des Rasters die +% der Satzspiegel aus der Gestaltungshöhe berechnet, wobei hier DIN~A0 als +% Referenz verwendet wird. +% \begin{macrocode} + \ifnum\tud@cdgeometry@calc@num=\tw@\relax\else% + \ClassWarning{\TUD@Class@Name}{% + There's no type area defined for such a\MessageBreak% + huge paper height. It is recommended to reduce\MessageBreak% + the paper size. Nevertheless, it will be tried to\MessageBreak% + calculate a proper type area% + }% + \fi% + \tud@divide\@tempa{\tud@len@layoutheight}{1189mm}% + \setlength\tud@len@widemargin{120mm}% + \setlength\tud@len@widemargin{\@tempa\tud@len@widemargin}% + \setlength\tud@len@heavyline{4pt}% + \setlength\tud@len@heavyline{\@tempa\tud@len@heavyline}% + \setlength\tud@len@thinline{2pt}% + \setlength\tud@len@thinline{\@tempa\tud@len@thinline}% + \setlength\@tempdima{36pt}% + \setlength\@tempdima{\@tempa\@tempdima}% + \edef\tud@head@fontsize{\strip@pt\@tempdima}% + \fi% +% \end{macrocode} +% Wurde die Berechnung aktiviert, dann erfolgt diese anhand der Referenz im +% Format DIN~A4. +% \begin{macrocode} + \ifnum\tud@cdgeometry@calc@num=\tw@\relax% + \tud@divide\@tempa{\tud@len@layoutheight}{297mm}% + \setlength\tud@len@widemargin{\@tempa\tud@len@widemargin}% + \setlength\tud@len@heavyline{\@tempa\tud@len@heavyline}% + \setlength\tud@len@thinline{\@tempa\tud@len@thinline}% + \setlength\@tempdima{\tud@head@fontsize pt}% + \setlength\@tempdima{\@tempa\@tempdima}% + \edef\tud@head@fontsize{\strip@pt\@tempdima}% + \fi% +% \end{macrocode} +% Zum Schluss werden die restlichen Längen aus der Referenzlänge berechnet und +% das Erstellen der Kopfzeile aufgrund der möglichen Änderung der Schriftgröße +% forciert. +% \begin{macrocode} + \global\@tud@head@font@settrue% + \setlength\tud@len@slimmargin{\dimexpr2\tud@len@widemargin/3\relax}% + \setlength\tud@len@both{\dimexpr5\tud@len@widemargin/3\relax}% + \setlength\tud@len@topmargin{\dimexpr7\tud@len@widemargin/6\relax}% + \setlength\tud@len@barheight{\dimexpr\tud@len@widemargin/6\relax}% + \setlength\tud@len@headsep{\dimexpr2\tud@len@widemargin/5\relax}% + \setlength\tud@len@logox{\dimexpr1.1\tud@len@widemargin/3\relax}% + \setlength\tud@len@logoy{\dimexpr0.45\tud@len@widemargin\relax}% + \setlength\tud@len@logowidth{\dimexpr1.9\tud@len@widemargin\relax}% + \setlength\tud@len@footsep{% + \dimexpr\tud@len@widemargin-.6\tud@len@topmargin\relax% + }% +% \end{macrocode} +% Wird die Gestaltungshöhe DIN~A5 im Raster verwendet, werden die Abstände +% zwischen Kopf- unf Fußzeile angepasst. +% \begin{macrocode} + \if@tud@cdgeometry@adjust% + \setlength\tud@len@headsep{\dimexpr.707107\tud@len@headsep\relax}% + \setlength\tud@len@footsep{\dimexpr.707107\tud@len@footsep\relax}% + \fi% +} +% \end{macrocode} +% \end{length}^^A \tud@len@layoutvoffset +% \end{length}^^A \tud@len@layouthoffset +% \end{length}^^A \tud@len@layoutheight +% \end{length}^^A \tud@len@layoutwidth +% \end{macro}^^A \tud@cdgeometry@assignlayout +% \end{macro}^^A \if@tud@cdgeometry@adjust +% \end{macro}^^A \tud@cdgeometry@set +% +% \iffalse +%</class&body> +%<*class&option> +% \fi +% +% \begin{macro}{\tud@cdgeometry@reset} +% \changes{v2.06}{2018/08/17}{neu}^^A +% \begin{macro}{\if@tud@cdgeometry@reset} +% \changes{v2.06}{2018/08/17}{neu}^^A +% Mit diesem Befehl wird das Laden von zuvor definierte Satzspiegeln durch die +% Option \opt{cdgeometry} temporär deaktiviert. Dies geschieht, um lediglich +% die im Hintergrund verwendeten Makros neu zu setzen. +% \begin{macrocode} +\newif\if@tud@cdgeometry@reset +\newcommand*\tud@cdgeometry@reset[1]{% + \@tud@cdgeometry@resettrue% + \TUDoptions{cdgeometry=#1}% + \@tud@cdgeometry@resetfalse% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@cdgeometry@reset +% \end{macro}^^A \tud@cdgeometry@reset +% \subsection{Optionen für den Satzspiegel} +% \begin{option}{cdgeometry} +% \changes{v2.05}{2016/03/06}{\val{custom} neu}^^A +% \begin{macro}{\tud@cdgeometry@num} +% \begin{macro}{\if@tud@cdgeometry@num@locked} +% \begin{macro}{\tud@cdgeometry@calc@num} +% \changes{v2.05}{2015/11/29}{neu}^^A +% Für das \CD sind standardmäßig feste Seitenränder vorgegeben. Diese sind +% jedoch leider nur aus gestalterischen Motiven und ohne die Beachtung +% typographischer Belange gewählt und festgelegt worden. Beispielweise ist ein +% doppelseitiger Satz einer Abschlussarbeit im \CD nur mit einem grauenhaften +% Satzspiegel möglich. Um dem Anwender einen gewissen Spielraum zu geben, wird +% alternativ zum asymmetrischen (\opt{geometry}|=|\val{on}) ein symmetrischer +% Satzspiegel bereitgestellt (\opt{geometry}|=|\val{normal}), welcher bei +% einseitigem Satz zentriert ist und bei zweiseitigem Satz den inneren Rand +% kleiner setzt als den äußeren. Des Weiteren kann die Satzspiegelberechnung +% auch direkt durch das Paket \pkg{typearea} aus dem \KOMAScript-Paket erfolgen +% (\opt{geometry}|=|\val{no}). Mit \cs{tud@cdgeometry@@process} werden alle +% getroffenen Satzspiegeloptionen umgesetzt und nachfolgend definiert. +% \begin{macrocode} +\tud@locked@newnum{tud@cdgeometry@num}{0} +\newcommand*\tud@cdgeometry@calc@num{0} +\TUD@key{cdgeometry}[true]{% + \TUD@set@numkey{cdgeometry}{@tempa}{% + \TUD@bool@numkey,% + {typearea}{0},% + {cd}{1},{tud}{1},{asymmetric}{1},% + {symmetric}{2},{centred}{2},{centered}{2},% + {normal}{2},{standard}{2},{std}{2},% + {twoside}{3},{balanced}{3},% + {oneside}{4},% + {restricted}{5},% + {adapted}{6},{adapt}{6},{adapting}{6},{unrestricted}{6},% + {calculated}{7},{calc}{7},{calculate}{7},{calculating}{7},% + {custom}{8},{user}{8},{package}{8}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false/typearea + \tud@locked@num@set{tud@cdgeometry@num}{0}% + \or% true/cd + \tud@locked@num@set{tud@cdgeometry@num}{2}% + \or% symmetric + \tud@locked@num@set{tud@cdgeometry@num}{3}% + \or% twoside + \tud@locked@num@set{tud@cdgeometry@num}{4}% + \TUD@KOMAoptions{twoside=true}% + \or% oneside + \ifnum\tud@cdgeometry@num>\thr@@\relax% + \tud@locked@num@set{tud@cdgeometry@num}{3}% + \fi% + \TUD@KOMAoptions{twoside=false}% + \or% restricted + \tud@locked@num@preset{tud@cdgeometry@num}{2}% + \renewcommand*\tud@cdgeometry@calc@num{0}% + \or% adapted + \tud@locked@num@preset{tud@cdgeometry@num}{2}% + \renewcommand*\tud@cdgeometry@calc@num{1}% + \or% calculated + \tud@locked@num@preset{tud@cdgeometry@num}{2}% + \renewcommand*\tud@cdgeometry@calc@num{2}% + \or% custom + \tud@locked@num@set{tud@cdgeometry@num}{1}% + \fi% +% \end{macrocode} +% Innerhalb des Dokumentes kann die Option genutzt werden, um zwischen den +% unterschiedlichen Satzspiegeln zu wechseln. Da bei der Konstruktion dieser +% die internen Längen verwendet werden, welche von \pkg{typearea} respektive +% \pkg{geometry} definiert werden, muss beim Umschalten der jeweils zuletzt +% definierte Satzspiegel geladen werden. Falls jedoch eine Neuberechnung +% erfolgte, wird auf das Laden verzichtet (\cs{if@tud@cdgeometry@reset}). +% \begin{macrocode} + \if@atdocument% + \if@tud@cdgeometry@reset\else% + \ifcase\tud@cdgeometry@num\relax% + \tud@loadgeometry{current@typearea}% + \@tud@x@geometry@fixmarginstrue% + \or% + \tud@loadgeometry{current@custom}% + \@tud@x@geometry@fixmarginstrue% + \fi% + \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% + \fi% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdgeometry@calc@num +% \end{macro}^^A \if@tud@cdgeometry@num@locked +% \end{macro}^^A \tud@cdgeometry@num +% \end{option}^^A cdgeometry +% \begin{option}{extrabottommargin} +% \begin{macro}{\tud@dim@extrabottommargin} +% Diese Option dient dazu, die Höhe des Fußes anzupassen. Dies ist jedoch nur +% möglich, wenn der Satzspiegel des \CDs verwendet wird. Kommt \pkg{typearea} +% zum Einsatz, ist die Option wirkungslos. Da für die Länge ggf. auch Werte +% angegeben werden können, die abhängig von der Schriftgröße sind, wird die +% Ausführung dieser Option verzögert. +% \begin{macrocode} +\newcommand*\tud@dim@extrabottommargin{\z@} +\TUD@key{extrabottommargin}{% + \TUD@set@dimenkey{extrabottommargin}{\tud@dim@extrabottommargin}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@dim@extrabottommargin +% \begin{option}{bleedmargin} +% \changes{v2.05}{2016/06/14}{neu}^^A +% \begin{macro}{\tud@dim@bleedmargin} +% \changes{v2.05}{2016/04/03}{neu}^^A +% Wird entweder das Paket \pkg{crop} oder aber die Option \opt{layout} des +% Paketes \pkg{geometry} für Schnittmarken verwendet, werden alle farbigen +% Elemente des Layouts dahingehend vergrößert, dass beim Zuschneiden des +% Papierbogens \emph{in die Farbe} geschnitten wird. Verantwortlich hierfür ist +% das Makro \cs{tud@dim@bleedmargin}, welches natürlich auch vom Anwender mit +% der Option \opt{bleedmargin} beliebig gesetzt werden kann. Als Standardwert +% werden 5\% der größten Randbreite gesetzt. +% \begin{macrocode} +\newcommand*\tud@dim@bleedmargin{.2in} +\TUD@key{bleedmargin}{% + \TUD@set@dimenkey{bleedmargin}{\tud@dim@bleedmargin}{#1}% +% \end{macrocode} +% Negative Werte sind nicht möglich, diese werden automatisch korrigiert. +% \begin{macrocode} + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifdim\dimexpr\tud@dim@bleedmargin\relax<\z@\relax% + \def\@tempa-##1\@nil{\def\tud@dim@bleedmargin{##1}}% + \@tempa#1\@nil% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@dim@bleedmargin +% \end{option}^^A bleedmargin +% \end{option}^^A extrabottommargin +% \begin{option}{twoside} +% \begin{option}{twocolumn} +% Sollte einer der beiden \KOMAScript-Optionen im Dokument nach der Präambel +% verwendet werden, erfolgt die Anpassung des Satzspiegels. +% \begin{macrocode} +\DefineFamilyMember{KOMA} +\DefineFamilyKey{KOMA}{twoside}{% + \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{KOMA}{twocolumn}{% + \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% + \FamilyKeyStateProcessed% +} +% \end{macrocode} +% \end{option}^^A twocolumn +% \end{option}^^A twoside +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% \subsection{Realisierung der Satzspiegeleinstellungen} +% Das Paket \pkg{geometry} erlaubt eine genaue Vorgabe des Satzspiegels und +% der Seitenränder, wie es vom \CD der \TnUD verlangt wird. +% \ToDo{Satzspiegel ohne \pkg{geometry}; besser über \cs{storeareas}?!}[v2.07]% +% \ToDo{Benutzerschnittstelle äquivalent zu \pkg{geometry}}[v2.07]% +% \begin{macro}{\tud@cdgeometry@process} +% \changes{v2.05}{2015/11/29}{neu}^^A +% Mit \cs{tud@cdgeometry@process} bzw. \cs{tud@cdgeometry@@process} erfolgt die +% Festlegung des Satzspiegels. Für die Erstellung des Satzspiegels wird das +% Paket \pkg{geometry} verwendet. Mit der Option (\opt{cdgeometry}|=|\val{no}) +% wird jedoch der von \pkg{typearea} berechnete Satzspiegel an \pkg{geometry} +% weitergereicht. Somit wird es möglich, unabhängig vom genutzten Paket +% (\pkg{typearea} oder \pkg{geometry}) zur Festlegung des Satzspiegels, diesen +% innerhalb des Dokumentes zu ändern. +% \begin{macrocode} +\newcommand*\tud@cdgeometry@process{% + \tud@cdgeometry@@process% + \KOMAoptions{pagesize=\@pagesizelast}% +% \end{macrocode} +% Nachder Änderung des Satzspiegels werden alle Logoboxen neu erstellt. +% \begin{macrocode} + \global\@tud@mainlogo@settrue% +% \end{macrocode} +% Damit Änderungen am Satzspiegel im Dokument sicher übernommen werden, wird +% das Setzen des Satzspiegels forciert. Dafür wird \cs{tud@currentgeometry} +% zurückgesetzt und anschließend der aktuelle Seitenstil erneut geladen, um das +% erneute Ausführen von \cs{tud@BeforeSelectAnyPageStyle} zu erzwingen. +% \begin{macrocode} + \gdef\tud@currentgeometry{}% + \expandafter\pagestyle\expandafter{\currentpagestyle}% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdgeometry@process +% Wurde die \cls{standalone}-Klasse mit der Option \opt{crop} geladen, werden +% sämtliche Einstellungen für den Satzspiegel unterdrückt. +% \begin{macrocode} +\if@tud@x@standalone@crop + \PreventPackageFromLoading{geometry}% + \let\tud@cdgeometry@process\relax% +\else + \RequirePackage{geometry}[2010/09/12]% +\fi% +\AfterPackage*{geometry}{% + \CheckCommand*\Gm@initnewgm{% + \Gm@passfalse + \Gm@swap@papersizefalse + \Gm@dimlist={} + \Gm@hbodyfalse + \Gm@vbodyfalse + \Gm@heightroundedfalse + \Gm@includeheadfalse + \Gm@includefootfalse + \Gm@includempfalse + \let\Gm@width\@undefined + \let\Gm@height\@undefined + \let\Gm@textwidth\@undefined + \let\Gm@textheight\@undefined + \let\Gm@lines\@undefined + \let\Gm@hscale\@undefined + \let\Gm@vscale\@undefined + \let\Gm@hmarginratio\@undefined + \let\Gm@vmarginratio\@undefined + \let\Gm@lmargin\@undefined + \let\Gm@rmargin\@undefined + \let\Gm@tmargin\@undefined + \let\Gm@bmargin\@undefined + \Gm@layoutfalse + \Gm@layouthoffset\z@ + \Gm@layoutvoffset\z@ + \Gm@bindingoffset\z@ + }% + \expandafter\CheckCommand% + \csname\expandafter\@gobble\string\Gm@changelayout\space\endcsname{% + \setlength{\@colht}{\textheight} + \setlength{\@colroom}{\textheight}% + \setlength{\vsize}{\textheight} + \setlength{\columnwidth}{\textwidth}% + \if@twocolumn% + \advance\columnwidth-\columnsep + \divide\columnwidth\tw@% + \@firstcolumntrue% + \fi% + \setlength{\hsize}{\columnwidth}% + \setlength{\linewidth}{\hsize}% + }% + \CheckCommand*\Gm@@process{% + \Gm@expandlengths + \Gm@adjustpaper + \addtolength\Gm@layoutwidth{-\Gm@bindingoffset}% + \Gm@adjustmp + \Gm@adjustbody + \Gm@detall{h}{width}{lmargin}{rmargin}% + \Gm@detall{v}{height}{tmargin}{bmargin}% + \setlength\textwidth{\Gm@width}% + \setlength\textheight{\Gm@height}% + \setlength\topmargin{\Gm@tmargin}% + \setlength\oddsidemargin{\Gm@lmargin}% + \addtolength\oddsidemargin{-1\Gm@truedimen in}% + \ifGm@includemp + \advance\textwidth-\Gm@wd@mp + \advance\oddsidemargin\Gm@odd@mp + \fi + \if@mparswitch + \setlength\evensidemargin{\Gm@rmargin}% + \addtolength\evensidemargin{-1\Gm@truedimen in}% + \ifGm@includemp + \advance\evensidemargin\Gm@even@mp + \fi + \else + \evensidemargin\oddsidemargin + \fi + \advance\oddsidemargin\Gm@bindingoffset + \addtolength\topmargin{-1\Gm@truedimen in}% + \ifGm@includehead + \addtolength\textheight{-\headheight}% + \addtolength\textheight{-\headsep}% + \else + \addtolength\topmargin{-\headheight}% + \addtolength\topmargin{-\headsep}% + \fi + \ifGm@includefoot + \addtolength\textheight{-\footskip}% + \fi + \ifGm@heightrounded + \setlength\@tempdima{\textheight}% + \addtolength\@tempdima{-\topskip}% + \@tempcnta\@tempdima + \@tempcntb\baselineskip + \divide\@tempcnta\@tempcntb + \setlength\@tempdimb{\baselineskip}% + \multiply\@tempdimb\@tempcnta + \advance\@tempdima-\@tempdimb + \multiply\@tempdima\tw@ + \ifdim\@tempdima>\baselineskip + \addtolength\@tempdimb{\baselineskip}% + \fi + \addtolength\@tempdimb{\topskip}% + \textheight\@tempdimb + \fi + \advance\oddsidemargin\Gm@layouthoffset% + \advance\evensidemargin\Gm@layouthoffset% + \advance\topmargin\Gm@layoutvoffset% + \addtolength\Gm@layoutwidth{\Gm@bindingoffset}% + }% + \CheckCommand\geometry[1]{% + \Gm@clean + \setkeys{Gm}{#1}% + \Gm@process% + }% + \CheckCommand\newgeometry[1]{% + \clearpage + \Gm@restore@org + \Gm@initnewgm + \Gm@newgmtrue + \setkeys{Gm}{#1}% + \Gm@newgmfalse + \Gm@process + \ifnum\mag=\@m\else\Gm@magtooffset\fi + \Gm@changelayout + \Gm@showparams{newgeometry}% + }% + \CheckCommand\restoregeometry{% + \clearpage + \Gm@restore@pkg + \Gm@changelayout% + }% + \CheckCommand*\savegeometry[1]{% + \Gm@save + \expandafter\edef\csname Gm@restore@@#1\endcsname{\Gm@restore}% + }% + \CheckCommand*\loadgeometry[1]{% + \clearpage + \@ifundefined{Gm@restore@@#1}{% + \PackageError{geometry}{% + \string\loadgeometry : name `#1' undefined}{% + The name `#1' should be predefined with \string\savegeometry}% + }{\@nameuse{Gm@restore@@#1}% + \Gm@changelayout}% + }% +% \end{macrocode} +% \begin{macro}{\geometry} +% \begin{macro}{\newgeometry} +% \begin{macro}{\restoregeometry} +% \begin{macro}{\Gm@changelayout} +% \begin{macro}{\if@tud@x@geometry@enabled} +% \changes{v2.05}{2016/03/06}{neu}^^A +% \begin{macro}{\tud@x@geometry@fixmargins} +% \changes{v2.06}{2018/08/13}{neu}^^A +% \begin{macro}{\if@tud@x@geometry@fixmargins} +% \changes{v2.06}{2018/08/13}{neu}^^A +% Für einen benutzerdefinierten Satzspiegel ist es notwendig, die durch den +% Anwender in der Präambel getätigten Einstellungen zu sichern und am Ende der +% Präambel für die unterschiedlichen, durch die Klasse benötigten Satzspiegel +% der einzelnen Seitenstile umzusetzen. Dabei werden auch etwaige Optionen von +% \KOMAScript{} beachtet. Hierfür werden die originalen Befehle \cs{geometry} +% und \cs{newgeometry} angepasst, weshalb diese vorher gesichert werden. +% \begin{macrocode} + \newif\if@tud@x@geometry@enabled% + \@tud@x@geometry@enabledtrue% + \tud@cs@store{geometry}% + \tud@cs@store{newgeometry}% + \renewcommand*\geometry[1]{% + \tud@x@geometry@user{#1}{geometry}% + }% + \renewcommand*\newgeometry[1]{% + \tud@cs@store{Gm@restore@org}% + \tud@x@geometry@user{#1}{newgeometry}% + \tud@cs@restore{Gm@restore@org}% + }% +% \end{macrocode} +% Bei der Verwendung von \cs{restoregeometry} wird der am Ende der Präambel +% der passend zur entsprechende Einstellung von \opt{cdgeometry} gesicherte +% Satzspiegel geladen. Über das optinale Argument kann der gewünschte Wert für +% die Option \opt{cdgeometry} angegeben werden. +% \begin{macrocode} + \renewcommand*\restoregeometry[1][custom]{% + \tud@cdgeometry@reset{#1}% + \if@atdocument% + \ifcase\tud@cdgeometry@num\relax% false + \tud@loadgeometry{init@typearea}% + \@tud@x@geometry@fixmarginstrue% + \or% custom + \tud@loadgeometry{init@custom}% + \@tud@x@geometry@fixmarginstrue% + \fi% + \tud@cdgeometry@process% + \fi% + }% +% \end{macrocode} +% Sollte im Dokument durch den Anwender der Satzspiegel manuell geändert +% werden, muss darauf reagiert und die unterschiedlichen Satzspiegel der Klasse +% angepasst werden. Hierfür wird am Ende von \cs{Gm@changelayout} ein Patch +% eingehängt. +% \begin{macrocode} + \apptocmd{\Gm@changelayout}{% + \if@tud@x@geometry@enabled% + \if@atdocument% + \@tud@x@geometry@fixmarginstrue% + \tud@cdgeometry@reset{custom}% + \tud@cdgeometry@process% + \fi% + \fi% + }{}{\tud@patch@wrn{Gm@changelayout}}% +% \end{macrocode} +% Das Paket \pkg{geometry} bietet die Möglichkeit, den kompletten Satzspiegel +% bzw. das Layout mit einem Offset zu beaufschlagen. Dieser wird den Längen +% \cs{oddsidemargin} und \cs{evensidemargin} bzw. \cs{topmargin} zugeschlagen. +% Da intern jedoch diese Längen nach der einmaligen Anwendung der Nutzerbefehle +% mehrmals wiederverwendet werden, müssen diese u.U. korrigert bzw. auf ihren +% ursprünglichen Wert zurückgesetzt werden. +% \begin{macrocode} + \newif\if@tud@x@geometry@fixmargins% + \newcommand*\tud@x@geometry@fixmargins{% + \ifGm@pass\else% + \addtolength\oddsidemargin{-\tud@len@layouthoffset}% + \addtolength\evensidemargin{-\tud@len@layouthoffset}% + \addtolength\topmargin{-\tud@len@layoutvoffset}% + \@tud@x@geometry@fixmarginsfalse% + \fi% + }% +% \end{macrocode} +% \end{macro}^^A \if@tud@x@geometry@fixmargins +% \end{macro}^^A \tud@x@geometry@fixmargins +% \end{macro}^^A \if@tud@x@geometry@enabled +% \end{macro}^^A \Gm@changelayout +% \end{macro}^^A \restoregeometry +% \end{macro}^^A \newgeometry +% \end{macro}^^A \geometry +% \begin{macro}{\tud@x@geometry@user} +% \changes{v2.05}{2016/03/06}{neu}^^A +% \begin{parameter}{paper} +% \begin{parameter}{papername} +% \begin{parameter}{paperwidth} +% \begin{parameter}{paperheight} +% \begin{parameter}{papersize} +% \begin{parameter}{layout} +% \begin{parameter}{layoutname} +% \begin{parameter}{layoutwidth} +% \begin{parameter}{layoutheight} +% \begin{parameter}{layoutsize} +% \begin{parameter}{bleedmargin} +% \begin{macro}{\tud@x@geometry@area@def} +% \changes{v2.05}{2016/03/06}{neu}^^A +% \begin{macro}{\tud@x@geometry@area@set} +% \changes{v2.05}{2016/03/06}{neu}^^A +% \begin{macro}{\tud@x@geometry@paper} +% \changes{v2.05}{2016/07/20}{neu}^^A +% \begin{macro}{\tud@x@geometry@layout} +% \changes{v2.05}{2016/07/20}{neu}^^A +% \begin{macro}{\tud@x@geometry@parameter} +% \changes{v2.05}{2016/07/20}{neu}^^A +% \begin{macro}{\tud@x@geometry@init} +% \changes{v2.05}{2016/03/06}{neu}^^A +% Bei der Redefinition der Befehle \cs{geometry} und \cs{newgeometry} kommt +% intern das Makro \cs{tud@x@geometry@user} zum Einsatz, womit kleinere +% Feinheiten zwischen den beiden Befehlen unterschieden werden können. +% \begin{macrocode} + \newcommand*\tud@x@geometry@paper{}% + \newcommand*\tud@x@geometry@layout{}% + \newcommand*\tud@x@geometry@parameter{}% + \newcommand*\tud@x@geometry@init{}% + \newcommand*\tud@x@geometry@user[2]{% + \let\tud@x@geometry@paper\@empty% + \let\tud@x@geometry@layout\@empty% + \let\tud@x@geometry@parameter\@empty% + \TUD@parameter@set{geometry}{#1}% + \ifx\tud@x@geometry@layout\@empty\else% + \begingroup% + \tud@x@geometry@area@set{layout}% + \edef\tud@res@a{% + \endgroup% + \noexpand\setlength\noexpand\tud@len@layoutwidth{\the\paperwidth}% + \noexpand\setlength\noexpand\tud@len@layoutheight{\the\paperheight}% + }% + \tud@res@a% + \fi% + \tud@x@geometry@area@set{paper}% + \ifstr{#2}{newgeometry}{% + \eappto\Gm@restore@org{% + \noexpand\paperwidth=\the\paperwidth\relax% + \noexpand\paperheight=\the\paperheight\relax% + }% + \tud@x@geometry@getlayout{\tud@res@a}% + \epreto\tud@x@geometry@parameter{\tud@res@a,}% + \def\tud@res@a{\tud@cs@use{newgeometry}}% + \expandafter\tud@res@a\expandafter{\tud@x@geometry@parameter}% + \edef\tud@x@geometry@init{\tud@x@geometry@parameter}% + }{% + \eappto\tud@x@geometry@init{\tud@x@geometry@parameter}% + }% + }% +% \end{macrocode} +% Das folgende Konstrukt ist aus der Idee entstanden, die Parameter \val{paper} +% sowie \val{layout} des Paketes \pkg{geometry} auf die passenden Optionen von +% \KOMAScript{} abbilden zu können und insbesondere Schnittmarken für alle +% Seitenstile bereitzustellen. % +% \ToDo{% +% Leider ist aus der dem Versuch, eine halbwegs einheitliche Schnittstelle +% zwischen den Paketen \pkg{typearea} und \pkg{geometry} zu schaffen, ein +% ziemlich unübersichtliches Konstrukt geworden, weshalb das Ganze in einer +% folgenden Version mit \KOMAScript-Mitteln neu implementiert werden soll. +% }[v2.07] +% \ToDo{Orientierung automatisch aus paperwidth/paperheight}[v2.07] +% \begin{macrocode} + \TUD@parameter@family{geometry}{% + \TUD@parameter@def{paper}{\tud@x@geometry@area@def{paper}{#1}}% + \TUD@parameter@let{papername}{paper}% + \TUD@parameter@def{papersize}{% + \def\@tempa##1,##2,##3\@nil{% + \IfArgIsEmpty{##2}{% + \tud@x@geometry@area@def{paper}{##1:##1}% + }{% + \tud@x@geometry@area@def{paper}{##1:##2}% + }% + }% + \@tempa#1,,\@nil% + }% + \TUD@parameter@def{paperwidth}{% + \tud@x@geometry@area@def{paper}{#1:\paperheight}% + }% + \TUD@parameter@def{paperheight}{% + \tud@x@geometry@area@def{paper}{\paperwidth:#1}% + }% + \TUD@parameter@def{layout}{% + \ifstr{#1}{false}{% + \setlength\tud@len@layoutwidth{\z@}% + \setlength\tud@len@layoutheight{\z@}% + \setlength\tud@len@layouthoffset{\z@}% + \setlength\tud@len@layoutvoffset{\z@}% + }{% + \tud@x@geometry@area@def{layout}{#1}% + }% + }% + \TUD@parameter@let{layoutname}{layout}% + \TUD@parameter@def{layoutsize}{% + \def\@tempa##1,##2,##3\@nil{% + \IfArgIsEmpty{##2}{% + \tud@x@geometry@area@def{layout}{##1:##1}% + }{% + \tud@x@geometry@area@def{layout}{##1:##2}% + }% + }% + \@tempa#1,,\@nil% + }% + \TUD@parameter@def{layoutwidth}{\setlength\tud@len@layoutwidth{#1}}% + \TUD@parameter@def{layoutheight}{\setlength\tud@len@layoutheight{#1}}% + \TUD@parameter@def{layoutoffset}{% + \def\@tempa##1,##2,##3\@nil{% + \IfArgIsEmpty{##2}{% + \setlength\tud@len@layouthoffset{##1}% + \setlength\tud@len@layoutvoffset{##1}% + }{% + \setlength\tud@len@layouthoffset{##1}% + \setlength\tud@len@layoutvoffset{##2}% + }% + }% + \@tempa#1,,\@nil% + }% + \TUD@parameter@def{layouthoffset}{\setlength\tud@len@layouthoffset{#1}}% + \TUD@parameter@def{layoutvoffset}{\setlength\tud@len@layoutvoffset{#1}}% + \TUD@parameter@def{bleedmargin}{\TUDoption{bleedmargin}{#1}}% + \TUD@parameter@handler@macro{% + \eappto\tud@x@geometry@parameter{% + \expandonce\kv@key=\expandonce\kv@value,% + }% + }{% + \tud@x@geometry@area@def{paper}{#2}% + }% + }% +% \end{macrocode} +% Wenig Kommentar dazu, weil eigentlich schon wieder obsolet! Die möglichen +% Werte für \val{paper} und \val{layout} werden abgefangen und für die beiden +% Befehle \cs{geometry} und \cs{newgeometry} aufgearbeitet. Alle anderen werden +% einfach an \pkg{geometry} durchgereicht. Dies geschieht über die jeweiligen +% Hilfsmakros \cs{tud@x@geometry@\dots} für \val{paper}, \val{layout} sowie +% \val{parameter} für alles Übrige. +% \begin{macrocode} + \newcommand*\tud@x@geometry@area@def[2]{% + \tud@lowerstring{\@tempa}{#2}% + \def\@tempb##1paper##2\@nil{% + \ifstr{##2}{paper}{\def\@tempa{##1}}{}% + }% + \expandafter\@tempb\@tempa paper\@nil% + \@tempswafalse% + \ifstr{\@tempa}{seascape}{\@tempswatrue}{}% + \ifstr{\@tempa}{landscape}{\@tempswatrue}{}% + \ifstr{\@tempa}{portrait}{\@tempswatrue}{}% + \ifstr{\@tempa}{letter}{\@tempswatrue}{}% + \ifstr{\@tempa}{executive}{\@tempswatrue}{}% + \ifstr{\@tempa}{legal}{\@tempswatrue}{}% + \if@tempswa\else% + \ifx\@tempa\@empty\relax\else% + \def\@tempb##1##2\@nil{% + \if ##1a\@tempswatrue% + \else\if ##1b\@tempswatrue% + \else\if ##1c\@tempswatrue% + \else\if ##1d\@tempswatrue% + \fi\fi\fi\fi% + \if@tempswa% + \@tempswafalse% + \IfArgIsEmpty{##2}{}{\ifnumber{##2}{\@tempswatrue}{}}% + \fi% + }% + \expandafter\@tempb\@tempa\@nil% + \if@tempswa\else% + \def\@tempb##1:##2:##3\@nil{% + \IfArgIsEmpty{##2}{}{% + \@tempswatrue% + \def\@tempa{##1:##2}% + }% + }% + \expandafter\@tempb\@tempa::\@nil% + \fi% + \if@tempswa\else% + \def\tud@reserved##1:##2:##3:##4\@nil{% + \if@tempswa\else% + \ifstr{\@tempa}{##1}{% + \@tempswatrue% + \def\@tempa{##2##4:##3##4}% + }{}% + \fi% + }% + \tud@reserved b0j:1030:1456:mm\@nil% + \tud@reserved b1j:728:1030:mm\@nil% + \tud@reserved b2j:515:728:mm\@nil% + \tud@reserved b3j:364:515:mm\@nil% + \tud@reserved b4j:257:364:mm\@nil% + \tud@reserved b5j:182:257:mm\@nil% + \tud@reserved b6j:128:182:mm\@nil% + \tud@reserved ansia:8.5:11:in\@nil% + \tud@reserved ansib:11:17:in\@nil% + \tud@reserved ansic:17:22:in\@nil% + \tud@reserved ansid:22:34:in\@nil% + \tud@reserved ansie:34:44:in\@nil% + \tud@reserved screen:225:180:mm\@nil% + \fi% + \fi% + \fi% + \if@tempswa% + \cseappto{tud@x@geometry@#1}{\@tempa,}% + \else% + \appto\tud@x@geometry@parameter{#2,}% + \fi% + }% +% \end{macrocode} +% Der Befehl \cs{tud@x@geometry@area@set} bewerkstelligt die Abarbeitung der +% zuvor gesammelten Schlüssel. +% \begin{macrocode} + \newcommand*\tud@x@geometry@area@set[1]{% + \letcs{\@tempa}{tud@x@geometry@#1}% + \ifdefvoid{\@tempa}{}{% + \def\@tempb##1:##2:##3\@nil{% + \begingroup% + \IfArgIsEmpty{##2}{% + \def\@tempb{\KOMAoption{paper}{##1}}% + }{% + \if@landscape% + \def\@tempb{\KOMAoption{paper}{##2:##1}}% + \else% + \def\@tempb{\KOMAoption{paper}{##1:##2}}% + \fi% + }% + \edef\@tempb{\endgroup\expandonce\@tempb}% + \@tempb% + }% + \def\@tempc##1{\@tempb##1::\@nil}% + \expandafter\forcsvlist\expandafter\@tempc\expandafter{\@tempa}% + }% + }% +% \end{macrocode} +% \end{macro}^^A \tud@x@geometry@init +% \end{macro}^^A \tud@x@geometry@parameter +% \end{macro}^^A \tud@x@geometry@layout +% \end{macro}^^A \tud@x@geometry@paper +% \end{macro}^^A \tud@x@geometry@area@set +% \end{macro}^^A \tud@x@geometry@area@def +% \end{parameter}^^A bleedmargin +% \end{parameter}^^A layoutsize +% \end{parameter}^^A layoutheight +% \end{parameter}^^A layoutwidth +% \end{parameter}^^A layoutname +% \end{parameter}^^A layout +% \end{parameter}^^A papersize +% \end{parameter}^^A paperheight +% \end{parameter}^^A paperwidth +% \end{parameter}^^A papername +% \end{parameter}^^A paper +% \end{macro}^^A \tud@x@geometry@user +% \begin{macro}{\tud@x@geometry@getlayout} +% \changes{v2.06}{2018/08/13}{neu}^^A +% \begin{macrocode} + \newcommand*\tud@x@geometry@getlayout[1]{% +% \end{macrocode} +% Unabhängig von der gewählten Option \opt{cdgeometry} für den Satzspiegel +% sollen die von \pkg{geometry} bereitgestellten Möglichkieten für den +% Papierbogen nutzbar bleiben. Die zu setzenden Einstellungen für das Layout +% werden in das im Argument übergebene Makro geschrieben. +% \begin{macrocode} + \ifGm@pass% + \let#1\@empty% + \else% + \tud@cdgeometry@assignlayout% + \begingroup% +% \end{macrocode} +% Das Setzen des Layouts erfolgt nur, wenn die dazugehörigen Längen \emph{nicht} +% denen des Papierbogens entsprechen. +% \begin{macrocode} + \@tud@res@swafalse% + \ifdim\tud@len@layoutwidth=\paperwidth\relax\else\@tud@res@swatrue\fi% + \ifdim\tud@len@layoutheight=\paperheight\relax\else\@tud@res@swatrue\fi% + \edef\tud@res@a{% + \endgroup% + \etex@unexpanded{\def#1}{% + layoutoffset={% + \the\tud@len@layouthoffset,\the\tud@len@layoutvoffset% + }% + \if@tud@res@swa% + ,layoutsize={\the\tud@len@layoutwidth,\the\tud@len@layoutheight}% + \fi% + }% + }% + \tud@res@a% + \fi% + }% +% \end{macrocode} +% \end{macro}^^A \tud@x@geometry@getlayout +% \begin{macro}{\tud@x@geometry@set} +% \changes{v2.04}{2015/03/12}{neu}^^A +% \begin{macro}{\tud@savegeometry} +% \changes{v2.05}{2016/04/03}{neu}^^A +% \begin{macro}{\tud@loadgeometry} +% \changes{v2.05}{2016/03/06}{neu}^^A +% Mit dem Befehl \cs{tud@x@geometry@set} wird abhängig davon, ob dieser in der +% Präambel oder im Dokument von \cs{tud@cdgeometry@@process} verwendet wird, +% entweder \cs{geometry} oder \cs{newgeometry} aufgerufen. Mit dem Schalter +% \cs{if@tud@x@geometry@enabled} wird im Fall, dass ein der Satzspiegel durch +% den Anwender eingestellt wurde, das rekursive Aufrufen von \cs{geometry} bzw. +% \cs{newgeometry} und einer daraus resultierenden Endlosschleife unterbunden. +% \begin{macrocode} + \newcommand*\tud@x@geometry@set[1]{% + \@tud@x@geometry@enabledfalse% +% \end{macrocode} +% Um etwaige Änderungen am Papierformat innerhalb des Dokumentes beachten zu +% können, werden die aktuellen Maße für das Papierformat an \cs{Gm@restore@org} +% angehangen. +% \begin{macrocode} + \if@atdocument% + \edef\@tempa{#1}% + \tud@cs@store{Gm@restore@org}% + \eappto\Gm@restore@org{% + \noexpand\paperwidth=\the\paperwidth\relax% + \noexpand\paperheight=\the\paperheight\relax% + }% + \def\@tempc{\tud@cs@use{newgeometry}}% + \expandafter\@tempc\expandafter{\@tempa}% + \tud@cs@restore{Gm@restore@org}% + \else% +% \end{macrocode} +% Zu Beginn des Dokumentes werden mit \cs{Gm@initnewgm} vor jedem Satzspiegel +% die zuvor gemachten Einstellungen zurückgesetzt. +% \begin{macrocode} + \Gm@initnewgm% + \edef\@tempa{% + paperwidth=\the\paperwidth,paperheight=\the\paperheight,#1% + }% + \def\@tempc{\tud@cs@use{geometry}}% + \expandafter\@tempc\expandafter{\@tempa,driver=none}% + \fi% + \@tud@x@geometry@enabledtrue% + }% +% \end{macrocode} +% Beim Speichern eines Satzspiegels sichert \pkg{geometry} tatsächlich nicht +% alle notwendigen Einstellungen und Befehle. Deshalb wird etwas nachgeholfen. +% \begin{macrocode} + \newcommand*\tud@savegeometry[1]{% + \let\Gm@restore\@empty% + \savegeometry{#1}% + \csepreto{Gm@restore@@#1}{% + \noexpand\Gm@bindingoffset=\the\Gm@bindingoffset% + \ifGm@includehead% + \noexpand\Gm@includeheadtrue% + \else% + \noexpand\Gm@includeheadfalse% + \fi% + \ifGm@includefoot% + \noexpand\Gm@includefoottrue% + \else% + \noexpand\Gm@includefootfalse% + \fi% + \ifGm@includemp% + \noexpand\Gm@includemptrue% + \else% + \noexpand\Gm@includempfalse% + \fi% + \ifGm@layout% + \noexpand\Gm@layouttrue% + \else% + \noexpand\Gm@layoutfalse% + \fi% + }% + }% + \newcommand*\tud@loadgeometry[1]{% + \@tud@x@geometry@enabledfalse% + \loadgeometry{#1}% +% \end{macrocode} +% Die nächsten beiden Makros müssen nach der Satzspiegeländerung des ausgeführt +% werden, um den Durchschuss und eine etwaige Zentrierung durch das Paket +% \pkg{crop} wiederherzustellen. +% \begin{macrocode} + \@currsize% + \if@tud@x@crop@center\CROP@center\fi% + \@tud@x@geometry@enabledtrue% + }% +% \end{macrocode} +% \end{macro}^^A \tud@loadgeometry +% \end{macro}^^A \tud@savegeometry +% \end{macro}^^A \tud@x@geometry@set +% \begin{macro}{\tud@cdgeometry@@process} +% \changes{v2.02}{2014/06/23}{geändert für das Paket \pkg{scrlayer-scrpage}}^^A +% \changes{v2.03}{2015/01/09}{Satzspiegel des \CDs angepasst}^^A +% \changes{v2.03}{2015/01/09}{intiale Festlegung der Länge \cs{marginpar}}^^A +% \changes{v2.03}{2015/01/13}{Satzspiegel kompatibilitätsabhängig}^^A +% \begin{macro}{\tud@cdgeometry@@@process} +% \begin{macro}{\tud@cdgeometry@layout} +% \changes{v2.06}{2018/08/13}{neu}^^A +% \begin{macro}{\tud@cdgeometry@hmargin} +% \begin{macro}{\tud@cdgeometry@vmargin} +% \begin{macro}{\tud@cdgeometry@tudmargin} +% \begin{macro}{\tud@cdgeometry@ddcmargin} +% Dies sind Hilfsmakros für die Definition der unterschiedichen Seitenlayouts +% (horizontale und vertikale Ränder). Es handelt sich dabei um die Seitenränder +% für den normalen Textbereich sowie die angepassten vertikalen Einstellungen +% für die Seitenstilvarianten mit TUD-Kopf. Im Kompatibilitätsmodus für die +% Version~v2.02 gibt es außerdem einen separaten Satzspiegel für den \DDC-Fuß. +% Gesetzt werden diese in Abhängigkeit von der Option \opt{cdgeometry} im +% Makro \cs{tud@cdgeometry@@process} bzw. \cs{tud@cdgeometry@@@process}. +% \begin{macrocode} + \newcommand*\tud@cdgeometry@layout{}% + \newcommand*\tud@cdgeometry@hmargin{}% + \newcommand*\tud@cdgeometry@vmargin{}% + \newcommand*\tud@cdgeometry@tudmargin{}% + \tud@if@v@lower{2.03}{\newcommand*\tud@cdgeometry@ddcmargin{}}{}% +% \end{macrocode} +% Das Makro \cs{tud@cdgeometry@@process} setzt die Option für den gewünschten +% Satzspiegel um, sowohl für die Seitenränder als auch zur Einberechnung der +% Kopf- und/oder Fußzeile. Um mehrere Satzspiegel verwenden zu können~-- was +% für die unterschiedlichen Höhen für Kopf- und Fußzeile nötig ist~-- wird das +% Paket \pkg{geometry} verwendet. Soll \pkg{typearea} zur Satzspiegelerstellung +% genutzt werden, so werden die damit berechneten Werte an \pkg{geometry} +% weitergereicht. +% Es werden drei Layouts erstellt: normaler Satzspiegel, nur TUD-Kopf sowie +% TUD-Kopf und "~Fuß und mit \cs{savegeometry}\marg{Stil} gesichert. Damit kann +% innerhalb des Dokumentes mit dem Befehl \cs{loadgeometry}\marg{Stil} oberer +% sowie ggf. untere Seitenrand geändert werden. +% \begin{macrocode} + \newcommand*\tud@cdgeometry@@process{% + \csuse{@ta@usegeometryfalse}% +% \end{macrocode} +% Die Maßvorgaben werden entsprechend der Seitengröße gesetzt. +% \begin{macrocode} + \tud@cdgeometry@set% +% \end{macrocode} +% Für den Fall, dass \pkg{typearea} die Satzspiegelberechnung übernimmt oder +% dieser durch den Benutzer definiert wurde, werden die Ergebnisse aus der +% Berechnung respektive die aktiven Einstellungen direkt an \pkg{geometry} +% weitergereicht. Dazu werden die berechneten Werte in die entsprechenden +% Hilfsmakros für die Erstellung der \pkg{geometry}-Satzspiegel übergeben. +% Gegebenenfalls werden die Offsets für das Layout korrigiert. +% \begin{macrocode} + \ifnum\tud@cdgeometry@num<\tw@\relax% false/custom + \if@tud@x@geometry@fixmargins% + \tud@x@geometry@fixmargins% + \fi% +% \end{macrocode} +% Die von \pkg{typearea} berechneten Seitenränder werden an \pkg{geometry} +% weitergereicht. +% \begin{macrocode} + \ifcase\tud@cdgeometry@num\relax% + \edef\tud@cdgeometry@hmargin{% + left=\the\dimexpr\oddsidemargin+1in-\ta@bcor\relax,% + textwidth=\the\textwidth,% + \tud@cdgeometry@mpincl,% + marginparwidth=\the\marginparwidth,% + marginparsep=\the\marginparsep,% + \if@reversemargin% + reversemarginpar=true,% + \else% + reversemarginpar=false,% + \fi% + bindingoffset=\the\ta@bcor% + }% + \edef\tud@cdgeometry@vmargin{% + \if@hincl% + includehead=true,% + top=\the\dimexpr\topmargin+1in\relax,% + \else% + includehead=false,% + top=\the\dimexpr\topmargin% + +\headheight+\headsep+1in\relax,% + \fi% + headheight=\the\headheight,% + headsep=\the\headsep,% + textheight=\the\textheight,% + \tud@cdgeometry@fincl,% + footskip=\the\footskip% + }% +% \end{macrocode} +% Und nun für den benutzerdefinierten Satzspiegel. +% \begin{macrocode} + \else% custom + \ifGm@pass\else% + \edef\tud@cdgeometry@hmargin{% + left=\the\dimexpr\oddsidemargin+1in-\Gm@bindingoffset\relax,% + textwidth=\the\textwidth,% + \ifGm@includemp% + includemp=true,% + \else% + includemp=false,% + \fi% + marginparwidth=\the\marginparwidth,% + marginparsep=\the\marginparsep,% + \if@reversemargin% + reversemarginpar=true,% + \else% + reversemarginpar=false,% + \fi% + bindingoffset=\the\Gm@bindingoffset% + }% + \edef\tud@cdgeometry@vmargin{% + \ifGm@includehead% + includehead=true,% + top=\the\dimexpr\topmargin+1in\relax,% + \else% + includehead=false,% + top=\the\dimexpr\topmargin% + +\headheight+\headsep+1in\relax,% + \fi% + headheight=\the\headheight,% + headsep=\the\headsep,% + textheight=\the\textheight,% + \ifGm@includefoot% + includefoot=true,% + \else% + includefoot=false,% + \fi% + footskip=\the\footskip% + }% + \fi% + \fi% +% \end{macrocode} +% Es wird die Höhendifferenz zwischen TUD-Kopf und Standardkopfzeile für den +% benutzerdefnierten bzw. \pkg{typearea}-Satzspiegel berechnet. Für den +% Satzspiegel mit TUD-Kopf muss unterschieden werden, ob der Abstand zwischen +% Kopf und Textbereich vergrößert wurde. Ist dies der Fall, wird die Höhe des +% Textbereiches über \cs{@tempdima} entsprechend verkleinert. Sollte der +% benutzerdefinierten bzw. \pkg{typearea}-Satzspiegel noch unterhalb des +% TUD-Kopfes liegen, wird der Abstand zum Kopf vergrößert. +% \begin{macrocode} + \setlength\tud@len@areadiff{% + \dimexpr\tud@len@topmargin+\tud@len@barheight+\tud@len@headsep% + -\topmargin-\headheight-\headsep-1in\relax% + }% + \ifdim\tud@len@areadiff<\z@\relax% + \addtolength\tud@len@headsep{-\tud@len@areadiff}% + \setlength\@tempdima{\z@}% + \else% + \setlength\@tempdima{\tud@len@areadiff}% + \fi% + \edef\tud@cdgeometry@tudmargin{% + ignorehead=true,% + top=\the\dimexpr\tud@len@topmargin+\tud@len@barheight% + +\tud@len@headsep\relax,% + headheight=\the\dimexpr\tud@len@topmargin+\tud@len@barheight% + -\tud@len@logoy\relax,% + headsep=\the\tud@len@headsep,% + textheight=\the\dimexpr\textheight-\@tempdima\relax% + }% +% \end{macrocode} +% Für den Kompatibilitätsmodus der Version~v2.02 gibt es für den \DDC-Fuß einen +% separaten Satzspiegel. +% \begin{macrocode} + \tud@if@v@lower{2.03}{% + \setlength\tud@len@ddcdiff{% + \dimexpr.6\tud@len@topmargin-\footskip+\tud@len@headsep% + +\footheight-1.25\baselineskip\relax% + }% + \edef\tud@cdgeometry@ddcmargin{% + textheight=\the\dimexpr\textheight-\tud@len@areadiff% + -\tud@len@ddcdiff\relax,% + footskip=\the\dimexpr\footskip+\tud@len@ddcdiff\relax% + }% + }{}% +% \end{macrocode} +% Sollte die Option \opt{extrabottommargin} verwendet worden sein, wird eine +% Warnung ausgegeben, dass diese für den \pkg{typearea}-Satzspiegel wirkungslos +% ist. +% \begin{macrocode} + \ifdim\dimexpr\tud@dim@extrabottommargin\relax=\z@\relax\else% + \begingroup% + \edef\tud@res@a{% + The key `extrabottommargin' is ineffective\MessageBreak% + when\space% + \ifcase\tud@cdgeometry@num% + package `typearea' is used for layout with\MessageBreak% + `cdgeometry=typearea'% + \else% + a user-defined layout is used with\MessageBreak% + `cdgeometry=custom'% + \fi% + }% + \edef\tud@res@a{% + \endgroup% + \noexpand\ClassWarning{\noexpand\TUD@Class@Name}{\tud@res@a}% + }% + \tud@res@a% + \fi% +% \end{macrocode} +% Hier erfolgt die Definition der Hilfsmakros für das CD-konforme asymmetrische +% bzw. an das \CD angelehnte Layout für einseitigen und zweiseitigen Satz. +% Zuerst werden die verschiedenen unterschiedlichen horizontalen Ränder für die +% unterschiedlichen Optionen definiert. Dies betrifft im einzelnen den äußeren +% Seitenrand (\cs{@tempdima}), die Textbreite (\cs{@tempdimb}) sowie die Breite +% der Randnotizen (\cs{@tempdimc}). Danach kommt der Gleichanteil. +% \begin{macrocode} + \else% true/symmetric/twoside + \ifcase\tud@cdgeometry@num\relax\or\or% true + \setlength\@tempdima{\tud@len@widemargin}% + \if@reversemargin% + \setlength\@tempdimc{\tud@len@widemargin}% + \else% + \setlength\@tempdimc{\tud@len@slimmargin}% + \fi% +% \end{macrocode} +% Die zweite Variante ist eigentlich nicht konform mit dem \CD. Sie ist sowohl +% im einseitigen als auch im zweiseitgigen Satz symmetrisch. +% \begin{macrocode} + \or% symmetric + \setlength\@tempdima{.5\tud@len@both}% + \setlength\@tempdimc{.5\tud@len@both}% +% \end{macrocode} +% Eigentlich ist auch die dritte Variante nach dem \CD nicht zulässig. Sie ist +% im einseitigen Satz symmetrisch, im zweiseitgigen Satz wird die innere Seite +% schmaler gesetzt als die äußere, wobei hier auf das in den Seitenrand ragende +% TUD-Logo geachtet werden muss. +% \begin{macrocode} + \or% twoside + \if@twoside% + \setlength\@tempdima{.4\tud@len@both}% + \else% + \setlength\@tempdima{.5\tud@len@both}% + \fi% + \setlength\@tempdimc{.5\tud@len@both}% + \if@twoside% + \if@reversemargin% + \setlength\@tempdimc{.4\tud@len@both}% + \else% + \setlength\@tempdimc{.6\tud@len@both}% + \fi% + \fi% + \fi% +% \end{macrocode} +% Die \emph{Berechnung} der Textbreite ist für alle Varainten identisch. Danach +% erfolgt die Zuweisung zum Makro. +% \begin{macrocode} + \addtolength\@tempdimc{-\headsep}% + \setlength\@tempdimb{% + \dimexpr\tud@len@layoutwidth-\tud@len@both-\ta@bcor\relax% + }% + \if@mincl% + \addtolength\@tempdimb{-\@tempdimc}% + \fi% + \edef\tud@cdgeometry@hmargin{% + left=\the\@tempdima,% + textwidth=\the\@tempdimb,% + \tud@cdgeometry@mpincl,% + marginparwidth=\the\@tempdimc,% + marginparsep=\the\dimexpr.5\headsep\relax,% + \if@reversemargin% + reversemarginpar=true,% + \else% + reversemarginpar=false,% + \fi% + bindingoffset=\the\ta@bcor% + }% + \if@twoside% + \ifcase\tud@cdgeometry@num\relax\or\or% true + \appto\tud@cdgeometry@hmargin{,asymmetric}% + \else% symmetric/twoside + \appto\tud@cdgeometry@hmargin{,twoside}% + \fi% + \fi% + \if@twocolumn% + \appto\tud@cdgeometry@hmargin{,twocolumn}% + \fi% +% \end{macrocode} +% Für alle drei Varianten der vertikale Gleichanteil. Der Satzspiegel der +% Version~v2.02 wird aus Gründen der Kompatibilität weiterhin vorgehalten. +% \begin{macrocode} + \tud@if@v@lower{2.03}{% + \edef\tud@cdgeometry@vmargin{% + \tud@cdgeometry@hincl,% + top=\the\dimexpr.5\tud@len@both\relax,% + headheight=\the\headheight,% + headsep=\the\tud@len@headsep,% + bottom=\the\dimexpr.5\tud@len@both+\tud@dim@extrabottommargin\relax,% + \tud@cdgeometry@fincl,% + footskip=\the\dimexpr\tud@len@headsep+\footheight% + -1.25\baselineskip\relax% + }% + }{% + \edef\tud@cdgeometry@vmargin{% + \tud@cdgeometry@hincl,% + top=\the\tud@len@slimmargin,% + headheight=\the\headheight,% + headsep=\the\headsep,% + bottom=\the\dimexpr\tud@len@widemargin% + +\tud@dim@extrabottommargin\relax,% + \tud@cdgeometry@fincl,% + footskip=\the\dimexpr\tud@len@footsep+\footheight\relax% + }% + }% + \edef\tud@cdgeometry@tudmargin{% + ignorehead=true,% + top=\the\dimexpr\tud@len@topmargin+\tud@len@barheight% + +\tud@len@headsep\relax,% + headheight=\the\dimexpr\tud@len@topmargin+\tud@len@barheight% + -\tud@len@logoy\relax,% + headsep=\the\tud@len@headsep% + }% +% \end{macrocode} +% Es wird die Differenz der Höhen zwischen TUD-Kopf und Standardkopfzeile +% für den Satzspiegel des \CDs berechnet. +% \begin{macrocode} + \setlength\tud@len@areadiff{% + \dimexpr\tud@len@topmargin+\tud@len@barheight+\tud@len@headsep% + -\tud@len@slimmargin\relax% + }% +% \end{macrocode} +% Für die Kompatibilitätsvariante wieder mal die Extrawurst. +% \begin{macrocode} + \tud@if@v@lower{2.03}{% + \setlength\tud@len@areadiff{% + \dimexpr\tud@len@topmargin+\tud@len@barheight+\tud@len@headsep% + -.5\tud@len@both\relax% + }% +% \end{macrocode} +% Wird die Fußzeile zum Satzspiegel gerechnet, ist für Seiten mit \DDC-Fuß +% etwas Handarbeit notwendig, damit dieser nicht allzu weit nach oben ragt. +% \begin{macrocode} + \setlength\tud@len@ddcdiff{.6\tud@len@topmargin}% + \edef\tud@cdgeometry@ddcmargin{% + \if@fincl% + bottom=\the\dimexpr.5\tud@len@both+\tud@dim@extrabottommargin% + +\tud@len@ddcdiff+\tud@len@headsep+\footheight% + -1.25\baselineskip\relax,% + \else% + bottom=\the\dimexpr.5\tud@len@both+\tud@dim@extrabottommargin% + +\tud@len@ddcdiff\relax,% + \fi% + footskip=\the\dimexpr\tud@len@headsep+\footheight% + -1.25\baselineskip+\tud@len@ddcdiff\relax,% + }% + }{}% + \fi% +% \end{macrocode} +% Es wird die Differenz der Höhen zwischen TUD-Kopf und Standardkopfzeile +% für den Satzspiegel des \CDs berechnet. Außerdem wird die standardmäßige +% vertikale Verschiebung der Überschriften festgelegt, wobei hier insbesondere +% auf die Gestaltungshöhe DIN~A5 geachtet werden muss. +% \begin{macrocode} + \ifdim\tud@len@areadiff<\z@\relax\setlength\tud@len@areadiff{\z@}\fi% + \global\tud@len@areadiff=\tud@len@areadiff% +%<*book|report|article> + \setlength\tud@len@areaheadvskip{.22\tud@len@topmargin}% + \if@tud@cdgeometry@adjust% + \setlength\tud@len@areaheadvskip{.5\tud@len@areaheadvskip}% + \fi% + \global\tud@len@areaheadvskip=\tud@len@areaheadvskip% +%</book|report|article> +% \end{macrocode} +% Für den Satzspiegel der Version~v2.02 wird außerdem die Länge für den höheren +% Seitenfuß gesetzt. +% \begin{macrocode} + \tud@if@v@lower{2.03}{% + \ifdim\tud@len@ddcdiff<\z@\relax\setlength\tud@len@ddcdiff{\z@}\fi% + \global\tud@len@ddcdiff=\tud@len@ddcdiff% + }{}% +% \end{macrocode} +% Es wird \cs{tud@cdgeometry@@@process} aufgerufen, was die zuvor definierten +% Hilfsmakros nutzt, um alle benötigten Seitenlayouts optionsabhängig zu +% erstellen. +% \begin{macrocode} + \tud@cdgeometry@@@process% + }% +% \end{macrocode} +% Der Befehl \cs{tud@cdgeometry@@@process} setzt mit den zuvor definierten +% Hilfsmakros die \pkg{geometry}-Optionen für sowohl die seitlichen als auch +% die oberen sowie unteren Seitenränder und inkludiert ggf. Kopf- und Fußzeile +% in den Satzspiegel. Die unterschiedlichen Layouts sind dabei \val{tudareaddc} +% für TUD-Kopf und \DDC-Fuß, \val{tudarea} für den alleinigen TUD-Kopf sowie +% \val{stdarea} für den normalen bzw. mit \pkg{typearea} berechneten +% Satzspiegel. +% \begin{macrocode} + \newcommand*\tud@cdgeometry@@@process{% + \tud@x@geometry@getlayout{\tud@cdgeometry@layout}% +% \end{macrocode} +% Für den Satzspiegel der Version~v2.02 wird als erstes der Satzspiegel für den +% TUD-Kopf zusammen mit dem \DDC-Fuß erstellt. Das Einbeziehen der Fußzeile in +% den Satzspiegel erfolgt nicht ggf. über die Option \opt{includefoot} sondern +% manuell bei der Definition von \cs{tud@cdgeometry@ddcmargin}. +% \begin{macrocode} + \tud@if@v@lower{2.03}{% + \tud@x@geometry@set{% + \tud@cdgeometry@layout,% + \tud@cdgeometry@hmargin,% + \tud@cdgeometry@vmargin,% + \tud@cdgeometry@tudmargin,% + \tud@cdgeometry@ddcmargin,% + ignorehead,ignorefoot% + }% + \tud@savegeometry{tudareaddc}% + }{}% +% \end{macrocode} +% Danach folgt der Seitenstil, mit dem TUD-Kopf und der Standardfußzeile. +% \begin{macrocode} + \tud@x@geometry@set{% + \tud@cdgeometry@layout,% + \tud@cdgeometry@hmargin,% + \tud@cdgeometry@vmargin,% + \tud@cdgeometry@tudmargin% + }% + \tud@savegeometry{tudarea}% +% \end{macrocode} +% Als letztes wird der Standardsatzspiegel erstellt. +% \begin{macrocode} + \tud@x@geometry@set{% + \tud@cdgeometry@layout,% + \tud@cdgeometry@hmargin,% + \tud@cdgeometry@vmargin% + }% + \tud@savegeometry{stdarea}% +% \end{macrocode} +% Je nach gewählter Option wird der aktuelle Satzspiegel für \pkg{typearea} +% oder \pkg{geometry} gesichert. +% \begin{macrocode} + \ifcase\tud@cdgeometry@num\relax% false + \tud@savegeometry{current@typearea}% + \or% custom + \tud@savegeometry{current@custom}% + \fi% +% \end{macrocode} +% Falls die (abermalige) Erstellung der Satzspiegel im Dokument erfolgt, sollte +% anschließend auch der richtige Satzspiegel wieder ausgewählt werden. +% \begin{macrocode} + \if@atdocument% + \ifstr{\tud@currentgeometry}{stdarea}{}{% + \expandafter\tud@loadgeometry\expandafter{\tud@currentgeometry}% + }% + \fi% + }% +% \end{macrocode} +% \end{macro}^^A \tud@cdgeometry@ddcmargin +% \end{macro}^^A \tud@cdgeometry@tudmargin +% \end{macro}^^A \tud@cdgeometry@vmargin +% \end{macro}^^A \tud@cdgeometry@hmargin +% \end{macro}^^A \tud@cdgeometry@layout +% \end{macro}^^A \tud@cdgeometry@@@process +% \end{macro}^^A \tud@cdgeometry@@process +% \begin{macro}{\tud@cdgeometry@hincl} +% \changes{v2.02}{2014/06/23}{geändert für das Paket \pkg{scrlayer-scrpage}}^^A +% \begin{macro}{\tud@cdgeometry@fincl} +% \begin{macro}{\tud@cdgeometry@mpincl} +% \changes{v2.04}{2015/03/09}{neu}^^A +% Diese Hilfsmakros werten die Optionen für das Einbeziehen von Kopf- und +% Fußzeile sowie der Randnotizen aus. +% \begin{macrocode} + \newcommand*\tud@cdgeometry@hincl{% + \if@hincl% + includehead=true% + \else% + includehead=false% + \fi% + }% + \newcommand*\tud@cdgeometry@fincl{% + \if@fincl% + includefoot=true% + \else% + includefoot=false% + \fi% + }% + \newcommand*\tud@cdgeometry@mpincl{% + \if@mincl% + includemp=true% + \else% + includemp=false% + \fi% + }% +% \end{macrocode} +% \end{macro}^^A \tud@cdgeometry@mpincl +% \end{macro}^^A \tud@cdgeometry@fincl +% \end{macro}^^A \tud@cdgeometry@hincl +% \begin{macro}{\tud@cdgeometry@@init} +% \changes{v2.04}{2015/03/10}{neu}^^A +% Damit alle Satzspiegeleinstellungen korrekt vorgenommen und auch alle +% Klassenoptionen korrekt verarbeitet werden, wird die Berechnung erstmalig mit +% \cs{AtEndPreamble} am Ende der Präambel ausgeführt. Dabei werden sowohl der +% benutzerdefinierte Satzspiegel als auch die durch \pkg{typearea} berechneten +% Einstellungen gesichert. +% \begin{macrocode} + \newcommand*\tud@cdgeometry@@init{% + \csuse{@ta@usegeometryfalse}% + \tud@x@geometry@getlayout{\tud@cdgeometry@layout}% + \tud@cs@store{tud@cdgeometry@num}% +% \end{macrocode} +% Bei der Initialisierung der zusätzlichen Satzspiegel soll keine Warnung +% bezüglich der Angabe eines vergrößerten Fußbereichs erscheinen. +% \begin{macrocode} + \tud@cs@store{tud@dim@extrabottommargin}% + \def\tud@dim@extrabottommargin{\z@}% +% \end{macrocode} +% Zunächst werden die benutzerdefinierten Einstellungen für den Satzspiegel +% gesichert. +% \begin{macrocode} + \tud@cdgeometry@reset{custom}% + \begingroup% + \epreto\tud@x@geometry@init{% + paperwidth=\the\paperwidth,paperheight=\the\paperheight,% + \tud@cdgeometry@layout,% + \tud@cdgeometry@mpincl,% + \if@reversemargin% + reversemarginpar=true,% + \else% + reversemarginpar=false,% + \fi% + bindingoffset=\the\ta@bcor,% + \tud@cdgeometry@hincl,% + \tud@cdgeometry@fincl,% + }% + \edef\tud@res@a{% + \endgroup% + \noexpand\tud@cs@use{geometry}{\tud@x@geometry@init,driver=none}% + \noexpand\@tud@x@geometry@fixmarginstrue% + }% + \tud@res@a% + \tud@cdgeometry@@process% + \tud@savegeometry{init@custom}% +% \end{macrocode} +% Und nun der Teil für \pkg{typearea}. Bei der Initialisierung werden mögliche +% Warnungen des Paketes deaktiviert. Diese werden nur ausgegeben, wenn der +% Schlüssel \opt{cdgeometry=typearea} angegeben wurde oder im Dokument mit +% \cs{restoregeometry[typearea]} auf den initialen Satzspiegel umgestellt wird. +% \begin{macrocode} + \tud@cdgeometry@reset{typearea}% + \tud@x@typearea@warnings@off[\tud@res@a]% + \tud@x@typearea@init% + \tud@x@typearea@warnings@on% + \tud@cdgeometry@@process% + \tud@savegeometry{init@typearea}% +% \end{macrocode} +% Alle gesammelten Warnungen von \pkg{typearea} werden dem initialisierten +% Satzspiegel hinzugefügt. +% \begin{macrocode} + \def\tud@res@b##1{% + \eappto\Gm@restore@@init@typearea{% + \noexpand\PackageWarningNoLine{typearea}{##1}% + }% + }% + \forlistloop\tud@res@b{\tud@res@a}% +% \end{macrocode} +% Hier werden die temporär geäanderten Einstellungen zurückgesetzt. +% \begin{macrocode} + \tud@cs@restore{tud@cdgeometry@num}% + \tud@cs@restore{tud@dim@extrabottommargin}% +% \end{macrocode} +% Der Kopf im \CD der \TnUD erfordert einen eigenen Satzspiegel, der ggf. durch +% \cs{tud@BeforeSelectAnyPageStyle} aktiviert bzw. deaktiviert wird. +% \begin{macrocode} + \BeforeSelectAnyPageStyle{\tud@BeforeSelectAnyPageStyle{##1}}% +% \end{macrocode} +% Ganz zum Schluss wird der Satzspiegel für die aktuelle Einstellung von +% \opt{cdgeometry} gesetzt. +% \begin{macrocode} + \ifcase\tud@cdgeometry@num\relax% typearea + \tud@loadgeometry{init@typearea}% + \or% custom + \tud@loadgeometry{init@custom}% + \fi% + \@tud@x@geometry@fixmarginstrue% + \tud@cdgeometry@process% + \let\tud@cdgeometry@@init\relax% + }% +% \end{macrocode} +% \end{macro}^^A \tud@cdgeometry@@init +% \begin{macro}{\tud@BeforeSelectAnyPageStyle} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \changes{v2.04}{2015/04/21}{Auswahl der Schriften für Fußbereich ergänzt}^^A +% \begin{macro}{\tud@currentgeometry} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Mit \cs{tud@BeforeSelectAnyPageStyle} wird beim Umschalten des Seitenstils +% ggf. der Satzspiegel geändert. Es wird der aktivierte Satzspiegel in dem +% Makro \cs{tud@currentgeometry} gesichert, um darauf zu einem späteren +% Zeitpunkt prüfen zu können. +% +% Für den Fall, dass das Dokument nicht ausschließlich mit dem Kopf im \CD +% auf jeder Seite gesetzt wird, muss der komplette vertikale Satzspiegel +% angepasst werden, sonst wäre der obere Rand optisch viel zu groß. Hierfür +% wird das Paket \pkg{geometry} genutzt. Durch \cs{tud@cdgeometry@@process} +% werden zwei~-- für die KOmpatibilitätsvariante drei~-- Layouts erstellt. +% Diese können mit \cs{loadgeometry}\marg{Stil} geladen werden. +% \begin{macrocode} + \newcommand*\tud@currentgeometry{} + \newcommand*\tud@BeforeSelectAnyPageStyle[1]{% +% \end{macrocode} +% Der \pgs{tudheadings}-Seitenstil wird mit dem Befehl \cs{newpairofpagestyles} +% derart definiert, dass zwischen \pgs{tudheadings} und \pgs{plain.tudheadings} +% auch mit \LaTeX-Standardseitenstilen \pgs{headings} bzw. \pgs{plain} +% umgeschaltet werden kann. Dies wird hiermit beachtet. +% \begin{macrocode} + \ifstr{#1}{\GetRealPageStyle{#1}}{% +% \end{macrocode} +% Für den Fall, das ein \pgs{tudheadings}-Seitenstil geladen werden soll, muss +% der dazugehörige Satzspiegel ausgewählt werden\dots +% \begin{macrocode} + \tud@if@tudheadings{#1}{% +% \end{macrocode} +% \dots wobei in der Version~v2.02 zwei unterschiedliche existierten, und +% abhängig von der Verwendung des \DDC-Logos im Fuß waren. +% \begin{macrocode} + \tud@if@v@lower{2.03}{% +% \end{macrocode} +% In diesem Fall werden die Seitenfußeinstellungen mit \cs{tud@ddc@check} in +% \cs{@tempb} geschrieben und abhängig davon der richtige Satzspiegel geladen. +% Dabei wird zuvor mit dem Wert aus \cs{tud@currentgeometry} geprüft, ob dies +% überhaupt notwendig ist. +% \begin{macrocode} + \tud@ddc@check% +% \end{macrocode} +% Das \DDC-Logo im Fuß ist nicht aktiviert. +% \begin{macrocode} + \ifcase\@tempb\relax% \tud@ddc@foot@num=false + \ifstr{\tud@currentgeometry}{tudarea}{}{% + \tud@loadgeometry{tudarea}% + \gdef\tud@currentgeometry{tudarea}% + }% +% \end{macrocode} +% Das \DDC-Logo im Fuß ist aktiviert. +% \begin{macrocode} + \else% \tud@ddc@foot@num!=false + \ifstr{\tud@currentgeometry}{tudareaddc}{}{% + \tud@loadgeometry{tudareaddc}% + \gdef\tud@currentgeometry{tudareaddc}% + }% + \fi% +% \end{macrocode} +% Ab der Version~v2.03 ist nur noch ein Satzspiegel vonnöten. +% \begin{macrocode} + }{% + \ifstr{\tud@currentgeometry}{tudarea}{}{% + \tud@loadgeometry{tudarea}% + \gdef\tud@currentgeometry{tudarea}% + }% + }% +% \end{macrocode} +% Die Länge \cs{tud@len@areavskip} gibt an, wie groß die Differenz zwischen +% Kopfhöhe zwischen aktuellem und dem speziellen \pgs{tudheadings}-Seitenstil +% ist. Da diese in diesem Fall identisch sind, wird die Länge zu \cs{z@} +% gesetzt. +% \begin{macrocode} + \setlength\tud@len@areavskip{\z@}% +% \end{macrocode} +% Im Seitenfuß wird für die Seitenzahl und ggf. die Kolumnentitel die passende +% Schrift verwendet. +% \begin{macrocode} + \tud@komafont@set{pagenumber}{\usekomafont{tudheadings}}% + \tud@komafont@set{pagefoot}{\usekomafont{tudheadings}}% +% \end{macrocode} +% Dies ist der Fall, wenn kein \pgs{tudheadings}-Seitenstil geladen werden soll. +% Zusätzlich zum Satzspeigel wird außerdem der Seitenstil \pgs{empty} +% zurückgesetzt. +% \begin{macrocode} + }{% + \ifstr{\tud@currentgeometry}{stdarea}{}{% + \tud@loadgeometry{stdarea}% + \gdef\tud@currentgeometry{stdarea}% + }% +% \end{macrocode} +% Die Länge \cs{tud@len@areavskip} wird auf den berechneten Wert gesetzt. +% Nur für den Fall, dass die Kopfzeile zum Satzspiegel gerechnet wird und +% dieser nicht durch \pkg{typearea} berechnet wurde, muss diese Länge etwas +% angepasst werden. +% \begin{macrocode} + \setlength\tud@len@areavskip{\tud@len@areadiff}% + \ifnum\tud@cdgeometry@num>\@ne\relax% true/symmetric/twoside + \if@hincl% + \addtolength\tud@len@areavskip{% + \dimexpr-\headheight-\tud@len@headsep\relax% + }% + \fi% + \fi% +% \end{macrocode} +% Die Schriften für Seitenzahl und Kolumnentitel werden zurückgesetzt. +% \begin{macrocode} + \tud@komafont@unset{pagenumber}% + \tud@komafont@unset{pagefoot}% + }% +% \end{macrocode} +% Die Länge \cs{tud@len@areavskip} wird vorsichtshalber global gesetzt. +% \begin{macrocode} + \global\tud@len@areavskip=\tud@len@areavskip% + }{}% + } +% \end{macrocode} +% \end{macro}^^A \tud@currentgeometry +% \end{macro}^^A \tud@BeforeSelectAnyPageStyle +% Damit sind alle notwendigen Satzspiegel für die unterschiedlichen Seitenstile +% definiert. Im Normalfall werden durch \cs{tud@cdgeometry@@process} alle +% benötigten Satzspiegel erstellt. Mit dem Setzen des Seitenstils wird der +% jeweils richtige bzw. benötigte Satzspiegel ausgewählt. +% \begin{macrocode} +} +% \end{macrocode} +% \begin{macro}{\typearea} +% \begin{macro}{\areaset} +% \begin{macro}{\storereareas} +% \begin{macro}{\tud@x@typearea@before} +% \changes{v2.06}{2018/08/13}{neu}^^A +% \begin{macro}{\tud@x@typearea@after} +% \changes{v2.06}{2018/08/13}{neu}^^A +% \begin{macro}{\tud@x@typearea@init} +% \changes{v2.06}{2018/08/13}{neu}^^A +% Für die Verwendung von \pkg{typearea} ist eine Sonderbehandlung notwendig, +% falls mit \cs{geometry} eine Größe für den Druckbereich/das Layout angegeben +% wurde. Dafür wird das Papierformat temporär auf die Größe des angegebenen +% Layouts geändert bevor der Satzspiegel berechnet wird. Die Einstellungen in +% der Präambel werden in \cs{tud@x@typearea@init} gesichert. +% \begin{macrocode} +\newcommand*\tud@x@typearea@before{% + \tud@skip@store{paperheight}% + \tud@skip@store{paperwidth}% + \begingroup% + \tud@cdgeometry@assignlayout% + \edef\tud@res@a{% + \endgroup% + \etex@unexpanded{\setlength\paperheight}{\the\tud@len@layoutheight}% + \etex@unexpanded{\setlength\paperwidth}{\the\tud@len@layoutwidth}% + }% + \tud@res@a% +} +\newcommand*\tud@x@typearea@after{% + \tud@skip@restore{paperheight}% + \tud@skip@restore{paperwidth}% + \if@atdocument% + \tud@cdgeometry@reset{typearea}% + \tud@cdgeometry@process% + \else% + \TUD@key@preset{cdgeometry}{false}% + \fi% +} +\newcommand*\tud@x@typearea@init{\recalctypearea}% +% \end{macrocode} +% Die notwendigen Patches für die Befehle aus \pkg{typearea}. +% \begin{macrocode} +\xpretocmd{\typearea}{% + \tud@x@typearea@before% + \def\tud@x@typearea@init{\typearea[#1]{#2}}% +}{}{\tud@patch@wrn{typearea}} +\xapptocmd{\typearea}{\tud@x@typearea@after}{}{\tud@patch@wrn{typearea}} +\xpretocmd{\areaset}{% + \tud@x@typearea@before% + \begingroup% + \setlength\@tempdima{#2}% + \setlength\@tempdimb{#3}% + \edef\tud@res@a{% + \endgroup% + \noexpand\def\noexpand\tud@x@typearea@init{% + \noexpand\areaset[#1]{\the\@tempdima}{\the\@tempdimb}% + }% + }% + \tud@res@a% +}{}{\tud@patch@wrn{areaset}} +\xapptocmd{\areaset}{\tud@x@typearea@after}{}{\tud@patch@wrn{areaset}} +% \end{macrocode} +% Nach einer Wiederherstellung gespeicherter Satzspiegel durch \pkg{typearea} +% werden die für die Seitenstile benötigten Satzspiegel mit \pkg{geometry} neu +% erstellt. +% \begin{macrocode} +\tud@cs@store{storeareas} +\renewcommand*\storeareas[1]{% + \begingroup + \tud@x@geometry@fixmargins% + \tud@cs@use{storeareas}{#1}% + \edef\tud@res@a{% + \endgroup% + \etex@unexpanded{\def#1}{% + \expandonce#1% + \def\noexpand\tud@cdgeometry@num{\tud@cdgeometry@num}% + }% + }% + \tud@res@a% +} +\AfterRestoreareas{\tud@cdgeometry@process}% +% \end{macrocode} +% \end{macro}^^A \tud@x@typearea@init +% \end{macro}^^A \tud@x@typearea@after +% \end{macro}^^A \tud@x@typearea@before +% \end{macro}^^A \storereareas +% \end{macro}^^A \areaset +% \end{macro}^^A \typearea +% +% \iffalse +%</class&body> +%<*class&option> +% \fi +% +% \begin{macro}{\tud@x@typearea@warnings@off} +% \changes{v2.06}{2018/08/22}{neu}^^A +% \begin{macro}{\tud@x@typearea@warnings@on} +% \changes{v2.06}{2018/08/22}{neu}^^A +% Das Paket \pkg{typearea} meldet schlechte Einstellungen für den Satzspiegel +% mittels Warnungen an den Anwender. Diese sind allerdings~-- abhängig von der +% gewählten Option opt{cdgeometry} für den Satzspiegel~-- gegebenefalls nicht +% relevant. Da \TUDScript innerhalb von \cs{tud@cdgeometry@@init} am Ende der +% Präambel ohnehin anhand von \cs{tud@x@typearea@init} den Satzspiegel von +% \pkg{typearea} neu berechnet, werden alle relevanten Warnungen beim Laden des +% Paketes deaktivert. +% +% Dem Befehl \cs{tud@x@typearea@warnings@off} kann im optionalen Argument ein +% Makro übergeben werden, für welches eine \pkg{etoolbox}-Liste erzeugt wird, +% in der alle Inhalte der ignorierten Warnungen gepseichert wird, um später auf +% diese zurückgreifen zu können. +% \begin{macrocode} +\newcommand*\tud@x@typearea@warnings@off[1][]{% + \IfArgIsEmpty{#1}{}{\let#1\@empty}% + \tud@cs@store{PackageWarningNoLine}% + \renewcommand*\PackageWarningNoLine[2]{% + \@tud@res@swatrue% + \ifstr{##1}{typearea}{% + \ifstrstart{##2}{Bad type area settings!}{\@tud@res@swafalse}{}% + \ifstrstart{##2}{% + Maybe no optimal type area settings!% + }{\@tud@res@swafalse}{}% + \ifstrstart{##2}{Very low DIV value!}{\@tud@res@swafalse}{}% + }{}% + \if@tud@res@swa% + \tud@cs@use{PackageWarning}{##1}{##2}% + \else% + \IfArgIsEmpty{#1}{}{\listeadd#1{##2}}% + \fi% + }% +} +\newcommand*\tud@x@typearea@warnings@on{% + \tud@cs@restore{PackageWarningNoLine}% +} +\BeforePackage{typearea}{% + \tud@x@typearea@warnings@off% +} +\AfterPackage{typearea}{% + \tud@x@typearea@warnings@on% +} +% \end{macrocode} +% \end{macro}^^A \tud@x@typearea@warnings@on +% \end{macro}^^A \tud@x@typearea@warnings@off +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% Die Seitenstile und Satzspiegel korrelieren sehr stark, weshalb das Paket +% \pkg{scrlayer-scrpage} geladen sein muss und auch alle darauf aufbauenden +% Einstellungen abgeschlossen sein müssen, um die Satzspiegel zu definieren. +% Deshalb wird \cs{tud@cdgeometry@init} erst nach besagtem Paket aufgerufen. +% Sollte das Laden des Paketes \pkg{geometry} verhindert werden, sind einige +% wenige Befehle vorzuhalten. +% \ToDo{Abhängigkeiten Satzspiegel<>Seitenstil beseitigen}[v2.07] +% \begin{macrocode} +\TUD@UnwindPackage{geometry}{% + \newcommand*\tud@cdgeometry@@init{% + \tud@cdgeometry@process% + \let\tud@cdgeometry@@init\relax% + }% + \newcommand*\tud@cdgeometry@@process{% + \setlength\tud@len@layoutwidth{\paperwidth}% + \setlength\tud@len@layoutheight{\paperheight}% + \tud@cdgeometry@set% + }% + \newcommand*\tud@x@geometry@fixmargins{}% +} +% \end{macrocode} +% \begin{macro}{\tud@cdgeometry@@init} +% \changes{v2.04}{2015/03/10}{neu}^^A +% Wird das Paket \pkg{svg-extract} für das Erzeugen einer solitären Grafik +% genutzt, so sollen keinerlei Einstellungen für den Satzspiegel vorgenommen +% werden. +% \begin{macrocode} +\newcommand*\tud@cdgeometry@init{\tud@cdgeometry@@init}% +\AfterPackage{svg-extract}{% + \renewcommand*\tud@cdgeometry@init{% + \if@svgx@standalone% + \@tud@x@scr@fontsize@settrue% + \else% + \tud@cdgeometry@@init% + \fi% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdgeometry@@init +% \begin{macro}{\cleardoubleoddpageusingstyle} +% \begin{macro}{\cleardoubleevenpageusingstyle} +% \begin{macro}{\cleardoublepageusingstyle} +% Damit die Satzspiegelumstellungen nicht durchgeführt werden, wenn durch die +% folgenden \KOMAScript-Befehle Leerseiten erzeugt werden, müssen diese minimal +% angepasst werden. +% \begin{macrocode} +\patchcmd{\cleardoubleoddpageusingstyle}{\pagestyle}{% + \let\tud@BeforeSelectAnyPageStyle\@gobble\pagestyle% +}{}{\tud@patch@wrn{cleardoubleoddpageusingstyle}} +\patchcmd{\cleardoubleevenpageusingstyle}{\pagestyle}{% + \let\tud@BeforeSelectAnyPageStyle\@gobble\pagestyle% +}{}{\tud@patch@wrn{cleardoubleevenpageusingstyle}} +\patchcmd{\cleardoublepageusingstyle}{\pagestyle}{% + \let\tud@BeforeSelectAnyPageStyle\@gobble\pagestyle% +}{}{\tud@patch@wrn{cleardoublepageusingstyle}} +% \end{macrocode} +% \end{macro}^^A \cleardoublepageusingstyle +% \end{macro}^^A \cleardoubleevenpageusingstyle +% \end{macro}^^A \cleardoubleoddpageusingstyle +% \begin{macro}{\tud@ddc@enlargepage} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Der Befehl wird nur für den Kompatibilitätsmodus zur Version~v2.02 benötigt +% und für die Titelkopf- und Kapitelseiten verwendet. Er verkleinert die +% entsprechenden Seiten, wenn für diese mit dem Befehl \cs{thispagestyle} einer +% der \pgs{tudheadings}-Seitenstile gewählt wird \emph{und} das \DDC-Logo im +% Fuß gesetzt werden soll. Der entsprechende Seitenstil kann im optionalen +% Argument angegeben werden, wenn der Befehl bedingt ausgeführt werden soll. +% \begin{macrocode} +\tud@if@v@lower{2.03}{% + \newcommand*\tud@ddc@enlargepage[1][]{% + \tud@if@tudheadings{#1}{% + \ifstr{\tud@currentgeometry}{tudareaddc}{}{% + \tud@ddc@check% + \ifcase\@tempb\relax\else% \tud@ddc@foot@num!=false + \enlargethispage{-\tud@len@ddcdiff}% + \fi% + }% + }{}% + }% +}{} +% \end{macrocode} +% \end{macro}^^A \tud@ddc@enlargepage +% +% \iffalse +%</class&body> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-base.dtx b/macros/latex/contrib/tudscr/source/tudscr-base.dtx new file mode 100644 index 0000000000..746e696de4 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-base.dtx @@ -0,0 +1,1467 @@ +% \CheckSum{821} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-base.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-base.dtx}[2019/08/27 v2.06d TUD-Script\space% +% +% \iffalse +%</dtx> +%<package&base>\ProvidesPackage{tudscrbase}[% +%<*package&base> +%!TUD@Version +%</package&base> +%<package&base> package +%<*dtx|package&base> +% \fi + (basics for the bundle)% +] +% \iffalse +%</dtx|package&base> +%<*dtx> +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-base.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.02}{2014/06/23}{Paket \pkg{titlepage} nicht weiter unterstützt}^^A +% +% \section{Das Paket \pkg{tudscrbase} -- Basisdefinitionen für \TUDScript} +% +% Für die Erstellung der \TUDScript-Klassen werden die dafür benötigten Pakete +% eingebunden und Steuerungsbefehle definiert. Die Klassen sowie einige Pakete +% benötigen das Paket und laden dieses auch. +% +% \ToDo{% +% Schnittstelle äquivalent zu \cs{KOMA@kav@\dots}? Dann hierfür +% \pkg{etoolbox}-Listen und \cs{listadd} sowie \cs{listremove} nutzen +% }[v2.??] +% \ToDo{% +% Teile im Quelltext suchen, die nur einmalig durchlaufen werden müssen +% (bspw. notwendige Pakete und Schriften) und über aux-Eintrag abkürzen?! +% siehe \cs{TUD@CheckPackage}% +% }[v2.??] +%^^A\BeforeClosingMainAux{% +%^^A \if@tud@xxx\if@filesw% +%^^A \immediate\write\@mainaux{% +%^^A \string\global\string\let\string\tud@test@xxx\string\relax% +%^^A }% +%^^A \fi\fi% +%^^A} +% +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \begin{macrocode} +%<*load> +\RequirePackage{tudscrbase}[\TUD@Version] +%</load> +% \end{macrocode} +% +% \subsection{Notwendige Pakete für \TUDScript} +% +% \iffalse +%<*package&base> +% \fi +% +% Das Paket \pkg{scrbase} wird zur Optionsdefinition benötigt, \pkg{scrlfile} +% für verschiedene Hooks vor sowie nach Klassen und Paketen. +% \begin{macrocode} +\RequirePackage{scrbase}[2018/03/30] +% \end{macrocode} +% Die folgenden Pakete werden für die Manipulation bereits definierter +% Makros sowie zur erweiterten Auswertung boolescher Ausdrücke benötigt. +% \begin{macrocode} +\RequirePackage{etoolbox}[2011/01/03] +\RequirePackage{xpatch}[2012/10/02] +\RequirePackage{letltxmacro}[2016/05/16] +\RequirePackage{etexcmds}[2011/02/16] +% \end{macrocode} +% Das Paket \pkg{kvsetkeys} erweitert \pkg{keyval} um die Möglichkeit, das +% Verhalten bei der Angabe eines nicht definierten Schlüssels festzulegen. +% \ToDo{sollte eigentlich auch mit KOMA-Option \val{@else@} gehen}[v2.07] +% \begin{macrocode} +\RequirePackage{kvsetkeys}[2012/04/25] +% \end{macrocode} +% Mit dem Paket \pkg{trimspaces} können eventuell vorhandene Leerzeichen aus +% einem Argument entfernt. Dies wird beispielsweise beim Einlesen von Feldern +% oder bei der expliziten Auswahl einer Schrift des \CD sgenutzt. +% \begin{macrocode} +\RequirePackage{trimspaces}[2009/09/17] +% \end{macrocode} +% +% \subsection{Grundlegende Befehle für \TUDScript} +% \subsubsection{Temporäre Makros zur internen Verwendung durch \TUDScript} +% +% Hier werden Makros definiert, die allein für die interne temporäre Nutzung +% gedacht sind. +% \ToDo{Sämtliche \cs{@temp\dots}-Makros auf \cs{tud@res@\dots} ändern}[v2.??] +% \ToDo{\cs{tud@reserved} in \cs{tud@res@?}, Achtung bei Dopplungen!}[v2.??] +% \begin{macro}{\tud@reserved} +% \changes{v2.05}{2015/10/27}{neu}^^A +% \begin{macro}{\tud@res@a} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@res@b} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@res@c} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\if@tud@res@swa} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@res@cnt} +% \changes{v2.06}{2019/06/13}{neu}^^A +% \begin{macro}{\tud@res@read} +% \changes{v2.06}{2019/06/21}{neu}^^A +% Makros zur temporären Verwendung. +% \begin{macrocode} +\newcommand*\tud@reserved{} +\newcommand*\tud@res@a{} +\newcommand*\tud@res@b{} +\newcommand*\tud@res@c{} +\newif\if@tud@res@swa +\newcount\tud@res@cnt +\newread\tud@res@read +% \end{macrocode} +% \end{macro}^^A \tud@res@read +% \end{macro}^^A \tud@res@cnt +% \end{macro}^^A \if@tud@res@swa +% \end{macro}^^A \tud@res@c +% \end{macro}^^A \tud@res@b +% \end{macro}^^A \tud@res@a +% \end{macro}^^A \tud@reserved +% \begin{macro}{\tud@toks@} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\eaddto@hook} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Es wird ein token-Regsiter reserviert, welches im weiteren Verlauf an allen +% möglichen Punkten verwendet wird. Mit \cs{eaddto@hook} wird~-- in Ergänzung +% zu \cs{addto@hook}~-- ein Makro zum Anfügen des expandierten Arguments an ein +% token-Register bereitgestellt. +% \begin{macrocode} +\newtoks\tud@toks@ +\newcommand*\eaddto@hook[2]{% + \expandafter\addto@hook\expandafter#1\expandafter{#2}% +} +% \end{macrocode} +% \end{macro}^^A \eaddto@hook +% \end{macro}^^A \tud@toks@ +% +% \subsubsection{Robuster Test auf leeres Argument} +% +% \begin{macro}{\ifxblank} +% Hiermit kann ein Argument geprüft werden, ob dieses blank ist (leer oder +% Leerzeichen). In seiner Syntax ist er identisch zu \cs{ifblank}, allerdings +% expandiert er im Gegensatz zu diesem das gegebene Argument. +% \begin{macrocode} +\newcommand*\ifxblank{\ifstr{}} +% \end{macrocode} +% \end{macro}^^A \ifxblank +% +% \subsubsection{Test auf booleschen Ausdruck in Form eines Strings} +% +% \begin{macro}{\ifstrbool} +% \changes{v2.03}{2015/01/09}{neu}^^A +% Dieser Befehl dient zum Testen, ob ein gegebener String als boolescher +% Ausdruck interpretiert werden kann. Ist der String als \enquote{wahr} +% interpretierbar, wird das zweite Argument ausgeführt. Kann der String als +% \enquote{falsch} angesehen werden, dementsprechen das dritte. Ist der String +% kein logischer Wert, kommt das letzte Argument zum Tragen. Die Syntax lautet: +% +% \cs{ifstrbool}\marg{Argument}\marg{Wahr}\marg{Falsch}\marg{Andernfalls} +% \begin{macrocode} +\newcommand*\ifstrbool[4]{% + \ifstr{#1}{true}{#2}{% + \ifstr{#1}{on}{#2}{% + \ifstr{#1}{yes}{#2}{% + \ifstr{#1}{false}{#3}{% + \ifstr{#1}{no}{#3}{% + \ifstr{#1}{off}{#3}{% + #4% + }% + }% + }% + }% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \ifstrbool +% +% \subsubsection{Test auf eine verwendbare Sprache} +% +% \begin{macro}{\iflanguageloaded} +% \changes{v2.05}{2015/11/23}{neu}^^A +% Hiermit kann getestet werden, ob das Argument als Sprache nutzbar ist. +% \begin{macrocode} +\newcommand*\iflanguageloaded[1]{% + \PackageWarning{tudscrbase}{% + Whether package `babel' nor package `polyglossia' has been loaded% + }% + \expandafter\@secondoftwo% +} +\AfterPackage*{babel}{% + \renewcommand*\iflanguageloaded[1]{% + \@expandtwoargs\in@{,#1,}{,\bbl@loaded,}% + \ifin@% + \expandafter\@firstoftwo% + \else% + \expandafter\@secondoftwo% + \fi% + }% +} +\AfterPackage*{polyglossia}{% + \renewcommand*\iflanguageloaded[1]{\ifcsdef{#1@loaded}}% +} +% \end{macrocode} +% \end{macro}^^A \iflanguageloaded +% +% \subsubsection{Expansion geschützter Makros} +% +% Im \LaTeX-Kernel wird der Befehl \cs{@expandtwoargs} definiert, welcher zwei +% Argumente in ein angegebenes Makro vollständig expandiert. Dabei erfolgt die +% Expansion der beiden Argumente aufgrund der standardmäßigen Verwendung von +% \cs{edef} allerdings vollständig und ohne die Beachtung von \cs{protect}. +% \begin{macro}{\protected@expandtwoargs} +% \changes{v2.02}{2014/11/13}{neu}^^A +% Der Befehl \cs{protected@expandtwoargs} kann äquivalent genutzt werden, +% lässt dabei aber mit \cs{protect} geschützte Makros unberührt. +% \begin{macrocode} +\providecommand*\protected@expandtwoargs[3]{% + \protected@edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a% +} +% \end{macrocode} +% \end{macro}^^A \protected@expandtwoargs +% +% \subsubsection{Division für rationale Zahlen} +% +% Mit \LaTeXe{} kann~-- ohne die Verwendung zusätzlicher Pakete~-- nicht ohne +% Weiteres eine Division durchgeführt werden, die als Ergenis eine rationale +% Zahl liefert. Dem wird hier Abhilfe geleistet. +% \begin{macro}{\tud@divide} +% \changes{v2.04}{2015/04/09}{neu}^^A +% Der Befehl erwartet im ersten Argument das Makro, in welches das Ergebnis +% der Division expandiert werden soll, danach folgen Dividend und Divisor. Die +% Berechnung erfolgt in einer Gruppe, damit die benötigten Längenregister nach +% dieser erhalten bleiben. +% \begin{macrocode} +\newcommand*\tud@divide[3]{% + \begingroup% +% \end{macrocode} +% Die Division wird über temporäre Längenregister durchgeführt. Die zu +% teilenden Zahlen werden normiert, wodurch auch Längen mit unterschiedlichen +% Einheiten geteilt werden können. +% \begin{macrocode} + \@defaultunits\@tempdima #2pt\relax\@nnil% + \@defaultunits\@tempdimb #3pt\relax\@nnil% +% \end{macrocode} +% Danach wird mit der größeren der beiden Zahlen der größtmögliche, durch +% \val{2} teilbare Faktor zur Berechnung ermittelt. +% \begin{macrocode} + \ifdim\@tempdima>\@tempdimb\relax% + \@whiledim\@tempdimb>1pt\relax\do{% + \setlength\@tempdima{.1\@tempdima}% + \setlength\@tempdimb{.1\@tempdimb}% + }% + \setlength\@tempdimc{\@tempdima}% + \else% + \@whiledim\@tempdima>1pt\relax\do{% + \setlength\@tempdima{.1\@tempdima}% + \setlength\@tempdimb{.1\@tempdimb}% + }% + \setlength\@tempdimc{\@tempdimb}% + \fi% + \@tempcnta=1\relax% + \@whiledim\dimexpr\@tempcnta\@tempdimc\relax<.01\maxdimen\do{% + \multiply\@tempcnta by 10\relax% + }% +% \end{macrocode} +% Mit dem im temporären Zählerregister \cs{@tempcnta} gespeicherten Faktor +% wird der Dividend erweitert und der berechnete Quotient wieder gekürzt. +% \begin{macrocode} + \setlength\@tempdimc{% + \dimexpr(\@tempcnta\@tempdima / \@tempdimb * \p@)\relax% + }% + \setlength\@tempdimc{\dimexpr \@tempdimc/\@tempcnta\relax}% +% \end{macrocode} +% Das Ergebnis wird in das angegebene Makro expandiert. +% \begin{macrocode} + \edef\@tempa{\endgroup\def\noexpand#1{\strip@pt\@tempdimc}}% + \@tempa% +} +% \end{macrocode} +% \end{macro}^^A \tud@divide +% +% \subsubsection{Erzwungene Kleinschreibung von Strings} +% +% Um angegebene Werte bei Schlüssel-Wert-Paaren oder Schlüsselwörter in +% bestimmten Feldern mit Sicherheit erkennen zu können, werden diese zwingend +% in Kleinbuchstaben geschieben. +% \begin{macro}{\tud@lowerstring} +% Das Makro wird mit \cs{tud@lowerstring}\marg{Zielmakro}\marg{String} benutzt. +% \ToDo{geht das eleganter als mit \cs{expandafter}?}[v2.07] +% \begin{macrocode} +\newcommand*\tud@lowerstring[2]{% + \protected@edef#1{#2}% + \lowercase\expandafter{% + \expandafter\def\expandafter #1\expandafter{#1}% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@lowerstring +% +% \subsubsection{Test auf vorhandene Dateien von Schriftdefinitionen} +% +% \begin{macro}{\tud@if@fdfileexists} +% \changes{v2.06b}{2019/07/17}{neu}^^A +% Der Befehl wird genutzt, um \file{\dots.fd}~Dateien zu suchen. Dabei muss +% beachtet werden, dass \cs{IfFileExists} auf unixoiden Betriebssystemen +% case-sensitiv ist. +% \begin{macrocode} +\newcommand*\tud@if@fdfileexists[2]{% + \begingroup% +% \end{macrocode} +% Der Schalter \cs{if@tud@res@swa} wird \val{false} gesetzt, falls die Schrift +% gefunden wurde. Der zu prüfenden Schriftname wird dabei in unterschiedlichen +% Varianten getestet. Zunächst die Standardvariante in Kleinschreibung\dots +% \begin{macrocode} + \@tud@res@swatrue% + \tud@lowerstring\tud@res@a{#1#2.fd}% + \IfFileExists{\tud@res@a}{\@tud@res@swafalse}{}% +% \end{macrocode} +% \dots gefolgt von der Variante mit Kleinschreibung der Kodierung und dem +% Namen der Schrift wie angegeben\dots +% \begin{macrocode} + \if@tud@res@swa% + \tud@lowerstring\tud@res@a{#1}% + \edef\tud@res@a{\tud@res@a#2.fd}% + \IfFileExists{\tud@res@a}{\@tud@res@swafalse}{}% + \fi% +% \end{macrocode} +% \dots abgeschlossen mit der Variante wie gegeben. +% \begin{macrocode} + \if@tud@res@swa% + \edef\tud@res@a{#1#2.fd}% + \IfFileExists{\tud@res@a}{\@tud@res@swafalse}{}% + \fi% +% \end{macrocode} +% Wurde die Schriftdatei gefunden, ist \cs{if@tud@res@swa}|=|\cs{iffalse}. +% \begin{macrocode} + \if@tud@res@swa% + \aftergroup\@secondoftwo% + \else% + \aftergroup\@firstoftwo% + \fi% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \tud@if@fdfileexists +% +% \subsubsection{Sicherung und Wiederherstellung originaler Befehle und Längen} +% +% \begin{macro}{\tud@cs@letltx} +% \changes{v2.06}{2019/06/13}{\cs{LetLtxMacro} zum Sichern originärer Makros}^^A +% \begin{macro}{\tud@cs@store} +% \changes{v2.06}{2018/07/15}{% +% mit \cs{DeclareRobustCommand} definierte Befehle unterstüzt% +% }^^A +% \begin{macro}{\tud@cs@restore} +% \changes{v2.06}{2018/07/15}{% +% stellt originäre Makros auch wieder her, wenn diese mit \cs{undef} +% zwischendurch \emph{undefiniert} gesetzt wurden% +% }^^A +% \begin{macro}{\tud@cs@reset} +% \begin{macro}{\tud@cs@update} +% \changes{v2.04}{2015/03/03}{neu}^^A +% \begin{macro}{\tud@cs@use} +% \begin{macro}{\tud@cs@check} +% \changes{v2.03}{2015/01/09}{neu}^^A +% Mit diesen Befehlen wird es möglich, Originalbefehle sichern, nutzen und +% wiederherstellen zu können. Dies wird benötigt, um zwischen den einzelnen +% Layouts über Optionseinstellungen zu wechseln und dabei von einem definierten +% Anfangszustand auszugehen. +% +% Der Befehl \cs{tud@cs@letltx} nutzt intern \cs{LetLtxMacro} aus dem Paket +% \pkg{letltxmacro}, um auch robust definierte Befehle korrekt zu sichern. +% \begin{macrocode} +\newcommand*\tud@cs@letltx[2]{% + \expandafter\expandafter\expandafter\LetLtxMacro% + \expandafter\csname #1\expandafter\endcsname\csname #2\endcsname% +} +% \end{macrocode} +% Mit dem Aufruf \cs{tud@cs@store}\marg{Befehlsname} wird der im Argument +% angegebene Befehl in einem neuem Makro \cs{@@tud@\meta{Befehlsname}} +% gespeichert. Dieser kann danach beliebig angepasst werden. Soll der Befehl zu +% einem späteren Zeitpunkt auf den Orginalzustand zurücksetzen, kann hierfür +% jederzeit der Befehl \cs{tud@cs@reset}\marg{Befehlsname} verwendet werden. +% Durch das Makro \cs{tud@cs@restore}\marg{Befehlsname} wird das mit +% \cs{tud@cs@store} erstellte Hilfsmakro zusätzlich noch gelöscht. Der +% ursprüngliche Befehl kann als solcher mit \cs{tud@cs@use}\marg{Befehlsname} +% weiterhin genutzt werden. Ein zuvor bereits gesicherter Befehl kann mit +% \cs{tud@cs@update}\marg{Befehlsname} auf die momentane Definition +% aktualisiert werden. +% \begin{macrocode} +\newrobustcmd*\tud@cs@store[1]{% + \tud@cs@check{#1}% + \ifcsdef{@@tud@#1}{}{% + \tud@cs@letltx{@@tud@#1}{#1}% + }% +} +\newrobustcmd*\tud@cs@restore[1]{% +% \end{macrocode} +% Sollte ein zuvor gesichertes Makro mit \cs{undef} oder \cs{csundef} +% zwischenzeitlich \emph{undefiniert} gesetzt worden sein, wird das originäre +% Makro dennoch wiederhergestellt. Hierfür wird es zu \cs{relax} gesetzt, damit +% die Überprüfung mit \cs{tud@cs@check} keinen Fehler erzeugt. +% \begin{macrocode} + \ifcsdef{#1}{}{% + \ifcsdef{@@tud@#1}{% + \cslet{#1}{\relax}% + }{}% + }% +% \end{macrocode} +% Die eigentliche Wiederherstellung. +% \begin{macrocode} + \tud@cs@check{#1}% + \ifcsdef{@@tud@#1}{% + \tud@cs@letltx{#1}{@@tud@#1}% + \csundef{@@tud@#1}% + }{}% +} +\newrobustcmd*\tud@cs@reset[1]{% + \tud@cs@check{#1}% + \ifcsdef{@@tud@#1}{% + \tud@cs@letltx{#1}{@@tud@#1}% + }{}% +} +\newrobustcmd*\tud@cs@update[1]{% + \tud@cs@check{#1}% + \ifcsdef{@@tud@#1}{% + \tud@cs@letltx{@@tud@#1}{#1}% + }{}% +} +\newrobustcmd*\tud@cs@use[1]{% + \tud@cs@check{#1}% + \ifcsdef{@@tud@#1}{% + \csuse{@@tud@#1}% + }{% + \csuse{#1}% + }% +} +% \end{macrocode} +% Dieses Makro dient zum Überprüfen, ob der zu sichernde beziehungsweise +% wiederherzustellende Befehl überhaupt definiert ist. Sollte das nicht der +% Fall sein, wird ein Fehler ausgegeben. +% \begin{macrocode} +\newrobustcmd*\tud@cs@check[1]{% + \ifcsdef{#1}{}{% + \PackageError{tudscrbase}{% + `\@backslashchar#1' is not defined}{% + The command `\@backslashchar#1' was never defined. \MessageBreak% + Please contact the TUD-Script maintainer\MessageBreak% + via \tudscrmail. A bugfix is urgently required.% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@cs@check +% \end{macro}^^A \tud@cs@use +% \end{macro}^^A \tud@cs@update +% \end{macro}^^A \tud@cs@reset +% \end{macro}^^A \tud@cs@restore +% \end{macro}^^A \tud@cs@store +% \end{macro}^^A \tud@cs@letltx +% \begin{macro}{\tud@skip@store} +% \changes{v2.04}{2015/03/02}{neu}^^A +% \changes{v2.05}{2016/07/13}{Verwendung von \cs{tud@skip@check}}^^A +% \begin{macro}{\tud@skip@restore} +% \changes{v2.04}{2015/03/02}{neu}^^A +% \changes{v2.05}{2016/07/13}{Verwendung von \cs{tud@skip@check}}^^A +% \begin{macro}{\tud@skip@reset} +% \changes{v2.05}{2016/07/13}{neu}^^A +% \begin{macro}{\tud@skip@set} +% \changes{v2.04}{2015/05/05}{neu}^^A +% \changes{v2.05}{2016/07/13}{Verwendung von \cs{tud@skip@check}}^^A +% \begin{macro}{\tud@skip@check} +% \changes{v2.05}{2016/07/13}{neu}^^A +% Hiermit können~-- äquivalent zum Sichern und Wiederherstellen von Befehlen~-- +% Längenregister abgespeichert werden. +% \begin{macrocode} +\newcommand*\tud@skip@store[1]{% + \tud@skip@check{#1}{% + \ifcsdef{@@tud@skip@#1}{}{% + \csedef{@@tud@skip@#1}{\expandafter\the\csname #1\endcsname}% + }% + }% +} +\newcommand*\tud@skip@restore[1]{% + \tud@skip@check{#1}{% + \ifcsdef{@@tud@skip@#1}{% + \csname #1\endcsname=\csname @@tud@skip@#1\endcsname% + \csundef{@@tud@skip@#1}% + }{}% + }% +} +\newcommand*\tud@skip@reset[1]{% + \tud@skip@check{#1}{% + \ifcsdef{@@tud@skip@#1}{% + \csname#1\endcsname=\csname @@tud@skip@#1\endcsname% + }{}% + }% +} +\newcommand*\tud@skip@set[2]{% + \tud@skip@check{#1}{% + \expandafter\setlength\csname #1\endcsname{#2}% + }% +} +\newcommand*\tud@skip@check[1]{% + \begingroup% + \@tempswafalse% + \expandafter\ifisskip\expandafter{\csname#1\endcsname}{\@tempswatrue}{}% + \expandafter\ifisdimen\expandafter{\csname#1\endcsname}{\@tempswatrue}{}% + \if@tempswa% + \aftergroup\@firstofone% + \else% + \aftergroup\@gobble% + \fi% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \tud@skip@check +% \end{macro}^^A \tud@skip@set +% \end{macro}^^A \tud@skip@reset +% \end{macro}^^A \tud@skip@restore +% \end{macro}^^A \tud@skip@store +% \begin{macro}{\tud@patch@wrn} +% \TUDScript verwendet die Möglichkeiten von \pkg{etoolbox} und \pkg{xpatch}, +% um mit den Makros (\cs{[x]apptocmd}, \cs{[x]pretocmd}, \cs{[x]patchcmd}) +% bereits definierte Befehle anzupassen. Falls dies nicht gelingt, wird eine +% Warnung ausgegeben, die hier definiert wird. +% \begin{macrocode} +\newcommand*\tud@patch@wrn[1]{% + \PackageWarning{tudscrbase}{% + It wasn't possible to patch `\@backslashchar#1'\MessageBreak% + Please contact the TUD-Script maintainer\MessageBreak% + via \tudscrmail. Without a bugfix an\MessageBreak% + erroneous output may occur% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@patch@wrn +% +% \subsection{Schlüsseldefinitionen für \TUDScript} +% +% In Anlehnung an \KOMAScript{} werden hier Befehle zur Definition und +% Ausführung unterschiedlicher Klassenoptionen mithilfe der Funktionen aus +% dem \pkg{scrbase}-Paket erstellt. +% +% \begin{macro}{\TUDProcessOptions} +% \begin{macro}{\TUDExecuteOptions} +% \begin{macro}{\TUDoptions} +% \begin{macro}{\TUDoption} +% Zuerst ein paar Makros zur einfacheren Verwendung. +% \begin{macrocode} +\DefineFamily{TUD} +\newcommand*\TUDProcessOptions{\FamilyProcessOptions{TUD}} +\newcommand*\TUDExecuteOptions{\FamilyExecuteOptions{TUD}} +\newcommand*\TUDoptions{\FamilyOptions{TUD}} +\newcommand*\TUDoption{\FamilyOption{TUD}} +% \end{macrocode} +% \end{macro}^^A \TUDoption +% \end{macro}^^A \TUDoptions +% \end{macro}^^A \TUDExecuteOptions +% \end{macro}^^A \TUDProcessOptions +% +% \subsubsection{Optionsdefinitionen} +% +% \begin{macro}{\TUD@key} +% \begin{macro}{\TUD@key@define} +% \changes{v2.06}{2018/07/19}{neu}^^A +% \begin{macro}{\TUD@key@@define} +% \changes{v2.06}{2018/07/19}{neu}^^A +% \begin{macro}{\TUD@key@preset} +% \changes{v2.06}{2018/07/19}{neu}^^A +% Dies ist der zentrale Befehl zur Definition von Optionen, welcher die von +% \KOMAScript{} Schnittstelle \cs{DefineFamilyKey} nutzt. +% +% Da sich die Klassenoptionen teilweise selbst gegenseitig beeinflussen oder +% aber in bestimmten Fällen eine Option in Abhängigkeit von einer anderen +% unterschiedliche Standardwerte annehmen soll, wird dafür eine Möglichkeit +% geschaffen. Hierfür wird für jede Option ein korrelierende Schalter +% \cs{if@tud@key@\meta{Schlüssel}@set} definiert. Dieser wird auf \val{true} +% gesetzt, sobald der Schlüssel explizit gesetzt wurde, womit ein Standardwert +% einer Klassenoption überschrieben werden kann. Das Setzen der Standardwerte +% erfolgt intern mit dem Befehl \cs{TUD@key@preset}. +% \begin{macrocode} +\newcommand*\TUD@key[2][.\@currname.\@currext]{% +% \end{macrocode} +% Basierend auf dem Namen des Schalters wird die notwendige, boolesche Variable +% erzeugt (\cs{if@tud@key@\meta{Schlüssel}@set}), welche im Falle des direkten +% Aufrufs des Schlüssels, ein Überschreiben mit einem Standardwert verhindert. +% \begin{macrocode} + \providebool{@tud@key@#2@set}% + \DefineFamilyMember[{#1}]{TUD}% + \kernel@ifnextchar[%] + {\TUD@key@define{#1}{#2}}% + {\TUD@key@@define{#1}{#2}}% +} +\newcommand*\TUD@key@define{} +\def\TUD@key@define#1#2[#3]#4{% + \DefineFamilyKey[{#1}]{TUD}{#2}[{#3}]{% + #4% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \booltrue{@tud@key@#2@set}% + \fi% + }% +} +\newcommand*\TUD@key@@define{} +\def\TUD@key@@define#1#2#3{% + \DefineFamilyKey[{#1}]{TUD}{#2}{% + #3% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \booltrue{@tud@key@#2@set}% + \fi% + }% +} +% \end{macrocode} +% Es kann intern über \cs{if@tud@key@\meta{Schlüssel}@set} geprüft werden, ob +% einem Schlüssel ein explizites Wert zugewiesen wurde. Sollte dies nicht der +% Fall sein, kann dieser hiermit intern beliebig angepasst werden. Da es durch +% das Setzen der Option mit \cs{TUDoption} zu einer Sperrung kommt, muss diese +% folgend wieder rückgängig gemacht werden. +% \begin{macrocode} +\newcommand*\TUD@key@preset[2]{% + \ifbool{@tud@key@#1@set}{}{% + \TUDoption{#1}{#2}% + \boolfalse{@tud@key@#1@set}% + }% +} +% \end{macrocode} +% \end{macro}^^A \TUD@key@preset +% \end{macro}^^A \TUD@key@@define +% \end{macro}^^A \TUD@key@define +% \end{macro}^^A \TUD@key +% \begin{macro}{\TUD@set@ifkey} +% \changes{v2.06}{2018/08/01}{forcierte Kleinschreibung Schlüsselwerte}^^A +% \begin{macro}{\TUD@set@numkey} +% \changes{v2.02}{2014/11/05}{neu}^^A +% \changes{v2.06}{2018/08/01}{forcierte Kleinschreibung Schlüsselwerte}^^A +% \begin{macro}{\TUD@bool@numkey} +% \changes{v2.03}{2015/01/09}{neu}^^A +% \begin{macro}{\TUD@set@dimenkey} +% \changes{v2.05}{2016/06/15}{neu}^^A +% \changes{v2.06}{2018/08/01}{forcierte Kleinschreibung Schlüsselwerte}^^A +% \begin{macro}{\TUD@unknown@keyval} +% Dies sind die Befehle zum Setzen der Optionen. Diese können entweder als +% Schalter (\cs{TUD@set@ifkey}) oder aber mit mehreren möglichen Werten +% (\cs{TUD@set@numkey}) definiert werden. Prinzipiell ist auch eine freie +% Definition mit anschließender Abarbeitung ohne die zuvor genannten Befehle +% möglich. +% \begin{macrocode} +\newcommand*\TUD@set@ifkey[3]{% + \tud@lowerstring\tud@res@a{#3}% + \edef\tud@res@b{% + \etex@unexpanded{\FamilySetBool{TUD}{#1}{#2}}{\tud@res@a}% + }\tud@res@b% +} +\newcommand*\TUD@set@numkey[4]{% + \tud@lowerstring\tud@res@a{#4}% + \edef\tud@res@b{% + \etex@unexpanded{\FamilySetNumerical{TUD}{#1}{#2}{#3}}{\tud@res@a}% + }\tud@res@b% +} +% \end{macrocode} +% Um Dopplungen im Code zu vermeiden, werden für die numerische Schlüssel die +% booleschen Standardwertzuweisungen in einem Makro gespeichert. +% \begin{macrocode} +\newcommand*\TUD@bool@numkey{% + {false}{0},{off}{0},{no}{0},{true}{1},{on}{1},{yes}{1}% +} +% \end{macrocode} +% Mit \cs{TUD@set@dimenkey} wird der übergebene Längenwert im spezifiezierten +% Makro gespeichert. +% \begin{macrocode} +\newcommand*\TUD@set@dimenkey[3]{% + \tud@lowerstring\tud@res@a{#3}% + \edef\tud@res@b{% + \etex@unexpanded{\FamilySetUseLengthMacro{TUD}{#1}{#2}}{\tud@res@a}% + }\tud@res@b% +} +% \end{macrocode} +% Dieser Befehl wird lediglich pro forma definiert. An diesen kann eine Liste +% möglicher Wertzuweisungen übergeben werden, welche durch \KOMAScript{} +% derzeit jedoch nicht abgearbeitet und ausgegeben wird. +% \begin{macrocode} +\newcommand*\TUD@unknown@keyval{\FamilyUnknownKeyValue{TUD}} +% \end{macrocode} +% \end{macro}^^A \TUD@unknown@keyval +% \end{macro}^^A \TUD@set@dimenkey +% \end{macro}^^A \TUD@set@numkey +% \end{macro}^^A \TUD@bool@numkey +% \end{macro}^^A \TUD@set@ifkey +% \begin{macro}{\tud@locked@newnum} +% \begin{macro}{\tud@locked@num@preset} +% \begin{macro}{\tud@locked@num@set} +% Mit \cs{tud@locked@newnum}\marg{Name}\marg{Definition} lässt sich ein Makro +% definieren, für das mit \cs{tud@locked@num@preset}\marg{Name}\marg{Definition} +% eine Voreinstellung definiert werden kann, solange der Wert nicht mit +% \cs{tud@locked@num@set}\marg{Name}\marg{Definition} explizit überschrieben +% wurde. +% \begin{macrocode} +\newcommand*\tud@locked@newnum[2]{% + \expandafter\newcommand\expandafter*\csname#1\endcsname{#2}% + \newbool{#1@locked}% + \tud@num@set{#1}{#2}% +} +\newcommand*\tud@locked@num@preset[2]{% + \ifbool{#1@locked}{}{% + \tud@num@set{#1}{#2}% + \boolfalse{#1@locked}% + }% +} +\newcommand*\tud@locked@num@set[2]{% + \tud@num@set{#1}{#2}% + \booltrue{#1@locked}% +} +\newcommand*\tud@num@set[2]{% + \ifcsdef{#1}{% + \ifnumber{#2}{% + \csdef{#1}{#2}% + }{% + \PackageError{tudscrbase}{% + `#2' is not a valid numerical expression% + }{% + You set the numerical expression `\@backslashchar#1'\MessageBreak% + to value `#2', which isn't numerical.% + }% + }% + }{% + \PackageError{tudscrbase}{% + `\@backslashchar#1' was never defined% + }{% + You tried using the numerical expression `\@backslashchar#1'\MessageBreak% + but you didn't define it with `\string\tud@locked@newnum'.% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@locked@num@set +% \end{macro}^^A \tud@locked@num@preset +% \end{macro}^^A \tud@locked@newnum +% \begin{macro}{\tud@locked@newbool} +% \begin{macro}{\tud@locked@bool@preset} +% \begin{macro}{\tud@locked@bool@set} +% \begin{macro}{\tud@bool@set} +% \changes{v2.05}{2015/07/03}{neu}^^A +% Diese Makros dienen in Anlehnung an die vorherigen zum Definieren und Setzen +% von sperrbaren booleschen Schaltern. Dabei wird \cs{tud@bool@set} definiert, +% um nicht nur \val{true} und \val{false} sondern auch alle anderen bekannten +% booleschen Zuweisungen (\val{yes} und \val{on} sowie \val{no} und \val{off}) +% mit diesen Befehlen verwenden zu können. +% \begin{macrocode} +\newcommand*\tud@locked@newbool[2][false]{% + \newbool{#2}% + \newbool{#2@locked}% + \tud@bool@set{#2}{#1}% +} +\newcommand*\tud@locked@bool@preset[2]{% + \ifbool{#1@locked}{}{% + \tud@bool@set{#1}{#2}% + \boolfalse{#1@locked}% + }% +} +\newcommand*\tud@locked@bool@set[2]{% + \tud@bool@set{#1}{#2}% + \booltrue{#1@locked}% +} +\newcommand*\tud@bool@set[2]{% + \ifstrbool{#2}{\booltrue{#1}}{\boolfalse{#1}}{% + \PackageError{tudscrbase}{% + `#2' is not a valid boolean expression% + }{% + You tried to set the boolean switch `\@backslashchar if#1'\MessageBreak% + to value `#2' but only `true' `on' and `yes' as well as \MessageBreak% + `false' `no' and `off' are valid values.% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@bool@set +% \end{macro}^^A \tud@locked@bool@set +% \end{macro}^^A \tud@locked@bool@preset +% \end{macro}^^A \tud@locked@newbool +% +% \subsubsection{Parameterdefinitionen} +% +% \begin{macro}{\TUD@parameter@family} +% \begin{macro}{\TUD@parameter@@family} +% \begin{macro}{\TUD@parameter@checkfamily} +% Mit \cs{TUD@parameter@family}\marg{Familienname}\marg{Definitionen} können +% Schlüssel"=Wert"=Parameter für die optionalen Argumente von Befehle definiert +% werden. Das erste Argument definiert den Familiennamen für den jeweiligen +% Befehl, welcher eindeutig gewählt werden sollte. Dieser wird im Hilfsmakro +% \cs{TUD@parameter@@family} gesichert. Dies soll im Zusammenspiel mit dem +% Makro \cs{TUD@parameter@checkfamily} dafür sorgen, dass die im Folgenden +% bereitgestellten Befehle \cs{TUD@parameter@def}, \cs{TUD@parameter@let} und +% \cs{TUD@parameter@handler@macro}~-- welche die eigentliche Definition der +% Parameter für den Benutzer bewerkstelligen~-- ohne die Angabe der Familie +% nur innerhalb des zweiten Argumentes von \cs{TUD@parameter@family} verwendet +% werden können. +% \ToDo{% +% Eine Katastrophe, dringend überarbeiten; generelle Lösung mit \cs{toks@}?% +% KOMA-Option \val{@else@} verwenden? +% }[v2.07]% +% \begin{macrocode} +\newcommand*\TUD@parameter@@family{} +\newcommand*\TUD@parameter@family[2]{% + \xdef\TUD@parameter@@family{#1}% + #2% + \gdef\TUD@parameter@@family{}% +} +% \end{macrocode} +% Dieser Befehl prüft, ob eine Familie für den Paramter definiert wurde. +% \begin{macrocode} +\newcommand*\TUD@parameter@checkfamily[2]{% + \ifxblank{#1}{% + \PackageError{tudscrbase}{% + No family for \@backslashchar#2 defined% + }{% + You have to use \@backslashchar#2\space within the\MessageBreak% + second argument of \string\TUD@parameter@family. The first\MessageBreak% + argument of \string\TUD@parameter@family\space has to be\MessageBreak% + a unique family name. Alternatively, you can specify\MessageBreak% + the family name within the optional argument of\MessageBreak% + \@backslashchar#2.% + }% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \TUD@parameter@checkfamily +% \end{macro}^^A \TUD@parameter@@family +% \end{macro}^^A \TUD@parameter@family +% \begin{macro}{\TUD@parameter@def} +% \begin{macro}{\TUD@parameter@let} +% \changes{v2.02}{2014/07/25}{Beachtung der gegebenen Standardwerte}^^A +% \cs{TUD@parameter@def}\marg{Name}\oarg{Säumniswert}\marg{Verarbeitung} nutzt +% \cs{define@key} aus dem \pkg{keyval}-Paket, um einen Schlüssel und dessen +% Verarbeitung zu definieren, wobei auf den zugewiesenen Wert innerhalb des +% zweiten obligatorischen Argumentes mit |#1| zugegriffen werden kann. +% \begin{macrocode} +\newcommand*\TUD@parameter@def[1][\TUD@parameter@@family]{% + \TUD@parameter@checkfamily{#1}{TUD@parameter@def}% + \expandafter\define@key\expandafter{#1}% +} +% \end{macrocode} +% Mit \cs{TUD@parameter@let}\marg{Name}\marg{Name} kann äquivalent zur +% \mbox{\TeX-Primitive \cs{let}} die Definition der Verarbeitung eines +% Parameters auf einen weiteren übertragen werden. +% \begin{macrocode} +\newcommand*\TUD@parameter@let[3][\TUD@parameter@@family]{% + \TUD@parameter@checkfamily{#1}{TUD@parameter@let}% + \@expandtwoargs{\csletcs}{KV@#1@#2}{KV@#1@#3}% + \@expandtwoargs{\csletcs}{KV@#1@#2@default}{KV@#1@#3@default}% +} +% \end{macrocode} +% \end{macro}^^A \TUD@parameter@let +% \end{macro}^^A \TUD@parameter@def +% \begin{macro}{\TUD@parameter@set} +% \changes{v2.05}{2016/05/26}{robustere Verarbeitung von Default-Argumenten}^^A +% \begin{macro}{\TUD@parameter@nokey} +% \changes{v2.05}{2016/05/26}{neu}^^A +% Mit \cs{TUD@parameter@set}\marg{Familienname}\marg{Parameterliste} wird die +% Verarbeitung aller gegebenen Parameter veranlasst. Normalerweise wird dieser +% Befehl \emph{nicht} innerhalb des Argumentes von \cs{TUD@parameter@family} +% verwendet. In jedem Fall muss die zu verwendende Familie angegeben werden. +% \begin{macrocode} +\newcommand*\TUD@parameter@nokey{@nokey@} +\newcommand*\TUD@parameter@set[2]{% + \IfArgIsEmpty{#2}{}{% +% \end{macrocode} +% Hierfür wird die angegebene Parameterliste sukzessive abgearbeitet. Elemente, +% welche in Schlüssel"=Wert"=Syntax angegeben wurden, bleiben unverändert\dots +% \begin{macrocode} + \let\@tempb\@empty% + \def\@tempa##1{% + \@expandtwoargs\in@{=}{##1}% + \ifin@% + \appto\@tempb{##1,}% + \else% +% \end{macrocode} +% \dots ebenso wie Schlüssel ohne Wert, falls diese definiert wurden. Zu +% beachten ist, dass es mit \cs{TUD@parameter@handler@value} respektive +% \cs{TUD@parameter@handler@default} auch möglich ist, für einen mit einem der +% beiden Makros gewählten Schlüssel, lediglich den passenden Wert anzugeben. +% Dies wird genutzt, um optionale Argumente direkt für den Hauptparameter eines +% Makros oder einer Umgebung~-- wie beispielsweise für eine Überschrift~-- +% nutzen zu können, aber zusätzlich die Möglichkeit zu bieten, auch eine +% Parameterliste zu verwenden. Hierfür werden Umlaute sowie das \enquote*{ß} +% unschädlich gemacht. +% \begin{macrocode} + \begingroup% + \let\IeC\@firstofone% + \def\"####1{####1e}% + \def\ss{ss}% + \def\SS{SS}% + \protected@edef\tud@reserved{% + \endgroup% + \noexpand\protected@edef\noexpand\@tempc{KV@#1@##1}% + }% + \tud@reserved% + \ifcsdef{\@tempc}{% + \appto\@tempb{##1,}% + }{% + \protected@eappto\@tempb{\TUD@parameter@nokey=##1,}% + }% + \fi% + }% + \forcsvlist\@tempa{#2}% + \@expandtwoargs\kvsetkeys{#1}{\@tempb}% + }% +} +% Ursprünglich entwickelte sich dieser Ansatz aus der Situation, dass das Makro +% \cs{maketitle} in seiner Standarddefinition ein optionales Argument für eine +% Seitenzahl bereithält, bei den \TUDScript-Klassen jedoch auch die Möglichkeit +% besteht, verschiedene zusätzliche Parameter für diesen Befehl zu verwenden. +% Um allerdings für den Anwender das gewohnte Vorgehen beibehalten zu können, +% wurde diese Sonderbehandlung implementiert. +% \end{macrocode} +% \end{macro}^^A \TUD@parameter@nokey +% \end{macro}^^A \TUD@parameter@set +% \begin{macro}{\TUD@parameter@handler@macro} +% \changes{v2.05}{2016/05/26}{robustere Verarbeitung von Default-Argumenten}^^A +% Durch \cs{TUD@parameter@handler@macro} kann definiert werden, wie mit einem +% zuvor nicht mit \cs{TUD@parameter@def} definiertem Parameter beziehungsweise +% gewöhnlichem optionalen Argument umzugehen ist. Dabei wird unterschieden, ob +% es sich bei dem unbekannten Parameter um ein normales optionales Argument +% oder um eine Angabe in Schlüssel-Wert-Syntax handelt. Dabei wurden einfache +% optionale Argumente zuvor durch \cs{TUD@parameter@set} dem Schlüssel +% \cs{TUD@parameter@nokey} als Wert zugewiesen, um Umlaute etc. ohne Bedenken +% verwenden zu können. +% +% Das erste obligatorische Argument von \cs{TUD@parameter@handler@macro} wird +% für die Verarbeitung unbekannter Schlüssel-Wert-Paare genutzt, das zweite für +% einfache optionale Argumente. +% \ToDo{% +% Eine Katastrophe, dringend überarbeiten; generelle Lösung mit \cs{toks@}?% +% KOMA-Option \val{@else@} verwenden? +% }[v2.07]% +% \begin{macrocode} +\newcommand*\TUD@parameter@handler@macro[3][\TUD@parameter@@family]{% + \TUD@parameter@checkfamily{#1}{TUD@parameter@handler@macro}% + \expandafter\kv@set@family@handler\expandafter{#1}{% + \ifstr{\kv@key}{\TUD@parameter@nokey}{#3}{#2}% + }% +} +% \end{macrocode} +% \end{macro}^^A \TUD@parameter@handler@macro +% \begin{macro}{\TUD@parameter@handler@value} +% \changes{v2.05}{2016/05/26}{neu}^^A +% Mit diesem Makro wird einem optionalen Argument, welches ohne Schlüssel +% angegeben wurde, ein expliziter Parameter zugewiesen, welcher damit gesetzt +% wird. Unbekannte Schlüssel-Wert-Argumente werden durch \cs{kv@handled@false} +% immer als Fehler zurückgemeldet. +% \begin{macrocode} +\newcommand*\TUD@parameter@handler@value[2][\TUD@parameter@@family]{% + \TUD@parameter@checkfamily{#1}{TUD@parameter@handler@value}% + \protected@edef\@tempa{% + \noexpand\TUD@parameter@set{#1}{#2=\noexpand\kv@value}% + }% + \def\@tempb{\TUD@parameter@handler@macro[#1]{\kv@handled@false}}% + \expandafter\@tempb\expandafter{\@tempa}% +} +% \end{macrocode} +% \end{macro}^^A \TUD@parameter@handler@value +% \begin{macro}{\TUD@parameter@handler@default} +% Hiermit kann sowohl die zu verwendende Sprache als auch die Anzahl der +% gewünschten Spalten für bestimmte Umgebungen ohne die explizite Angabe eines +% Schlüssels festgelegt werden. Momentan betrifft das die beiden Umgebungen +% \env{abstract} und \env{tudpage} sowie Befehle und Umgebungen, welche auf +% letzterer basieren. Unbekannte Argumente in Schlüssel-Wert-Syntax werden +% nicht unterstützt. +% \begin{macrocode} +\newcommand*\TUD@parameter@handler@default[2][\TUD@parameter@@family]{% + \TUD@parameter@checkfamily{#1}{TUD@parameter@handler@default}% + \ifxblank{#2}{% + \def\@tempa{\let\tud@reserved\relax}% + }{% + \def\@tempa{\def\tud@reserved{#2=\kv@value}}% + }% + \appto\@tempa{% + \ifstr{\kv@value}{twocolumn}{\def\kv@value{2}}{}% + \ifnumber{\kv@value}{\def\tud@reserved{columns=\kv@value}}{}% + \iflanguageloaded{\kv@value}{\def\tud@reserved{language=\kv@value}}{}% + \ifx\tud@reserved\relax% + \PackageError{tudscrbase}{% + Unknown default value `\kv@value'% + }{% + If `\kv@value' is a language, you haven't loaded it. \MessageBreak% + Otherwise, there's no handler for the given value. \MessageBreak% + You should specify a certian key (<key>=\kv@value).% + }% + \fi% + }% + \protected@eappto\@tempa{% + \noexpand\ifx\noexpand\tud@reserved\noexpand\relax\noexpand\else% + \noexpand\TUD@parameter@set{#1}{\noexpand\tud@reserved}% + \noexpand\fi% + }% + \def\@tempb{\TUD@parameter@handler@macro[#1]{\kv@handled@false}}% + \expandafter\@tempb\expandafter{\@tempa}% +} +% \end{macrocode} +% \end{macro}^^A \TUD@parameter@handler@default +% \begin{macro}{\TUD@parameter@error} +% Das Makro \cs{TUD@parameter@wrn}\marg{Parameter}\marg{Werteliste} gibt für +% den Fall einer ungültigen Wertzuweisung an einen bestimmten \meta{Parameter} +% eine Warnung mit einem entsprechenden Hinweis auf gültige Werte innerhalb von +% \meta{Werteliste} aus. +% \begin{macrocode} +\newcommand*\TUD@parameter@error[2]{% + \PackageError{tudscrbase}{Unsupported value for parameter `#1'}{% + `#1' can only be used with values:\MessageBreak#2% + }% +} +% \end{macrocode} +% \end{macro}^^A \TUD@parameter@error +% +% \subsection{Ausführung von paketspezifischem Quellcode} +% +% Ab und an ist es notwendig, bestimmten Quelltext gezielt in Abhängigkeit vom +% Ladezustand eines Paketes auszuführen. +% \begin{macro}{\TUD@UnwindPackage} +% \changes{v2.05}{2015/10/28}{neu}^^A +% Dieser Befehl dient zur Ausführung von Quelltext, falls ein Paket bis zum +% Ende der Dokumentpräambel nicht geladen wurde. Im ersten obligatorischen +% Argument wird das Paket angegeben, im zweiten der Quellcode. +% \begin{macrocode} +\newcommand*\TUD@UnwindPackage[2]{\AtEndPreamble{\@ifpackageloaded{#1}{}{#2}}} +\@onlypreamble\TUD@UnwindPackage +% \end{macrocode} +% \end{macro}^^A \TUD@UnwindPackage +% \begin{macro}{\TUD@CheckPackage} +% \changes{v2.06}{2019/06/21}{neu}^^A +% \begin{macro}{\tud@if@packagelater@exists} +% \changes{v2.06}{2019/06/21}{neu}^^A +% Mit \cs{TUD@CheckPackage} wird geprüft, ob ein Paket mindestens in der +% angegebenen Version existiert. Sollte das Paket in einer früheren Version +% existieren, wird eine Warnung ausgegeben. Dabei wird das Paket \emph{nicht} +% geladen. Damit lässt sich sicherstellen, dass beispielsweise Schriftdateien +% in einer bestimmten Version vorhanden sind, ohne diese durch das Paket selbst +% zu laden. Ist das Paket gar nicht installiert, wird durch den Aufruf von +% \cs{RequirePackage} ein Fehler erzeugt respektive MiKTeX zur automatischen +% Nachinstallation animiert. +% \begin{macrocode} +\newcommand*\TUD@CheckPackage[2]{% + \tud@if@packagelater@exists{#1}{#2}{}{% + \PackageWarningNoLine{tudscrbase}{% + The version `#2' of package `#1'\MessageBreak% + is urgently required. An erroneous output\MessageBreak + may occur. Please update your distribution% + }% + \IfFileExists{#1.sty}{}{\RequirePackage{#1}[#2]}% + }% +} +\@onlypreamble\TUD@CheckPackage +% \end{macrocode} +% Hiermit wird geprüft, ob ein installiertes Paket in einer bestimmten Version +% installiert ist, ohne dieses zu laden. Hierfür wird die Datei zeilenweise +% gelesen, bis der Eintrag \cs{ProvidesPackage\marg{Paketname}\oarg{Version}} +% gefunden wird. +% \begin{macrocode} +\newcommand*\tud@if@packagelater@exists[2]{% + \begingroup% + \let\tud@res@a\@empty% + \def\tud@res@b[##1]{\def\tud@res@a{##1}}% + \def\ProvidesPackage##1{% + \@ifnextchar[%] + {\tud@res@b}{\tud@res@b[]}% + }% + \IfFileExists{#1.sty}{% + \openin\tud@res@read=#1.sty% + \@tud@res@swatrue% + \loop% + \read\tud@res@read to\tud@res@c% + \@expandtwoargs\in@{\string\ProvidesPackage}% + {\expandafter\detokenize\expandafter{\tud@res@c}}% + \ifin@% + \@tud@res@swafalse% + \tud@res@c% + \fi% + \ifeof\tud@res@read\@tud@res@swafalse\fi% + \if@tud@res@swa% + \repeat% + \closein\tud@res@read% + }{}% + \edef\tud@res@a{\endgroup\noexpand\@ifl@t@r{\tud@res@a}{#2}} + \tud@res@a% +} +\@onlypreamble\tud@if@packagelater@exists +% \end{macrocode} +% \end{macro}^^A \tud@if@packagelater@exists +% \end{macro}^^A \TUD@CheckPackage +% \begin{macro}{\TUD@RecommendPackage} +% \changes{v2.06}{2018/07/12}{neu}^^A +% Bestimmte Pakete sind für die Funktionalität von \TUDScript empfohlen, aber +% nicht zwingend erforderlich. Sind diese nicht vorhanden, wird eine Warnung +% ausgegeben. +% \begin{macrocode} +\newcommand*\TUD@RecommendPackage[1]{% + \kernel@ifnextchar[%] + {\TUD@@RecommendPackage#1}% + {\TUD@@RecommendPackage#1[]}% +} +\@onlypreamble\TUD@RecommendPackage +\newcommand*\TUD@@RecommendPackage{} +\def\TUD@@RecommendPackage#1[#2]{% + \IfFileExists{#1.sty}{% + \RequirePackage{#1}[#2]% + }{% + \PackageWarning{tudscrbase}{% + The usage of package `#1' (#2) is\MessageBreak% + recommended but it isn't installed% + }% + }% +} +\@onlypreamble\TUD@@RecommendPackage +% \end{macrocode} +% \end{macro}^^A \TUD@RecommendPackage +% \begin{macro}{\TUD@AfterPackage@set} +% \changes{v2.04}{2015/03/09}{neu}^^A +% \begin{macro}{\TUD@AfterPackage@do} +% \changes{v2.03}{2015/02/15}{neu}^^A +% Mit diesen beiden Befehlen wird die Ausführung von Quellcode erst nach dem +% Laden des gewünschten Paketes oder~-- falls das Paket geladen wurde~-- +% direkt im Dokument ausgeführt. Im ersten Argument wird das Paket angegeben, +% im zweiten der Quellcode. +% \begin{macrocode} +\newcommand*\TUD@AfterPackage@set[1]{% + \newbool{@tud@#1@loaded}% + \AfterPackage!{#1}{\booltrue{@tud@#1@loaded}}% +} +\newcommand*\TUD@AfterPackage@do[2]{% + \ifcsdef{if@tud@#1@loaded}{% + \if@atdocument% + \ifbool{@tud@#1@loaded}{#2}{}% + \else% + \AfterPackage!{#1}{#2}% + \fi% + }{% + \PackageError{tudscrbase}{\string\TUD@AfterPackage@set{#1} missing}{% + You have to set \string\TUD@AfterPackage@set{#1} before\MessageBreak% + the usage of \string\TUD@AfterPackage@do{#1}{<code>} is\MessageBreak% + possible.% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \TUD@AfterPackage@do +% \end{macro}^^A \TUD@AfterPackage@set +% +% \iffalse +%</package&base> +% \fi +% +% \subsection{Bedingt verzögerte Ausführung von \KOMAScript-Optionen} +% +% \begin{macro}{\TUD@KOMAoptions} +% \changes{v2.05}{2015/07/17}{neu}^^A +% Dieses Makro wird verwendet, um innerhalb der \TUDScript-Klassen zu +% unterschieden, wie eine \KOMAScript-Option auszuführen ist. Wurde bereits +% das Paket \pkg{scrextend} oder eine \KOMAScript-Klasse geladen, erfolgt die +% Ausführung des Arguments direkt über \cs{KOMAoptions}. Andernfalls wird das +% angegebene Argument an die zuladende Klasse durchgereicht. +% \begin{macrocode} +%<*package&base> +\newcommand*\TUD@KOMAoptions[1]{} +\ifundef{\KOMAClassName}{% + \renewcommand*\TUD@KOMAoptions[1]{% + \PackageWarning{tudscrbase}{% + You should load package `scrextend' right after the\MessageBreak% + documentclass. Option \string\TUD@KOMAoptions{`#1'} is gobbled% + }% + }% + \AfterPackage*{scrextend}{\let\TUD@KOMAoptions\KOMAoptions}% +}{% + \let\TUD@KOMAoptions\KOMAoptions% +} +%</package&base> +% \end{macrocode} +% Nach dem Laden einer \TUDScript-Klasse wird der Befehl so angepasst, dass +% dieser vor dem Laden der dazugehörigen \KOMAScript-Elternklasse die Optionen +% einfach durchreicht. Nach dem Laden der Klasse steht dann \cs{KOMAoptions} +% zur Verfügung. +% \begin{macrocode} +%<*load&class> +%<*!inherit> +\renewcommand*\TUD@KOMAoptions[1]{\PassOptionsToClass{#1}{\TUD@Class@KOMA}} +\AfterClass{\TUD@Class@KOMA}{\let\TUD@KOMAoptions\KOMAoptions} +%</!inherit> +%<*inherit> +\renewcommand*\TUD@KOMAoptions[1]{\PassOptionsToClass{#1}{\TUD@Class@Parent}} +\AfterClass{\TUD@Class@Parent}{\let\TUD@KOMAoptions\KOMAoptions} +%</inherit> +%</load&class> +% \end{macrocode} +% \end{macro}^^A \TUD@KOMAoptions +% +% \iffalse +%<*class&option> +% \fi +% +% \section{Zusätzliches für die \TUDScript-Klassen} +% +% \subsection{Erweiterung von \KOMAScript-Schriftelementen} +% +% \begin{macro}{\tud@komafont@set} +% \begin{macro}{\tud@komafont@unset} +% \begin{macro}{\tud@komafont@reset} +% \changes{v2.02}{2014/08/24}{neu}^^A +% Es wird die Möglichkeit geschaffen, bestimmten Schriftelementen weitere +% Eigenschaften mitzugeben. Damit dies optionsabhängig geschehen kann und +% \cs{addtokomafont} nur einmalig verwendete werden muss, wird im Zweifelsfall +% einem Schriftelement ein Hilfsmakro \cs{tud@komafont@\meta{Element}} +% zugewiesen, welches intern angepasst werden kann. Mit \cs{tud@komafont@set} +% werden dem angegebenen Element die gewünschten Schriftattribute zugeteilt. +% \begin{macrocode} +\newcommand*\tud@komafont@set[2]{% + \ifcsdef{tud@komafont@#1}{}{\addtokomafont{#1}{\csuse{tud@komafont@#1}}}% + \csdef{tud@komafont@#1}{#2\nobreak}% +} +% \end{macrocode} +% Mit \cs{tud@komafont@unset} kann das angegebene Element wieder zurückgesetzt +% werden. Dabei wird das hinzugefügte Makro auf \cs{relax} gesetzt. +% \begin{macrocode} +\newcommand*\tud@komafont@unset[1]{% + \ifcsdef{tud@komafont@#1}{}{\addtokomafont{#1}{\csuse{tud@komafont@#1}}}% + \csdef{tud@komafont@#1}{\relax}% +} +% \end{macrocode} +% Werden \KOMAScript-Schriftelemente auf ihre Ausgangsdefinition zurückgesetzt, +% so kann diesen mit \cs{tud@komafont@reset} kann das passende Hilfsmakro +% abermals zugewiesen werden. +% \begin{macrocode} +\newcommand*\tud@komafont@reset[1]{% + \ifcsdef{tud@komafont@#1}{\addtokomafont{#1}{\csuse{tud@komafont@#1}}}{}% +} +% \end{macrocode} +% \end{macro}^^A \tud@komafont@unset +% \end{macro}^^A \tud@komafont@reset +% \end{macro}^^A \tud@komafont@set +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% \subsection{Externe Pakete für die \TUDScript-Klassen} +% +% \changes{v2.01}{2014/04/24}{Versionsanforderungen bei benötigten Paketen}^^A +% \changes{v2.02}{2014/07/08}{Warnung bei Verwendung von \pkg{graphics}}^^A +% +% Für die Verwendung der hier erstellten \KOMAScript-Wrapper-Klassen werden +% einige wenige Pakete eingebunden. Dabei wurde versucht, die Anzahl der +% Pakete möglichst gering zu halten und nur die wirklich notwendigen zu +% verwenden. +% +% \subsubsection{Erweiterte Umgebungsdefinition mit dem Paket \pkg{environ}} +% +% Die \env{abstract}-Umgebung wird im Vergleich zu den \KOMAScript-Klassen +% stark erweitert. Für diese sowie für die Umgebungen \env{declarations} und +% \env{tudpage} wird das Paket \pkg{environ} für die Umgebungsdefinition +% benötigt. +% \begin{macrocode} +\RequirePackage{environ}[2013/04/01] +% \end{macrocode} +% +% Innerhalb dieser Umgebungen soll es außerdem möglich sein, ein mehrspaltiges +% Layout~-- auch konträr zu den globalen Dokumenteinstellungen~-- zu verwenden. +% Mit diesen Befehlen lässt sich die Anzahl der Spalten über einen Parameter +% anpassen, falls das Paket \pkg{multicol} geladen wurde. +% \begin{macro}{\tud@x@multicol@num} +% \begin{macro}{\tud@x@multicol@check} +% Im Makro \cs{tud@x@multicol@num} wird die Anzahl der gewünschten Spalten in +% einer Umgebung für die Verwendung des \pkg{multicol}-Paketes gespeichert. +% \begin{macrocode} +\newcommand*\tud@x@multicol@num{1} +% \end{macrocode} +% Der Befehl \cs{tud@x@multicol@check} prüft, ob das Paket \pkg{multicol} +% geladen wurde. Falls dies nicht der Fall ist, wird eine Warnung ausgegeben +% und die Änderung des Wertes über einen Parameter der Umgebungen \env{tudpage} +% respektive \env{abstract} sowie \env{declarations} verhindert. +% \begin{macrocode} +\newcommand*\tud@x@multicol@check{% + \ifnum\tud@x@multicol@num>\@ne\relax% + \ClassWarning{\TUD@Class@Name}{% + The option `columns=\tud@x@multicol@num' is only\MessageBreak% + supported, when package `multicol' is loaded% + }% + \renewcommand*\tud@x@multicol@num{1}% + \fi% +} +\AfterPackage{multicol}{\let\tud@x@multicol@check\relax} +% \end{macrocode} +% \end{macro}^^A \tud@x@multicol@check +% \end{macro}^^A \tud@x@multicol@num +% +% \subsubsection{Pakete für Grafiken und Farben} +% +% Es folgen die Pakete, welche bei Bedarf am Ende der Präambel geladen werden. +% \begin{macrocode} +\AtEndPreamble{% +% \end{macrocode} +% Mit \pkg{graphicx} werden die Logos der TU~Dresden sowie von Dresden Concept +% mit dem Befehl \cs{includegraphics} u.\,a. auf der Titelseite eingebunden. +% Sollte lediglich das \pkg{graphics}-Paket geladen worden sein, so wird der +% Nutzer mit einer Warnung informiert, dass zusätzlich das \pkg{graphicx}-Paket +% geladen wird. +% \begin{macrocode} + \@ifpackageloaded{graphicx}{}{% + \@ifpackageloaded{graphics}{% + \ClassWarningNoLine{\TUD@Class@Name}{% + Package `graphics' was superseded by `graphicx',\MessageBreak% + which now will be loaded automatically% + }% + }{}% + \RequirePackage{graphicx}[1999/02/16]% + }% +% \end{macrocode} +% Mit dem Paket \pkg{tudscrcolor} werden die Befehle für die Auswahl der Farben +% des \CDs definiert, welches wiederum \pkg{xcolor} lädt. +% \begin{macrocode} + \RequirePackage{tudscrcolor}[\TUD@Version]% +} +% \end{macrocode} +% +% \iffalse +%</class&body> +% \fi +% +% \Finale +% +\endinput + +% +% \begin{macro}{\TUD@noworlater} +% \changes{v2.05}{2015/07/03}{neu implementiert}^^A +% \begin{macro}{\TUD@noworlater@simple} +% \changes{v2.05}{2015/07/03}{neu}^^A +% Hiermit kann die Abarbeitung der Optionen an das Ende der verwendeten +% Klasse bzw. des Paketes verzögert werden. Aufgrund der Besonderheiten der +% Befehle \cs{AtEndOfClass} und \cs{AtEndOfPackage} können diese nicht +% innerhalb von \pkg{tudscrbase} sondern erst außerhalb nach dem Laden +% definiert werden. Damit keine Probleme dabei auftreten, falls das Paket +% geladen wird ohne daran anschließend die notwendigen Redefinitionen +% durchzuführen, werden die beiden Varianten des Befehls \cs{TUD@noworlater} +% im Paket definiert. +% +% Im ersten Argument von \cs{TUD@noworlater} wird einer der wertzuweisenden +% Befehle für Optionen (\cs{TUD@set@\dots}) erwartet. Dieser wird immer +% ausgeführt, um ungültige Wertzuweisungen einer Option, welche als globale +% Klassenoption angegeben wurde, über die \LaTeX-Standardroutine als Warnung +% auszugeben. Bei der eigentlichen~-- sprich verzögerten~-- Ausführung der +% Option wird die Wertzuweisung abermals ausgeführt, gefolgt von der im +% zweiten Argument definierten Abarbeitung dieser. +% \begin{macrocode} +%<*package&base> +\newcommand*\TUD@noworlater[2]{} +\newcommand*\TUD@noworlater@simple[2]{% + \PackageWarning{tudscrbase}{% + The content of \string\TUD@noworlater will be executed immediately% + }% + #1#2% +} +\let\TUD@noworlater\TUD@noworlater@simple +%</package&base> +% \end{macrocode} +% Nach dem Laden des Paketes wird geprüft, ob die ursprüngliche Definition +% des Befehls aus dem Paket noch besteht. Ist dies der Fall, wird der Befehl +% zur Verzögerung an das Ende der Klasse bzw. des Paketes umdefiniert. +% \begin{macrocode} +%<*load> +\ifx\TUD@noworlater\TUD@noworlater@simple +%<*class> + \renewcommand*\TUD@noworlater[2]{#1\AtEndOfClass{#1#2}}% + \AtEndOfClass{\renewcommand*\TUD@noworlater[2]{#1#2}}% +%</class> +%<*package> + \renewcommand*\TUD@noworlater[2]{#1\AtEndOfPackage{#1#2}}% + \AtEndOfPackage{\renewcommand*\TUD@noworlater[2]{#1#2}}% +%</package> +\fi +%</load> +% \end{macrocode} +% \end{macro}^^A \TUD@noworlater@simple +% \end{macro}^^A \TUD@noworlater +% diff --git a/macros/latex/contrib/tudscr/source/tudscr-color.dtx b/macros/latex/contrib/tudscr/source/tudscr-color.dtx new file mode 100644 index 0000000000..c581f28f6b --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-color.dtx @@ -0,0 +1,459 @@ +% \CheckSum{216} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-color.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-color.dtx}[2019/06/28 v2.06 TUD-Script\space% +% +% \iffalse +%</dtx> +%<package>\ProvidesPackage{tudscrcolor}[% +%<*package> +%!TUD@Version +%</package> +%<package> package +%<*dtx|package> +% \fi + (corporate design colors)% +] +% \iffalse +%</dtx|package> +%<*dtx> +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-color.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \section{Das Paket \pkg{tudscrcolor} -- Die Farben des \CDs} +% +% Das \TUDCD legt nicht nur die zu nutzenden Schriften und das Layout sondern +% auch die zu verwendenden Farben fest. Diese werden nachfolgend für das CMYK"~ +% und RGB"~Farbmodel definiert. Sie können im Dokument mit sämtlichen Befehlen +% zur Farbauswahl wie \cs{color}\marg{Farbe} oder \cs{textcolor}\marg{Farbe} +% verwendet werden. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*package> +% \fi +% +% \subsection{Optionen und Befehle} +% +% \begin{option}{newcolors} +% \begin{option}{reduced} +% \begin{option}{oldcolors} +% \begin{option}{full} +% Das Paket kann entweder mit einfachen, für \TUDScript ausreichenden oder +% erweiterten Farbdefinitionen geladen werden. Letztere definieren zusätzliche +% Farbbezeichnungen für die Kompatibilität zu alten TUD-Klassen. +% \begin{macrocode} +\DeclareOption{newcolors}{\let\tud@setcolors@add\relax} +\DeclareOption{reduced}{\let\tud@setcolors@add\relax} +\DeclareOption{oldcolors}{\let\tud@setcolors@add\tud@setcolors@old} +\DeclareOption{full}{\let\tud@setcolors@add\tud@setcolors@old} +% \end{macrocode} +% \end{option}^^A full +% \end{option}^^A oldcolors +% \end{option}^^A reduced +% \end{option}^^A newcolors +% \begin{macro}{\setcdcolors} +% Der Befehl \cs{setcdcolors} definiert die Farben des \CDs. Das Argument dient +% zur Auswahl des gewünschten Farbmodels. Dies kann dazu genutzt werden, +% innerhalb des Dokumentes die Definition der Farben für ein neues Farbmodell +% zu ändern. +% \begin{macrocode} +\newcommand*\setcdcolors[1]{% + \selectcolormodel{#1}% + \tud@setcolors@do% +} +% \end{macrocode} +% \end{macro}^^A \setcdcolors +% \begin{macro}{\tud@color} +% \changes{v2.04}{2015/04/21}{neu}^^A +% Der Befehl wählt eine in einem Makro gespeicherte Farbe nur aus, wenn dieses +% auch tatsächlich definiert ist. Dieser Befehl wird von den \TUDScript-Klassen +% für die Umsetzung des Layouts verwendet. +% \begin{macrocode} +\newcommand*\tud@color[1]{\ifdefvoid{#1}{}{\color{#1}}} +% \end{macrocode} +% \end{macro}^^A \tud@color +% +% \subsection{Farbdefinitionen} +% \subsubsection{Notwendige Farben für \TUDScript} +% +% \begin{macro}{\tud@setcolors@do} +% Die Definitionen der Farben erfolgt erst durch die Ausführung von +% \cs{tud@setcolors@do}. Damit wird es möglich, auf die angegebenen Optionen in +% Form von \cs{tud@setcolors@add} oder den durch das Paket \pkg{xcolor} +% angegebenen Farbraum zu reagieren. +% \begin{macrocode} +\newcommand*\tud@setcolors@do{% +% \end{macrocode} +% \begin{TUDcolor}{HKS41} +% Die primäre Hausfarbe (dunkles Blau) +% \begin{macrocode} + \definecolor{HKS41}{cmyk/RGB/rgb}{% + 1.00,0.70,0.10,0.50/011,042,081/0.0431372549,0.16470588235,0.31764705882% + }% +% \end{macrocode} +% \end{TUDcolor}^^A HKS41 +% \begin{TUDcolor}{HKS92} +% Die sekundäre Hausfarbe (grau), allein und ausschließlich für die Verwendung +% in der Geschäftsausstattung und nicht für Fließtext, Grafiken etc. +% \begin{macrocode} + \definecolor{HKS92}{cmyk/RGB/rgb}{% + 0.10,0.00,0.05,0.65/080,089,085/0.31372549019,0.34901960784,0.33333333333% + }% +% \end{macrocode} +% \end{TUDcolor}^^A HKS92 +% \begin{TUDcolor}{HKS44} +% Auszeichnungen 1. Kategorie (helles Blau) +% \begin{macrocode} + \definecolor{HKS44}{cmyk/RGB/rgb}{% + 1.00,0.50,0.00,0.00/000,089,163/0,0.34901960784,0.63921568627% + }% +% \end{macrocode} +% \end{TUDcolor}^^A HKS44 +% \begin{TUDcolor}{HKS36} +% \begin{TUDcolor}{HKS33} +% \begin{TUDcolor}{HKS57} +% \begin{TUDcolor}{HKS65} +% Auszeichnungen 2. Kategorie (Indigo, Purpur, dunkles Grün, helles Grün) +% \begin{macrocode} + \definecolor{HKS36}{cmyk/RGB/rgb}{% + 0.80,0.90,0.00,0.00/081,041,127/0.31764705882,0.16078431372,0.49803921568% + }% + \definecolor{HKS33}{cmyk/RGB/rgb}{% + 0.50,1.00,0.00,0.00/129,026,120/0.50588235294,0.10196078431,0.47058823529% + }% + \definecolor{HKS57}{cmyk/RGB/rgb}{% + 1.00,0.00,0.90,0.20/000,122,071/0,0.47843137254,0.28235294117% + }% + \definecolor{HKS65}{cmyk/RGB/rgb}{% + 0.65,0.00,1.00,0.00/034,173,054/0.13333333333,0.67843137254,0.21176470588% + }% +% \end{macrocode} +% \end{TUDcolor}^^A HKS65 +% \end{TUDcolor}^^A HKS57 +% \end{TUDcolor}^^A HKS33 +% \end{TUDcolor}^^A HKS36 +% \begin{TUDcolor}{HKS07} +% Ausnahmefarbe (Orange) +% \begin{macrocode} + \definecolor{HKS07}{cmyk/RGB/rgb}{% + 0.00,0.60,1.00,0.00/232,123,020/0.90980392156,0.48235294117,0.07843137254% + }% +% \end{macrocode} +% \end{TUDcolor}^^A HKS07 +% \begin{TUDcolor}{cddarkblue} +% \begin{TUDcolor}{cdgray} +% \begin{TUDcolor}{cdgrey} +% \begin{TUDcolor}{cdblue} +% \begin{TUDcolor}{cdindigo} +% \begin{TUDcolor}{cdpurple} +% \begin{TUDcolor}{cddarkgreen} +% \begin{TUDcolor}{cdgreen} +% \begin{TUDcolor}{cdorange} +% Die definierten Grundfarben werden zur einfacheren Verwendung im Dokument +% noch einmal speziell benannt. +% \begin{macrocode} + \colorlet{cddarkblue}{HKS41}% + \colorlet{cdgray}{HKS92}% + \colorlet{cdgrey}{HKS92}% + \colorlet{cdblue}{HKS44}% + \colorlet{cdindigo}{HKS36}% + \colorlet{cdpurple}{HKS33}% + \colorlet{cddarkgreen}{HKS57}% + \colorlet{cdgreen}{HKS65}% + \colorlet{cdorange}{HKS07}% +% \end{macrocode} +% \end{TUDcolor}^^A cdorange +% \end{TUDcolor}^^A cdgreen +% \end{TUDcolor}^^A cddarkgreen +% \end{TUDcolor}^^A cdpurple +% \end{TUDcolor}^^A cdindigo +% \end{TUDcolor}^^A cdblue +% \end{TUDcolor}^^A cdgrey +% \end{TUDcolor}^^A cdgray +% \end{TUDcolor}^^A cddarkblue +% Damit enden die notwendigen Farbdefinitionen für das \pkg{tudscrcolor}-Paket. +% Abhängig von den gewählten Optionen werden mit \cs{tud@setcolors@add} ggf. +% zusätzliche Farbnamen definiert. +% \begin{macrocode} + \tud@setcolors@add% +} +% \end{macrocode} +% \end{macro}^^A \tud@setcolors@do +% +% \subsubsection{Zusätzliche Farben für alte TUD-Klassen} +% +% \begin{macro}{\tud@setcolors@add} +% \begin{macro}{\tud@setcolors@old} +% Die erweiterten Farbbefehle werden durch \pkg{tudscrcolor} definiert, wenn +% das Paket explizit mit der Option \opt{oldcolors} geladen wird. Damit werden +% alle gängigen Farbdefinitionen der vielen Insellösungen des \LaTeX-Universums +% an der \TnUD unterstützt. +% \begin{macrocode} +\newcommand*\tud@setcolors@add{} +\newcommand*\tud@setcolors@old{% + \colorlet{HKS41K10}{HKS41!10}% + \colorlet{HKS41K20}{HKS41!20}% + \colorlet{HKS41K30}{HKS41!30}% + \colorlet{HKS41K40}{HKS41!40}% + \colorlet{HKS41K50}{HKS41!50}% + \colorlet{HKS41K60}{HKS41!60}% + \colorlet{HKS41K70}{HKS41!70}% + \colorlet{HKS41K80}{HKS41!80}% + \colorlet{HKS41K90}{HKS41!90}% + \colorlet{HKS41K100}{HKS41!100}% + \colorlet{HKS92K10}{HKS92!10}% + \colorlet{HKS92K20}{HKS92!20}% + \colorlet{HKS92K30}{HKS92!30}% + \colorlet{HKS92K40}{HKS92!40}% + \colorlet{HKS92K50}{HKS92!50}% + \colorlet{HKS92K60}{HKS92!60}% + \colorlet{HKS92K70}{HKS92!70}% + \colorlet{HKS92K80}{HKS92!80}% + \colorlet{HKS92K90}{HKS92!90}% + \colorlet{HKS92K100}{HKS92!100}% + \colorlet{HKS44K10}{HKS44!10}% + \colorlet{HKS44K20}{HKS44!20}% + \colorlet{HKS44K30}{HKS44!30}% + \colorlet{HKS44K40}{HKS44!40}% + \colorlet{HKS44K50}{HKS44!50}% + \colorlet{HKS44K60}{HKS44!60}% + \colorlet{HKS44K70}{HKS44!70}% + \colorlet{HKS44K80}{HKS44!80}% + \colorlet{HKS44K90}{HKS44!90}% + \colorlet{HKS44K100}{HKS44!100}% + \colorlet{HKS36K10}{HKS36!10}% + \colorlet{HKS36K20}{HKS36!20}% + \colorlet{HKS36K30}{HKS36!30}% + \colorlet{HKS36K40}{HKS36!40}% + \colorlet{HKS36K50}{HKS36!50}% + \colorlet{HKS36K60}{HKS36!60}% + \colorlet{HKS36K70}{HKS36!70}% + \colorlet{HKS36K80}{HKS36!80}% + \colorlet{HKS36K90}{HKS36!90}% + \colorlet{HKS36K100}{HKS36!100}% + \colorlet{HKS33K10}{HKS33!10}% + \colorlet{HKS33K20}{HKS33!20}% + \colorlet{HKS33K30}{HKS33!30}% + \colorlet{HKS33K40}{HKS33!40}% + \colorlet{HKS33K50}{HKS33!50}% + \colorlet{HKS33K60}{HKS33!60}% + \colorlet{HKS33K70}{HKS33!70}% + \colorlet{HKS33K80}{HKS33!80}% + \colorlet{HKS33K90}{HKS33!90}% + \colorlet{HKS33K100}{HKS33!100}% + \colorlet{HKS57K10}{HKS57!10}% + \colorlet{HKS57K20}{HKS57!20}% + \colorlet{HKS57K30}{HKS57!30}% + \colorlet{HKS57K40}{HKS57!40}% + \colorlet{HKS57K50}{HKS57!50}% + \colorlet{HKS57K60}{HKS57!60}% + \colorlet{HKS57K70}{HKS57!70}% + \colorlet{HKS57K80}{HKS57!80}% + \colorlet{HKS57K90}{HKS57!90}% + \colorlet{HKS57K100}{HKS57!100}% + \colorlet{HKS65K10}{HKS65!10}% + \colorlet{HKS65K20}{HKS65!20}% + \colorlet{HKS65K30}{HKS65!30}% + \colorlet{HKS65K40}{HKS65!40}% + \colorlet{HKS65K50}{HKS65!50}% + \colorlet{HKS65K60}{HKS65!60}% + \colorlet{HKS65K70}{HKS65!70}% + \colorlet{HKS65K80}{HKS65!80}% + \colorlet{HKS65K90}{HKS65!90}% + \colorlet{HKS65K100}{HKS65!100}% + \colorlet{HKS07K10}{HKS07!10}% + \colorlet{HKS07K20}{HKS07!20}% + \colorlet{HKS07K30}{HKS07!30}% + \colorlet{HKS07K40}{HKS07!40}% + \colorlet{HKS07K50}{HKS07!50}% + \colorlet{HKS07K60}{HKS07!60}% + \colorlet{HKS07K70}{HKS07!70}% + \colorlet{HKS07K80}{HKS07!80}% + \colorlet{HKS07K90}{HKS07!90}% + \colorlet{HKS07K100}{HKS07!100}% + \colorlet{HKS41-10}{HKS41!10}% + \colorlet{HKS41-20}{HKS41!20}% + \colorlet{HKS41-30}{HKS41!30}% + \colorlet{HKS41-40}{HKS41!40}% + \colorlet{HKS41-50}{HKS41!50}% + \colorlet{HKS41-60}{HKS41!60}% + \colorlet{HKS41-70}{HKS41!70}% + \colorlet{HKS41-80}{HKS41!80}% + \colorlet{HKS41-90}{HKS41!90}% + \colorlet{HKS41-100}{HKS41!100}% + \colorlet{HKS92-10}{HKS92!10}% + \colorlet{HKS92-20}{HKS92!20}% + \colorlet{HKS92-30}{HKS92!30}% + \colorlet{HKS92-40}{HKS92!40}% + \colorlet{HKS92-50}{HKS92!50}% + \colorlet{HKS92-60}{HKS92!60}% + \colorlet{HKS92-70}{HKS92!70}% + \colorlet{HKS92-80}{HKS92!80}% + \colorlet{HKS92-90}{HKS92!90}% + \colorlet{HKS92-100}{HKS92!100}% + \colorlet{HKS44-10}{HKS44!10}% + \colorlet{HKS44-20}{HKS44!20}% + \colorlet{HKS44-30}{HKS44!30}% + \colorlet{HKS44-40}{HKS44!40}% + \colorlet{HKS44-50}{HKS44!50}% + \colorlet{HKS44-60}{HKS44!60}% + \colorlet{HKS44-70}{HKS44!70}% + \colorlet{HKS44-80}{HKS44!80}% + \colorlet{HKS44-90}{HKS44!90}% + \colorlet{HKS44-100}{HKS44!100}% + \colorlet{HKS36-10}{HKS36!10}% + \colorlet{HKS36-20}{HKS36!20}% + \colorlet{HKS36-30}{HKS36!30}% + \colorlet{HKS36-40}{HKS36!40}% + \colorlet{HKS36-50}{HKS36!50}% + \colorlet{HKS36-60}{HKS36!60}% + \colorlet{HKS36-70}{HKS36!70}% + \colorlet{HKS36-80}{HKS36!80}% + \colorlet{HKS36-90}{HKS36!90}% + \colorlet{HKS36-100}{HKS36!100}% + \colorlet{HKS33-10}{HKS33!10}% + \colorlet{HKS33-20}{HKS33!20}% + \colorlet{HKS33-30}{HKS33!30}% + \colorlet{HKS33-40}{HKS33!40}% + \colorlet{HKS33-50}{HKS33!50}% + \colorlet{HKS33-60}{HKS33!60}% + \colorlet{HKS33-70}{HKS33!70}% + \colorlet{HKS33-80}{HKS33!80}% + \colorlet{HKS33-90}{HKS33!90}% + \colorlet{HKS33-100}{HKS33!100}% + \colorlet{HKS57-10}{HKS57!10}% + \colorlet{HKS57-20}{HKS57!20}% + \colorlet{HKS57-30}{HKS57!30}% + \colorlet{HKS57-40}{HKS57!40}% + \colorlet{HKS57-50}{HKS57!50}% + \colorlet{HKS57-60}{HKS57!60}% + \colorlet{HKS57-70}{HKS57!70}% + \colorlet{HKS57-80}{HKS57!80}% + \colorlet{HKS57-90}{HKS57!90}% + \colorlet{HKS57-100}{HKS57!100}% + \colorlet{HKS65-10}{HKS65!10}% + \colorlet{HKS65-20}{HKS65!20}% + \colorlet{HKS65-30}{HKS65!30}% + \colorlet{HKS65-40}{HKS65!40}% + \colorlet{HKS65-50}{HKS65!50}% + \colorlet{HKS65-60}{HKS65!60}% + \colorlet{HKS65-70}{HKS65!70}% + \colorlet{HKS65-80}{HKS65!80}% + \colorlet{HKS65-90}{HKS65!90}% + \colorlet{HKS65-100}{HKS65!100}% + \colorlet{HKS07-10}{HKS07!10}% + \colorlet{HKS07-20}{HKS07!20}% + \colorlet{HKS07-30}{HKS07!30}% + \colorlet{HKS07-40}{HKS07!40}% + \colorlet{HKS07-50}{HKS07!50}% + \colorlet{HKS07-60}{HKS07!60}% + \colorlet{HKS07-70}{HKS07!70}% + \colorlet{HKS07-80}{HKS07!80}% + \colorlet{HKS07-90}{HKS07!90}% + \colorlet{HKS07-100}{HKS07!100}% +} +% \end{macrocode} +% \end{macro}^^A \tud@setcolors@old +% \end{macro}^^A \tud@setcolors@add +% +% \subsection{Ausführung der Optionen} +% +% Zum Schluss werden die Optionen ausgeführt und ggf. an \pkg{xcolor} +% weitergereicht. Anschließend werden die Farben für das Dokument definiert. +% Ohne die Angabe eines optionalen Argumentes an das Paket \pkg{xcolor} erfolgt +% die Definition für den gewählten bzw. standardmäßig eingestellten Farbraum. +% \begin{macrocode} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{xcolor}} +\ExecuteOptions{reduced} +\ProcessOptions\relax +\RequirePackage{xcolor}[2007/01/21] +\tud@setcolors@do% +% \end{macrocode} +% +% \iffalse +%</package> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-comp.dtx b/macros/latex/contrib/tudscr/source/tudscr-comp.dtx new file mode 100644 index 0000000000..e2edc9dd9f --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-comp.dtx @@ -0,0 +1,2265 @@ +% \CheckSum{1451} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-comp.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-comp.dtx}[2019/08/27 v2.06d TUD-Script\space% +% +% \iffalse +%</dtx> +%<*package&identify> +%<comp&base>\ProvidesPackage{tudscrcomp}[% +%<comp&book>\ProvidesPackage{tudscrcomp-book}[% +%<comp&poster>\ProvidesPackage{tudscrcomp-poster}[% +%<fixfonts>\ProvidesPackage{fix-tudscrfonts}[% +%!TUD@Version +%<comp> package +%<fixfonts> package for font fixes +%</package&identify> +%<*dtx|package&identify> +% \fi + (compatibility for old tud(scr) classes)% +] +% \iffalse +%</dtx|package&identify> +%<*dtx> +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-comp.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.02}{2014/09/30}{\pkg{tudscrfonts}: Nutzung alter TUD-Klassen +% mit neuen Schriftfamilien ermöglicht}^^A +% \changes{v2.04}{2015/04/22}{\pkg{tudscrfonts}: Unterstützung veralteter +% Posterklassen}^^A +% +% \section{Kompatibilität zu früheren \TUDScript-Versionen} +% +% Mit der Version v2.02 wurde eine Menge~-- teilweise sehr tiefgreifend~-- an +% der Benutzerschnittstelle in \TUDScript geändert. Dabei wird versucht, die +% Kompatibilität zu früheren Versionen so weit es geht aufrecht zu erhalten und +% veraltete Optionen und Befehle zumindest weiter bereitzustellen, wobei bei +% der Verwendung dieser der Anwender darüber informiert wird. Die Vorkehrungen +% betreffen sowohl die Klassen selber als auch die zusätzlich bereitgestellten +% Pakete. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*class|package&fonts> +%<*option> +% \fi +% +% \begin{macro}{\TUD@deprecated@key} +% \changes{v2.03}{2015/02/05}{neu}^^A +% \begin{macro}{\TUD@deprecated@cs} +% \changes{v2.03}{2015/02/05}{neu}^^A +% \begin{macro}{\TUD@deprecated@@cs} +% \changes{v2.06}{2018/08/07}{neu}^^A +% \begin{macro}{\TUD@deprecated@lengthcs} +% \changes{v2.05}{2016/06/20}{neu}^^A +% Um alte Optionen und Befehle dem Anwender bei der Verwendung kenntlich zu +% machen, werden entsprechende Warnungen definiert. Für Optionen wird dabei +% lediglich die empfohlene Option ausgegeben. Das Ausführen dieser wird später +% definiert. +% \begin{macrocode} +\newcommand*\TUD@deprecated@key[2]{% +%<*class> + \ClassWarning{\TUD@Class@Name}% +%</class> +%<*package&fonts> + \PackageWarning{tudscrfonts}% +%</package&fonts> + {% + The key `#1' is deprecated. It's\MessageBreak% + recommended to use `#2'\MessageBreak% + instead% + }% + \TUDoptions{#2}% +} +% \end{macrocode} +% Bei alten Befehlen wird nach der Warnung die Definition des neuen Befehls auf +% den alten überschrieben. +% \begin{macrocode} +\newcommand*\TUD@deprecated@cs[2]{% + \begingroup% + \edef\tud@res@a{% + \endgroup% + \noexpand\AfterEndPreamble{% + \noexpand\TUD@deprecated@@cs{#1}{#2}% + }% + }% + \tud@res@a% +} +\newcommand*\TUD@deprecated@@cs[2]{% + \ifcsundef{#1}{% + \begingroup% + \def\tud@res@a{% + The command `\@backslashchar#1' is deprecated. \MessageBreak% + }% + \def\tud@res@b##1@##2\@nil{% + \IfArgIsEmpty{##2}{% + \appto\tud@res@a{% + You should use `\@backslashchar#2' instead% + }% + }{% + \appto\tud@res@a{% + You should not use this command. It is substituted\MessageBreak% + with `\@backslashchar#2' internally% + }% + }% + }% + \tud@res@b#2@\@nil% + \edef\tud@res@c{% + \endgroup% + \noexpand\newrobustcmd\csname #1\endcsname{% +%<*class> + \noexpand\ClassWarning{\noexpand\TUD@Class@Name}% +%</class> +%<*package&fonts> + \noexpand\PackageWarning{tudscrfonts}% +%</package&fonts> + {\tud@res@a}% + \noexpand\csletcs{#1}{#2}% + \noexpand\csuse{#2}% + }% + }% + \tud@res@c% + }{}% +} +%<*class> +\newcommand*\TUD@deprecated@lengthcs[2][]{% + \ifdim\csuse{#2}<\maxdimen\relax% + \ClassWarning{\TUD@Class@Name}{% + Using the length `\@backslashchar#2' is deprecated. \MessageBreak% + You should use option `#2' instead% + }% + \csxdef{tud@dim@#2}{\the\csuse{#2}}% + \expandafter\setlength\csname #2\endcsname{\maxdimen}% + \global\csuse{#2}=\csuse{#2}% + #1% + \fi% +} +%</class> +% \end{macrocode} +% \end{macro}^^A \TUD@deprecated@lengthcs +% \end{macro}^^A \TUD@deprecated@@cs +% \end{macro}^^A \TUD@deprecated@cs +% \end{macro}^^A \TUD@deprecated@key +% +% \begin{option}{tudscrver} +% \changes{v2.02}{2014/08/22}{neu}^^A +% \begin{macro}{\tud@v@comp} +% \changes{v2.02}{2014/08/22}{neu}^^A +% In einigen Fällen sind Änderungen mit früheren Versionen nicht kompatibel +% oder unerwünscht, weil diese beispielsweise das Ausgabeergebnis verändern. +% Standardmäßig werden die Klassen in der aktuellen Version geladen. Mit +% \opt{tudscrver}|=|\val{\meta{Version}} kann auf das Verhalten einer früheren +% Version geschaltet werden. Die eingestellte Kompatibilität wird als Zahl in +% \cs{tud@v@comp} gespeichert. In den Makros \cs{tud@v@\meta{Version}} werden +% die zugehörigen Nummern gespeichert. +% \begin{macrocode} +\newcommand*\tud@v@comp{\tud@v@last} +% \end{macrocode} +% Damit dieser Schlüssel gezielt als erstes bei der Abarbeitung der Optionen +% aufgerufen werden kann, wird diesem ein spezielles Mitglied zugeteilt. +% \begin{macrocode} +\TUD@key[.comp]{tudscrver}[last]{% + \tud@v@get\@tempa{#1}% + \ifcsundef{tud@v@\@tempa}{% +%<*class> + \ClassWarningNoLine{\TUD@Class@Name}% +%</class> +%<*package&fonts> + \PackageWarningNoLine{tudscrfonts}% +%</package&fonts> + {% + You have set option `tudscrver' to `\@tempa', but\MessageBreak% + this value is not supported. Because of this,\MessageBreak% + `tudscrver=first' was set% + }% + \renewcommand*\tud@v@comp{0}% + }{% +%<*class> + \ClassInfoNoLine{\TUD@Class@Name}% +%</class> +%<*package&fonts> + \PackageInfoNoLine{tudscrfonts}% +%</package&fonts> + {% + Switching compatibility level to `v\@tempa'% + }% + \edef\tud@v@comp{\csuse{tud@v@\@tempa}}% + }% + \FamilyKeyStateProcessed% +} +% \end{macrocode} +% Da die Schlüssel global für \emph{jedes} Mitglied ausgewertet werden, muss +% auch ein Schlüssel für das Standardmitglied definiert werden, der einfach +% nichts macht. +% \begin{macrocode} +\TUD@key{tudscrver}{\FamilyKeyStateProcessed}% +% \end{macrocode} +% Eine zusätzliche Bedingung gibt es noch: Die Kompatibilität kann nur beim +% Laden der Klasse bzw. des Paketes gesetzt werden, danach nicht mehr. +% \begin{macrocode} +%<*class> +\AtEndOfClass% +%</class> +%<*package> +\AtEndOfPackage% +%</package> +{% + \RelaxFamilyKey[.comp]{TUD}{tudscrver}% + \TUD@key@toolate{tudscrver}% +% \end{macrocode} +% Außerdem wird darauf geachtet, dass die mindestens benötigte Version von +% \KOMAScript{} installiert ist. (\cs{\TUD@Version@KOMA}: \TUD@Version@KOMA). +% Sollte dies nicht der Fall sein, wird ein Fehler erzeugt. +% \begin{macrocode} +%<*class> + \ifcsdef{scr@v@\TUD@Version@KOMA}{% + \ifnum\scr@compatibility<\csuse{scr@v@3.12}\relax% + \ClassError{\TUD@Class@Name}{% + KOMA-Script compatibility level too low% + }{% + \TUD@Version\space must be used at least with\MessageBreak% + `version=3.12' KOMA-Script compatibility option.% + }% + \fi% + }{% + \ClassError{\TUD@Class@Name}{% + KOMA-Script v\TUD@Version@KOMA is required% + }{% + \TUD@Version\space must at least be used with\MessageBreak% + KOMA-Script v\TUD@Version@KOMA, but \KOMAScriptVersion was found.% + }% + }% +%</class> +} +% \end{macrocode} +% \end{macro}^^A \tud@v@comp +% \end{option}^^A tudscrver +% \ToDo{Für jede neue Version der entsprechende Befehl}[Release] +% \begin{macro}{\tud@v@first} +% \changes{v2.02}{2014/08/22}{neu}^^A +% \begin{macro}{\tud@v@2.00} +% \changes{v2.02}{2014/08/22}{neu}^^A +% \begin{macro}{\tud@v@2.01} +% \changes{v2.02}{2014/08/22}{neu}^^A +% \begin{macro}{\tud@v@2.01a} +% \changes{v2.02}{2014/08/22}{neu}^^A +% \begin{macro}{\tud@v@2.01b} +% \changes{v2.02}{2014/08/22}{neu}^^A +% \begin{macro}{\tud@v@2.02} +% \changes{v2.02}{2014/08/22}{neu}^^A +% \begin{macro}{\tud@v@2.03} +% \changes{v2.03}{2015/01/13}{neu}^^A +% \begin{macro}{\tud@v@2.03a} +% \changes{v2.03a}{2015/06/12}{neu}^^A +% \begin{macro}{\tud@v@2.04} +% \changes{v2.04}{2015/02/18}{neu}^^A +% \begin{macro}{\tud@v@2.04a} +% \changes{v2.04a}{2015/07/24}{neu}^^A +% \begin{macro}{\tud@v@2.04b} +% \changes{v2.04b}{2015/10/06}{neu}^^A +% \begin{macro}{\tud@v@2.04c} +% \changes{v2.04c}{2015/11/29}{neu}^^A +% \begin{macro}{\tud@v@2.04d} +% \changes{v2.04d}{2016/03/26}{neu}^^A +% \begin{macro}{\tud@v@2.04e} +% \changes{v2.04e}{2016/06/17}{neu}^^A +% \begin{macro}{\tud@v@2.05} +% \changes{v2.05}{2015/07/03}{neu}^^A +% \begin{macro}{\tud@v@2.05a} +% \changes{v2.05a}{2015/08/24}{neu}^^A +% \begin{macro}{\tud@v@2.05b} +% \changes{v2.05b}{2015/09/09}{neu}^^A +% \begin{macro}{\tud@v@2.05c} +% \changes{v2.05c}{2015/09/15}{neu}^^A +% \begin{macro}{\tud@v@2.05d} +% \changes{v2.05d}{2015/09/21}{neu}^^A +% \begin{macro}{\tud@v@2.05e} +% \changes{v2.05e}{2016/10/10}{neu}^^A +% \begin{macro}{\tud@v@2.05f} +% \changes{v2.05f}{2016/10/12}{neu}^^A +% \begin{macro}{\tud@v@2.05g} +% \changes{v2.05g}{2017/01/26}{neu}^^A +% \begin{macro}{\tud@v@2.05h} +% \changes{v2.05h}{2017/02/04}{neu}^^A +% \begin{macro}{\tud@v@2.05i} +% \changes{v2.05i}{2017/02/17}{neu}^^A +% \begin{macro}{\tud@v@2.05k} +% \changes{v2.05k}{2017/03/27}{neu}^^A +% \begin{macro}{\tud@v@2.05l} +% \changes{v2.05l}{2017/03/29}{neu}^^A +% \begin{macro}{\tud@v@2.05m} +% \changes{v2.05m}{2017/05/30}{neu}^^A +% \begin{macro}{\tud@v@2.06} +% \changes{v2.06}{2018/06/26}{neu}^^A +% \begin{macro}{\tud@v@2.06a} +% \changes{v2.06a}{2019/07/09}{neu}^^A +% \begin{macro}{\tud@v@2.06b} +% \changes{v2.06b}{2019/07/17}{neu}^^A +% \begin{macro}{\tud@v@2.06c} +% \changes{v2.06c}{2019/08/20}{neu}^^A +% \begin{macro}{\tud@v@2.06d} +% \changes{v2.06d}{2019/08/27}{neu}^^A +% \begin{macro}{\tud@v@last} +% \changes{v2.02}{2014/08/22}{neu}^^A +% \changes{v2.03}{2015/01/13}{angepasst}^^A +% \changes{v2.04}{2015/02/18}{angepasst}^^A +% \changes{v2.05}{2015/07/03}{angepasst}^^A +% \changes{v2.06}{2018/06/26}{angepasst}^^A +% Die numerischen Werte zu den einzelnen Versionen. +% \begin{macrocode} +\csdef{tud@v@first}{0} +\csdef{tud@v@2.00}{0} +\csdef{tud@v@2.01}{0} +\csdef{tud@v@2.01a}{0} +\csdef{tud@v@2.01b}{0} +\csdef{tud@v@2.02}{0} +\csdef{tud@v@2.03}{1} +\csdef{tud@v@2.03a}{1} +\csdef{tud@v@2.04}{2} +\csdef{tud@v@2.04a}{2} +\csdef{tud@v@2.04b}{2} +\csdef{tud@v@2.04c}{2} +\csdef{tud@v@2.04d}{2} +\csdef{tud@v@2.04e}{2} +\csdef{tud@v@2.05}{3} +\csdef{tud@v@2.05a}{3} +\csdef{tud@v@2.05b}{3} +\csdef{tud@v@2.05c}{3} +\csdef{tud@v@2.05d}{3} +\csdef{tud@v@2.05e}{3} +\csdef{tud@v@2.05f}{3} +\csdef{tud@v@2.05g}{3} +\csdef{tud@v@2.05h}{3} +\csdef{tud@v@2.05i}{3} +\csdef{tud@v@2.05k}{3} +\csdef{tud@v@2.05l}{3} +\csdef{tud@v@2.05m}{3} +\csdef{tud@v@2.06}{4} +\csdef{tud@v@2.06a}{4} +\csdef{tud@v@2.06b}{4} +\csdef{tud@v@2.06c}{4} +\csdef{tud@v@2.06d}{4} +\csdef{tud@v@last}{4} +% \end{macrocode} +% \end{macro}^^A \tud@v@last +% \end{macro}^^A \tud@v@2.06d +% \end{macro}^^A \tud@v@2.06c +% \end{macro}^^A \tud@v@2.06b +% \end{macro}^^A \tud@v@2.06a +% \end{macro}^^A \tud@v@2.06 +% \end{macro}^^A \tud@v@2.05m +% \end{macro}^^A \tud@v@2.05l +% \end{macro}^^A \tud@v@2.05k +% \end{macro}^^A \tud@v@2.05i +% \end{macro}^^A \tud@v@2.05h +% \end{macro}^^A \tud@v@2.05g +% \end{macro}^^A \tud@v@2.05f +% \end{macro}^^A \tud@v@2.05e +% \end{macro}^^A \tud@v@2.05d +% \end{macro}^^A \tud@v@2.05c +% \end{macro}^^A \tud@v@2.05b +% \end{macro}^^A \tud@v@2.05a +% \end{macro}^^A \tud@v@2.05 +% \end{macro}^^A \tud@v@2.04e +% \end{macro}^^A \tud@v@2.04d +% \end{macro}^^A \tud@v@2.04c +% \end{macro}^^A \tud@v@2.04b +% \end{macro}^^A \tud@v@2.04a +% \end{macro}^^A \tud@v@2.04 +% \end{macro}^^A \tud@v@2.03a +% \end{macro}^^A \tud@v@2.03 +% \end{macro}^^A \tud@v@2.02 +% \end{macro}^^A \tud@v@2.01b +% \end{macro}^^A \tud@v@2.01a +% \end{macro}^^A \tud@v@2.01 +% \end{macro}^^A \tud@v@2.00 +% \end{macro}^^A \tud@v@first +% \begin{macro}{\tud@v@get} +% \changes{v2.05}{2016/05/31}{neu}^^A +% Mit \cs{tud@v@get} wird die angegebene Versionsnummer in eine Normalform +% gebracht und an das Makro im ersten Argument übergeben. Damit spielt es keine +% Rolle, ob die im zweiten Argument übergebene Versionsnummer mit oder ohne +% führendes \enquote*{\texttt{v}} angegeben wird. +% \begin{macrocode} +\newcommand*\tud@v@get[2]{% + \begingroup% + \def\@tempa{\kernel@ifnextchar v{\@tempb}{\@tempb v}}% + \def\@tempb v##1\@nil{\def\@tempc{##1}}% + \@tempa #2\@nil% + \edef\tud@reserved{% + \endgroup% + \etex@unexpanded{\def#1}{\@tempc}% + }% + \tud@reserved% +} +% \end{macrocode} +% \end{macro}^^A \tud@v@get +% \begin{macro}{\tud@if@v@lower} +% \changes{v2.03}{2015/01/13}{neu}^^A +% Mit diesem Befehl können abhängig von der gegebenen Kompatibilitätsversion in +% den Klassen unterschiedliche Einstellungen vorgenommen werden. +% \begin{macrocode} +\newcommand*\tud@if@v@lower[1]{% + \begingroup% + \tud@v@get\@tempa{#1}% + \ifcsdef{tud@v@\@tempa}{% + \ifnum\tud@v@comp<\csuse{tud@v@\@tempa}\relax% + \def\tud@reserved{\endgroup\@firstoftwo}% + \else% + \def\tud@reserved{\endgroup\@secondoftwo}% + \fi% + }{% + \def\tud@reserved{% +%<*class> + \ClassWarningNoLine{\TUD@Class@Name}% +%</class> +%<*package&fonts> + \PackageWarningNoLine{tudscrfonts}% +%</package&fonts> + {% + Erroneous usage of `\string\tud@if@v@lower'. \MessageBreak% + There's no defined macro `\string\tud@v@\@tempa'% + }% + \endgroup\@firstoftwo% + }% + }% + \tud@reserved% +} +% \end{macrocode} +% \end{macro}^^A \tud@if@v@lower +% +% \subsection{Veraltete Optionen} +% +% \begin{option}{cdfonts} +% \begin{option}{tudfonts} +% Diese Optionen werden nur aus Gründen der Kompatibilität zu v1.0 definiert. +% \begin{macrocode} +\TUD@key{cdfonts}[true]{% + \TUD@set@ifkey{cdfonts}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \TUD@deprecated@key{cdfonts=#1}{cdfont=#1}% + \fi% +} +\TUD@key{tudfonts}[true]{% + \TUD@set@ifkey{tudfonts}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \TUD@deprecated@key{tudfonts=#1}{cdfont=#1}% + \fi% +} +% \end{macrocode} +% \end{option}^^A tudfonts +% \end{option}^^A cdfonts +% \begin{option}{heavyfont} +% Hiermit lässt sich die Schriftstärke im Dokument beeinflussen. +% \begin{macrocode} +\TUD@key{heavyfont}[true]{% + \TUD@set@ifkey{heavyfont}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUD@deprecated@key{heavyfont}{cdfont=heavy}% + \else% + \TUD@deprecated@key{heavyfont=#1}{cdfont=true}% + \fi% + \fi% +} +% \end{macrocode} +% \end{option}^^A heavyfont +% \begin{option}{sansmath} +% \begin{option}{serifmath} +% Mit dieser Option kann die genutzte Standardschrift für den Mathematiksatz +% für das gesamte Dokument umgestellt werden. Die \cls{tudbook}-Klasse hat +% neben der Option \opt{sansmath} außerdem den zusätzlichen Schlüssel +% \opt{serifmath} definiert, welcher aus Gründen der Kompatibilität hier +% ebenfalls vorgehalten wird. +% \begin{macrocode} +\TUD@key{sansmath}[true]{% + \TUD@set@ifkey{sansmath}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUD@deprecated@key{sansmath}{cdmath=true}% + \else% + \TUD@deprecated@key{sansmath=#1}{cdmath=false}% + \fi% + \fi% +} +\TUD@key{serifmath}[true]{% + \TUD@set@ifkey{serifmath}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUD@deprecated@key{serifmath}{cdmath=false}% + \else% + \TUD@deprecated@key{serifmath=#1}{cdmath=true}% + \fi% + \fi% +} +% \end{macrocode} +% \end{option}^^A serifmath +% \end{option}^^A sansmath +% \begin{option}{din} +% \begin{option}{nodin} +% \begin{option}{noDIN} +% \changes{v2.04}{2015/04/22}{neu}^^A +% Diese Optionen dienten zur Auswahl, ob die Schrift \DIN für die Überschriften +% verwendet werden soll. +% \begin{macrocode} +\TUD@key{din}[true]{% + \TUD@set@ifkey{din}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUD@deprecated@key{din}{cdoldfont=din}% + \else% + \TUD@deprecated@key{din=#1}{cdoldfont=nodin}% + \fi% + \fi% +} +\TUD@key{nodin}[true]{% + \TUD@set@ifkey{nodin}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUD@deprecated@key{nodin}{cdoldfont=nodin}% + \else% + \TUD@deprecated@key{nodin=#1}{cdoldfont=din}% + \fi% + \fi% +} +\TUD@key{noDIN}[true]{% + \TUD@set@ifkey{noDIN}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUD@deprecated@key{noDIN}{cdoldfont=nodin}% + \else% + \TUD@deprecated@key{noDIN=#1}{cdoldfont=din}% + \fi% + \fi% +} +% \end{macrocode} +% \end{option}^^A noDIN +% \end{option}^^A nodin +% \end{option}^^A din +% +% \iffalse +%<*class> +% \fi +% +% \begin{option}{geometry} +% \changes{v2.02}{2014/07/08}{neu}^^A +% Umbenennung der zu allgemein bezeichneten Option, um zukünftig potenziellen +% Konflikten mit \KOMAScript{} aus dem Weg zu gehen. +% \begin{macrocode} +\TUD@key{geometry}[true]{\TUD@deprecated@key{geometry=#1}{cdgeometry=#1}} +% \end{macrocode} +% \end{option}^^A geometry +% \begin{option}{barfont} +% \changes{v2.02}{2014/07/08}{neu}^^A +% Mit dieser Option kann die Schrift des \CDs und deren Schriftstärke in der +% TUD-Kopfzeile unabhängig von der gewählten Schriftart für den Fließtext +% aktiviert werden. +% \begin{macrocode} +\TUD@key{barfont}[true]{% + \TUD@set@numkey{barfont}{@tempa}{% + \TUD@bool@numkey,% + {nocd}{0},{nocdfont}{0},{nocdfonts}{0},{notudfonts}{0},% + {cd}{1},{cdfont}{1},{cdfonts}{1},{tudfonts}{1},% + {light}{1},{lightfont}{1},{lite}{1},{litefont}{1},{noheavyfont}{1},% + {heavy}{2},{heavyfont}{2},{bold}{2},{boldfont}{2}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false + \TUD@deprecated@key{barfont=#1}{cdhead=false}% + \or% true + \TUD@deprecated@key{barfont=#1}{cdhead=true}% + \or% heavy + \TUD@deprecated@key{barfont=#1}{cdhead=heavy}% + \fi% + \fi% +} +% \end{macrocode} +% \end{option}^^A barfont +% \begin{option}{widehead} +% Der Schalter dient zur Steuerung der Breite des Querbalkens im Kopf der +% \env{tudpage}-Seite. Entweder der Querbalken liegt im Satzspiegel oder +% aber über die komplette Papierbreite. +% \begin{macrocode} +\TUD@key{widehead}[true]{% + \TUD@set@ifkey{widehead}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUD@deprecated@key{widehead}{cdhead=paperwidth}% + \else% + \TUD@deprecated@key{widehead=#1}{cdhead=textwidth}% + \fi% + \fi% +} +% \end{macrocode} +% \end{option}^^A widehead +% \begin{option}{tudfoot} +% Diese Option wird nur aus Gründen der Kompatibilität zu v1.0 definiert. +% \begin{macrocode} +\TUD@key{tudfoot}[true]{% + \TUD@set@ifkey{tudfoot}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUD@deprecated@key{tudfoot}{cdfoot=true}% + \else% + \TUD@deprecated@key{tudfoot=#1}{cdfoot=false}% + \fi% + \fi% +} +% \end{macrocode} +% \end{option}^^A tudfoot +% \begin{option}{color} +% \begin{option}{colour} +% Die alte \cls{tudbook}-Klasse hat die Option \opt{color} definiert, mit +% welcher ein Umschalten auf farbige Titel- und Kapitelseiten möglich ist. Aus +% Kompatibilitätsgründen wird diese hier ebenfalls vorgehalten. +% \begin{macrocode} +\TUD@key{color}[true]{% + \TUD@set@numkey{color}{@tempa}{% + \TUD@bool@numkey,% + {nocolor}{0},{nocolour}{0},{monochrome}{0},{monochromatic}{0},% + {color}{1},{colour}{1},% + {lite}{2},{light}{2},{pale}{2},% + {colorlite}{2},{litecolor}{2},{colourlite}{2},{litecolour}{2},% + {colorlight}{2},{lightcolor}{2},{colourlight}{2},{lightcolour}{2},% + {colorpale}{2},{palecolor}{2},{colourpale}{2},{palecolour}{2},% + {bicolor}{3},{bicolour}{3},{twocolor}{3},{twocolour}{3},% + {bichrome}{3},{bichromatic}{3},{dichrome}{3},{dichromatic}{3},% + {full}{4},{colorfull}{4},{fullcolor}{4},{colourfull}{4},{fullcolour}{4}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false + \TUD@deprecated@key{color=#1}{cd=true}% + \or% true + \TUD@deprecated@key{color=#1}{cd=color}% + \or% litecolor + \TUD@deprecated@key{color=#1}{cd=pale}% + \or% bicolor + \TUD@deprecated@key{color=#1}{cd=bicolor}% + \or% full + \TUD@deprecated@key{color=#1}{cd=fullcolor}% + \fi% + \fi% +} +\TUD@key{colour}[true]{\TUDoptions{color=#1}} +% \end{macrocode} +% \end{option}^^A colour +% \end{option}^^A color +% \begin{option}{clearcolor} +% \changes{v2.06}{2018/08/21}{in \opt{cleardoublespecialpage} integriert}^^A +% \begin{option}{clearcolour} +% Die Option wurde in Option \opt{cleardoublespecialpage} integriert. +% \begin{macrocode} +%<*book|report> +\TUD@key{clearcolor}[true]{% + \TUD@set@ifkey{clearcolor}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUD@deprecated@key{clearcolor}{cleardoublespecialpage=color}% + \else% + \TUD@deprecated@key{clearcolor=#1}{cleardoublespecialpage=nocolor}% + \fi% + \fi% +} +\TUD@key{clearcolour}[true]{\TUDoptions{clearcolor=#1}} +%</book|report> +% \end{macrocode} +% \end{option}^^A clearcolour +% \end{option}^^A clearcolor +% +% \iffalse +%</class> +% \fi +% +% \begin{option}{fontspec} +% \changes{v2.02}{2014/08/29}{neu}^^A +% \changes{v2.05}{2015/07/06}{veraltet}^^A +% \begin{macro}{\if@tud@x@fontspec@requested} +% Früher musste die Unterstützung für die Schriftauswahl via \pkg{fontspec} +% manuell über die folgende Option aktiviert werden. +% \begin{macrocode} +\newif\if@tud@x@fontspec@requested +\TUD@key{fontspec}[true]{% + \TUD@set@ifkey{fontspec}{@tud@x@fontspec@requested}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% +%<*class> + \ClassWarningNoLine{\TUD@Class@Name}% +%</class> +%<*package&fonts> + \PackageWarningNoLine{tudscrfonts}% +%</package&fonts> + {% + The key `fontspec' is deprecated. \MessageBreak% + You should load the package `fontspec' manually% + }% + \fi% +} +% \end{macrocode} +% Da dieser Prozess sehr tief in die Schriftauswahl eingreift und das Laden des +% Paketes die Schriftauswahl für das ganze Dokument verändert, wird diese +% Option nur beim Laden der Klasse dzw. des Paketes zugelassen. +% \begin{macrocode} +%<*class> +\AtEndOfClass% +%</class> +%<*package&fonts> +\AtEndOfPackage% +%</package&fonts> +{% + \TUD@key@toolate{fontspec}% + \if@tud@x@fontspec@requested% + \RequirePackage{fontspec}[2017/01/24]% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@x@fontspec@requested +% \end{option}^^A fontspec +% +% \iffalse +%</option> +%</class|package&fonts> +%<*body> +%<*class> +% \fi +% +% \subsection{Veraltete Befehle und Längen} +% +% \begin{length}{\footlogoheight} +% \changes{v2.03}{2015/01/27}{neu}^^A +% Um die Höhe von Logos im Fußbereich der \pgs{tudheadings}-Seitenstile +% einheitlich festzulegen, gab es bis einschließlich der Version~v2.04 die +% Länge \cs{footlogoheight} anstelle der Option \opt{footlogoheight}. Sollte +% der Anwender diese anpassen, wird \cs{tud@dim@footlogoheight} auf diesen Wert +% gesetzt und eine Warnung erzeugt. +% \begin{macrocode} +\newlength\footlogoheight +\setlength\footlogoheight{\maxdimen} +% \end{macrocode} +% \end{length}^^A \footlogoheight +% \begin{length}{\pageheadingsvskip} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{length}{\headingsvskip} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Mit diesen Längen konnte der Anwender vor der Version~v2.05 die Überschriften +% von Titel, Teilen und Kapiteln vertikal verschieben. Diese Funktionalität +% wird seitdem mit den Optionen \opt{headingsvskip} und \opt{pageheadingsvskip} +% abgedeckt. +% \begin{macrocode} +%<*book|report|article> +\newlength\pageheadingsvskip +\setlength\pageheadingsvskip{\maxdimen} +\newlength\headingsvskip +\setlength\headingsvskip{\maxdimen} +%</book|report|article> +% \end{macrocode} +% \end{length}^^A \headingsvskip +% \end{length}^^A \pageheadingsvskip +% \begin{length}{\chapterheadingvskip} +% Die Länge \cs{chapterheadingvskip} wird aus Gründen der Kompatibilität zu +% älteren Versionen definiert. +% \begin{macrocode} +%<*book|report> +\newcommand*\chapterheadingvskip{} +\let\chapterheadingvskip\headingsvskip +%</book|report> +% \end{macrocode} +% \end{length}^^A \chapterheadingvskip +% \begin{macro}{\professorship} +% Für die Angabe des Lehrstuhls bzw. der Professur mit kann anstelle von +% \cs{chair} als Aliasbefehl auch \cs{professorship} genutzt werden. +% \begin{macrocode} +\TUD@deprecated@cs{professorship}{chair} +% \end{macrocode} +% \end{macro}^^A \professorship +% +% \iffalse +%<*book|report|article> +% \fi +% +% \begin{macro}{\studentid} +% \begin{macro}{\matriculationid} +% Zur Angabe von Matrikelnummer kann auch \cs{studentid} oder +% \cs{matriculationnumber} genutzt werden. +% \begin{macrocode} +\TUD@deprecated@cs{studentid}{matriculationnumber} +\TUD@deprecated@cs{matriculationid}{matriculationnumber} +% \end{macrocode} +% \end{macro}^^A \matriculationid +% \end{macro}^^A \studentid +% \begin{macro}{\enrolmentyear} +% Das Immatrikulationsjahr kann auch mit \cs{enrolmentyear} angegeben werden. +% \begin{macrocode} +\TUD@deprecated@cs{enrolmentyear}{matriculationyear} +% \end{macrocode} +% \end{macro}^^A \enrolmentyear +% \begin{macro}{\birthplace} +% Zur Angabe des Geburtsortes kann auch \cs{birthplace} verwendet werden. +% \begin{macrocode} +\TUD@deprecated@cs{birthplace}{placeofbirth} +% \end{macrocode} +% \end{macro}^^A \birthplace +% \begin{macro}{\submissiondate} +% Der Befehl \cs{submissiondate} kann als Aliasbefehl für den Standardbefehl +% \cs{date} zur Datumsangabe genutzt werden. +% \begin{macrocode} +\TUD@deprecated@cs{submissiondate}{date} +% \end{macrocode} +% \end{macro}^^A \submissiondate +% \begin{macro}{\oralexaminationdate} +% Für \cs{defensedate} kann als Aliasbefehl auch \cs{oralexaminationdate} +% verwendet werden. +% \begin{macrocode} +\TUD@deprecated@cs{oralexaminationdate}{defensedate} +% \end{macrocode} +% \end{macro}^^A \oralexaminationdate +% \begin{macro}{\birthday} +% Der Geburtstag kann auch mit \cs{birthday} angegeben werden. +% \begin{macrocode} +\TUD@deprecated@cs{birthday}{dateofbirth} +% \end{macrocode} +% \end{macro}^^A \birthday +% +% \iffalse +%</book|report|article> +% \fi +% +% \begin{macro}{\location} +% Für die Angabe des Ortes kann auch \cs{location} genutzt werden. +% \begin{macrocode} +\TUD@deprecated@cs{location}{place} +% \end{macrocode} +% \end{macro}^^A \location +% \begin{macro}{\logofile} +% \begin{macro}{\logofilename} +% Diese beiden Befehle können anstelle von \cs{headlogo} eingesetzt werden. +% \begin{macrocode} +\TUD@deprecated@cs{logofile}{headlogo} +\TUD@deprecated@cs{logofilename}{headlogo} +% \end{macrocode} +% \end{macro}^^A \logofilename +% \end{macro}^^A \logofile +% \begin{macro}{\startdate} +% \begin{macro}{\finaldate} +% \begin{macro}{\maturitydate} +% Für das Paket \pkg{tudscrsupervisor} sind auch einige Befehle als veraltet +% anzusehen. +% \begin{macrocode} +\AfterPackage{tudscrsupervisor}{% + \TUD@deprecated@cs{startdate}{issuedate}% + \TUD@deprecated@cs{finaldate}{duedate}% + \TUD@deprecated@cs{maturitydate}{duedate}% +} +% \end{macrocode} +% \end{macro}^^A \maturitydate +% \end{macro}^^A \finaldate +% \end{macro}^^A \startdate +% +% \iffalse +%</class> +%<*class|package&fonts> +% \fi +% +% \begin{macro}{\textcdfont} +% \begin{macro}{\tudfont} +% \begin{macro}{\univln} +% \begin{macro}{\univrn} +% \begin{macro}{\univbn} +% \begin{macro}{\univxn} +% \begin{macro}{\univls} +% \begin{macro}{\univrs} +% \begin{macro}{\univbs} +% \begin{macro}{\univxs} +% \begin{macro}{\textuln} +% \begin{macro}{\texturn} +% \begin{macro}{\textubn} +% \begin{macro}{\textuxn} +% \begin{macro}{\textuls} +% \begin{macro}{\texturs} +% \begin{macro}{\textubs} +% \begin{macro}{\textuxs} +% \begin{macro}{\dinbn} +% \begin{macro}{\textdbn} +% Für die Klassen und das Paket \pkg{tudscrfonts} werden die expliziten Befehle +% zur Schriftauswahl zumindest vorgehalten und auf die neuen Schriften gelegt. +% \begin{macrocode} +\TUD@deprecated@cs{textcdfont}{textcd}% +\TUD@deprecated@cs{tudfont}{cdfont}% +\TUD@deprecated@cs{univln}{cdfontln}% +\TUD@deprecated@cs{univrn}{cdfontrn}% +\TUD@deprecated@cs{univbn}{cdfontsn}% +\TUD@deprecated@cs{univxn}{cdfontbn}% +\TUD@deprecated@cs{univls}{cdfontli}% +\TUD@deprecated@cs{univrs}{cdfontri}% +\TUD@deprecated@cs{univbs}{cdfontsi}% +\TUD@deprecated@cs{univxs}{cdfontbi}% +\TUD@deprecated@cs{textuln}{textcdln}% +\TUD@deprecated@cs{texturn}{textcdrn}% +\TUD@deprecated@cs{textubn}{textcdsn}% +\TUD@deprecated@cs{textuxn}{textcdbn}% +\TUD@deprecated@cs{textuls}{textcdli}% +\TUD@deprecated@cs{texturs}{textcdri}% +\TUD@deprecated@cs{textubs}{textcdsi}% +\TUD@deprecated@cs{textuxs}{textcdbi}% +\TUD@deprecated@cs{dinbn}{cdfontxn}% +\TUD@deprecated@cs{textdbn}{textcdxn}% +% \end{macrocode} +% \end{macro}^^A \textdbn +% \end{macro}^^A \dinbn +% \end{macro}^^A \textuxs +% \end{macro}^^A \textubs +% \end{macro}^^A \texturs +% \end{macro}^^A \textuls +% \end{macro}^^A \textuxn +% \end{macro}^^A \textubn +% \end{macro}^^A \texturn +% \end{macro}^^A \textuln +% \end{macro}^^A \univxs +% \end{macro}^^A \univbs +% \end{macro}^^A \univrs +% \end{macro}^^A \univls +% \end{macro}^^A \univxn +% \end{macro}^^A \univbn +% \end{macro}^^A \univrn +% \end{macro}^^A \univln +% \end{macro}^^A \tudfont +% \end{macro}^^A \textcdfont +% \begin{macro}{\ifdin} +% \changes{v2.02}{2014/08/29}{Anpassungen für \pkg{fontspec}}^^A +% \changes{v2.06}{2018/07/10}{für \OpenSans hinfällig}^^A +% \begin{macro}{\tud@ifdin} +% \changes{v2.06}{2018/08/02}{neu}^^A +% Der Befehl \cs{ifdin} ist für \OpenSans hinfällig. +% \begin{macrocode} +\TUD@deprecated@cs{ifdin}{@secondoftwo} +% \end{macrocode} +% Für die alten Schriften prüft er auf die Verwendung von \DIN. Davon abhängig +% wird entweder das erste oder das zweite Argument ausgeführt. Dies kann für die +% Befehle aller Gliederungsebenen genutzt werden, um zwischen der Ausgabe im +% Dokument sowie Inhaltsverzeichnis und/oder Kolumnentitel zu unterscheiden. +% Um nicht alle Klassen und Pakete anpassen zu müssen, wird \cs{tud@ifdin} zur +% internen Nutzung in jedem Fall definiert, um die Kompatibilität gewährleisten +% zu können. +% \begin{macrocode} +\newrobustcmd*\tud@ifdin{% + \ifx\f@family\tud@cdfont@db% + \expandafter\@firstoftwo% + \else% + \expandafter\@secondoftwo% + \fi% +} +\if@tud@cdoldfont@active + \newcommand*\ifdin{}% + \let\ifdin\tud@ifdin% +\fi +% \end{macrocode} +% \end{macro}^^A \tud@ifdin +% \end{macro}^^A \ifdin +% \begin{macro}{\varGamma} +% \begin{macro}{\varDelta} +% \begin{macro}{\varTheta} +% \begin{macro}{\varLambda} +% \begin{macro}{\varXi} +% \begin{macro}{\varPi} +% \begin{macro}{\varSigma} +% \begin{macro}{\varUpsilon} +% \begin{macro}{\varPhi} +% \begin{macro}{\varPsi} +% \begin{macro}{\varOmega} +% Die veralteten Befehle für kursive griechische Majuskeln. +% \begin{macrocode} +\def\tud@res@a#1{% + \TUD@deprecated@cs{var#1}{it#1}% +} +\tud@math@loop@greeks@uc\tud@res@a% +% \end{macrocode} +% \end{macro}^^A \varOmega +% \end{macro}^^A \varPsi +% \end{macro}^^A \varPhi +% \end{macro}^^A \varUpsilon +% \end{macro}^^A \varSigma +% \end{macro}^^A \varPi +% \end{macro}^^A \varXi +% \end{macro}^^A \varLambda +% \end{macro}^^A \varTheta +% \end{macro}^^A \varDelta +% \end{macro}^^A \varGamma +% +% \iffalse +%</class|package&fonts> +%</body> +% \fi +% +% \section{Das Paket \pkg{tudscrcomp} -- Kompatibilität veralteter Klassen} +% +% Neben den \TUDScript-Klassen gibt es zahlreiche andere \LaTeX-Umsetzungen des +% \CDs der \TnUD. Um eine Migration von diesen \enquote{veralteten} Klassen +% zu erleichtern, wird das Paket \pkg{tudscrcomp} bereitgestellt. Mit diesem +% können bei der Verwendung von \TUDScript die meisten Optionen und Befehle +% genutzt werden, welche durch die Klasse \cls{tudbook} und teilweise vormals +% durch die Klassen die \TUDScript-Klassen in der Version~v1.0 sowie die +% Posterklassen \cls{tudmathposter} bzw. \cls{tudposter} bereitgestellt wurden. +% +% \iffalse +%<*package&comp> +%<*base> +% \fi +% +% \subsection{Erkennen der geladenen Klasse} +% +% Damit je nach geladener Klasse die passenden Kompatibilitätseinstellungen und +% -befehle bereitgestellt werden können, wird auf die geladene Klasse geprüft. +% Danach wird das dazu passende Paket geladen. +% \begin{macrocode} +\PassOptionsToPackage{oldcolors}{tudscrcolor} +\@ifclassloaded{tudscrposter}{% + \RequirePackageWithOptions{tudscrcomp-poster}[\TUD@Version]% +}{% + \RequirePackageWithOptions{tudscrcomp-book}[\TUD@Version]% +} +% \end{macrocode} +% +% \iffalse +%</base> +%<*!base> +%<*body> +% \fi +% +% \subsection{Gemeinsame Optionen und Befehle für alle Klassen} +% +% Zunächst werden alle Optionen und Befehle definiert, die unabhängig von der +% geladenen Klasse generell bereitgestellt werden. +% +% \begin{macro}{\einrichtung} +% \begin{macro}{\fachrichtung} +% \begin{macro}{\institut} +% \begin{macro}{\professur} +% Es werden Aliasbefehle für die Eingabefelder definiert. +% \begin{macrocode} +\newcommand*\einrichtung{\faculty} +\newcommand*\fachrichtung{\department} +\newcommand*\institut{\institute} +\newcommand*\professur{\chair} +% \end{macrocode} +% \end{macro}^^A \professur +% \end{macro}^^A \institut +% \end{macro}^^A \fachrichtung +% \end{macro}^^A \einrichtung +% \begin{macro}{\dinBold} +% \changes{v2.05}{2015/07/13}{neu}^^A +% \begin{macro}{\dinfamily} +% \changes{v2.05}{2015/07/13}{neu}^^A +% Für die explizite Schriftauswahl gibt es ebenfalls zwei ältere Befehle. +% \begin{macrocode} +\newcommand*\dinBold{\dinbn} +\newcommand*\dinfamily{\dinbn} +% \end{macrocode} +% \end{macro}^^A \dinfamily +% \end{macro}^^A \dinBold +% +% \iffalse +%</body> +%<*book> +%<*option> +% \fi +% +% \subsection{Kompatibilität zu \cls{tudbook}} +% +% Die folgenden Optionen und Befehle werden durch die Klasse \cls{tudbook} und +% teilweise durch \TUDScript~v1.0 definiert. +% +% \begin{option}{colortitle} +% \begin{option}{nocolortitle} +% Für farbige Einstellungen wird von \cls{tudbook} die Option \opt{color} +% definiert. Soll die Titelseite konträr dazu gesetzt werden, muss sich mit den +% Schlüsseln \opt{colortitle} und \opt{nocolortitle} beholfen werden. +% \begin{macrocode} +\TUD@key{colortitle}[true]{% + \TUD@set@ifkey{colortitle}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUDoptions{cdtitle=color}% + \else% + \TUDoptions{cdtitle=true}% + \fi% + \fi% +} +\TUD@key{nocolortitle}[true]{% + \TUD@set@ifkey{nocolortitle}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUDoptions{cdtitle=true}% + \else% + \TUDoptions{cdtitle=color}% + \fi% + \fi% +} +% \end{macrocode} +% \end{option}^^A nocolortitle +% \end{option}^^A colortitle +% \begin{option}{ddcfooter} +% Außer der Option \opt{ddc} gibt es bei der alten \cls{tudbook}-Klasse noch +% den Schlüssel \opt{ddcfooter}. Dieser wird auf die Option \opt{ddcfoot} +% gelegt. +% \begin{macrocode} +\TUD@key{ddcfooter}[true]{% + \TUD@set@ifkey{ddcfooter}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUDoptions{ddcfoot=true}% + \else% + \TUDoptions{ddcfoot=false}% + \fi% + \fi% +} +% \end{macrocode} +% \end{option}^^A ddcfooter +% +% \iffalse +%</option> +%<*body> +% \fi +% +% \begin{macro}{\moreauthor} +% \begin{macro}{\submitdate} +% \begin{macro}{\supervisorII} +% \begin{macro}{\supervisedby} +% \begin{macro}{\supervisedIIby} +% \begin{macro}{\submittedon} +% Es werden weitere Aliasbefehle für die Eingabefelder der \cls{tudbook}-Klasse +% definiert. +% \begin{macrocode} +\newcommand*\moreauthor{\authormore} +\newcommand*\submitdate{\date} +\newcommand*\supervisorII[1]{\g@addto@macro\@supervisor{\and #1}} +\newcommand*\supervisedby[1]{\gdef\supervisorname{#1}} +\newcommand*\supervisedIIby[1]{\gdef\supervisorothername{#1}} +\newcommand*\submittedon[1]{\gdef\datetext{#1}} +% \end{macrocode} +% \end{macro}^^A \submittedon +% \end{macro}^^A \supervisedIIby +% \end{macro}^^A \supervisedby +% \end{macro}^^A \supervisorII +% \end{macro}^^A \submitdate +% \end{macro}^^A \moreauthor +% \begin{macro}{\dissertation} +% Bei der Definition des Typs der Abschlussarbeit mit \cs{dissertation} wird +% die Lokalisierungsvariable \cs{dissertationname} verwendet und die Feldnamen +% angepasst. +% \begin{macrocode} +\newcommand*\dissertation{% + \thesis{\dissertationname}% + \let\supervisorname\refereename% + \let\supervisorothername\refereeothername% +} +% \end{macrocode} +% \end{macro}^^A \dissertation +% \begin{environment}{theglossary} +% \begin{macro}{\glossaryname} +% \begin{macro}{\glossitem} +% Eine rudimentäre Umgebung für ein Glossar. +% \begin{macrocode} +\AtBeginDocument{% + \ifundef{\theglossary}{% + \providecommand*\glossaryname{Glossar}% + \newenvironment{theglossary}[1][]{% + \PackageWarning{tudscrcomp}{% + Using the environment `theglossary' is not\MessageBreak% + recommended. You should rather use an appropriate\MessageBreak% + package such as glossaries% + }% + \let\bibname\glossaryname% + \bib@heading% + #1% + \list{}{% + \setlength\labelsep{\z@}% + \setlength\labelwidth{\z@}% + \setlength\itemindent{-\leftmargin}% + }% + }{\endlist}% + \newcommand\glossitem[1]{\item[] #1\par}% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \glossitem +% \end{macro}^^A \glossaryname +% \end{environment}^^A theglossary +% \begin{macro}{\chapterpage} +% \begin{macro}{\if@tud@comp@chapterpage} +% \begin{macro}{\tud@comp@chapterpage@set} +% \begin{macro}{\tud@comp@chapterpage@unset} +% \begin{macro}{\tud@comp@chapterpage@wrn} +% Die alte \cls{tudbook}-Klasse stellt den Befehl \cs{chapterpage} bereit. +% Mit diesem ist es möglich, das Verhalten der Kapitelseiten~-- welches durch +% die Option \opt{chapterpage} gesteuert wird~-- temporär umzuschalten, also +% statt Kapitelseiten lediglich Überschriften zu setzen und umgekehrt. Dies ist +% typographisch durchaus zu hinterfragen, allerdings sollen die neuen Klassen +% möglichst kompatibel zu der alten sein, weshalb diese Funktionalität trotzdem +% implementiert wird. Der Befehl \cs{chapterpage} setzt den globalen Schalter +% \cs{if@tud@comp@chapterpage}. Der Befehl \cs{tud@comp@chapterpage@set} setzt +% für Kapitel das komplementäre Verhalten zur eigentlich gewählten +% \opt{chapterpage}-Option. Nach dem Setzen der entsprechenden Überschrift +% wird \cs{tud@comp@chapterpage@set} nochmals aufgerufen, das Verhalten auf den +% ursprünglichen Zustand geschaltet und der globale Schalter +% \cs{if@tud@comp@chapterpage} zurückgesetzt. +% \begin{macrocode} +\newif\if@tud@comp@chapterpage +\newcommand*\chapterpage{% + \global\@tud@comp@chapterpagetrue% + \tud@comp@chapterpage@wrn% +} +\newcommand*\tud@comp@chapterpage@set{% + \if@tud@comp@chapterpage% + \if@tud@chapterpage% + \TUDoptions{chapterpage=false}% + \else% + \TUDoptions{chapterpage=true}% + \fi% + \fi% +} +\newcommand*\tud@comp@chapterpage@unset{% + \tud@comp@chapterpage@set% + \global\@tud@comp@chapterpagefalse% +} +% \end{macrocode} +% Da wie bereits beschrieben das Vorgehen äußerst fragwürdig ist, wird bei der +% Verwendung von \cs{chapterpage} zumindest einmalig eine Warnung ausgegeben. +% \begin{macrocode} +\newcommand*\tud@comp@chapterpage@wrn{% + \PackageWarning{tudscrcomp}{% + The command \string\chapterpage\space is not\MessageBreak% + recommended. You should use the same style for\MessageBreak% + chapters throughout the document% + }% + \global\let\tud@comp@chapterpage@wrn\relax% +} +% \end{macrocode} +% \end{macro}^^A \tud@comp@chapterpage@wrn +% \end{macro}^^A \tud@comp@chapterpage@unset +% \end{macro}^^A \tud@comp@chapterpage@set +% \end{macro}^^A \if@tud@comp@chapterpage +% \end{macro}^^A \chapterpage +% \begin{macro}{\tud@chapter@pre} +% \begin{macro}{\tud@chapter@app} +% Hier erfolgt die notwendige Anpassungen der internen Gliederungsbefehle. +% \begin{macrocode} +\AtEndPreamble{% + \if@chapter% + \pretocmd{\tud@chapter@pre}{\tud@comp@chapterpage@set}% + {}{\tud@patch@wrn{tud@chapter@pre}}% + \apptocmd{\tud@chapter@app}{\tud@comp@chapterpage@unset}% + {}{\tud@patch@wrn{tud@chapter@app}}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@chapter@app +% \end{macro}^^A \tud@chapter@pre +% +% +% \iffalse +%</body> +%</book> +%<*poster> +%<*option> +% \fi +% +% \subsection{Kompatibilität zu \cls{tudmathposter}} +% +% Die hier bereitgestellten Optionen und Befehle werden durch die Klasse +% \cls{tudmathposter} bzw. \cls{tudposter} definiert. +% +% \begin{option}{bluebg} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Mit der Option \opt{bluebg} kann der Hintergrund des Posters in \val{HKS41} +% gesetzt werden. +% \begin{macrocode} +\TUD@key{bluebg}[true]{% + \TUD@set@ifkey{bluebg}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \TUDoptions{backcolor=true}% + \else% + \TUDoptions{backcolor=false}% + \fi% + \fi% +} +% \end{macrocode} +% \end{option}^^A bluebg +% +% \iffalse +%</option> +%<*body> +% \fi +% +% \begin{layerpagestyle}{tudposter} +% \changes{v2.05}{2016/07/26}{neu}^^A +% Der Seitenstil \pgs{tudposter} wird als Alias für \pgs{empty.tudheadings} +% definiert. +% \begin{macrocode} +\newcommand*\ps@tudposter{} +\let\ps@tudposter\ps@empty +\AfterPackage*{scrlayer-scrpage}{% + \DeclarePageStyleAlias{tudposter}{empty.tudheadings}% +} +% \end{macrocode} +% \end{layerpagestyle}^^A tudposter +% \begin{macro}{\telefon} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\fax} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\email} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\tud@split@author@list} +% Hier werden alle alten Feldbefehle auf die Pendants von \TUDScript gelegt und +% das Makro \cs{tud@split@author@list} um diese Befehle erweitert. +% \begin{macrocode} +\newrobustcmd*\telefon{\telephone} +\patchcmd{\tud@split@author@list}{telephone}{% + telephone,telefon% +}{}{\tud@patch@wrn{tud@split@author@list}} +\newrobustcmd*\fax{\telefax} +\patchcmd{\tud@split@author@list}{telefax}{% + telefax,fax% +}{}{\tud@patch@wrn{tud@split@author@list}} +\newrobustcmd*\email[1]{\emailaddress*{#1}} +\patchcmd{\tud@split@author@list}{emailaddress}{% + emailaddress,email% +}{}{\tud@patch@wrn{tud@split@author@list}} +% \end{macrocode} +% \end{macro}^^A \tud@split@author@list +% \end{macro}^^A \email +% \end{macro}^^A \fax +% \end{macro}^^A \telefon +% \begin{macro}{\homepage} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Für die Angabe einer Website wird \cs{webpage*} verwendet, um etwaige Makros +% zur Formatierung nicht beachten zu müssen. +% \begin{macrocode} +\newcommand*\homepage[1]{\webpage*{#1}} +% \end{macrocode} +% \end{macro}^^A \homepage +% \begin{macro}{\zweitlogofile} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\zweitlogo} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\institutslogofile} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\institutslogo} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\drittlogofile} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\drittlogo} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Die Makros zur Angabe von Logo-Dateien (\cs{\dots{}logofile}) werden auf die +% passenden \TUDScript-Befehle gelegt. Die Änderung der Makros, welche für die +% Einbindung der Logos verantwortlich sind (\cs{\dots{}logo}), wird allerdings +% nicht unterstützt. +% \begin{macrocode} +\newcommand*\zweitlogofile[2][]{\headlogo[#1]{#2}} +\newcommand*\zweitlogo[1]{% + \PackageWarning{tudscrcomp}{% + It isn't possible to redefine the definition for\MessageBreak% + including a logo in the header. Please see the\MessageBreak% + documentation of \string\headlogo% + }% +} +\newcommand*\institutslogofile[2][]{\footlogo[#1]{,,,,,,,#2,}} +\newcommand*\institutslogo[1]{% + \PackageWarning{tudscrcomp}{% + It isn't possible to redefine the definition for\MessageBreak% + including a logo in the footer. Please see the\MessageBreak% + documentation of \string\footlogo% + }% +} +\newcommand*\drittlogofile[1]{% + \PackageWarning{tudscrcomp}{% + Nothing happened, you should use \string\footlogo\MessageBreak% + instead. Please see the documentation of \string\footlogo\MessageBreak% + and option `ddc' or `ddcfoot'% + }% +} +\newcommand*\drittlogo[1]{% + \PackageWarning{tudscrcomp}{% + It isn't possible to redefine the definition for\MessageBreak% + including a logo in the footer. Please see the\MessageBreak% + documentation of \string\footlogo\space and option\MessageBreak% + `ddc' or `ddcfoot'% + }% +} +% \end{macrocode} +% \end{macro}^^A \drittlogo +% \end{macro}^^A \drittlogofile +% \end{macro}^^A \institutslogo +% \end{macro}^^A \institutslogofile +% \end{macro}^^A \zweitlogo +% \end{macro}^^A \zweitlogofile +% \begin{macro}{\topsection} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{counter}{topsection} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\topsubsection} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{counter}{topsubsection} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Die Klasse \cls{tudmathposter} definiert zusätzliche Gliederungsbefehle, +% welche allerdings völlig willkürliche vertikale Abstände davor und danach +% verwendet. Es besteht keinerlei Ambition, diese genau abzubilden. Falls hier +% tatsächlich ein Anpassungsbedarf besteht, kann dies mit den entsprechenden +% Mitteln von \KOMAScript{} (\cs{RedeclareSectionCommand}) nach dem Laden von +% \pkg{tudscrcomp} erfolgen. +% +% Die neuen Gliederungsbefehle erschließen sich mir ohnehin nicht, wirken eher +% so, als ob diese entstanden sind, weil auf Anwendungsebene etwas nicht so +% funktioniert hat, wie gewollt und statt einer vernünftigen Ursachenforschung +% einfach ein eigenes Konstrukt erschaffen wurde, um unzulängliche Fähigkeiten +% zu umgehen. Sei's drum. Für die Umsetzung werden die Basisgliederungsbefehle +% geklont und anschließend der gewünschte vertikale Abstand vor der Überschrift +% entfernt. +% \ToDo{Klonen Gliederungsebenen über Makro (Markus fragen?!)}[v2.??] +% \begin{macrocode} +\newcommand*\topsectionnumdepth{\sectionnumdepth} +\newcommand*\scr@topsection@sectionindent{\scr@section@sectionindent} +\newcommand*\scr@topsection@beforeskip{\scr@section@beforeskip} +\newcommand*\scr@topsection@afterskip{\scr@section@afterskip} +\newcommand*\topsectiontocdepth{\sectiontocdepth} +\newcommand*\scr@topsection@tocindent{\scr@section@tocindent} +\newcommand*\scr@topsection@tocnumwidth{\scr@section@tocnumwidth} +\newcommand*\l@topsection{\l@section} +\DeclareNewSectionCommand[% + style=section,% + font={\usekomafont{section}},% + beforeskip=\z@,% +]{topsection} +\let\c@topsection\c@section +\newcommand*\topsubsectionnumdepth{\subsectionnumdepth} +\newcommand*\scr@topsubsection@sectionindent{\scr@subsection@sectionindent} +\newcommand*\scr@topsubsection@beforeskip{\scr@subsection@beforeskip} +\newcommand*\scr@topsubsection@afterskip{\scr@subsection@afterskip} +\newcommand*\topsubsectiontocdepth{\subsectiontocdepth} +\newcommand*\scr@topsubsection@tocindent{\scr@subsection@tocindent} +\newcommand*\scr@topsubsection@tocnumwidth{\scr@subsection@tocnumwidth} +\newcommand*\l@topsubsection{\l@subsection} +\DeclareNewSectionCommand[% + style=section,% + font={\usekomafont{subsection}},% + beforeskip=\z@,% +]{topsubsection} +\let\c@topsubsection\c@subsection +% \end{macrocode} +% \end{counter}^^A topsubsection +% \end{macro}^^A \topsubsection +% \end{counter}^^A topsection +% \end{macro}^^A \topsection +% \begin{macro}{\centersection} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\centersubsection} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\topcentersection} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\topcentersubsection} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\tud@comp@centersection} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Weiterhin werden Gliederungsebenen definiert, die unabhängig vom restlichen +% Layout zentriert gesetzt werden. Eine Mischung von unterschiedlichen Stilen +% gleichartiger Ebenen ist aus sicht von Typographie und Layout eher fraglich. +% \begin{macrocode} +\newcommand*\centersection[2][\@nil]{% + \tud@comp@centersection{section}{#1}{#2}% +} +\newcommand*\centersubsection[2][\@nil]{% + \tud@comp@centersection{subsection}{#1}{#2}% +} +\newcommand*\topcentersection[2][\@nil]{% + \tud@comp@centersection{topsection}{#1}{#2}% +} +\newcommand*\topcentersubsection[2][\@nil]{% + \tud@comp@centersection{topsubsection}{#1}{#2}% +} +% \end{macrocode} +% Alle Gliederungsbefehle nutzen die passenden Ebenen mit der standardmaßig +% Ausrichtung und passen kurzfristig \cs{raggedsection} an. Dabei auch darauf +% geachtet, ob das optionale Argument durch den Anwender verwendet wird. +% \begin{macrocode} +\newcommand*\tud@comp@centersection[3]{% + \tud@cs@store{raggedsection}% + \let\raggedsection\centering% + \ifx#2\@nil\relax% + \csuse{#1}{#3}% + \else% + \csuse{#1}[#2]{#3}% + \fi% + \tud@cs@restore{raggedsection}% +} +% \end{macrocode} +% \end{macro}^^A \tud@comp@centersection +% \end{macro}^^A \topcentersubsection +% \end{macro}^^A \topcentersection +% \end{macro}^^A \centersubsection +% \end{macro}^^A \centersection +% \begin{macro}{\sectiontopskip} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\subsectiontopskip} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Die Klasse \cls{tudmathposter} stellt zu den neuen Gliederungsbefehlen noch +% zusätzlich die beiden Makros \cs{sectiontopskip} und \cs{subsectiontopskip} +% bereit. Diese werden in darin bei der Definition dieser Gliederungsebenen +% verwendet. Da die \TUDScript-Klassen den Ansatz verfolgen, dem Benutzer +% weitestgehende Freiheiten bei der Gestaltung des Layouts einzuräumen, werden +% diese an die Einstellungen der zentralen \KOMAScript"=Benutzerschnittstelle +% gekoppelt. +% \begin{macrocode} +\newcommand\sectiontopskip{\scr@section@beforeskip} +\newcommand\subsectiontopskip{\scr@subsection@beforeskip} +% \end{macrocode} +% \end{macro}^^A \subsectiontopskip +% \end{macro}^^A \sectiontopskip +% \begin{counter}{secnumdepth} +% Standardmäßig wird die Nummerierung aller Gliederungsebenen deaktiviert. +% \begin{macrocode} +\setcounter{secnumdepth}{\m@ne} +% \end{macrocode} +% \end{counter}^^A secnumdepth +% \begin{macro}{\fusszeile} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\footcolumn} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Mit diesen Befehlen lässt sich der Inhalt des Fußbereiches angepassen. Wird +% in einem und/oder beiden Argumente von \cs{footcontent} ein Stern \val{*} +% verwendet, so bleibt der bisherige Inhalt erhalten. +% \begin{macrocode} +\newcommand*\fusszeile[2][]{\footcontent[#1]{#2}} +\newcommand*\footcolumn[2]{% + \ifnumber{#1}{% + \ifcase#1\relax% + \footcontent{#2}% + \or% + \footcontent{#2}[*]% + \or% + \footcontent{*}[#2]% + \fi% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \footcolumn +% \end{macro}^^A \fusszeile +% +% \iffalse +%</body> +%<*option> +% \fi +% +% \begin{option}{tudmathposterfoot} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\if@tud@mathposterfoot} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Mit der Option \opt{tudmathposterfoot} kann die Darstellung des Fußes im +% Poster angepasst werden. Die Klasse \cls{tudmathposter} setzt den Fußbereich +% in zwei asymmetrischen Spalten, wohingegen die \TUDScript-Klassen diesen +% zentriert und symmetrisch zum Satzspiegel platzieren. +% \begin{macrocode} +\newif\if@tud@mathposterfoot +\TUD@key{tudmathposterfoot}[true]{% + \TUD@set@ifkey{tudmathposterfoot}{@tud@mathposterfoot}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tud@mathposterfoot% + \footcontent[\small]{% + \tud@footcontent@@left{}% + }[% + \tud@footcontent@@right{}{}% + ]% + \else% + \footcontent{% + \tud@footcontent@@left{\contactname}% + }[% + \tud@footcontent@@right{\authorname}{\contactpersonname}% + ]% + \fi% + \fi% +} +% \end{macrocode} +% Die Option \opt{cdfoot} wird um Werte für die Einstellung des Posterfußes +% erweitert. +% \begin{macrocode} +\TUD@key{cdfoot}[true]{% + \TUD@set@numkey{cdfoot}{@tempa}{% + {tudscrposter}{0},{tudscrposterfoot}{0},{cdposter}{0},{poster}{0},% + {tudmathposter}{1},{tudmathposterfoot}{1},{mathposter}{1},{tudposter}{1}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% tudscrposter + \TUDoptions{tudmathposterfoot=false}% + \else% tudmathposter + \TUDoptions{tudmathposterfoot=true}% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@mathposterfoot +% \end{option}^^A tudmathposterfoot +% +% \iffalse +%</option> +%<*body> +% \fi +% +% \begin{macro}{\tud@footcontent@use} +% \begin{macro}{\tud@comp@mathposterwidth} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Um die Option \opt{tudmathposterfoot} umzusetzen, muss für die Ausgabe des +% Fußbereichs eine Anpassung des Makros \cs{tud@footcontent@use} erfolgen. +% Normalerweise wird der Fußbereich in zwei gleichbreite Spalten über die +% komplette Textbreite aufgeteilt. Dahingegen werden durch die Klasse +% \cls{tudmathposter} beide Fußspalten nicht über den kompletten Textbereich +% verteilt, sondern es verbleibt etwas ungenutzter Platz rechts davon, welcher +% für ein etwaiges Logo verwendet wird. Dieses Verhalten kann über die Option +% \opt{tudmathposterfoot} aktiviert werden und wird hier nachgebildet. +% \begin{macrocode} +\newcommand*\tud@comp@mathposterwidth{4.2\tud@len@widemargin} +\patchcmd{\tud@footcontent@use}{% + \hsize=\dimexpr#2-\@tempdimc\relax% +}{% + \if@tud@mathposterfoot% + \hsize=\dimexpr\tud@comp@mathposterwidth\relax% + \else% + \hsize=\dimexpr#2-\@tempdimc\relax% + \fi% +}{}{\tud@patch@wrn{tud@footcontent@use}} +\patchcmd{\tud@footcontent@use}{% + \hsize=\dimexpr(#2-\columnsep)/2\relax% +}{% + \if@tud@mathposterfoot% + \hsize=\dimexpr(\tud@comp@mathposterwidth-\columnsep)/2\relax% + \else% + \hsize=\dimexpr(#2-\columnsep)/2\relax% + \fi% +}{}{\tud@patch@wrn{tud@footcontent@use}} +\patchcmd{\tud@footcontent@use}{% + \hsize=\dimexpr(#2-\columnsep)/2-\@tempdimc\relax% +}{% + \if@tud@mathposterfoot% + \hsize=\dimexpr(\tud@comp@mathposterwidth-\columnsep)/2\relax% + \else% + \hsize=\dimexpr(#2-\columnsep)/2-\@tempdimc\relax% + \fi% +}{}{\tud@patch@wrn{tud@footcontent@use}} +% \end{macrocode} +% \end{macro}^^A \tud@comp@mathposterwidth +% \end{macro}^^A \tud@footcontent@use +% \begin{environment}{figurehere} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{environment}{tablehere} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Weiterhin stellt die Klasse \cls{tudmathposter} zwei Umgebungen bereit, mit +% denen sich Tabellen und Bilder an einer bestimmten Stelle exakt platzieren +% lassen. Prinzipiell könnte hierfür auch das Paket \pkg{float} zum Einsatz +% kommen. +% \ToDo{Für \cls{tudscrposter} übernehmen?}[v2.07] +% \begin{macrocode} +\newenvironment{figurehere}{% + \def\@captype{figure}% + \renewcommand*\caption{\captionof{figure}}% + \renewcommand*\captionabove{\captionaboveof{figure}}% + \renewcommand*\captionbelow{\captionbelowof{figure}}% + \vskip\intextsep% + \vbox \bgroup% + \hsize=\columnwidth% + \@parboxrestore% + \ignorespaces% +}{% + \egroup% + \vskip\intextsep% + \ignorespaces% +} +\newenvironment{tablehere}{% + \def\@captype{table}% + \renewcommand*\caption{\captionof{table}}% + \renewcommand*\captionabove{\captionaboveof{table}}% + \renewcommand*\captionbelow{\captionbelowof{table}}% + \vskip\intextsep% + \vbox \bgroup% + \hsize=\columnwidth% + \@parboxrestore% + \ignorespaces% +}{% + \egroup% + \vskip\intextsep% + \ignorespaces% +} +% \end{macrocode} +% \end{environment}^^A tablehere +% \end{environment}^^A figurehere +% \begin{environment}{farbtabellen} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\if@tud@comp@graytable} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\blautabelle} +% \changes{v2.05}{2016/04/17}{neu}^^A +% \begin{macro}{\grautabelle} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Außerdem wird eine Umgebung für farbige Tabellen sowie zwei Umschaltbefehle +% für die farbliche Ausprägung der Tabellenzeilen definiert. +% \begin{macrocode} +\PassOptionsToPackage{table}{xcolor} +\newif\if@tud@comp@graytable +\newcommand*\blautabelle{\@tud@comp@graytablefalse} +\newcommand*\grautabelle{\@tud@comp@graytabletrue} +\newenvironment{farbtabellen}{% + \if@tud@comp@graytable% + \rowcolors{1}{HKS92!20}{HKS92!10}% + \else% + \rowcolors{1}{HKS41!20}{HKS41!10}% + \fi% +}{} +% \end{macrocode} +% \end{macro}^^A \grautabelle +% \end{macro}^^A \blautabelle +% \end{macro}^^A \if@tud@comp@graytable +% \end{environment}^^A farbtabellen +% \begin{macro}{\schnittrand} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Zu guter Letzt geht es an das Makro \cs{schnittrand}. Zur Intension dieses +% Befehls gab es auf \hrfn{https://github.com/tud-cd/tud-cd/issues/6}{GitHub} +% bereits eine angeregte Diskussion. Deshalb wird das Makro als Wertzuweisung +% für die Option \opt{bleedmargin} genutzt. +% \ToDo{Für \cls{tudscrposter} übernehmen?}[v2.07] +% \begin{macrocode} +\ifundef{\schnittrand}{}{% + \ifisdimension{\schnittrand}{% + \edef\@tempa{% + paperwidth=\the\dimexpr\paperwidth+\schnittrand*2\relax,% + paperheight=\the\dimexpr\paperheight+\schnittrand*2\relax,% + layout=\the\paperwidth:\the\paperheight,% + layoutoffset=\the\dimexpr\schnittrand\relax,% + showcrop% + }% + \expandafter\geometry\expandafter{\@tempa}% + }{% + \PackageErrorNoLine{tudscrcomp}{% + Wrong definition for `\string\schnittrand'% + }{% + The definition of `\string\schnittrand' does not expand to\MessageBreak% + a valid dimension expression.% + }% + }% +}% +% \end{macrocode} +% \end{macro}^^A \schnittrand +% +% Die Klasse \cls{tudmathposter} lädt allerhand Pakete. Dies ist jedoch für den +% Anwender alles andere als vorteilhaft, da dadurch unter Umständen Konflikte +% mit anderen Paketen entstehen oder der Nutzer im Zweifelsfall gar nicht weiß, +% dass verwendete Befehle aus bestimmten Paketen entspringen. Dennoch werden +% aus Kompatibilitätsgründen einige Pakete geladen, um bestehende Dokumente +% trotz alledem nach der Portierung kompiliert werden können. Um den Nutzer die +% Möglichkeit zu geben, die Pakete selber ggf. mit Optionen zu laden, erfolgt +% die Anforderung der Pakete erst am ende der Präambel. +% \begin{macrocode} +\AtEndPreamble{% + \RequirePackage{amsmath}[2016/06/28]% + \RequirePackage{amsfonts}[2013/01/14]% + \RequirePackage{calc}[2014/10/28]% + \RequirePackage{textcomp}[2016/06/19]% + \RequirePackage{tabularx}[2016/02/03]% +} +% \end{macrocode} +% +% \iffalse +%</body> +%</poster> +%</!base> +%</package&comp> +% \fi +% +% \section{Das Paket \pkg{fix-tudscrfonts} -- Schriften für alte TUD-Klassen} +% +% \changes{v2.05}{2015/12/08}{\pkg{fix-tudscrfonts}: Dieses Paket übernimmt die +% Bereitstellung der Schriften für veraltete Klassen}^^A +% +% Das Paket \pkg{fix-tudscrfonts} bietet die Schriftfamilien des \TUDCDs im +% \TUDScript-Stil für die \enquote{veralteten} Klassen von Klaus Bergmann sowie +% die Posterklassen an. +% +% \iffalse +%<*package&fixfonts> +%<*body> +% \fi +% +% Das Paket \pkg{tudscrfonts} wird am Ende der Präambel geladen, falls dies +% zuvor nicht durch den Anwender geschieht. +% \begin{macrocode} +\AtEndPreamble{% + \tud@fixfonts@class@check% + \RequirePackage{tudscrfonts}[\TUD@Version]% +} +% \end{macrocode} +% +% \subsection{Verwendbarkeit und Ladezeitpunkt von \pkg{fix-tudscrfonts}} +% +% Da das Paket eine Vielzahl an Anpassungen der Schriftbefehle vornimmt sowie +% die Definition von \LaTeXe-Standardbefehlen bereits vor dem Laden der +% eigentlichen Dokumentklasse sichern muss, kann dieses Paket ausschließlich +% vor \cs{documentclass} mit \cs{RequirePackage} geladen werden. +% +% \begin{macro}{\tud@fixfonts@class@check} +% \changes{v2.05}{2016/01/02}{neu}^^A +% Dieser Befehl wird nach dem Laden einer unterstützten Klasse zu \cs{relax} +% gesetzt. Sollte das Paket jedoch erst nach einer Dokumentklasse geladen +% werden, so wird ein Fehler ausgegeben. +% \begin{macrocode} +\ifx\usepackage\RequirePackage + \newcommand*\tud@fixfonts@class@check{% + \PackageError{fix-tudscrfonts}{Package too late}{% + You must load `fix-tudscrfonts' with\MessageBreak% + `\string\RequirePackage' before any document class.% + }% + }% +% \end{macrocode} +% Wird das Paket mit einer nicht unterstützten Dokumentklasse verwendet, wird +% ebenfalls ein Fehler ausgegeben. +% \begin{macrocode} +\else + \newcommand*\tud@fixfonts@class@check{% + \PackageError{fix-tudscrfonts}{Unsupported class found}{% + You have to use `fix-tudscrfonts' only\MessageBreak% + with supported classes. These are: `tudbook',\MessageBreak% + `tudbeamer', `tudfax', `tudform', `tudhaus',\MessageBreak% + and `tudletter' as well as `tudposter'\MessageBreak% + and `tudmathposter'. Otherwise it's adequate\MessageBreak% + to use package `tudscrfonts' as usual.% + }% + }% +\fi +% \end{macrocode} +% \end{macro}^^A \tud@fixfonts@class@check +% +% \subsection{Patches für die unterstützten Klassen} +% +% Für alle unterstützten Klassen sind vor und nach dem Laden einige Anpassungen +% an den bereitgestellten Schriftbefehlen notwendig. +% +% \begin{macro}{\tud@fixfonts@class@adapt} +% \changes{v2.05}{2016/01/02}{neu}^^A +% \begin{macro}{\dinBold} +% \changes{v2.05}{2015/07/13}{neu}^^A +% \begin{macro}{\dinfamily} +% \changes{v2.05}{2015/07/13}{neu}^^A +% \begin{macro}{\univLightVII} +% \begin{macro}{\univLightObliqueVII} +% \begin{macro}{\univBoldVII} +% \begin{macro}{\univLightIX} +% \begin{macro}{\univLightObliqueIX} +% \begin{macro}{\univBoldIX} +% \begin{macro}{\univLightXI} +% \begin{macro}{\univLightObliqueXI} +% \begin{macro}{\univBoldXI} +% \begin{macro}{\univLightXV} +% \begin{macro}{\univLightObliqueXV} +% \begin{macro}{\univBoldXV} +% \begin{macro}{\univLightHead} +% \begin{macro}{\univBoldHead} +% \begin{macro}{\tud@head@fontsize} +% Mit diesen beiden Befehlen werden vor dem Laden der alten Klassen einige +% Befehle gesichert und die benötigten Optionen gesetzt. Nach dem Laden der +% jeweiligen Klasse werden die gesicherten Makrodefinitionen wiederhergestellt +% und einige Schriftdefinitionen angepasst. Bei den alten TUD-Klassen betrifft +% dies in erster Linie die Mathematikschriften sowie die in den Klassen +% definierten, fixen Schriften. +% \begin{macrocode} +\newcommand*\tud@fixfonts@class@adapt[2]{% + \BeforeClass{#1}{% + \let\tud@fixfonts@class@check\relax% + \tud@cs@store{DeclareFixedFont}% + \renewcommand*\DeclareFixedFont[6]{}% + \tud@cs@store{rmdefault}% + \tud@cs@store{sfdefault}% + \tud@cs@store{ttdefault}% + \tud@cs@store{bfdefault}% + \tud@cs@store{mddefault}% + \tud@cs@store{itdefault}% + \tud@cs@store{sldefault}% + \tud@cs@store{scdefault}% + \tud@cs@store{updefault}% + \tud@cs@store{rmfamily}% + \tud@cs@store{sffamily}% + \tud@cs@store{ttfamily}% + \tud@cs@store{familydefault}% + \tud@cs@store{seriesdefault}% + \tud@cs@store{shapedefault}% + \tud@cs@store{normalfont}% + \let\normalfont\relax% + \PassOptionsToClass{serifmath}{#1}% + }% + \AfterClass{#1}{% + \tud@cs@restore{DeclareFixedFont}% + \tud@cs@restore{rmdefault}% + \tud@cs@restore{sfdefault}% + \tud@cs@restore{ttdefault}% + \tud@cs@restore{bfdefault}% + \tud@cs@restore{mddefault}% + \tud@cs@restore{itdefault}% + \tud@cs@restore{sldefault}% + \tud@cs@restore{scdefault}% + \tud@cs@restore{updefault}% + \tud@cs@restore{rmfamily}% + \tud@cs@restore{sffamily}% + \tud@cs@restore{ttfamily}% + \tud@cs@restore{familydefault}% + \tud@cs@restore{seriesdefault}% + \tud@cs@restore{shapedefault}% + \tud@cs@restore{normalfont}% + #2% + \AfterPackage{tudscrfonts}{% + \def\dinBold{\dinbn}% + \def\dinfamily{\dinbn}% + \AtBeginDocument{% + \newcommand*\univLightVII{}% + \newcommand*\univLightObliqueVII{}% + \newcommand*\univBoldVII{}% + \newcommand*\univLightIX{}% + \newcommand*\univLightObliqueIX{}% + \newcommand*\univBoldIX{}% + \newcommand*\univLightXI{}% + \newcommand*\univLightObliqueXI{}% + \newcommand*\univBoldXI{}% + \newcommand*\univLightXV{}% + \newcommand*\univLightObliqueXV{}% + \newcommand*\univBoldXV{}% + \newcommand*\univLightHead{}% + \newcommand*\univBoldHead{}% + \providecommand*\tud@head@fontsize{9}% + \if@tud@cdfont@fam@exist% + \DeclareFixedFont{\univLightVII}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{n}{7}% + \DeclareFixedFont{\univLightObliqueVII}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{sl}{7}% + \DeclareFixedFont{\univBoldVII}{\encodingdefault}% + {\tud@cdfont@fam@lf}{b}{n}{7}% + \DeclareFixedFont{\univLightIX}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{n}{9}% + \DeclareFixedFont{\univLightObliqueIX}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{sl}{9}% + \DeclareFixedFont{\univBoldIX}{\encodingdefault}% + {\tud@cdfont@fam@lf}{b}{n}{9}% + \DeclareFixedFont{\univLightXI}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{n}{11}% + \DeclareFixedFont{\univLightObliqueXI}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{sl}{11}% + \DeclareFixedFont{\univBoldXI}{\encodingdefault}% + {\tud@cdfont@fam@lf}{b}{n}{11}% + \DeclareFixedFont{\univLightXV}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{n}{15}% + \DeclareFixedFont{\univLightObliqueXV}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{sl}{15}% + \DeclareFixedFont{\univBoldXV}{\encodingdefault}% + {\tud@cdfont@fam@lf}{b}{n}{15}% + \DeclareFixedFont{\univLightHead}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{n}{\tud@head@fontsize}% + \DeclareFixedFont{\univBoldHead}{\encodingdefault}% + {\tud@cdfont@fam@lf}{b}{n}{\tud@head@fontsize}% + \else% + \DeclareFixedFont{\univLightVII}{\encodingdefault}% + {\sfdefault}{\mddefault}{\updefault}{7}% + \DeclareFixedFont{\univLightObliqueVII}{\encodingdefault}% + {\sfdefault}{\mddefault}{\sldefault}{7}% + \DeclareFixedFont{\univBoldVII}{\encodingdefault}% + {\sfdefault}{\bfdefault}{\updefault}{7}% + \DeclareFixedFont{\univLightIX}{\encodingdefault}% + {\sfdefault}{\mddefault}{\updefault}{9}% + \DeclareFixedFont{\univLightObliqueIX}{\encodingdefault}% + {\sfdefault}{\mddefault}{\sldefault}{9}% + \DeclareFixedFont{\univBoldIX}{\encodingdefault}% + {\sfdefault}{\bfdefault}{\updefault}{9}% + \DeclareFixedFont{\univLightXI}{\encodingdefault}% + {\sfdefault}{\mddefault}{\updefault}{11}% + \DeclareFixedFont{\univLightObliqueXI}{\encodingdefault}% + {\sfdefault}{\mddefault}{\sldefault}{11}% + \DeclareFixedFont{\univBoldXI}{\encodingdefault}% + {\sfdefault}{\bfdefault}{\updefault}{11}% + \DeclareFixedFont{\univLightXV}{\encodingdefault}% + {\sfdefault}{\mddefault}{\updefault}{15}% + \DeclareFixedFont{\univLightObliqueXV}{\encodingdefault}% + {\sfdefault}{\mddefault}{\sldefault}{15}% + \DeclareFixedFont{\univBoldXV}{\encodingdefault}% + {\sfdefault}{\bfdefault}{\updefault}{15}% + \DeclareFixedFont{\univLightHead}{\encodingdefault}% + {\sfdefault}{\mddefault}{\updefault}{\tud@head@fontsize}% + \DeclareFixedFont{\univBoldHead}{\encodingdefault}% + {\sfdefault}{\bfdefault}{\updefault}{\tud@head@fontsize}% + \fi% + }% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@head@fontsize +% \end{macro}^^A \univBoldHead +% \end{macro}^^A \univLightHead +% \end{macro}^^A \univBoldXV +% \end{macro}^^A \univLightObliqueXV +% \end{macro}^^A \univLightXV +% \end{macro}^^A \univBoldXI +% \end{macro}^^A \univLightObliqueXI +% \end{macro}^^A \univLightXI +% \end{macro}^^A \univBoldIX +% \end{macro}^^A \univLightObliqueIX +% \end{macro}^^A \univLightIX +% \end{macro}^^A \univBoldVII +% \end{macro}^^A \univLightObliqueVII +% \end{macro}^^A \univLightVII +% \end{macro}^^A \dinfamily +% \end{macro}^^A \dinBold +% \end{macro}^^A \tud@fixfonts@class@adapt +% +% Nach der Definition der notwendigen Befehle erfolgt nun die Umsetzung für +% alle unterstützten Klassen. +% \begin{macrocode} +\tud@fixfonts@class@adapt{tudletter}{} +\tud@fixfonts@class@adapt{tudfax}{} +\tud@fixfonts@class@adapt{tudform}{} +\tud@fixfonts@class@adapt{tudhaus}{} +\tud@fixfonts@class@adapt{tudposter}{} +\tud@fixfonts@class@adapt{tudbeamer}{} +% \end{macrocode} +% +% Wird das Paket \pkg{fix-tudscrfonts} mit den alten TUD-Klassen \cls{tudbook}, +% \cls{tudmathposter} etc. oder \TUDScript in der Version~v1.0 verwendet, +% müssen einige Kompatibilitätseinstellungen vorgenmommen werden. Hierfür sind +% wenige Patches notwendig. +% +% \subsection{Spezielle Patches für die Klasse \cls{tudbook}} +% +% Die notwendigen Anpassungen der Klasse \cls{tudbook} betreffen die +% Schriftauswahl bei Überschriften. +% +% \begin{macro}{\@makechapterhead} +% \begin{macro}{\@makeschapterhead} +% \begin{macro}{\section} +% \begin{macro}{\showtitle} +% Die Überschriften sollen abhängig von der Option \opt{cdfont} und nicht immer +% zwingend in \DIN gesetzt werden. +% \begin{macrocode} +\tud@fixfonts@class@adapt{tudbook}{% + \patchcmd{\@makechapterhead}{\dinBold\Huge\bfseries}{% + \tud@sec@fontface% + \if@color\color{HKS41-100}\fi% + \Huge% + }{}{\tud@patch@wrn{@makechapterhead}}% + \patchcmd{\@makechapterhead}{\MakeUppercase}{% + \tud@sec@format% + }{}{\tud@patch@wrn{@makechapterhead}}% + \patchcmd{\@makeschapterhead}{\dinBold\Huge\bfseries}{% + \tud@sec@fontface% + \if@color\color{HKS41-100}\fi% + \Huge% + }{}{\tud@patch@wrn{@makeschapterhead}}% + \patchcmd{\@makeschapterhead}{\MakeUppercase}{% + \tud@sec@format% + }{}{\tud@patch@wrn{@makeschapterhead}}% + \patchcmd{\section}{\dinBold\Large\bfseries\MakeUppercase}{% + \tud@sec@fontface% + \if@color\color{HKS41-100}\fi% + \Large% + \tud@sec@format% + }{}{\tud@patch@wrn{section}}% + \patchcmd{\showtitle}{\dinBold\Huge\bfseries\MakeUppercase}{% + \tud@sec@fontface% + \if@colortitle\color{HKS41-30}\fi% + \Huge% + \tud@sec@format% + }{}{\tud@patch@wrn{showtitle}}% +} +% \end{macrocode} +% \end{macro}^^A \showtitle +% \end{macro}^^A \section +% \end{macro}^^A \@makeschapterhead +% \end{macro}^^A \@makechapterhead +% +% \subsection{Spezielle Patches für die Klasse \cls{tudmathposter}} +% +% Auch für die Posterklasse \cls{tudmathposter} sowie das Paket \pkg{tudfonts} +% sind kleine Anpassungen notwendig. +% +% \begin{KOMAfont}{title} +% \changes{v2.04}{2015/04/24}{\cls{tudmathposter} wird unterstützt}^^A +% \begin{macro}{\maketitle} +% \changes{v2.04}{2015/04/24}{\cls{tudmathposter} wird unterstützt}^^A +% \begin{macro}{\subtitlefont} +% \changes{v2.04}{2015/04/24}{\cls{tudmathposter} wird unterstützt}^^A +% \begin{macro}{\preprocesstitle} +% \changes{v2.04}{2015/04/24}{\cls{tudmathposter} wird unterstützt}^^A +% \begin{macro}{\sectionfont} +% \changes{v2.04}{2015/04/24}{\cls{tudmathposter} wird unterstützt}^^A +% \begin{macro}{\subsectionfont} +% \changes{v2.04}{2015/04/24}{\cls{tudmathposter} wird unterstützt}^^A +% \begin{macro}{\ps@tudposter} +% \changes{v2.04}{2015/04/24}{\cls{tudmathposter} wird unterstützt}^^A +% Es werden einige Einstellungen für die Überschriften angepasst. +% \begin{macrocode} +\tud@fixfonts@class@adapt{tudmathposter}{% + \def\raggedtitle{\tud@raggedright}% + \renewcommand*\raggedpart{\tud@raggedright}% + \renewcommand*\raggedsection{\tud@raggedright}% + \setkomafont{title}{\tud@sec@fontface\Huge}% + \CheckCommand\maketitle{% + \if@matheanull + \setlength\@tempskipa{31.194586mm-\topsep}% + \else + \setlength\@tempskipa{33.02mm-\topskip}% + \fi + \vskip\@tempskipa + {% + \ifx\@title\@empty\else + \usekomafont{title}\preprocesstitle{\@title}% + \ifx\@subtitle\@empty\else\\\fi + \fi + }{ + \ifx\@subtitle\@empty\else + \subtitlefont\preprocesstitle{\@subtitle}% + \fi + \if@matheanull + \vskip 2.9948cm\relax + \else + \vskip 3.17cm\relax + \fi + }% + }% + \apptocmd{\maketitle}{\vspace{-6ex}}{}{\tud@patch@wrn{maketitle}}% + \renewcommand*\subtitlefont{% + \unskip% + \tud@sec@fontface% + \huge% + }% + \renewcommand*\preprocesstitle[1]{\raggedtitle\tud@sec@format{#1}}% + \if@mathevorgabe% + \undef\sectionfont% + \undef\subsectionfont% + \fi% + \newcommand*\sectionfont{\bfseries\LARGE}% + \newcommand*\subsectionfont{\sectionfont\large}% +% \end{macrocode} +% Für die Schriftstärke in der Kopfzeile muss der Seitenstil angepasst und +% anschließend nochmals akiviert werden. +% \begin{macrocode} + \patchcmd{\ps@tudposter}{\textbf{\@einrichtung}}{% + \textbf{\fontseries{b}\selectfont\@einrichtung}% + }{}{\tud@patch@wrn{ps@tudposter}}% + \pagestyle{tudposter}% +} +% \end{macrocode} +% \end{macro}^^A \ps@tudposter +% \end{macro}^^A \subsectionfont +% \end{macro}^^A \sectionfont +% \end{macro}^^A \preprocesstitle +% \end{macro}^^A \subtitlefont +% \end{macro}^^A \maketitle +% \end{KOMAfont}^^A title +% +% \begin{macro}{\tud@x@tudfonts@prevent} +% \changes{v2.06}{2018/02/14}{% +% neu, nur einmaliges Ausführen des Fixes für \pkg{tudfonts}% +% }^^A +% \begin{macro}{\if@tudfonts@nodin} +% \changes{v2.04}{2015/04/24}{\cls{tudmathposter} wird unterstützt}^^A +% Die Klasse \cls{tudmathposter} lädt für die Einstellungen der Schriften das +% Paket \pkg{tudfonts}. Wenn \pkg{tudscrfonts} zum Einsatz kommen soll, ist das +% unerwünscht, weshalb das Laden hiermit unterbunden wird. +% \begin{macrocode} +\newcommand*\tud@x@tudfonts@prevent{% + \RequirePackage{amsmath}% + \RequirePackage{amsfonts}% + \newif\if@tudfonts@nodin% + \let\DeclareTudMathSizes\@gobblefour% + \let\tud@x@tudfonts@prevent\relax% +} +\PreventPackageFromLoading[\tud@x@tudfonts@prevent]{tudfonts} +% \end{macrocode} +% \end{macro}^^A \if@tudfonts@nodin +% \end{macro}^^A \tud@x@tudfonts@prevent +% +% \iffalse +%</body> +%</package&fixfonts> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-doc.dtx b/macros/latex/contrib/tudscr/source/tudscr-doc.dtx new file mode 100644 index 0000000000..ef3754d43a --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-doc.dtx @@ -0,0 +1,1598 @@ +% \CheckSum{2094} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-doc.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-doc.dtx}[2019/07/18 v2.06c TUD-Script\space% + (source code documentation based on scrartcl/scrdoc)% +] +% +% \iffalse +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-doc.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.03}{2015/01/09}{\cls{tudscrdoc}: Indextyp Seitenstilebene}^^A +% \changes{v2.05}{2016/04/21}{Verwendung von \app{texindy} möglich}^^A +% +% \section{Die Klasse \cls{tudscrdoc} -- Erweiterte Quelltextdokumentation} +% +% Mit dieser Klasse erfolgt die Quelltextdokumentation des \TUDScript-Bundles. +% Sie lädt standarmäßig die Klasse \cls{ltxdoc}, ersetzt allerdings im Stile +% von \cls{scrdoc} im Hintergrund \cls{article} durch \cls{scrartcl}. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*class&option> +% \fi +% +% Damit der zu \cls{scrartcl} gehörige Titel genutzt werden kann, wird dieser +% temporär gesichert. +% \begin{macrocode} +\newcommand*\scr@maketitle{}% +\PassOptionsToClass{toc=left,fontsize=10pt}{scrartcl}% +\AfterClass{scrartcl}{\let\scr@maketitle\@maketitle}% +% \end{macrocode} +% Der folgende Quelltext ist 1:1 aus \cls{scrdoc} kopiert. +% \begin{macrocode} +\newcommand*\sd@saved@LoadClass{} +\let\sd@saved@LoadClass=\LoadClass +\renewcommand*\LoadClass[2][]{% + \begingroup% + \edef\@tempc{#2}\def\@tempb{article}% + \ifx\@tempc\@tempb% + \let\LoadClass\sd@saved@LoadClass% + \def\@tempc{scrartcl}% + \fi% + \edef\@tempc{% + \noexpand\endgroup\noexpand\sd@saved@LoadClass[{#1}]{\@tempc}}% + \@tempc% +} +\newcommand*\sd@saved@PassOptionsToClass{} +\let\sd@saved@PassOptionsToClass=\PassOptionsToClass +\renewcommand*\PassOptionsToClass[2]{% + \begingroup% + \edef\@tempc{#2}\def\@tempb{article}% + \ifx\@tempc\@tempb% + \def\@tempc{scrartcl}% + \fi% + \edef\@tempc{% + \noexpand\endgroup\noexpand\sd@saved@PassOptionsToClass{#1}{% + \@tempc}}% + \@tempc% +} +\LoadClassWithOptions{ltxdoc}[2015/03/26] +\setcounter{IndexColumns}{2} +\setcounter{StandardModuleDepth}{2} +% \end{macrocode} +% +% \subsection{Klassenoptionen} +% +% \begin{option}{final} +% \begin{macro}{\tudfinalflag} +% Option bzw. Flag für das automatisierte Erzeugen der Quelltextdokumentation +% mit einem Skript ohne ToDo-Befehle. +% \begin{macrocode} +\DeclareOption{final}{\let\tudfinalflag\relax} +% \end{macrocode} +% \end{macro}^^A \tudfinalflag +% \end{option}^^A final +% \begin{option}{texindy} +% \changes{v2.05}{2016/04/21}{neu}^^A +% \begin{option}{xindy} +% \changes{v2.05}{2016/04/21}{neu}^^A +% \begin{option}{xdy} +% \changes{v2.05}{2016/04/21}{neu}^^A +% \begin{macro}{\tudxdyflag} +% \changes{v2.05}{2016/04/21}{neu}^^A +% Option(en) für das Erstellen der Indexdateien im Stil von \app{texindy}. +% \begin{macrocode} +\DeclareOption{texindy}{\let\tudxdyflag\relax} +\DeclareOption{xindy}{\let\tudxdyflag\relax} +\DeclareOption{xdy}{\let\tudxdyflag\relax} +% \end{macrocode} +% \end{macro}^^A \tudxdyflag +% \end{option}^^A xdy +% \end{option}^^A xindy +% \end{option}^^A texindy +% Die beiden Optionen werden abgearbeitet +% \begin{macrocode} +\ProcessOptions\relax +% \end{macrocode} +% +% \subsection{Ignorierte Makros bei der Nutzung von zusätzlichen Indexeinträgen} +% +% Befehle, welche bei der Verwendung von \cs{EnableCrossrefs} dennoch nicht im +% Index erscheinen sollen. +% +% \begin{macro}{\DisableCrossrefsForced} +% \changes{v2.05i}{2017/03/02}{neu}^^A +% Deaktivieren von Makroeinträgen im Index nach der Verwendung von +% \cs{EnableCrossrefs}. Sollte in einer Gruppe genutzt werden! +% \begin{macrocode} +\newcommand*\DisableCrossrefsForced{} +\let\DisableCrossrefsForced\DisableCrossrefs +% \end{macrocode} +% \end{macro}^^A \DisableCrossrefsForced +% +% \begingroup% +% \DisableCrossrefsForced% +% \begin{macrocode} +%^^A\DoNotIndex{\ ,\",\.,\@,\\,\{,\}} +%^^A\DoNotIndex{\@abstrtfalse,\@abstrttrue,\@addtoreset} +%^^A\DoNotIndex{\@afterheading,\@afterindentfalse} +%^^A\DoNotIndex{\@Alph,\@alph,\@arabic} +%^^A\DoNotIndex{\@beginparpenalty} +%^^A\DoNotIndex{\@car,\@cdr,\@centercr} +%^^A\DoNotIndex{\@dblfloat,\@dotsep,\@dottedtocline} +%^^A\DoNotIndex{\@empty,\@endparpenalty} +%^^A\DoNotIndex{\@float,\@fontswitch} +%^^A\DoNotIndex{\@gobbletwo} +%^^A\DoNotIndex{\@hangfrom,\@highpenalty} +%^^A\DoNotIndex{\@ifnextchar,\@ifundefined,\@itempenalty} +%^^A\DoNotIndex{\@latex@warning} +%^^A\DoNotIndex{\@M,\@m,\@medpenalty,\@minus,\@mkboth} +%^^A\DoNotIndex{\@mparswitchfalse,\@mparswitchtrue} +%^^A\DoNotIndex{\@ne,\@nil,\@nobreakfalse,\@nobreaktrue,\@nomath} +%^^A\DoNotIndex{\@plus} +%^^A\DoNotIndex{\@Roman,\@roman} +%^^A\DoNotIndex{\@tempa,\@tempb,\@tempc} +%^^A\DoNotIndex{\@tempcnta,\@tempcntb,\@tempcntc} +%^^A\DoNotIndex{\@tempdima,\@tempdimb,\@tempdimc} +%^^A\DoNotIndex{\@tempskipka,\@tempskipkb,\@tempskipkc} +%^^A\DoNotIndex{\@tempswafalse,\@tempswatrue,\@tempswbfalse,\@tempswbtrue} +%^^A\DoNotIndex{\@tocrmarg,\@topnewpage,\@topnum} +%^^A\DoNotIndex{\@twocolumnfalse,\@twocolumntrue,\@twosidefalse,\@twosidetrue} +%^^A\DoNotIndex{\@undefined,\@whiledim,\@whilenum} +%^^A\DoNotIndex{\addcontentsline,\addpenalty,\addtocontents} +%^^A\DoNotIndex{\addtolength,\addvspace,\advance} +%^^A\DoNotIndex{\begin,\begingroup,\bfseries,\box,\bullet} +%^^A\DoNotIndex{\c@figure,\c@page,\c@secnumdepth,\c@table,\c@tocdepth,\cdot} +%^^A\DoNotIndex{\centering,\changes,\cleardoublepage,\clearpage,\cmd} +%^^A\DoNotIndex{\CodelineIndex,\col@number,\cs,\CurrentOption} +%^^A\DoNotIndex{\dblfloatpagefraction,\dbltopfraction,\def,\divide,\DoNotIndex} +%^^A\DoNotIndex{\DeclareOldFontCommand,\DeclareOption,\DisableCrossrefs} +%^^A\DoNotIndex{\else,\em,\empty,\EnableCrossrefs,\end,\end@dblfloat,\end@float} +%^^A\DoNotIndex{\endgroup,\endlist,\endquotation,\endtitlepage,\everypar} +%^^A\DoNotIndex{\ExecuteOptions,\expandafter} +%^^A\DoNotIndex{\fboxrule,\fboxsep,\fi} +%^^A\DoNotIndex{\gdef,\global} +%^^A\DoNotIndex{\hangindent,\hbox,\hfil,\hrule,\hsize,\hskip,\hspace,\hss} +%^^A\DoNotIndex{\if,\if@tempswa,\ifcase,\ifdim,\ifnum,\ifodd,\ifx,\include} +%^^A\DoNotIndex{\input,\InputIfFileExists,\item,\itshape} +%^^A\DoNotIndex{\kern} +%^^A\DoNotIndex{\leavevmode,\leftmark,\leftskip,\let,\lineskip,\list,\long} +%^^A\DoNotIndex{\m@ne,\m@th,\marginpar,\markboth,\markright} +%^^A\DoNotIndex{\mathbf,\mathcal,\mathit,\mathnormal,\mathrm,\mathsf,\mathtt} +%^^A\DoNotIndex{\MessageBreak,\month} +%^^A\DoNotIndex{\newblock,\newcommand,\newcount,\newcounter,\newdimen} +%^^A\DoNotIndex{\newenvironment,\newlength,\newpage,\nobreak,\noindent} +%^^A\DoNotIndex{\normalcolor,\normalfont,\normallineskip,\normalsize} +%^^A\DoNotIndex{\null,\number,\numberline} +%^^A\DoNotIndex{\OldMakeindex,\OnlyDescription,\or,\overfullrule} +%^^A\DoNotIndex{\p@,\PackageError,\PackageInfo,\PackageWarningNoLine} +%^^A\DoNotIndex{\pagenumbering,\pagestyle,\par,\paragraph,\parbox} +%^^A\DoNotIndex{\PassOptionsToPackage,\pcal,\penalty,\protect,\providecommand} +%^^A\DoNotIndex{\PrintIndex,\PrintChanges,\ProcessOptions,\ProvidesClass} +%^^A\DoNotIndex{\raggedbottom,\raggedleft,\raggedright,\refstepcounter,\relax} +%^^A\DoNotIndex{\renewcommand,\RequirePackage,\reset@font,\rightmargin} +%^^A\DoNotIndex{\rightmark,\rightskip,\rmfamily} +%^^A\DoNotIndex{\scshape,\secdef,\setbox,\setcounter,\setlength,\settowidth} +%^^A\DoNotIndex{\sfcode,\sffamily,\skip,\sloppy,\slshape,\space,\string} +%^^A\DoNotIndex{\the,\thispagestyle,\ttfamily,\twocolumn,\typeout} +%^^A\DoNotIndex{\undefined,\usecounter} +%^^A\DoNotIndex{\vfil,\vfill,\vspace} +%^^A\DoNotIndex{\wd} +%^^A\DoNotIndex{\xdef} +%^^A\DoNotIndex{\year} +%^^A\DoNotIndex{\z@} +% \end{macrocode} +% \endgroup% +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% \subsection{Definition und Erscheinungsbild von Deklarationselementen} +% +% Mit dem Paket~\pkg{dox} können weitere Deklarationselemente erstellt werden. +% Dieses lädt außerdem das Paket~\pkg{doc}, welches die Grundfunktionalitäten +% für die Erstellung von \file{.dtx}-Dateien bereitstellt. In der momentanen +% Version unterstützt das Paket~\pkg{dox} die aktuellen Anpassungen an die +% Erstellung von Änderungsnotizen durch \pkg{doc} nicht, weshalb im Folgenden +% einige Patches notwendig sind. +% \begin{macrocode} +\RequirePackage{dox}[2010/12/16] +\@ifpackagelater{dox}{2017/12/07}{% + \ClassWarning{\TUD@Class@Name}{% + Package `dox' was updated so some patches\MessageBreak% + are maybe outdated% + }% +}{}% +% \end{macrocode} +% \begin{macro}{\m@cro@} +% Nach dem Laden des Paketes werden die Definitionen einiger Makros überprüft. +% \begin{macrocode} +\CheckCommand\m@cro@[2]{% + \endgroup \topsep\MacroTopsep \trivlist + \edef\saved@macroname{\string#2}% + #1 + \let\saved@indexname\saved@macroname + \else + \edef\saved@indexname{\expandafter\@gobble\string#2}% + \fi + \def\makelabel##1{\llap{##1}}% + \if@inlabel + \let\@tempa\@empty \count@\macro@cnt + \loop \ifnum\count@>\z@ + \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat + \edef\makelabel##1{\llap{\vtop to\baselineskip + {\@tempa\hbox{##1}\vss}}}% + \advance \macro@cnt \@ne + \else \macro@cnt\@ne \fi + \edef\@tempa{\noexpand\item[% + #1% + \noexpand\PrintMacroName + \else + \noexpand\PrintEnvName + \fi + {\string#2}]}% + \@tempa + \global\advance\c@CodelineNo\@ne + #1% + \SpecialMainIndex{#2}\nobreak + \DoNotIndex{#2}% + \else + \SpecialMainEnvIndex{#2}\nobreak + \fi + \global\advance\c@CodelineNo\m@ne + \ignorespaces +} +% \end{macrocode} +% \end{macro}^^A \m@cro@ +% +% \subsubsection{Erweiterte Einträge für Index und Änderungsliste} +% +% \begin{macro}{\doxitem} +% Mit dem Befehl \cs{doxitem} werden beliebige Deklarationselemente erstellt. +% das Makro wird für das Hinzufügen des Eintragstyps für Index, Änderungsliste +% und Randnotiz angepasst. +% \begin{macrocode} +\CheckCommand\doxitem[4][]{% + \@nameuse{dox@macrolike\dox@macrolikedefault}% + \def\dox@idxtype{#3}% + \setkeys{dox}{#1} + \@ifundefined{Print#2Name}{% + \ifdox@macrolike + \expandafter\def\csname Print#2Name\endcsname##1{% + \strut\MacroFont\string ##1\ } + \else + \expandafter\def\csname Print#2Name\endcsname##1{% + \strut\MacroFont ##1\ } + \fi}{} + \ifdox@macrolike + \def\@doxexpr{\@doxcreatespecialmainmacrolikeindex{#2}}% + \else + \def\@doxexpr{\@doxcreatespecialmainindex{#2}}% + \fi + \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}% + \@ifundefined{PrintDescribe#2}{% + \ifdox@macrolike + \expandafter\def\csname PrintDescribe#2\endcsname##1{% + \strut\MacroFont\string ##1\ } + \else + \expandafter\def\csname PrintDescribe#2\endcsname##1{% + \strut\MacroFont ##1\ } + \fi}{} + \ifdox@macrolike + \def\@doxexpr{\@doxcreatespecialmacrolikeindex{#2}}% + \else + \def\@doxexpr{\@doxcreatespecialindex{#2}}% + \fi + \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}% + \@doxcreatedescribe{#2} + \@doxcreateenv{#2}{#3} + \ifdox@macrolike + \expandafter\let\csname @Save#2IndexName\endcsname% + \@doxsavemacrolikeindexname% + \else + \expandafter\let\csname @Save#2IndexName\endcsname\@doxsaveindexname% + \fi +} +% \end{macrocode} +% Das Makro wird dahingehend angepasst, dass alle für die Ausgabe erzeugten +% Befehle der Form \cs{Print\meta{Typ}Name} und \cs{PrintDescribe\meta{Typ}} +% um den Eintragstyp ergänzt werden, erstellt durch \cs{doxcreateprintname} +% bzw. \cs{doxcreatemacrolikeprintname}. Zusätzlich werden für die Klasse +% \cls{tudscrdoc} Befehle in der Form \cs{@Save\meta{Typ}IndexName} mit den +% neuen Makros \cs{doxcreateindexname} bzw. \cs{doxcreatemacrolikeindexname} +% erstellt. Mit diesen wird beim Aufruf einer Deklarationsumgebung der aktuelle +% Name und Eintragstyp des jeweiligen Deklarationselementes gesichert, um diese +% Informationen in der Änderungsliste nutzen zu können. Außerdem werden mit dem +% Makro \cs{@doxcreatedescribes} Befehle erzeugt, mit denen eine Liste von zu +% beschreibenden Elementen via \cs{DescribeOption\meta{Typ}s} erzeugt werden +% kann. Dies dient insbesondere zum Erzeugen der Randnotizen mit \cs{marginnote} +% aus dem glecihnamigen Paket. +% \begin{macrocode} +\renewcommand*\doxitem[4][]{% + \@nameuse{dox@macrolike\dox@macrolikedefault}% + \def\dox@idxtype{#3}% + \setkeys{dox}{#1}% + \ifdox@macrolike% + \def\@doxexpr{\@doxcreatespecialmainmacrolikeindex{#2}}% + \else% + \def\@doxexpr{\@doxcreatespecialmainindex{#2}}% + \fi% + \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}% + \ifdox@macrolike% + \def\@doxexpr{\@doxcreatespecialmacrolikeindex{#2}}% + \else% + \def\@doxexpr{\@doxcreatespecialindex{#2}}% + \fi% + \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}% + \ifdox@macrolike% + \def\@doxexpr{\@doxcreatemacrolikeprintname{#2}}% + \else% + \def\@doxexpr{\@doxcreateprintname{#2}}% + \fi% + \expandafter\@doxexpr\expandafter{\dox@idxtype}% + \ifdox@macrolike% + \def\@doxexpr{\@doxcreatemacrolikeindexname{#2}}% + \else% + \def\@doxexpr{\@doxcreateindexname{#2}}% + \fi% + \expandafter\@doxexpr\expandafter{\dox@idxtype}% + \@doxcreatedescribe{#2}% + \@doxcreatedescribes{#2}% + \@doxcreateenv{#2}{#3}% +} +% \end{macrocode} +% \end{macro}^^A \doxitem +% \begin{macro}{\@doxcreatedescribes} +% \changes{v2.05i}{2017/03/09}{neu}^^A +% \begin{length}{\marginnotevskip} +% \changes{v2.05i}{2017/03/09}{neu}^^A +% \begin{macro}{\marginpar} +% Hiermit werden Befehle der Form \cs{DescribeOption\meta{Typ}s} erzeugt, mit +% welchen mehrere Eintragstypen erzeugt werden können. Gleichzeitig werden die +% Randnotizen via \cs{marginnote} mit den passenden vertikalen Abständen +% erstellt. +% \begin{macrocode} +\newlength\marginnotevskip +\newcommand*\@doxcreatedescribes[1]{% + \expandafter\def\csname Describe#1s\endcsname##1{% + \setlength\marginnotevskip{\z@}% + \def\@tempc{##1}% + \@for\@tempa:=\@tempc\do{% + \expandafter\ifblank\expandafter{\@tempa}{}{% + \edef\@tempb{% + \expandonce{\csname Describe#1\endcsname}{\expandonce{\@tempa}}% + }% + \@tempb% + \addtolength\marginnotevskip{\baselineskip}% + }% + }% + \setlength\marginnotevskip{\z@}% + \ignorespaces% + }% +} +\@doxcreatedescribes{Macro} +\AfterPackage*{marginnote}{% + \renewcommand*\marginpar[2][]{% + \IfArgIsEmpty{#1}{% + \marginnote{#2}[\marginnotevskip]% + }{% + \marginnote[{#1}]{#2}[\marginnotevskip]% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \marginpar +% \end{length}^^A \marginnotevskip +% \end{macro}^^A \@doxcreatedescribes +% \begin{macro}{\index@type} +% \changes{v2.05g}{2016/11/10}{neu}^^A +% Dieses Makro dient zur Formatierung des Typen der Deklarationselemente in +% Index und Änderungsliste. +% \begin{macrocode} +\newrobustcmd*\index@type[1]{% + \begingroup% + \normalfont\scriptsize\space(#1)% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \index@type +% \begin{macro}{\@doxcreatespecialmainmacrolikeindex} +% \begin{macro}{\@doxcreatespecialmainindex} +% \begin{macro}{\@doxcreatespecialmacrolikeindex} +% \begin{macro}{\@doxcreatespecialindex} +% Für den Index muss bei diesen Makros eine Anpassung erfolgen, damit die +% Sortierung auch bei der Verwendung von \app{texindy} richtig erfolgt und +% keine Einträge, welche es trotz gleicher Bezeichnung für unterschiedliche +% Deklarationselemente (beispielsweise Umgebung \env{abstract} und Option +% \opt{abstract}) gibt, unterschlagen werden. Außerdem wird hier die Definition +% der Quelltextanker eingehangen und die Elterneinträge für Parameteränderungen +% zurückgesetzt. +% \begin{macrocode} +\CheckCommand*\@doxcreatespecialmainmacrolikeindex[3]{% + \expandafter\def\csname SpecialMain#1Index\endcsname##1{% + \@SpecialIndexHelper@##1\@nil + \@bsphack% + \special@index{\@gtempa\actualchar + \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar + \space(#2)\encapchar main}% + \special@index{#3:\levelchar\@gtempa\actualchar% + \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar + \encapchar main}% + \@esphack% + }% +} +% \end{macrocode} +% Um den Typ der Deklarationselemente in den Index einzutragen, wird der Typ +% geschützt expandiert, um beispielsweise Umlaute problemlos nutzen zu können. +% \begin{macrocode} +\renewcommand*\@doxcreatespecialmainmacrolikeindex[3]{% + \expandafter\def\csname SpecialMain#1Index\endcsname##1{% + \@SpecialIndexHelper@##1\@nil% + \@bsphack% + \protected@edef\tud@reserved{#2}% + \special@index{% + \@gtempa\space\expandonce\tud@reserved\actualchar% + \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar% + \index@type{\expandonce\tud@reserved}\encapchar main% + }% + \protected@edef\tud@reserved{#3}% + \special@index{% + \expandonce\tud@reserved:\levelchar\@gtempa\actualchar% + \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar% + \encapchar main% + }% + \@esphack% + \let\parameter@parent@changes\relax% + \hypersourcedef{\filesep\number\c@CodelineNo}% + }% +} +\CheckCommand*\@doxcreatespecialmainindex[3]{% + \expandafter\def\csname SpecialMain#1Index\endcsname##1{% + \@bsphack% + \special@index{##1\actualchar{\string\ttfamily\space##1} (#2)% + \encapchar main}% + \special@index{#3:\levelchar##1\actualchar{\string\ttfamily\space##1}% + \encapchar main}% + \@esphack% + }% +} +\renewcommand*\@doxcreatespecialmainindex[3]{% + \expandafter\def\csname SpecialMain#1Index\endcsname##1{% + \@bsphack% + \protected@edef\tud@reserved{#2}% + \special@index{% + ##1\space\expandonce\tud@reserved\actualchar% + {\string\ttfamily\space##1}\index@type{\expandonce\tud@reserved}% + \encapchar main% + }% + \protected@edef\tud@reserved{#3}% + \special@index{% + \expandonce\tud@reserved:\levelchar##1\actualchar% + {\string\ttfamily\space##1}\encapchar main% + }% + \@esphack% + \let\parameter@parent@changes\relax% + \hypersourcedef{\filesep\number\c@CodelineNo}% + }% +} +\CheckCommand*\@doxcreatespecialmacrolikeindex[3]{% + \expandafter\def\csname Special#1Index\endcsname##1{% + \@SpecialIndexHelper@##1\@nil + \@bsphack% + \index{\@gtempa\actualchar + \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar + \space(#2)\encapchar usage}% + \index{#3:\levelchar\@gtempa\actualchar + \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar + \encapchar usage}% + \@esphack% + }% +} +\renewcommand*\@doxcreatespecialmacrolikeindex[3]{% + \expandafter\def\csname Special#1Index\endcsname##1{% + \@SpecialIndexHelper@##1\@nil% + \@bsphack% + \protected@edef\tud@reserved{#2}% + \index{% + \@gtempa\space\expandonce\tud@reserved\actualchar% + \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar% + \index@type{\expandonce\tud@reserved}\encapchar usage% + }% + \protected@edef\tud@reserved{#3}% + \index{% + \expandonce\tud@reserved:\levelchar\@gtempa\actualchar% + \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar% + \encapchar usage% + }% + \@esphack% + }% +} +\CheckCommand*\@doxcreatespecialindex[3]{% + \expandafter\def\csname Special#1Index\endcsname##1{% + \@bsphack% + \index{##1\actualchar{\protect\ttfamily##1} (#2)\encapchar usage}% + \index{#3:\levelchar##1\actualchar{\protect\ttfamily##1}% + \encapchar usage}% + \@esphack% + }% +} +\renewcommand*\@doxcreatespecialindex[3]{% + \expandafter\def\csname Special#1Index\endcsname##1{% + \@bsphack% + \protected@edef\tud@reserved{#2}% + \index{% + ##1\space\expandonce\tud@reserved\actualchar% + {\protect\ttfamily##1}\index@type{\expandonce\tud@reserved}% + \encapchar usage% + }% + \protected@edef\tud@reserved{#3}% + \index{% + \expandonce\tud@reserved:\levelchar##1\actualchar% + {\protect\ttfamily##1}\encapchar usage% + }% + \@esphack% + }% +} +% \end{macrocode} +% \end{macro}^^A \@doxcreatespecialindex +% \end{macro}^^A \@doxcreatespecialmacrolikeindex +% \end{macro}^^A \@doxcreatespecialmainindex +% \end{macro}^^A \@doxcreatespecialmainmacrolikeindex +% \begin{macro}{\@doxcreatemacrolikeprintname} +% \begin{macro}{\@doxcreateprintname} +% \begin{macro}{\@doxcreatemacrolikeindexname} +% \begin{macro}{\@doxcreateindexname} +% \begin{macro}{\saved@indextype} +% Hiermit werden die Makros zur Ausgabe als Randnotiz definiert. Mit diesen +% wird dem eigentlichen Eintrag der Eintragstyp angehängt. Zu beachten ist, das +% entgegen der ursprünglichen Definition \cs{strut} erst zum Schluss ausgeführt +% wird. Somit lassen sich potenzielle Probleme mit dem Paket \pkg{microtype} +% vermeiden. +% \begin{macrocode} +\def\@doxcreatemacrolikeprintname#1#2{% + \ifcsundef{Print#1Name}{% + \expandafter\def\csname Print#1Name\endcsname##1{% + \MacroFont\string##1\index@type{#2}\strut\ % + }% + }{}% + \ifcsundef{PrintDescribe#1}{% + \expandafter\def\csname PrintDescribe#1\endcsname##1{% + \MacroFont\string##1\index@type{#2}\strut\ % + }% + }{}% +} +\def\@doxcreateprintname#1#2{% + \ifcsundef{Print#1Name}{% + \expandafter\def\csname Print#1Name\endcsname##1{% + \MacroFont##1\index@type{#2}\strut\ % + }% + }{}% + \ifcsundef{PrintDescribe#1}{% + \expandafter\def\csname PrintDescribe#1\endcsname##1{% + \MacroFont##1\index@type{#2}\strut\ % + }% + }{}% +} +% \end{macrocode} +% Ziel ist es, in den +% Makros \cs{saved@indexname} und \cs{saved@indextype} den Namen und den Typ +% des aktuellen Deklarationselementes zu speichern. +% \begin{macrocode} +\newcommand*\saved@indextype{} +\def\@doxcreatemacrolikeindexname#1#2{% + \expandafter\def\csname @Save#1IndexName\endcsname##1{% + \edef\saved@indexname{\expandafter\@gobble##1}% + \protected@edef\saved@indextype{#2}% + }% +} +\def\@doxcreateindexname#1#2{% + \expandafter\def\csname @Save#1IndexName\endcsname##1{% + \let\saved@indexname##1% + \protected@edef\saved@indextype{#2}% + }% +} +% \end{macrocode} +% \end{macro}^^A \saved@indextype +% \end{macro}^^A \@doxcreateindexname +% \end{macro}^^A \@doxcreatemacrolikeindexname +% \end{macro}^^A \@doxcreateprintname +% \end{macro}^^A \@doxcreatemacrolikeprintname +% \begin{macro}{\@SaveMacroIndexName} +% \begin{macro}{\@SaveEnvIndexName} +% \begin{macro}{\SpecialMainMacroIndex} +% Da für Makros die notwendigen Befehle für die Anpassungen der Änderungsliste +% nicht über \cs{doxitem} kreiert werden, erfolgt dies hier direkt. +% \begin{macrocode} +\CheckCommand*\@SaveMacroIndexName[1]{% + \edef\saved@indexname{\expandafter\@gobble#1}% +} +\CheckCommand*\@SaveEnvIndexName[1]{\let\saved@indexname#1} +\apptocmd{\@SaveMacroIndexName}{% + \let\saved@indextype\@empty% +}{}{\tud@patch@wrn{@SaveMacroIndexName}} +\CheckCommand*\SpecialMainMacroIndex[1]{% + \SpecialMainIndex{#1}\nobreak% + \DoNotIndex{#1}% +} +\apptocmd{\SpecialMainMacroIndex}{% + \let\parameter@parent@changes\relax% + \hypersourcedef{\filesep\number\c@CodelineNo}% +}{}{\tud@patch@wrn{SpecialMainMacroIndex}} +% \end{macrocode} +% \end{macro}^^A \SpecialMainMacroIndex +% \end{macro}^^A \@SaveEnvIndexName +% \end{macro}^^A \@SaveMacroIndexName +% +% \subsubsection{Erstellen aller Deklarationselemente} +% +% Nachdem nun die Anpassungen für die Änderungsliste erfolgt sind, können nun +% die für die Dokumentatiton notwendigen Umgebungen mit \cs{docitem} erstellt +% werden. Dabei kommen die Lokalisierungsvariablen \cs{tud@\dots{}@name} zum +% Tragen. +% \begin{macrocode} +\renewcommand*\tud@reserved[3][]{% + \doxitem[#1,idxtype=\csname tud@#3@name\endcsname]{#2}{#3}{% + \csname tud@#3s@name\endcsname% + }% +} +\undef\PrintEnvName +\undef\PrintDescribeEnv +\tud@reserved{Env}{environment} +\tud@reserved{Option}{option} +\tud@reserved{LayerPageStyle}{layerpagestyle} +\tud@reserved{Layer}{layer} +\tud@reserved[macrolike]{Length}{length} +\tud@reserved{Counter}{counter} +\tud@reserved{Color}{TUDcolor} +\tud@reserved[macrolike]{Localization}{localization} +\tud@reserved[macrolike]{Field}{field} +\tud@reserved{Font}{KOMAfont} +\tud@reserved{Parameter}{parameter} +% \end{macrocode} +% +% \subsubsection{Besonderheiten des Deklarationselementes \emph{Parameter}} +% +% \begin{macro}{\parameter@parent@changes} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\parameter@parent@indexname} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\parameter@parent@indexformat} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% Um für Parameter sowohl im Index als auch in der Änderungsliste eine weitere +% Ebene zu definieren, werden diese Befehle eigens definiert. +% \begin{macrocode} +\newcommand*\parameter@parent@changes{} +\let\parameter@parent@changes\relax +\newcommand*\parameter@parent@indexname{} +\let\parameter@parent@indexname\relax +\newcommand*\parameter@parent@indexformat{} +\let\parameter@parent@indexformat\relax +% \end{macrocode} +% \end{macro}^^A \parameter@parent@indexformat +% \end{macro}^^A \parameter@parent@indexname +% \end{macro}^^A \parameter@parent@changes +% \begin{macro}{\@SaveMacroIndexName} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\@SaveEnvIndexName} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% Bei der Ausführung einer dieser beiden Befehle bei der Definition von einem +% Makro oder einer Umgebung werden diese für evtl. nachfolgende Parameter als +% Elterneinträge definiert. Hierfür werden die Einträge zur Sortierung sowohl +% für den Index als auch die Änderungsliste in \cs{parameter@parent@indexname} +% und für die Formatierung in \cs{parameter@parent@indexformat} gespeichert. +% \begin{macrocode} +\apptocmd{\@SaveMacroIndexName}{% + \edef\parameter@parent@indexname{\expandafter\@gobble#1}% + \edef\parameter@parent@indexformat{% + \string\verb\quotechar*\verbatimchar#1\verbatimchar% + }% +}{}{\tud@patch@wrn{@SaveMacroIndexName}} +\apptocmd{\@SaveEnvIndexName}{% + \protected@edef\parameter@parent@indexname{#1\space\saved@indextype}% + \protected@edef\parameter@parent@indexformat{% + \string\verb\quotechar*\verbatimchar#1\verbatimchar% + \index@type{\saved@indextype}% + }% +}{}{\tud@patch@wrn{@SaveEnvIndexName}} +% \end{macrocode} +% \end{macro}^^A \@SaveEnvIndexName +% \end{macro}^^A \@SaveMacroIndexName +% \begin{macro}{\SpecialMainParameterIndex} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% Hier wird nun die Gestalt der Einträge für Parameter als Haupteintrag +% festgelegt. +% \begin{macrocode} +\renewcommand*\SpecialMainParameterIndex[1]{% + \ifx\parameter@parent@indexname\relax% + \ClassError{\TUD@Class@Name}{No previous macro or environment}{% + Since parameters can only be used for macros or\MessageBreak% + environments, you have to use `parameter' within\MessageBreak% + `macro' or `environment'.% + }% + \fi% + \protected@edef\parameter@parent@changes{% + \parameter@parent@indexname\actualchar% + \parameter@parent@indexformat:\levelchar% + }% + \@bsphack% + \special@index{% + \parameter@parent@indexname\actualchar% + \parameter@parent@indexformat\levelchar% + #1\space\tud@parameter@name\actualchar% + {\string\ttfamily\space#1}\index@type{\tud@parameter@name}% + \encapchar main% + }% + \special@index{% + \tud@parameters@name:\levelchar% + #1\space\parameter@parent@indexname% + \actualchar{\string\ttfamily\space#1}% + \noexpand\,--\noexpand\,\parameter@parent@indexformat% + \encapchar main% + }% + \@esphack% + \hypersourcedef{\filesep\number\c@CodelineNo}% +} +% \end{macrocode} +% \end{macro}^^A \SpecialMainParameterIndex +% \begin{environment}{DescribeParameterParent} +% \changes{v2.05i}{2017/02/20}{neu}^^A +% \begin{macro}{\SpecialParameterIndex} +% \changes{v2.05i}{2017/02/20}{neu}^^A +% Selbiges für die Verwendung durch \cs{Describe\dots} +% \begin{macrocode} +\newenvironment{DescribeParameterParent}[2]{% + \@nameuse{@Save#1IndexName}{\string#2}% +}{} +\renewcommand*\SpecialParameterIndex[1]{% + \ifx\parameter@parent@indexname\relax% + \ClassError{\TUD@Class@Name}{No previous macro or environment}{% + Since parameters can only be used for macros or\MessageBreak% + environments, you have to use macro\MessageBreak% + `\string\DescribeParameter' only within the environment\MessageBreak% + `DescribeParameterParent'.% + }% + \fi% + \@bsphack% + \index{% + \parameter@parent@indexname\actualchar% + \parameter@parent@indexformat\levelchar% + #1\space\tud@parameter@name\actualchar% + {\protect\ttfamily#1}\index@type{\tud@parameter@name}% + \encapchar usage% + }% + \index{% + \tud@parameters@name:\levelchar#1\space\parameter@parent@indexname% + \actualchar{\protect\ttfamily#1}% + \noexpand\,--\noexpand\,\parameter@parent@indexformat% + \encapchar usage% + }% + \@esphack% +} +% \end{macrocode} +% \end{macro}^^A \SpecialParameterIndex +% \end{environment}^^A DescribeParameterParent +% +% \subsubsection{Erzeugen von Änderungseinträgen} +% +% \begin{macro}{\changes@} +% Bei der Erstellung der Änderungsliste fehlt bei Makros in der aktuellen +% Version von \pkg{doc} ein Leerzeichen. Das Problem ist bereits gemeldet. +% \begin{macrocode} +\CheckCommand*\changes@[3]{% + \protected@edef\@tempa{% + \noexpand\glossary{% + #1\levelchar + \ifx\saved@macroname\@empty + \space + \actualchar + \generalname + \else + \saved@indexname + \actualchar + \string\verb\quotechar*% + \verbatimchar\saved@macroname + \verbatimchar + \fi + :\levelchar #3% + }% + }% + \@tempa\endgroup\@esphack% +} +% \end{macrocode} +% Bei der Erzeugung der Änderungseinträge wird zwischen der Verwendung von +% \app{makeindex} und \app{texindy} unterschieden. Für die Reihenfolge des +% Erscheinens der einzelnen Einträge wird das angegebene Datum zur Sortierung +% genutzt. +% \begin{macrocode} +\ifdefined\tudxdyflag% + \renewcommand*\changes@[3]{% +% \end{macrocode} +% Einträge sollen nur erzeugt werden, wenn diese vollständig sind. +% \begin{macrocode} + \@tempswatrue% + \ifblank{#1}{\@tempswafalse}{}% + \ifblank{#3}{\@tempswafalse}{}% + \if@tempswa% +% \end{macrocode} +% Es wird dabei unterschieden, ob der Änderungseintrag einem Parameter gilt. +% Ist dies nicht der Fall, so wird der Eintrag mehr oder weniger standardmäßig +% erzeugt. +% \begin{macrocode} + \ifx\parameter@parent@changes\relax% + \protected@edef\@tempb{% + \saved@indexname% + \ifx\saved@indextype\@empty\else% + \space\saved@indextype% + \fi% + \actualchar% + \string\verb\quotechar*% + \verbatimchar\saved@macroname% + \verbatimchar% + \ifx\saved@indextype\@empty\else% + \index@type{\saved@indextype}% + \fi% + :\levelchar% + }% +% \end{macrocode} +% Andernfalls wird eine zusätzliche Ebene vor dem eigentlichen Eintrag des +% Parameters erzeugt und der zuvor in \cs{parameter@parent@changes} gesicherte +% Elterneintrag~-- Befehl oder Umgebung~-- dafür eingefügt. +% \begin{macrocode} + \else% + \protected@edef\@tempb{% + \parameter@parent@changes% + \saved@indexname% + \ifx\saved@indextype\@empty\else% + \space\saved@indextype% + \fi% + \actualchar% +% \end{macrocode} +% Der so erzeugte Änderungseintrag soll durch \app{texindy} bei der Erzeugung +% der Änderungsliste noch speziell sortiert werden. Daher wird nicht \cs{verb} +% sondern lediglich \cs{ttfamily} verwendet. +% \begin{macrocode} + {\noexpand\ttfamily\saved@macroname}% + \ifx\saved@indextype\@empty\else% + \index@type{\saved@indextype}% + \fi% + :\levelchar% + }% + \fi% + \protected@edef\@tempa{% + \noexpand\glossary{% + #1\levelchar% + \ifx\saved@macroname\@empty% + \tud@general@name% + \else% + \tud@implementation@name% + \fi% + \levelchar% + \ifx\saved@macroname\@empty\else% + \@tempb% + \fi% + #2 #3% + \actualchar% + #3% (#2)% + }% + }% + \else% + \let\@tempa\relax% + \fi% + \@tempa\endgroup\@esphack% + }% +\else% +% \end{macrocode} +% Für \app{makeindex} wird der Befehl insebsondere für das Listen der Parameter +% angepasst. +% \begin{macrocode} + \renewcommand*\changes@[3]{% + \protected@edef\@tempa{% + \noexpand\glossary{% + #1\levelchar% + \ifx\saved@macroname\@empty% + \quotechar!% + \actualchar% + \tud@general@name% + :\levelchar% + \else% + \ifx\parameter@parent@changes\relax\else% + \parameter@parent@changes zzz\space% + \fi% + \saved@indexname% + \ifx\saved@indextype\@empty\else% + \space\saved@indextype% + \fi% + \actualchar% + \string\verb\quotechar*% + \verbatimchar\saved@macroname% + \verbatimchar% + \ifx\saved@indextype\@empty\else% + \index@type{\saved@indextype}% + \fi% + \ifx\parameter@parent@changes\relax% + :\levelchar% + \else% + :\space% + \fi% + \fi% + #3% + }% + }% + \@tempa\endgroup\@esphack% + }% +\fi% +% \end{macrocode} +% \end{macro}^^A \changes@ +% \begin{macro}{\@wrglossary} +% Für die Ausgabe der Änderungsliste soll nicht einfach nur die Seitenzahl +% sondern zumindest für die Implementierungen die Codezeile ausgegeben werden. +% \begin{macrocode} +\CheckCommand*\@wrglossary[1]{% + \protected@write\@glossaryfile{}% + {\string\glossaryentry{#1}{\thepage}}% + \endgroup + \@esphack% +} +% \end{macrocode} +% Allgemeine Einträge werden mit Seitenzahlenerzeugt. Für Einträge bzgl. einer +% Implementierungen werden Codezeilen als Basis verwendet, falls aktiv. +% \begin{macrocode} +\def\@wrglossary#1{% + \ifx\saved@macroname\@empty% + \protected@write\@glossaryfile{}{% + \string\glossaryentry{#1|usage}{\thepage}% + }% + \else% + \ifcodeline@index% + \global\advance\c@CodelineNo\@ne% + \protected@write\@glossaryfile{}{% + \string\glossaryentry{#1|main}{\filesep\number\c@CodelineNo}% + }% + \global\advance\c@CodelineNo\m@ne% + \else% + \protected@write\@glossaryfile{}{% + \string\glossaryentry{#1|main}{\thepage}% + }% + \fi% + \fi% + \endgroup% + \@esphack% +} +% \end{macrocode} +% \end{macro}^^A \@wrglossary +% +% \subsubsection{Erscheinung von Einträgen in der Änderungsliste} +% +% \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 +% \begin{macro}{\tud@lst@@values} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\if@tud@lst@@multi} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\tud@lst@@init} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\tud@lst@@add} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\tud@lst@@process} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\tud@lst@subsub} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\tud@lst@subsubsub} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\subsubsubitem} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\efil} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% Falls für die Sortierung der Änderungsliste in \cls{tudscrdoc} \app{texindy} +% zum Einsatz kommt, wird bei der Beschreibung von Einträgen oder Parametern +% nur dann eine Unterebene verwendet, wenn zu einem Eintrag mehrere Angaben +% existieren. Sollte nur eine Anmerkung vorhanden sein, wird diese direkt in +% der dazugehörigen Ebene nach dem Eintrag selbst ausgegeben. +% \begin{macrocode} +\newcommand*\tud@lst@subsub{} +\newcommand*\tud@lst@subsubsub{} +\newcommand*\subsubsubitem{\@idxitem\hspace*{35\p@}} +\newcommand*\efil{\hfil\nopagebreak}% +\newcommand*\tud@lst@def{% + \newcommand*\tud@lst@values{}% + \newif\if@tud@lst@multi% + \newcommand*\tud@lst@init{% + \let\tud@lst@values\relax% + \let\tud@lst@subsub\relax% + \@tud@lst@multifalse% + }% + \newcommand*\tud@lst@add[1]{% + \ifx\tud@lst@values\relax\else% + \@tud@lst@multitrue% + \def\tud@lst@subsub{\subsubitem}% + \fi% + \listadd\tud@lst@values{\tud@lst@subsub ##1}% + }% + \newcommand*\tud@lst@process{% + \if@tud@lst@multi% + \preto\tud@lst@values{\efill}% + \fi% + \forlistloop{}{\tud@lst@values}% + \tud@lst@init% + }% + \newcommand*\tud@lst@@values{}% + \newif\if@tud@lst@@multi% + \newcommand*\tud@lst@@init{% + \let\tud@lst@@values\relax% + \def\tud@lst@subsub{\subsubitem}% + \def\tud@lst@subsubsub{\space}% + \@tud@lst@@multifalse% + }% + \newcommand*\tud@lst@@add[1]{% + \@tud@lst@multitrue% + \ifx\tud@lst@@values\relax\else% + \@tud@lst@@multitrue% + \def\tud@lst@subsubsub{\subsubsubitem}% + \fi% + \listadd\tud@lst@@values{##1}% + }% + \newcommand*\tud@lst@@process{% + \if@tud@lst@@multi% + \appto\tud@lst@values{\efill}% + \fi% + \edef\tud@reserved####1{% + \noexpand\listadd\noexpand\tud@lst@values{% + \expandonce\tud@lst@subsubsub####1% + }% + }% + \forlistloop{\tud@reserved}{\tud@lst@@values}% + \tud@lst@@init% + }% +} +% \end{macrocode} +% \end{macro}^^A \efil +% \end{macro}^^A \subsubsubitem +% \end{macro}^^A \tud@lst@subsubsub +% \end{macro}^^A \tud@lst@subsub +% \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@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 +% +% \subsubsection{Erzeugen von Index und Änderungsliste} +% +% \begin{macro}{\tud@write@replace} +% \changes{v2.05}{2016/04/21}{neu}^^A +% \begin{macro}{\tud@read@replace} +% \changes{v2.05}{2016/04/21}{neu}^^A +% \begin{macro}{\tud@line@replace} +% \changes{v2.05}{2016/04/21}{neu}^^A +% \begin{macro}{\actualchar} +% \begin{macro}{\quotechar} +% \begin{macro}{\levelchar} +% Damit die erzeugten Dateien für Index und Änderungsliste von \app{texindy} +% verarbeitet werden können, müssen einige Steuerzeichen in der originalen +% \file{.ind}-Datei getauscht werden. Dafür wird diese zeilenweise eingelesen, +% die fraglichen Zeichen ersetzt und in eine weitere Hilfsdatei geschrieben. +% \begin{macrocode} +\ifdefined\tudxdyflag + \newcommand*\tud@write@replace{}% + \newwrite\tud@write@replace% + \newcommand*\tud@read@replace{}% + \newread\tud@read@replace% +% \end{macrocode} +% Die Makros für die fraglichen Steuerzeichen werden so angepasst, dass die +% Wahrscheinlichkeit für eine Verwendung dieser Kombination in einem Makro- +% oder Umgebungsnamen sehr gering ist. Anschließend werden die erzeugten +% Hilfsdateien für Index und Änderungsliste für \app{texindy} angepasst. Dabei +% werden diese automatisch erzeugt, falls dies möglich ist. +% \begin{macrocode} + \def\actualchar{<|1|>}% + \def\quotechar{<|2|>}% + \def\levelchar{<|3|>}% + \begingroup% + \endlinechar=\m@ne\relax% + \def\tud@reserved#1#2{% + \IfFileExists{\jobname.#1}{% + \immediate\openin\tud@read@replace=\jobname.#1\relax% + \immediate\openout\tud@write@replace=\jobname-xdy.#1\relax% + \@tempswafalse% + \loop\unless\ifeof\tud@read@replace% + \readline\tud@read@replace to\tud@line@replace% + \tud@replace\tud@line@replace{"}{""}% + \tud@replace\tud@line@replace{!}{"!}% + \tud@replace\tud@line@replace{:}{":}% + \tud@replace\tud@line@replace{@}{"@}% + \tud@replace\tud@line@replace{\"@}{"\@backslashchar"@}% + \expandafter\tud@replace\expandafter\tud@line@replace% + \expandafter{\actualchar}{@}% + \expandafter\tud@replace\expandafter\tud@line@replace% + \expandafter{\quotechar}{"}% + \expandafter\tud@replace\expandafter\tud@line@replace% + \expandafter{\levelchar}{!}% + \tud@replace\tud@line@replace{" @}{}% + \ifeof\tud@read@replace\else% + \immediate\write\tud@write@replace{% + \unexpanded\expandafter{\tud@line@replace}% + }% + \@tempswatrue% + \fi% + \repeat% + \immediate\closein\tud@read@replace% + \immediate\closeout\tud@write@replace% + \ifnum\pdf@shellescape=\@ne\relax% + \if@tempswa% + \ShellEscape{% + texindy\space% + -o \jobname.#2\space% + -M \@currname-#2.xdy\space% + -t \jobname-#2.xlg\space% + \jobname-xdy.#1% + }% +% \end{macrocode} +% Falls nichts geschrieben wurde, wird eine leere Ausgabedatei erzeugt. +% \begin{macrocode} + \else% + \immediate\openout\tud@write@replace=\jobname.#2\relax% + \immediate\closeout\tud@write@replace% + \fi% + \fi% + }{}% + }% + \tud@reserved{idx}{ind}% + \tud@reserved{glo}{gls}% + \endgroup% +% \end{macrocode} +% Sollte \app{texindy} nicht aktiv sein, werden Index und Änderungsliste mit +% \app{makeindex} automatisch erzeugt. +% \begin{macrocode} +\else + \ifnum\pdf@shellescape=\@ne\relax% + \ShellEscape{% + makeindex -s gglo.ist -t \jobname.glg -o \jobname.gls \jobname.glo% + }% + \ShellEscape{% + makeindex -s gind.ist -t \jobname.ilg -o \jobname.ind \jobname.idx% + }% + \fi% +\fi +% \end{macrocode} +% \end{macro}^^A \levelchar +% \end{macro}^^A \quotechar +% \end{macro}^^A \actualchar +% \end{macro}^^A \tud@line@replace +% \end{macro}^^A \tud@read@replace +% \end{macro}^^A \tud@write@replace +% Jetzt werden noch die Einleitungen für Index und Änderungsliste angepasst. +% \begin{macrocode} +\IndexPrologue{\addsec{\indexname}\tud@index@text} +\GlossaryPrologue{\addsec{\tud@changes@name}} +% \end{macrocode} +% +% \subsection{ToDo-Liste} +% +% \begin{macro}{\PrintToDos} +% \changes{v2.05}{2016/05/19}{neu}^^A +% \begin{macro}{\@docinclude} +% Für ToDo-Notizen wird am Ende eine Liste aller offenen Punkte ausgegeben. +% \begin{macrocode} +\DeclareNewTOC[% + type=todo,% + listname={\tud@todo@name},% + name=ToDo,% + tocentryindent=\z@,% + owner=\@currname,% +]{tdo} +\setuptoc{tdo}{totoc} +\newcommand*\PrintToDos{\ifdefined\tudfinalflag\else\listoftodos\fi} +% \end{macrocode} +% Damit die Liste der ToDo-Notizen bei der Erzeugung der gesamten Dokumentation +% des Quelltextes einmalig sowie vollständig und nicht nach jeder Quelldatei +% einzeln ausgegeben wird, muss der Befehl \cs{@docinclude} angepasst werden. +% \begin{macrocode} +\patchcmd{\@docinclude}{% + \let\@ltxdoc@PrintIndex\PrintIndex + \let\PrintIndex\relax + \let\@ltxdoc@PrintChanges\PrintChanges + \let\PrintChanges\relax +}{% + \let\@ltxdoc@PrintIndex\PrintIndex + \let\PrintIndex\relax + \let\@ltxdoc@PrintChanges\PrintChanges + \let\PrintChanges\relax + \let\@ltxdoc@PrintToDos\PrintToDos + \let\PrintToDos\relax +}{}{\tud@patch@wrn{@docinclude}} +\patchcmd{\@docinclude}{% + \let\PrintIndex\@ltxdoc@PrintIndex + \let\PrintChanges\@ltxdoc@PrintChanges +}{% + \let\PrintIndex\@ltxdoc@PrintIndex + \let\PrintChanges\@ltxdoc@PrintChanges + \let\PrintToDos\@ltxdoc@PrintToDos +}{}{\tud@patch@wrn{@docinclude}} +% \end{macrocode} +% \end{macro}^^A \@docinclude +% \end{macro}^^A \PrintToDos +% \begin{macro}{\ToDo} +% \changes{v2.02}{2014/07/25}{neu}^^A +% \begin{macro}{\@ToDo} +% \changes{v2.02}{2014/07/25}{neu}^^A +% Die Befehle für die ToDo-Notizen. Um in der gleichen Nomenklatur wie beim +% Handbuch bleiben zu können, wird die Randnotizmarke als optionales Argument +% hinter dem eigentlichen Text angegeben. +% \begin{macrocode} +\newcommand*\ToDo[2][]{% + \kernel@ifnextchar[{\@ToDo{#2}}{\@ToDo{#2}[]}% +} +\newcommand*\@ToDo{} +\def\@ToDo#1[#2]{% + \ifdefined\tudfinalflag\else% + \begingroup% + \csuse{phantomsection}% + \IfArgIsEmpty{#2}{% + \def\tud@reserved{??}% + }{% + \def\tud@reserved{#2}% + }% + \endgraf% + \hfuzz0.8pt% + \leavevmode% + \def\@tempa{\raggedleft\fbox{ToDo:\space\tud@reserved\strut}}% + \ifdefined\marginnote% + \expandafter\marginnote\expandafter{\@tempa}[% + \dimexpr-\fboxsep-\fboxrule\relax% + ]% + \else% + \expandafter\marginpar\expandafter{\@tempa}% + \fi% + \fbox{\parbox{\dimexpr\textwidth-2\fboxsep\relax}{#1\strut}}% + \endgraf% +% \end{macrocode} +% Werden mit \cs{DocInclude} mehrere Dateien in das Dokument eingefügt, so +% erhält die ToDo-Notiz einen entsprechenden Hinweis. +% \begin{macrocode} + \let\@tempa\@empty% + \ifdefined\currentfile% + \def\@tempa{\,--\,\texttt{\currentfile}}% + \fi% + \addxcontentsline{tdo}{todo}{\tud@reserved\@tempa:\space#1}% + \endgroup% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \@ToDo +% \end{macro}^^A \ToDo +% +% \subsection{Schriften und Satzspiegel} +% +% \begin{macro}{\MacroFont} +% \begin{macro}{\AltMacroFont} +% Wird das Paket \pkg{mweights} geladen, so soll der passende Schriftschnitt +% für die ausgewählten TypeWriter-Schriften genutzt werden. Damit dies mit dem +% Paket \pkg{doc} funktioniert, muss der Befehl \cs{MacroFont} angepasst werden. +% \begin{macrocode} +\AfterPackage{mweights}{% + \CheckCommand*\MacroFont{% + \fontencoding\encodingdefault% + \fontfamily\ttdefault% + \fontseries\mddefault% + \fontshape\updefault% + \small% + }% + \renewcommand*\MacroFont{% + \fontencoding\encodingdefault% + \fontfamily\ttdefault% + \fontseries\mdseries@tt% + \fontshape\updefault% + \small% + }% + \CheckCommand*\AltMacroFont{% + \fontencoding\encodingdefault% + \fontfamily\ttdefault% + \fontseries\mddefault% + \fontshape\sldefault% + \small% + }% + \renewcommand*\AltMacroFont{% + \fontencoding\encodingdefault% + \fontfamily\ttdefault% + \fontseries\mdseries@tt% + \fontshape\sldefault% + \small% + }% +% \end{macrocode} +% Am Ende der Präambel wird dafür gesorgt, dass der Befehl \cs{mdseries@tt} in +% jedem Fall definiert ist. +% \begin{macrocode} + \AtEndPreamble{% + \ifundef{\mdseries@tt}{\edef\mdseries@tt{\mddefault}}{}% + }% +} +% \end{macrocode} +% Wird das Paket \pkg{tudscrfonts} genutzt, erscheinen die TypeWriter-Schriften +% zur Quelltextdokumentation sowohl für Latin~Modern als auch Roboto etwas zu +% schlank. +% \begin{macrocode} +\PassOptionsToPackage{ttfont=lmtt}{tudscrfonts} +\AfterPackage{tudscrfonts}{% + \AtEndPreamble{% + \ifnum\tud@ttfont@num>\z@\relax% + \edef\mdseries@tt{\tud@ttfont@bf}% + \fi% + }% +} +% \end{macrocode} +% \end{macro}^^A \AltMacroFont +% \end{macro}^^A \MacroFont +% +% Um den zur Verfügung stehenden Platz möglichst effektiv zu nutzen, soll der +% Satzspiegel dahingehend aufgeteilt werden, dass für die Darstellung jeder +% Quelltextzeile genau 80~Zeichen zur Verfügung stehen. Dies ist allerdings +% abhängig von der geladenen TypeWriter-Schrift. Deshalb wird die Berechnung +% des Satzspiegels erst zum Beginn des Dokumentes ausgeführt, um auf etwaige +% Pakete zur Schriftauswahl reagieren zu können. +% +% \begin{macro}{\tud@setarea} +% \changes{v2.05g}{2016/11/10}{neu}^^A +% \begin{length}{\topmargin} +% \begin{length}{\headheight} +% \begin{length}{\headsep} +% \begin{length}{\footskip} +% \begin{length}{\textheight} +% \begin{length}{\textwidth} +% \begin{length}{\columnsep} +% \begin{length}{\marginparsep} +% \begin{length}{\marginparwidth} +% \begin{length}{\oddsidemargin} +% Hiermit wird die Berechnung des Satzspiegels ausgeführt. +% \begin{macrocode} +\newcommand*\tud@setarea{% + \setlength\topmargin{-1in}% + \setlength\headheight{0pt}% + \setlength\headsep{3em}% + \setlength\footskip{1.5\headsep}% + \setlength\textheight{\dimexpr\paperheight-2.5\headsep-\footskip\relax}% + \@colht=\textheight% + \@colroom=\textheight% + \vsize=\textheight% + \settowidth\MacroIndent{\rmfamily\scriptsize 0000\ }% + \begingroup% + \MacroFont\selectfont% + \settowidth\@tempdima{\space}% + \setlength\@tempdima{80\@tempdima}% +%^^A \addtolength\@tempdima{\dimexpr\MacroIndent+.1\p@\relax}% + \addtolength\@tempdima{\MacroIndent}% + \edef\@tempa{% + \endgroup% + \noexpand\setlength\noexpand\textwidth{\the\@tempdima}% + }% + \@tempa% + \columnwidth=\textwidth% + \hsize=\columnwidth% + \linewidth=\hsize% + \setlength\columnsep{1em}% + \setlength\marginparsep{1em}% + \setlength\marginparwidth{% + \dimexpr\paperwidth-\textwidth-2\marginparsep\relax% + }% + \setlength\oddsidemargin{\dimexpr\marginparwidth+\marginparsep-1in\relax}% +} +\AtBeginDocument{\tud@setarea} +% \end{macrocode} +% \end{length}^^A \oddsidemargin +% \end{length}^^A \marginparwidth +% \end{length}^^A \marginparsep +% \end{length}^^A \columnsep +% \end{length}^^A \textwidth +% \end{length}^^A \textheight +% \end{length}^^A \footskip +% \end{length}^^A \headsep +% \end{length}^^A \headheight +% \end{length}^^A \topmargin +% \end{macro}^^A \tud@setarea +% +% \subsection{Zusätzliche Markup-Befehle} +% +% \begin{macro}{\app} +% \begin{macro}{\cls} +% \begin{macro}{\pkg} +% \begin{macro}{\opt} +% \begin{macro}{\val} +% \begin{macro}{\pgs} +% \begin{macro}{\env} +% \begin{macro}{\prm} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{macro}{\cnt} +% \changes{v2.05i}{2017/02/23}{neu}^^A +% \begin{macro}{\file} +% Zusätzliche Auszeichnungsbefehle. +% \begin{macrocode} +\newrobustcmd*\app[1]{\mbox{\textsl{\textbf{#1}}}} +\newrobustcmd*\cls[1]{\mbox{\textsf{\textbf{#1}}}} +\newrobustcmd*\pkg[1]{\mbox{\textsf{\textbf{#1}}}} +\newrobustcmd*\opt[1]{\mbox{\texttt{#1}}} +\newrobustcmd*\val[1]{\mbox{\texttt{#1}}} +\newrobustcmd*\pgs[1]{\mbox{\texttt{#1}}} +\newrobustcmd*\env[1]{\mbox{\texttt{#1}}} +\newrobustcmd*\prm[1]{\mbox{\texttt{#1}}} +\newrobustcmd*\cnt[1]{\mbox{\texttt{#1}}} +\newrobustcmd*\file[1]{\mbox{\texttt{#1}}} +\AfterPackage{hyperref}{% + \pdfstringdefDisableCommands{% + \let\app\@firstofone% + \let\cls\@firstofone% + \let\pkg\@firstofone% + \let\opt\@firstofone% + \let\val\@firstofone% + \let\pgs\@firstofone% + \let\env\@firstofone% + \let\prm\@firstofone% + \let\file\@firstofone% + }% +} +% \end{macrocode} +% \end{macro}^^A \file +% \end{macro}^^A \cnt +% \end{macro}^^A \prm +% \end{macro}^^A \env +% \end{macro}^^A \pgs +% \end{macro}^^A \val +% \end{macro}^^A \opt +% \end{macro}^^A \pkg +% \end{macro}^^A \cls +% \end{macro}^^A \app +% +% \subsection{Rückfalloptionen bei fehlenden Paketen} +% +% Zum Schluss erfolgen einige Anpassungen mit \cs{AtEndPreamble}, um abhängig +% vom Ladezustand einiger Pakete reagieren zu können. +% \begin{macrocode} +\AtEndPreamble{% +% \end{macrocode} +% \begin{macro}{\selectlanguage} +% \begin{macro}{\glqq} +% \begin{macro}{\grqq} +% Etwas Kleinkram für \pkg{babel}\dots +% \begin{macrocode} + \@ifpackageloaded{babel}{}{% + \ClassWarning{\TUD@Class@Name}{Package `babel' not loaded}% + \providecommand*\selectlanguage[1]{}% + \providecommand*\glqq{}% + \providecommand*\grqq{}% + }% +% \end{macrocode} +% \end{macro}^^A \grqq +% \end{macro}^^A \glqq +% \end{macro}^^A \selectlanguage +% \begin{macro}{\enquote} +% \dots und \pkg{csquotes}. +% \begin{macrocode} + \@ifpackageloaded{csquotes}{}{% + \ClassWarning{\TUD@Class@Name}{Package `csquotes' not loaded}% + \providecommand\enquote[1]{\emph{#1}}% + }% +% \end{macrocode} +% \end{macro}^^A \enquote +% Sollte das Paket \pkg{tudscrfonts} nicht geladen worden sein, so wird das +% Paket \pkg{lmodern} geladen und die fehlenden Befehle zur Schriftauswahl +% rudimentär definiert. +% \begin{macrocode} + \@ifpackageloaded{tudscrfonts}{}{% + \RequirePackage{lmodern}[2009/10/30]% + \providecommand*\textcdln[1]{\textsf{#1}}% + \providecommand*\textcdrn[1]{\textcdln{#1}}% + \providecommand*\textcdsn[1]{\textcdln{#1}}% + \providecommand*\textcdbn[1]{\textbf{\textcdln{#1}}}% + \providecommand*\textcdxn[1]{\textcdbn{#1}}% + \providecommand*\textcdli[1]{\textsl{\textcdln{#1}}}% + \providecommand*\textcdri[1]{\textcdli{#1}}% + \providecommand*\textcdsi[1]{\textcdli{#1}}% + \providecommand*\textcdbi[1]{\textbf{\textcdli{#1}}}% + \providecommand*\textcdxi[1]{\textcdbi{#1}}% + }% +} +% \end{macrocode} +% +% \iffalse +%</class&body> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-fields.dtx b/macros/latex/contrib/tudscr/source/tudscr-fields.dtx new file mode 100644 index 0000000000..dbf9cb46b8 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-fields.dtx @@ -0,0 +1,1253 @@ +% \CheckSum{875} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-fields.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-fields.dtx}[2019/08/20 v2.06c TUD-Script\space% + (input fields)% +] +% +% \iffalse +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-fields.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.02}{2014/06/23}{Paket \pkg{titlepage} nicht weiter unterstützt}^^A +% +% \section{Anwenderbefehle für Eingabefelder} +% +% Das \TUDScript-Bundle für das \TUDCD definieren mehrere Felder, welche durch +% den Anwender festgelegt werden können und dadurch auf der Titelseite bzw. auf +% der Aufgabenstellung~-- falls das Paket \pkg{tudscrsupervisor} zum Einsatz +% kommt~-- ausgegeben werden. Ein Großteil der definierten Felder wird unter +% anderem für den Satz der Titelseite benötigt. +% +% Das Setzen einer speziellen Titelseite mit \LaTeX{} ist eines der häufigsten +% anliegen. Dafür ist von Markus Kohm\footnote{Autor von \KOMAScript} das +% \pkg{titlepage}-Paket entworfen worden. Um gleichzeitig konsistent zu diesem +% Paket zu sein, werden für die entsprechenden Felder Alias-Befehle definiert. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*class&!manual> +% \fi +% +% \begin{macro}{\getfield} +% \changes{v2.06}{2018/08/20}{neu}^^A +% Hiermit wird der Inhalt des im zweiten (obligatorischen) Argument namentlich +% genannten Feldes in die im ersten (optionalen) Argument gegebene Anweisung +% expandiert. +% \begin{macrocode} +\newcommand*\getfield[2][\@firstofone]{% + \begingroup% + \def\tud@res@b{#1}% + \ifcsdef{@@#2}{% + \letcs\tud@res@a{@@#2}% + }{% + \ifcsdef{@#2}{% + \letcs\tud@res@a{@#2}% + }{% + \let\tud@res@a\@empty% + \ClassWarning{\TUD@Class@Name}{% + The internal field `@#2' does not exist% + }% + }% + }% + \edef\tud@res@a{% + \endgroup% + \expandonce\tud@res@b{\expandonce\tud@res@a}% + }% + \tud@res@a% +} +% \end{macrocode} +% \end{macro}^^A \getfield +% +% \subsection{Textfelder für die \TUDScript-Klassen} +% +% Von den Klassen benötigte Formularfelder werden definiert. Für das Setzen von +% Feldern werden mit dem Makro \cs{trim@spaces} aus dem Paket \pkg{trimspaces} +% bei einem übergebenen Argument führende und angehängte Leerzeichen beseitigt. +% \begin{macro}{\faculty} +% \begin{field}{\@faculty} +% \begin{field}{\@facultyfoot} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \begin{macro}{\department} +% \begin{field}{\@department} +% \begin{field}{\@departmentfoot} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \begin{macro}{\institute} +% \begin{field}{\@institute} +% \begin{field}{\@institutefoot} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \begin{macro}{\chair} +% \begin{field}{\@chair} +% \begin{field}{\@chairfoot} +% \changes{v2.05}{2015/07/06}{neu}^^A +% Für die für die TUD-Kopfzeile kann mit \cs{faculty}\marg{Fakultät} die +% Fakultät angegeben werden, welche im Makro \cs{@faculty} gespeichert wird. +% Das gilt ebenso für die Angabe von Einrichtung, Institut und Lehrstuhls bzw. +% Professur. Dies erfolgt mit den Makros \cs{department}\marg{Fachrichtung}, +% \cs{institute}\marg{Institut} sowie \cs{chair}\marg{Lehrstuhl}, welche in +% \cs{@department}, \cs{@institute} und \cs{@chair} gespeichert werden. +% +% Das optionale Argument wird zur Kompatibilität zur Klasse \cls{tudscrposter} +% vorgehalten. Wird das Paket geladen, kann mit dem optionalen Argument die +% Angabe der Struktureinheiten im Fußbereich variiert werden. Dafür werden die +% Felder \cs{@facultyfoot}, \cs{@departmentfoot}, \cs{@institutefoot} sowie +% \cs{@chairfoot} +% definiert. +% \begin{macrocode} +\newcommand*\@faculty{} +\newcommand*\@department{} +\newcommand*\@institute{} +\newcommand*\@chair{} +%<*book|report|article> +\newcommand*\faculty[2][]{\tud@head@text@field{faculty}{#2}} +\newcommand*\department[2][]{\tud@head@text@field{department}{#2}} +\newcommand*\institute[2][]{\tud@head@text@field{institute}{#2}} +\newcommand*\chair[2][]{\tud@head@text@field{chair}{#2}} +%</book|report|article> +%<*poster> +\newcommand*\@facultyfoot{} +\newcommand*\@departmentfoot{} +\newcommand*\@institutefoot{} +\newcommand*\@chairfoot{} +\newcommand*\faculty[2][\@empty]{\tud@foot@line@add{faculty}{#2}{#1}} +\newcommand*\department[2][\@empty]{\tud@foot@line@add{department}{#2}{#1}} +\newcommand*\institute[2][\@empty]{\tud@foot@line@add{institute}{#2}{#1}} +\newcommand*\chair[2][\@empty]{\tud@foot@line@add{chair}{#2}{#1}} +%</poster> +% \end{macrocode} +% \end{field}^^A \@chairfoot +% \end{field}^^A \@chair +% \end{macro}^^A \chair +% \end{field}^^A \@institutefoot +% \end{field}^^A \@institute +% \end{macro}^^A \institute +% \end{field}^^A \@departmentfoot +% \end{field}^^A \@department +% \end{macro}^^A \department +% \end{field}^^A \@facultyfoot +% \end{field}^^A \@faculty +% \end{macro}^^A \faculty +% \begin{macro}{\extraheadline} +% \begin{field}{\@extraheadline} +% Für die Angabe weiteren, freien Textzeile im Kopf. Dies ist laut \CD nur in +% besonderen Ausnahmefällen gestattet. +% \begin{macrocode} +\newcommand*\@extraheadline{} +\newcommand*\extraheadline[1]{\tud@head@text@field{extraheadline}{#1}} +% \end{macrocode} +% \end{field}^^A \@extraheadline +% \end{macro}^^A \extraheadline +% \begin{macro}{\tud@head@text@field} +% \changes{v2.05}{2015/11/26}{neu}^^A +% Wird ein Feld gesetzt, muss im Zweifel die Kopfzeile neu erstellt werden. +% \begin{macrocode} +\newcommand*\tud@head@text@field[2]{% + \csgdef{@#1}{\trim@spaces{#2}}% + \global\@tud@head@text@settrue% +} +% \end{macrocode} +% \end{macro}^^A \tud@head@text@field +% \begin{macro}{\tud@foot@line@add} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \begin{macro}{\tud@foot@line@write} +% \changes{v2.05}{2015/07/06}{neu}^^A +% Mit \cs{tud@foot@line@add} wird der Inhalt eines Feldes in \cs{@\meta{Feld}} +% gespeichert. Der Befehl erwartet als erstes obligatorisches Argument den +% Feldnamen und als zweites den Inhalt. Entspricht das dritte obligatorische +% Argument \cs{@empty}, so wird in \cs{@\meta{Feld}foot} ebenfalls das zweite +% Argument abgelegt, andernfalls das dritte. +% +% Damit wird es für Poster möglich, die Befehle \cs{faculty}, \cs{department}, +% \cs{institute}, \cs{chair} und \cs{professor} dahingehend zu erweitern, dass +% unterschiedliche Angaben für die Kopf- und Fußzeile gemacht werden können. +% Wird eines der zuvor genannten Makros lediglich mit einem obligatorischen +% Argument verwendet, so enthalten Kopf und Fuß den gleichen Eintrag. Wird +% jedoch zusätzlich das optionale Argument genutzt, so wird dessen Inhalt im +% Fußbereich mit \cs{tud@foot@line@write} ausgegeben. +% \begin{macrocode} +%<*poster> +\newcommand*\tud@foot@line@add[3]{% + \tud@head@text@field{#1}{#2}% + \ifx\@empty#3\relax% + \global\csletcs{@#1foot}{@#1}% + \else% + \csgdef{@#1foot}{\trim@spaces{#3}}% + \fi% +} +\newcommand*\tud@foot@line@write[1]{% + \protected@edef\@tempa{\csuse{@#1foot}}% + \ifx\@tempa\@empty\else\newline\mbox{\csuse{@#1foot}}\fi% +} +%</poster> +% \end{macrocode} +% \end{macro}^^A \tud@foot@line@write +% \end{macro}^^A \tud@foot@line@add +% \begin{macro}{\title} +% \begin{field}{\@title} +% \begin{field}{\@@title} +% \changes{v2.02}{2014/11/06}{\cs{protected@xdef} genutzt}^^A +% Für die spätere Verwendung im Dokument des Titels~-- beispielsweise für die +% Aufgabenstellung oder die Selbstständigkeitserklärung~-- wird das Feld +% \cs{@@title} definiert. In diesem wird der mit \cs{title} gesicherte Eintrag +% ohne die etwaigen Fußnoten gespeichert. +% \begin{macrocode} +\newcommand*\@@title{} +\robustify\@title +\renewcommand*\title[1]{% + \gdef\@title{#1}% + \begingroup% + \let\thanks\@gobble% + \let\footnote\@gobble% + \def\newline{\space\ignorespaces}% + \def\\{\space\ignorespaces}% + \protected@xdef\@@title{\trim@spaces{#1}}% + \endgroup% +} +% \end{macrocode} +% \end{field}^^A \@@title +% \end{field}^^A \@title +% \end{macro}^^A \title +% \begin{macro}{\author} +% \begin{field}{\@author} +% \begin{field}{\@@author} +% \begin{macro}{\authormore} +% \begin{field}{\@authormore} +% Die Ausgabe einer zusätzlichen Zeile mit \cs{authormore}\marg{Textzeile} +% direkt unterhalb der Angabe des Autors auf der Titelseite, wird im Makro +% \cs{@authormore} gespeichert. +% \begin{macrocode} +\newcommand*\@@author{} +\renewcommand*\author[1]{% + \gdef\@author{#1}% +% \end{macrocode} +% Das Feld \cs{@@author} soll lediglich die Autoren ohne weitere Anmerkungen +% enthalten. Deshalb werden die gewöhnlichen Formatierungsbefehle des Titels +% temporär unschädlich gemacht. +% \begin{macrocode} + \begingroup% + \let\thanks\@gobble% + \let\footnote\@gobble% + \def\newline{\space\ignorespaces}% + \def\\{\space\ignorespaces}% +% \end{macrocode} +% Die Makros aus \cs{tud@split@author@list} werden zu \cs{@tempc} gesetzt, um +% diese nach der Expansion weiter zu behandeln. +% \begin{macrocode} + \let\@tempc\relax% + \def\@tempa##1{\csedef{##1}####1{\@tempc}}% + \let\@tempb\tud@split@author@list% + \ifx\and\relax\else% + \robustify\and% + \fi% + \expandafter\forcsvlist\expandafter\@tempa\expandafter{\@tempb}% +% \end{macrocode} +% Da die Befehle für Zusatzinformationen unter Umständen ungewollte Leerzeichen +% im Feld \cs{@@author} hinterlassen, werden diese entfernt. +% \begin{macrocode} + \def\@tempa##1##2{% + \def\@tempb####1##2####2\@nil{% + \IfArgIsEmpty{####2}{% + \def##1{####1}% + }{% + \@tempb####1####2\@nil% + }% + }% + \expandafter\@tempb##1##2\@nil% + }% + \protected@edef\@@author{#1}% + \@tempa{\@@author}{ \@tempc }% + \@tempa{\@@author}{\@tempc }% + \@tempa{\@@author}{ \@tempc}% + \@tempa{\@@author}{\@tempc}% + \xdef\@@author{\expandonce\@@author}% + \endgroup% +} +\newcommand*\@authormore{} +\newrobustcmd*\authormore[1]{\gdef\@authormore{#1}\ignorespaces} +% \end{macrocode} +% \end{field}^^A \@authormore +% \end{macro}^^A \authormore +% \end{field}^^A \@@author +% \end{field}^^A \@author +% \end{macro}^^A \author +% \begin{macro}{\emailaddress} +% \changes{v2.02}{2014/05/16}{neu, Umbenennung des Makros \cs{email}}^^A +% \begin{field}{\@emailaddress} +% \changes{v2.02}{2014/05/16}{neu, Umbenennung des Makros \cs{@email}}^^A +% \begin{macro}{\tud@emailaddress@simple} +% \changes{v2.05}{2016/07/09}{neu}^^A +% \begin{macro}{\tud@emailaddress@hyper} +% \changes{v2.05}{2016/07/09}{neu}^^A +% \begin{macrocode} +\newcommand*\@emailaddress{} +\newrobustcmd*\emailaddress{% + \kernel@ifstar{\tud@emailaddress@simple}{\tud@emailaddress@hyper}% +} +\newrobustcmd*\tud@emailaddress@simple[1]{\gdef\@emailaddress{#1}} +\newrobustcmd*\tud@emailaddress@hyper[2][]{\gdef\@emailaddress{#2}} +\AfterPackage{hyperref}{% + \renewrobustcmd*\tud@emailaddress@hyper[2][hidelinks]{% + \gdef\@emailaddress{% + \begingroup% + \urlstyle{same}% + \hypersetup{#1}% + \href{mailto:#2}{\nolinkurl{#2}}% + \endgroup% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@emailaddress@hyper +% \end{macro}^^A \tud@emailaddress@simple +% \end{field}^^A \@emailaddress +% \end{macro}^^A \emailaddress +% \begin{macro}{\course} +% \begin{field}{\@course} +% Studiengang für den Titel sowie den Kopf der Aufgabenstellung, wird im Makro +% \cs{@course} gespeichert. +% \begin{macrocode} +\newcommand*\@course{} +\newrobustcmd*\course[1]{\gdef\@course{#1}\ignorespaces} +% \end{macrocode} +% \end{field}^^A \@course +% \end{macro}^^A \course +% \begin{macro}{\discipline} +% \changes{v2.02}{2014/05/16}{neu, von \cs{branch} umbenannt}^^A +% \begin{field}{\@discipline} +% \changes{v2.02}{2014/05/16}{neu, von \cs{@branch} umbenannt}^^A +% Studienrichtung bzw. Fachrichtung für Titel und Kopf der Aufgabenstellung, +% wird im Makro \cs{@discipline} gespeichert. +% \begin{macrocode} +\newcommand*\@discipline{} +\newrobustcmd*\discipline[1]{\gdef\@discipline{#1}\ignorespaces} +% \end{macrocode} +% \end{field}^^A \@discipline +% \end{macro}^^A \discipline +% +% \iffalse +%<*book|report|article> +% \fi +% +% \begin{macro}{\matriculationnumber} +% \begin{field}{\@matriculationnumber} +% Die Matrikelnummer für Titelseite und Aufgabenstellung, wird in +% \cs{@matriculationid} gespeichert. +% \begin{macrocode} +\newcommand*\@matriculationnumber{} +\newrobustcmd*\matriculationnumber[1]{% + \gdef\@matriculationnumber{#1}\ignorespaces% +} +% \end{macrocode} +% \end{field}^^A \@matriculationnumber +% \end{macro}^^A \matriculationnumber +% \begin{macro}{\matriculationyear} +% \begin{field}{\@matriculationyear} +% Das Immatrikulationsjahr für den Titel wird in \cs{@matriculationyear} +% gespeichert. +% \begin{macrocode} +\newcommand*\@matriculationyear{} +\newrobustcmd*\matriculationyear[1]{\gdef\@matriculationyear{#1}\ignorespaces} +% \end{macrocode} +% \end{field}^^A \@matriculationyear +% \end{macro}^^A \matriculationyear +% \begin{macro}{\placeofbirth} +% \begin{field}{\@placeofbirth} +% Der Geburtsort für den Titel wird in \cs{@placeofbirth} gespeichert. +% \begin{macrocode} +\newcommand*\@placeofbirth{} +\newrobustcmd*\placeofbirth[1]{\gdef\@placeofbirth{#1}\ignorespaces} +% \end{macrocode} +% \end{field}^^A \@placeofbirth +% \end{macro}^^A \placeofbirth +% \begin{macro}{\thesis} +% \begin{field}{\@thesis} +% \changes{v2.02}{2014/11/06}{\cs{protected@xdef} genutzt}^^A +% \begin{field}{\@@thesis} +% \changes{v2.02}{2014/11/06}{\cs{protected@xdef} genutzt}^^A +% \begin{macro}{\subject} +% \begin{field}{\@subject} +% \begin{macro}{\tud@thesis@do} +% \begin{macro}{\tud@thesis@@do} +% \begin{macro}{\tud@thanks} +% Art bzw. Typ der Abschlussarbeit kann \cs{thesis}\marg{Abschlussarbeit} +% angegeben werden und wird im Makro \cs{@thesis} gespeichert. Alternativ +% dazu kann auch der Befehl \cs{subject} verwendet werden. Mit dem Befehl +% \cs{tud@thesis@do} wird in den Feldern \cs{@thesis} respektive \cs{@subject} +% nach bestimmten Schlagwörtern für Abschlussarbeiten o.\,ä. gesucht. Wird +% eines dieser Wörter gefunden, wird der entsprechende Bezeichner für dieses +% Feld gesetzt. Zusätzlich wird durch \cs{tud@thesis@@do} dafür gesorgt, dass +% gegebenenfalls der Inhalt von \cs{@subject} in \cs{@thesis} verschoben und +% entsprechend die Option \opt{subjectthesis} gesetzt wird. In \cs{@@thesis} +% wird die angegebene Abschlussarbeit ohne etwaige Fußnoten gespeichert. +% \begin{macrocode} +\newcommand*\@thesis{} +\newcommand*\@@thesis{} +\newcommand*\thesis[1]{\tud@thesis@do{thesis}{#1}} +\renewcommand*\subject[1]{\tud@thesis@do{subject}{#1}} +\newcommand*\tud@thanks{} +\newcommand*\tud@thesis@do[2]{% + \begingroup% +% \end{macrocode} +% Hier das gleiche wie an anderer Stelle auch schon. Der Inhalt einer eventuell +% vorhandenen Fußnote wird gesichert +% \begin{macrocode} + \global\let\tud@thanks\relax% + \def\thanks##1{\gdef\tud@thanks{##1}}% + \let\footnote\thanks% + \sbox\z@{#2}% + \let\thanks\@gobble% + \let\footnote\@gobble% + \tud@lowerstring{\@tempa}{#2}% + \ifstr{#1}{thesis}{\protected@xdef\@@thesis{#2}}{}% + \protected@edef\@tempa{% + \endgroup% + \def\noexpand\@tempa{\@tempa}% + }% + \@tempa% + \ifstr{\@tempa}{diss}{\tud@thesis@@do{#1}{\dissertationname}}{% + \ifstr{\@tempa}{doctoral}{\tud@thesis@@do{#1}{\dissertationname}}{% + \ifstr{\@tempa}{phd}{\tud@thesis@@do{#1}{\dissertationname}}{% + \ifstr{\@tempa}{diploma}{\tud@thesis@@do{#1}{\diplomathesisname}}{% + \ifstr{\@tempa}{master}{\tud@thesis@@do{#1}{\masterthesisname}}{% + \ifstr{\@tempa}{bachelor}{\tud@thesis@@do{#1}{\bachelorthesisname}}{% + \ifstr{\@tempa}{student}{\tud@thesis@@do{#1}{\studentthesisname}}{% + \ifstr{\@tempa}{evidence}{\tud@thesis@@do{#1}{\studentresearchname}}{% + \ifstr{\@tempa}{project}{\tud@thesis@@do{#1}{\projectpapername}}{% + \ifstr{\@tempa}{seminar}{\tud@thesis@@do{#1}{\seminarpapername}}{% + \ifstr{\@tempa}{term}{\tud@thesis@@do{#1}{\termpapername}}{% + \ifstr{\@tempa}{research}{\tud@thesis@@do{#1}{\researchname}}{% + \ifstr{\@tempa}{log}{\tud@thesis@@do{#1}{\logname}}{% + \ifstr{\@tempa}{report}{\tud@thesis@@do{#1}{\reportname}}{% + \ifstr{\@tempa}{internship}{\tud@thesis@@do{#1}{\internshipname}}{% + \csdef{@#1}{#2}% + }}}}}}}}}}}}}}}% +} +\newcommand*\tud@thesis@@do[2]{% + \ifstr{#1}{subject}{% + \ifx\@thesis\@empty\else% + \ClassWarning{\TUD@Class@Name}{% + Field `thesis' is overwritten by `subject'% + }% + \fi% + \TUD@key@preset{subjectthesis}{true}% + }{% + \TUD@key@preset{subjectthesis}{false}% + }% + \ifx\tud@thanks\relax% + \gdef\@thesis{#2}% + \else% + \protected@xdef\@thesis{\noexpand#2\noexpand\thanks{\tud@thanks}}% + \fi% + \protected@xdef\@@thesis{\trim@spaces{#2}}% +} +% \end{macrocode} +% \end{macro}^^A \tud@thanks +% \end{macro}^^A \tud@thesis@@do +% \end{macro}^^A \tud@thesis@do +% \end{field}^^A \@subject +% \end{macro}^^A \subject +% \end{field}^^A \@@thesis +% \end{field}^^A \@thesis +% \end{macro}^^A \thesis +% \begin{macro}{\graduation} +% \changes{v2.02}{2014/05/16}{neu, von \cs{degree} umbenannt}^^A +% \begin{field}{\@graduation} +% \changes{v2.02}{2014/05/16}{neu, von \cs{@degree} umbenannt}^^A +% \begin{field}{\@graduationabbreviation} +% \changes{v2.02}{2014/05/16}{neu, \cs{@degreeabbr} umbenannt}^^A +% Der angestrebte Abschluss bzw. der zu erwerbende akademische Grad, welcher +% auf der Titelseite ausgegeben werden soll, wird im Makro \cs{@graduation} +% gespeichert. Zusätzlich kann als optionales Argument die Kurzform des +% akademischen Grades angegeben werden, wird in \cs{@graduationabbr} +% gespeichert. +% \begin{macrocode} +\newcommand*\@graduation{} +\newcommand*\@graduationabbreviation{} +\newcommand*\graduation[2][]{% + \gdef\@graduationabbreviation{}% + \ifxblank{#1}{}{\gdef\@graduationabbreviation{(#1)}}% + \gdef\@graduation{#2}% +} +% \end{macrocode} +% \end{field}^^A \@graduationabbreviation +% \end{field}^^A \@graduation +% \end{macro}^^A \graduation +% +% \iffalse +%</book|report|article> +% \fi +% +% \begin{macro}{\professor} +% \begin{field}{\@professor} +% \begin{field}{\@professorfoot} +% \changes{v2.05}{2015/07/06}{neu}^^A +% Angabe des verantwortlichen Hochschullehrers für Titel und Aufgabenstellung, +% wird im Makro \cs{@professor} gespeichert. +% \begin{macrocode} +%<*book|report|article> +\newcommand*\@professor{} +\newcommand*\professor[1]{\gdef\@professor{#1}} +%</book|report|article> +%<*poster> +\newcommand*\@professorfoot{} +\newcommand*\professor[1]{\gdef\@professorfoot{#1}} +%</poster> +% \end{macrocode} +% \end{field}^^A \@professorfoot +% \end{field}^^A \@professor +% \end{macro}^^A \professor +% \begin{macro}{\supervisor} +% \changes{v2.02}{2014/05/16}{erzeugter Eintrag der Betreuer mit +% \cs{supervisor} für Selbstständigkeitserklärung verworfen}^^A +% \begin{field}{\@supervisor} +% (Erst- und Zweit"~)Betreuer bei Abschlussarbeiten, wird in \cs{@supervisor} +% gespeichert. Mehrere Betreuer werden durch \cs{and} getrennt. Für Poster kann +% der Befehl als Äquivalent zu \cs{contactperson} genutzt werden. +% \begin{macrocode} +%<*book|report|article> +\newcommand*\@supervisor{} +\newcommand*\supervisor[1]{\gdef\@supervisor{#1}} +%</book|report|article> +%<*poster> +\newcommand*\supervisor[1]{} +%</poster> +% \end{macrocode} +% \end{field}^^A \@supervisor +% \end{macro}^^A \supervisor +% +% \iffalse +%<*book|report|article> +% \fi +% +% \begin{macro}{\supporter} +% \changes{v2.02}{2014/05/16}{erzeugter Eintrag der Betreuer mit +% \cs{supervisor} für Selbstständigkeitserklärung verworfen}^^A +% \begin{field}{\@supporter} +% Diese Feld ist für die Hilfesteller bei der Anfertigung der Abschlussarbeit, +% welche auf der Selbstständigkeitserklärung aufgeführt werden. Mehrere +% Hilfesteller werden durch \cs{and} voneinander getrennt. +% \begin{macrocode} +\newcommand*\@supporter{} +\newcommand*\supporter[1]{\gdef\@supporter{#1}} +% \end{macrocode} +% \end{field}^^A \@supporter +% \end{macro}^^A \supporter +% \begin{macro}{\company} +% \begin{field}{\@company} +% Angabe einer externen Firma, wird im Makro \cs{@company} gespeichert. +% \begin{macrocode} +\newcommand*\@company{} +\newcommand*\company[1]{\gdef\@company{#1}} +% \end{macrocode} +% \end{field}^^A \@company +% \end{macro}^^A \company +% \begin{macro}{\referee} +% \begin{field}{\@referee} +% Gutachter bei einer Dissertation, werden im Makro \cs{@referee} gespeichert. +% Mehrere Gutachter werden durch \cs{and} getrennt. +% \begin{macrocode} +\newcommand*\@referee{} +\newcommand*\referee[1]{\gdef\@referee{#1}} +% \end{macrocode} +% \end{field}^^A \@referee +% \end{macro}^^A \referee +% \begin{macro}{\advisor} +% \begin{field}{\@advisor} +% Fachreferenten bei einer Dissertation, werden im Makro \cs{@advisor} +% gespeichert. Mehrere Fachreferenten werden durch \cs{and} getrennt. +% \begin{macrocode} +\newcommand*\@advisor{} +\newcommand*\advisor[1]{\gdef\@advisor{#1}} +% \end{macrocode} +% \end{field}^^A \@advisor +% \end{macro}^^A \advisor +% \begin{length}{\tud@len@signatureskip} +% \changes{v2.04}{2015/05/06}{neu}^^A +% Für alle Formatvorlagen, welche eine Unterschriftenzeile bereitstellen, wird +% ein einheitlicher Abstand verwendet. +% \begin{macrocode} +\newlength\tud@len@signatureskip +\setlength\tud@len@signatureskip{8ex plus 6ex minus 6ex} +% \end{macrocode} +% \end{length}^^A \tud@len@signatureskip +% \begin{macro}{\confirmationclosing} +% \begin{field}{\@confirmationclosing} +% Als Abschluss der Selbstständigkeitserklärung für Ort und Unterschrift. +% \begin{macrocode} +\newcommand*\@confirmationclosing{% + \tud@date@check% + \ifx\@date\@empty\else% + \medskip\noindent% + \ifx\@place\@empty\else\@place,\nobreakspace\fi\@date% + \fi% + \vskip\tud@len@signatureskip\noindent% + \begingroup% + \let\and\hfil% + \@@author\hfil% + \endgroup% +} +\newcommand*\confirmationclosing[1]{\gdef\@confirmationclosing{#1}} +% \end{macrocode} +% \end{field}^^A \@confirmationclosing +% \end{macro}^^A \confirmationclosing +% \begin{macro}{\place} +% \begin{field}{\@place} +% Die Angabe des Ortes mit \cs{place} für die Selbstständigkeitserklärung und +% ggf. das Datum wird im Makro \cs{@place} gespeichert und standardmäßig mit +% \enquote{Dresden} gesetzt. +% \begin{macrocode} +\newcommand*\@place{Dresden} +\newcommand*\place[1]{\gdef\@place{#1}} +% \end{macrocode} +% \end{field}^^A \@place +% \end{macro}^^A \place +% +% \iffalse +%</book|report|article> +% \fi +% +% \begin{macro}{\publisher} +% Kleine Korrektur für \KOMAScript, der Befehl sollte im Singular stehen. +% \begin{macrocode} +\providecommand*\publisher[1]{\publishers{#1}} +% \end{macrocode} +% \end{macro}^^A \publisher +% +% \iffalse +%<*poster> +% \fi +% +% \begin{macro}{\webpage} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \begin{field}{\@webpage} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \begin{macro}{\tud@webpage@simple} +% \changes{v2.05}{2016/07/09}{neu}^^A +% \begin{macro}{\tud@webpage@hyper} +% \changes{v2.05}{2016/07/09}{neu}^^A +% Im Fußbereich eines Posters kann zusätzlich eine Web-Seite angegeben werden. +% \begin{macrocode} +\newcommand*\@webpage{} +\newrobustcmd*\webpage{% + \kernel@ifstar{\tud@webpage@simple}{\tud@webpage@hyper}% +} +\newrobustcmd*\tud@webpage@simple[1]{\gdef\@webpage{#1}} +\newrobustcmd*\tud@webpage@hyper[2][]{\gdef\@webpage{#2}} +\AfterPackage{hyperref}{% + \renewrobustcmd*\tud@webpage@hyper[2][hidelinks]{% + \gdef\@webpage{% + \begingroup% + \urlstyle{same}% + \hypersetup{#1}% + \url{#2}% + \endgroup% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@webpage@hyper +% \end{macro}^^A \tud@webpage@simple +% \end{field}^^A \@webpage +% \end{macro}^^A \webpage +% +% \iffalse +%</poster> +% \fi +% +% \subsection{Datumsfelder für die \TUDScript-Klassen} +% +% \begin{macro}{\printdate} +% Im Folgenden werden mehrere Datumsfelder definiert. Damit diese optional +% durch eines der Pakete \pkg{isodate} oder \pkg{datetime2} formatiert werden +% können, wird der zu \pkg{isodate} gehörende Befehl \cs{printdate} in die +% Definition der eigentlichen Datumsfelder integriert. Sollte das Paket nicht +% geladen sein, so verwendet der Befehl die Schnittstelle von \pkg{datetime2}, +% welches nur ein spezielles Datenformat als Eingabe akzeptiert. Wird keines +% der beiden Pakete verwendet, wird das Argument direkt durchgereicht. +% \begin{macrocode} +\TUD@UnwindPackage{isodate}{% + \@ifpackageloaded{datetime2}{% + \providecommand*\printdate[1]{\DTMDate{#1}}% + }{% + \providecommand*\printdate[1]{#1}% + }% +} +% \end{macrocode} +% \end{macro}^^A \printdate +% \begin{macro}{\tud@printdate} +% Damit die Datumsfelder definiert werden können und eines der Datumspakete +% unterstützen, muss beim Festlegen der Datumsfelder einiges beachtet werden. +% So müssen beispielsweise leere Argumente und Sonderfälle separat betrachtet +% werden. Damit dies einheitlich für alle Felder geschehen kann, wird dieser +% Befehl genutzt. Dabei wird als erstes Argument der Befehlsname für das +% Datumsfeld übergeben, als zweites Argument der gewünschte Inhalt. +% \begin{macrocode} +\newcommand*\tud@printdate[2]{% + \ifx\today#2\relax% + \gdef#1{#2}% + \else% + \ifxblank{#2}% + {\gdef#1{}}% + {\gdef#1{\printdate{#2}}}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@printdate +% \begin{macro}{\tud@date@check} +% \changes{v2.04}{2015/05/06}{neu}^^A +% Das Makro prüft vor der Nutzung des Datumfeldes \cs{@date}, ob selbiges +% explizit angegeben wurde. Falls dies nicht der Fall ist, wird eine Warnung +% ausgegeben. +% \begin{macrocode} +\newcommand*\tud@date@check{% + \ifdefvoid{\@duedate}{% + \ClassWarning{\TUD@Class@Name}{% + `\string\date' was not given\MessageBreak% + Since a thesis is a self-contained work, an end\MessageBreak% + date should be specified by the author. \MessageBreak% + Nevertheless, today's date is used% + }% + }{% + \ClassWarning{\TUD@Class@Name}{% + `\string\date' was not given\MessageBreak% + It's substituted by the given due date% + }% + \global\let\@date\@duedate% + }% + \global\let\tud@date@check\relax% +} +% \end{macrocode} +% \end{macro}^^A \tud@date@check +% \begin{macro}{\date} +% \begin{parameter}{before} +% \changes{v2.05}{2016/05/27}{neu}^^A +% \begin{parameter}{after} +% \changes{v2.05}{2016/05/27}{neu}^^A +% \begin{parameter}{prefix} +% \changes{v2.05}{2016/05/27}{neu}^^A +% \begin{parameter}{suffix} +% \changes{v2.05}{2016/05/27}{neu}^^A +% \begin{parameter}{pre} +% \changes{v2.05}{2016/05/27}{neu}^^A +% \begin{parameter}{app} +% \changes{v2.05}{2016/05/27}{neu}^^A +% \begin{parameter}{place} +% \changes{v2.05}{2016/05/27}{neu}^^A +% \begin{macro}{\tud@date@set} +% \changes{v2.05}{2016/05/27}{neu}^^A +% \changes{v2.06}{2018/08/08}{optionales Argument nutzt \cs{tud@toks@}}^^A +% \begin{field}{\@date} +% \begin{field}{\@beforedate} +% \changes{v2.05}{2016/05/27}{neu}^^A +% \begin{field}{\@afterdate} +% \changes{v2.05}{2016/05/27}{neu}^^A +% Das Abgabedatum der Arbeit für den Titel, wird im originalen Makro \cs{@date} +% gespeichert. Zusätzlich kann über die Parameter im optionalen Argument eine +% Ergänzung davorgesetzt angehängt werden~-- beispielsweise als Erklärung für +% eine verspätete Abgabe aufgrund einer Verlängerung der Bearbeitungszeit~-- +% welche in den Feldern \cs{@beforedate} und \cs{@afterdate} gespeichert +% wird. Hierfür wird der originale Befehl für das Datum \cs{date} erweitert, +% wobei die Sternversion \cs{date*} den angegebenen Ort als Präfix verwendet. +% \begin{macrocode} +\renewcommand*\date{% + \kernel@ifstar{% + \TUD@parameter@set{date}{pre=\noexpand\@place{,}}% + \tud@date@set% + }{\tud@date@set}% +} +\newcommand*\tud@date@set[2][]{% + \tud@toks@{#1}% + \TUD@parameter@set{date}{\the\tud@toks@}% + \tud@printdate{\@date}{#2}% + \global\let\tud@date@check\relax% +} +\newcommand*\@beforedate{} +\newcommand*\@afterdate{} +\TUD@parameter@family{date}{% + \TUD@parameter@def{before}{\def\@beforedate{#1}}% + \TUD@parameter@let{pre}{before}% + \TUD@parameter@let{prefix}{before}% + \TUD@parameter@def{after}{\def\@afterdate{#1}}% + \TUD@parameter@let{app}{after}% + \TUD@parameter@let{suffix}{after}% + \TUD@parameter@def{place}{\def\@place{#1}\def\@beforedate{#1,}}% + \TUD@parameter@handler@value{after}% +} +% \end{macrocode} +% \end{field}^^A \@afterdate +% \end{field}^^A \@beforedate +% \end{field}^^A \@date +% \end{macro}^^A \tud@date@set +% \end{parameter}^^A place +% \end{parameter}^^A app +% \end{parameter}^^A pre +% \end{parameter}^^A suffix +% \end{parameter}^^A prefix +% \end{parameter}^^A after +% \end{parameter}^^A before +% \end{macro}^^A \date +% \begin{macro}{\tud@date@print} +% \changes{v2.05}{2016/05/27}{neu}^^A +% Mit diesem Makro erfolgt die eigentliche Ausgabe des Datums und ggf. der +% optionalen Ergänzungen. +% \begin{macrocode} +\newcommand*\tud@date@print{% + \ifx\@date\@empty\else% + \ifx\@beforedate\@empty\else% + \expandafter\trim@spaces@noexp\expandafter{\@beforedate}\nobreakspace% + \fi% + \@date% + \ifx\@afterdate\@empty\else% + \nobreakspace\expandafter\trim@spaces@noexp\expandafter{\@afterdate}% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@date@print +% +% \iffalse +%<*book|report|article> +% \fi +% +% \begin{macro}{\defensedate} +% \begin{field}{\@defensedate} +% Das Verteidigungsdatum erscheint auf dem Titel und wird in \cs{@defensedate} +% gespeichert. +% \begin{macrocode} +\newcommand*\@defensedate{} +\newcommand*\defensedate[1]{\tud@printdate{\@defensedate}{#1}} +% \end{macrocode} +% \end{field}^^A \@defensedate +% \end{macro}^^A \defensedate +% \begin{macro}{\dateofbirth} +% \begin{field}{\@dateofbirth} +% Angabe des Geburtstages für die Titelseite, wird im Makro \cs{@dateofbirth} +% gespeichert. +% \begin{macrocode} +\newcommand*\@dateofbirth{} +\newrobustcmd*\dateofbirth[1]{% + \tud@printdate{\@dateofbirth}{#1}\ignorespaces% +} +% \end{macrocode} +% \end{field}^^A \@dateofbirth +% \end{macro}^^A \dateofbirth +% +% \iffalse +%</book|report|article> +%</class&!manual> +%<*package&supervisor|class&manual> +% \fi +% +% \subsection{% +% Felder für die Klasse \cls{tudscrposter}% +% und das Paket \pkg{tudscrsupervisor}% +% } +% +% Die Klasse \cls{tudscrposter} und das Paket \pkg{tudscrsupervisor} stellen +% einige weitere Felder bereit bzw. erweitern deren Funktionalitäten. +% +% \begin{macro}{\chairman} +% \begin{field}{\@chairman} +% Die Angabe des Prüfungsausschussvorsitzenden für die Aufgabenstellung, wird +% im Makro \cs{@chairman} gespeichert. +% \begin{macrocode} +\newcommand*\@chairman{} +\newcommand*\chairman[1]{\gdef\@chairman{#1}} +% \end{macrocode} +% \end{field}^^A \@chairman +% \end{macro}^^A \chairman +% \begin{macro}{\grade} +% \begin{field}{\@grade} +% \begin{field}{\@headline} +% Die Befehle dienen zum Abspeichern der entsprechenden Parameter innerhalb +% der neu definierten Umgebungen aus dem Paket \pkg{tudscrsupervisor}. +% \begin{macrocode} +\newcommand*\@grade{} +\newcommand*\grade[1]{\gdef\@grade{#1}} +\newcommand*\@headline{} +% \end{macrocode} +% \end{field}^^A \@headline +% \end{field}^^A \@grade +% \end{macro}^^A \grade +% \begin{macro}{\issuedate} +% \begin{field}{\@issuedate} +% Angabe des Anfangsdatums für die Aufgabenstellung, wird im Makro +% \cs{@issuedate} gespeichert. +% \begin{macrocode} +\newcommand*\@issuedate{} +\newcommand*\issuedate[1]{\tud@printdate{\@issuedate}{#1}} +% \end{macrocode} +% \end{field}^^A \@issuedate +% \end{macro}^^A \issuedate +% \begin{macro}{\duedate} +% \begin{field}{\@duedate} +% Angabe des geplanten Abgabedatums für die Aufgabenstellung, wird im Makro +% \cs{@duedate} gespeichert. +% \begin{macrocode} +\newcommand*\@duedate{} +\newcommand*\duedate[1]{\tud@printdate{\@duedate}{#1}} +% \end{macrocode} +% \end{field}^^A \@duedate +% \end{macro}^^A \duedate +% +% \iffalse +%</package&supervisor|class&manual> +%<*class&poster|package&supervisor|class&manual> +% \fi +% +% Einige Befehle werden nur definiert, falls das Paket nicht mit der Klasse +% \cls{tudscrposter} verwendet wird -- was allerdings nicht sinnvoll ist. +% \begin{macrocode} +%<*supervisor> +\@ifclassloaded{tudscrposter}{\@tempswafalse}{\@tempswatrue} +\if@tempswa +%</supervisor> +% \end{macrocode} +% \begin{macro}{\contactperson} +% \changes{v2.02}{2014/05/16}{neu, Makro \cs{contact} umbenannt}^^A +% \begin{field}{\@contactperson} +% \changes{v2.02}{2014/05/16}{neu, Makro \cs{@contact} umbenannt}^^A +% \begin{macro}{\office} +% \begin{field}{\@office} +% \begin{macro}{\telephone} +% \changes{v2.02}{2014/05/16}{neu, Umbenennung des Makros \cs{phone}}^^A +% \begin{field}{\@telephone} +% \changes{v2.02}{2014/05/16}{neu, Umbenennung des Makros \cs{@phone}}^^A +% \begin{macro}{\telefax} +% \changes{v2.05}{2016/04/05}{neu}^^A +% \begin{field}{\@telefax} +% \changes{v2.05}{2016/04/05}{neu}^^A +% Für einen Aushang bzw. ein Poster kann eine oder mehrere Kontaktpersonen +% angegeben werden. Zusätzlich lassen sich für jede einzelne Person ein Raum, +% eine Telefonnummer und die E"~Mail-Adresse hinzugefügen. +% \begin{macrocode} +\newcommand*\@contactperson{} +\newcommand*\contactperson[1]{\gdef\@contactperson{#1}} +%<*poster> +\let\supervisor\contactperson +%</poster> +\newcommand*\@office{} +\newrobustcmd*\office[1]{\gdef\@office{#1}} +\newcommand*\@telephone{} +\newrobustcmd*\telephone[1]{\gdef\@telephone{#1}} +\newcommand*\@telefax{} +\newrobustcmd*\telefax[1]{\gdef\@telefax{#1}} +% \end{macrocode} +% \end{field}^^A \@telefax +% \end{macro}^^A \telefax +% \end{field}^^A \@telephone +% \end{macro}^^A \telephone +% \end{field}^^A \@office +% \end{macro}^^A \office +% \end{field}^^A \@contactperson +% \end{macro}^^A \contactperson +% +% \iffalse +%</class&poster|package&supervisor|class&manual> +%<*!manual> +%<*class> +% \fi +% +% \subsection{Verarbeitung bestimmter Feldinhalte für die Ausgabe} +% +% Einige Felder sind darauf ausgelegt, dass deren kommagetrennte Inhalte +% einzeln abgearbeitet und ausgewertet werden können. Die folgenden Makros +% übernehmen diese Aufgabe. +% \begin{macro}{\tud@multiple@split} +% \begin{macro}{\tud@multiple@@split} +% \begin{macro}{\tud@multiple@@@split} +% Für Felder, die mehrere Personen~-- getrennt durch \cs{and}~-- beinhalten +% können und für die zusätzliche Angaben durch die Verwendung weiterer Makros +% innerhalb des Feldbefehlargumentes möglich sind, werden diese Befehle zum +% Aufteilen der Angaben bereitgestellt. Mit diesen wird es möglich, die durch +% \cs{and} getrennten Teile separat auszuwerten. Für diese Unterfangen wird der +% Befehl \cs{tud@multiple@@split} definiert. Dessen obligatorisches Argument +% ist dabei das Feld mit dem auszuwertenden Inhalt. +% +% Dafür müssen für jedes so auszuwertende Feld zum einen zum Zeitpunkt der +% Ausgabe das entsprechende Makro \cs{tud@split\meta{Feld}} und zum anderen +% eine Liste der auszuwertenden lokalen Angaben \cs{tud@split\meta{Feld}@list} +% definiert sein. Momentan werden die beiden Felder \cs{@author} und~-- für die +% Klasse \cls{tudscrposter} sowie das Paket Pakete \pkg{tudscrsupervisor}~-- +% \cs{@contactperson} zur Angabe zusätzlicher Informationen unterstützt. +% \begin{macrocode} +\newcommand*\tud@multiple@@split{} +\newcommand*\tud@multiple@split[1]{% +% \end{macrocode} +% Sollte ein Feld verwendet werden, welches initial eine Fehlermeldung enthält, +% so die vorhandene Warnung ausgegeben und danach das Feld als leer definiert. +% \begin{macrocode} + \expandafter\ifpatchable\expandafter{\csname#1\endcsname}{% + \@latex@warning@no@line% + }{% + \csuse{#1}\csgdef{#1}{}% + }{}% +% \end{macrocode} +% Das Makro \cs{tud@multiple@@split} wird so definiert, dass der Befehl +% \cs{and} als Separator für die einzelnen Argumente dient. Mit den beiden +% freigestellten Argumenten kann das Makro zur eigentlichen Ausgabe aufgerufen +% werden, welches aus dem obligatorischen Argument |#1| konstruiert wird +% (\cs{tud@split\meta{Feld}}). An dieses wird der jeweils aktuelle Autor +% im ersten Argument und die restlichen im zweiten Argument übergeben. +% \begin{macrocode} + \def\tud@multiple@@split##1\and##2\relax{% + \expandafter\csname tud@split#1@do\endcsname{##1}{##2}% + }% + \begingroup% + \let\and\relax% + \let\newline\@empty% + \let\\\@empty% +% \end{macrocode} +% Das Feld wird mit \cs{and} terminiert, um der Definition von +% \cs{tud@multiple@@split} in jedem Fall zu entsprechen. +% \begin{macrocode} + \edef\@tempa{\csname#1\endcsname\and}% + \expandafter\endgroup% + \expandafter\tud@multiple@@split\@tempa\relax% +} +% \end{macrocode} +% Der Befehl \cs{tud@multiple@@@split} prüft zum Schluss, ob noch weitere +% Autoren angegeben sind. Sollte dies der Fall sein, so wird der Inhalt des +% zweiten Argumentes ausgeführt und \cs{tud@multiple@@split} ein weiteres Mal +% aufgerufen, um so sequentiell alle Autoren abzuarbeiten. Dafür muss +% \cs{tud@multiple@@@split} innerhalb des verarbeitenden Makro +% (\cs{tud@split\meta{Feld}}) aufgerufen werden. +% \begin{macrocode} +\newcommand*\tud@multiple@@@split[2]{% + \ifx\relax#1\relax% + \let\@tempb\relax% + \else% + \def\@tempb{#2\tud@multiple@@split#1\relax}% + \fi% + \@tempb% +} +% \end{macrocode} +% \end{macro}^^A \tud@multiple@@@split +% \end{macro}^^A \tud@multiple@@split +% \end{macro}^^A \tud@multiple@split +% \begin{macro}{\tud@multiple@fields@store} +% \changes{v2.04}{2015/05/12}{neu}^^A +% \begin{macro}{\tud@multiple@fields@restore} +% \changes{v2.04}{2015/05/12}{neu}^^A +% Mit \cs{tud@multiple@fields@store} und \cs{tud@multiple@fields@restore} +% werden Hilfsmakros definiert, um einzelne Feldinhalte lokal ändern und nach +% der Verarbeitung auf den ursprünglichen Wert zurücksetzen zu können. +% +% Nach der Sicherung der globalen Feldinhalte wird der übergebene Teilinhalt +% des zweiten Argumentes mit \cs{sbox}\cs{z@}\marg{\#2} in eine Box expandiert. +% Der Teilinhalt entspricht dabei dem aktuellen Teil des Feldes vor dem +% nächsten \cs{and}. Damit werden die ggf. angegebenen lokalen Felder gesetzt, +% welche in \cs{tud@split\meta{Feld}@list} aufgelistet sind ohne eine Ausgabe +% zu erzeugen. +% \begin{macrocode} +\newcommand*\tud@multiple@fields@store[2]{% + \def\@tempa##1{\ifcsdef{@##1}{\tud@cs@store{@##1}}{}}% + \letcs\@tempb{tud@split#1@list}% + \let\and\relax% + \expandafter\forcsvlist\expandafter\@tempa\expandafter{\@tempb}% + \begingroup% + \let\thanks\@gobble% + \let\footnote\@gobble% + \sbox\z@{#2}% + \endgroup% +} +% \end{macrocode} +% Nach dem Verarbeiten und der Ausgabe der lokalen Felder werden die zuvor +% bestehenden Feldwerte zurückgesetzt. +% \begin{macrocode} +\newcommand*\tud@multiple@fields@restore[1]{% + \def\@tempa##1{% + \ifcsdef{@##1}{% + \tud@cs@restore{@##1}% + \global\csletcs{@##1}{@##1}% + }{}% + }% + \letcs\@tempb{tud@split#1@list}% + \let\and\relax% + \expandafter\forcsvlist\expandafter\@tempa\expandafter{\@tempb}% +} +% \end{macrocode} +% \end{macro}^^A \tud@multiple@fields@restore +% \end{macro}^^A \tud@multiple@fields@store +% \begin{macro}{\tud@multiple@fields@preset} +% \changes{v2.04}{2015/05/12}{neu}^^A +% Mit diesem Makro wird es möglich, die Inhalte bestimmter Felder aus einer +% definierten Liste \cs{tud@split\meta{Feld}@list} auf Standardwerte zu setzen. +% \begin{macrocode} +\newcommand*\tud@multiple@fields@preset[3]{% + \def\@tempa##1{% + \edef\@tempc{\csuse{##1}}% + \ifstr{#2}{*}{% + \csdef{@##1}{}% + }{% + \begingroup% + \protected@expandtwoargs\in@{\@tempc}{\csuse{#1}}% + \ifin@% + \ifcsvoid{@##1}{\@tempc{#2}}{}% + \fi% + \endgroup% + }% + }% + \letcs\@tempb{tud@split#1@list}% + \let\and\relax% + \expandafter\forcsvlist\expandafter\@tempa\expandafter{\@tempb}% + \begingroup% + \let\thanks\@gobble% + \let\footnote\@gobble% + \sbox\z@{#3}% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \tud@multiple@fields@preset +% +% \iffalse +%</class> +% \fi +% +% Auf der Titelseite sowie für die Aufgabenstellung (\pkg{tudscrsupervisor}) +% und den Seitenfuß von Postern (\cls{tudscrposter}) wird die Angabe einer +% kollaborativen Autorenschaft ermöglicht, wo für jeden einzelnen Autor weitere +% Angaben (Matrikelnummer etc.) gemacht werden können. Hierfür werden die +% folgenden Makros bereitgestellt. +% \begin{macro}{\tud@split@author@do} +% \changes{v2.02}{2014/07/25}{neu, aus Umbenennung \cs{tud@split@@author}}^^A +% \begin{macro}{\tud@split@author@list} +% \changes{v2.02}{2014/07/25}{neu, Umbenennung \cs{tud@split@@author@list}}^^A +% \begin{macro}{\tud@split@contactperson@do} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \begin{macro}{\tud@split@contactperson@list} +% \changes{v2.05}{2015/07/06}{neu}^^A +% Die beiden Makros \cs{tud@split@author@do} und \cs{tud@split@contactperson@do} +% werden zunächst jeweils als Dummy initialisiert und an den entsprechenden +% Stellen umdefiniert. Dies betrifft den Titel, die Aufgabenstellung und den +% Aushang in den Umgebungen \env{task} und \env{notice} sowie den Seitenfuß bei +% Postern. Im Makro \cs{tud@split@author@list} werden alle Felder hinterlegt, +% die durch \cs{tud@multiple@fields@\dots} geprüft und ggf. initialisiert +% werden sollen. +% +% Für die Angabe mehrerer Kontaktpersonen im Posterfuß (\cls{tudscrposter}) +% oder auf einem Aushang (\pkg{tudscrsupervisor}) wird äquivalent verfahren. +% \begin{macrocode} +%<*class> +\newcommand*\tud@split@author@do[2]{} +%<*book|report|article> +\newcommand*\tud@split@author@list{% + authormore,course,discipline,emailaddress,% + matriculationyear,enrolmentyear,% + matriculationnumber,studentid,matriculationid,% + placeofbirth,birthplace,dateofbirth,birthday,% +} +%</book|report|article> +% \end{macrocode} +% Der Befehl \cs{tud@split@author@list} für die Klasse \cls{tudscrposter}. +% \begin{macrocode} +%<*poster> +\newcommand*\tud@split@author@list{% + authormore,course,discipline,emailaddress,office,telephone,telefax% +} +%</poster> +%</class> +%<*class&poster|package&supervisor> +\newcommand*\tud@split@contactperson@do[2]{} +\newcommand*\tud@split@contactperson@list{emailaddress,office,telephone,telefax} +%</class&poster|package&supervisor> +% \end{macrocode} +% Damit ist der Teil für das Paket \pkg{tudscrsupervisor} abgeschlossen, wo +% bei der Verwendung von \cls{tudscrposter} die vorhergenden Befehle nicht +% definiert werden, beendet. +% \begin{macrocode} +%<*package&supervisor> +\fi +%</package&supervisor> +% \end{macrocode} +% \end{macro}^^A \tud@split@contactperson@list +% \end{macro}^^A \tud@split@contactperson@do +% \end{macro}^^A \tud@split@author@list +% \end{macro}^^A \tud@split@author@do +% +% \iffalse +%</!manual> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-fonts.dtx b/macros/latex/contrib/tudscr/source/tudscr-fonts.dtx new file mode 100644 index 0000000000..228304d9ee --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-fonts.dtx @@ -0,0 +1,4268 @@ +% \CheckSum{3123} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-fonts.dtx +%<*dtx> +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +% \fi +% +\ProvidesFile{tudscr-fonts.dtx}[2019/08/27 v2.06d TUD-Script\space% +% +% \iffalse +%</dtx> +%<package&identify>\ProvidesPackage{tudscrfonts}[% +%<*package&identify> +%!TUD@Version +%</package&identify> +%<package&identify> package +%<*dtx|package&identify> +% \fi + (corporate design fonts)% +] +% \iffalse +%</dtx|package&identify> +%<*dtx> +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-fonts.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \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.02}{2014/08/29}{Verwendung von \pkg{mweights} unnötig}^^A +% \changes{v2.02}{2014/08/29}{Unterstützung für \pkg{fontspec}}^^A +% \changes{v2.04}{2015/02/27}{Interaktion mit Paketen insbesondere für +% den Mathematiksatz verbessert}^^A +% \changes{v2.04c}{2015/11/29}{Bugfix für \pkg{fontspec} bei fehlenden +% Schriften}^^A +% +% \section{Die Hausschrift der \TnUD} +% +% Für das \TUDCD wird die Schrift \OpenSans benötigt. Die Type1-Variante wird +% mit diesen Klassen mitgeliefert, die OTF-Variante muss entweder durch das +% Paket \pkg{opensans} oder über das System bereitgestellt werden. Hier werden +% die Optionen und Befehle zur Verwendung der Schriften im Dokument definiert. +% +% Die Schriften des \CDs können nicht nur mit den \TUDScript-Klassen sondern +% auch mit anderen \LaTeX-Dokumentklassen verwendet werden. Hierfür wird das +% Paket \pkg{tudscrfonts} bereitgestellt. Damit kann auf die Installtion der +% Schriftfamilien für die alten Klassen verzichtet werden. Im Vergleich zu +% dieser Installation werden dabei fehlende Glyphen ergänzt und Probleme beim +% Kerning behoben. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*class&option> +% \fi +% +% \subsection{% +% Verwendung durch die \TUDScript-Klassen und das Paket \pkg{tudscrfonts}% +% } +% +% Die Schriften des \TUDCDs werden standardmäßig durch die \TUDScript-Klassen +% verwendet. Für Dokumentklassen, welche nicht zum \TUDScript-Bundle gehören, +% können diese über das Paket \pkg{tudscrfonts} geladen werden. +% \begin{macrocode} +\PreventPackageFromLoading[% + \ClassWarning{\TUD@Class@Name}{% + The package `tudscrfonts' must not be used with\MessageBreak% + a TUD-Script class% + }% +]{tudscrfonts} +% \end{macrocode} +% +% \iffalse +%</class&option> +%<*package&identify> +% \fi +% +% Sollte keine \KOMAScript-Klasse genutzt werden, wird zusätzlich das Paket +% \pkg{scrextend} benötigt. +% \begin{macrocode} +\ifcsname KOMAClassName\endcsname\else + \RequirePackage{scrextend}[2013/12/19] +\fi +% \end{macrocode} +% Wird das Paket \pkg{tudscrfonts} nach einer der Klassen verwendet, welche die +% veralteten Schriftfamilien für \Univers und \DIN definieren, so wird eine +% Warnung mit dem Hinweis auf das Paket \pkg{fix-tudscrfonts} ausgegeben. +% \begin{macrocode} +\@tempswafalse% +\@for\@tempa:={% + tudbook,tudbeamer,tudfax,tudform,tudhaus,tudletter,tudposter,tudmathposter% +}\do{% + \@ifclassloaded{\@tempa}{% + \if@tempswa\else\@tempswatrue\let\@tempb\@tempa\fi% + }{}% +}% +\if@tempswa% + \@ifpackageloaded{fix-tudscrfonts}{}{% + \PackageWarning{tudscrfonts}{% + As you loaded class `\@tempb', you should\MessageBreak% + load `fix-tudscrfonts' before the class\MessageBreak% + with `\string\RequirePackage'% + }% + }% +\fi% +% \end{macrocode} +% +% \iffalse +%</package&identify> +%<*body> +% \fi +% +% \begin{macro}{\tud@cdfont@wrn} +% \changes{v2.06}{2018/06/17}{neu}^^A +% \begin{macro}{\tud@cdmath@wrn} +% \changes{v2.06}{2019/06/17}{neu}^^A +% Diese beiden Makros dienen als zentrale Hooks, die während der Initialiserung +% der Schrfiten des \CDs befüllt werden, falls beispielsweise Warnungen wegen +% fehlender Schriftdateien oder inkompatibler Pakete ausgegeben werden müssen. +% Diese werden gegebebfalls nur einmalig bei der Aktivierung der Schriften des +% \CDs ausgegeben. +% \begin{macrocode} +\newcommand*\tud@cdfont@wrn{\global\let\tud@cdfont@wrn\relax} +\newcommand*\tud@cdmath@wrn{\global\let\tud@cdmath@wrn\relax} +% \end{macrocode} +% \end{macro}^^A \tud@cdmath@wrn +% \end{macro}^^A \tud@cdfont@wrn +% +% \subsection{Auswahl des Fontformates} +% +% Das \TUDScript-Bundle unterstützt sowohl die Schriftauswahl im klassischen +% New Font Selection Scheme (NFSS) als auch das Einbinden der Schriften im +% OpenType-Format aus dem System über das Paket \pkg{fontspec} für Lua\LaTeX{} +% bzw. Xe\LaTeX{}, wobei die letztere Variante nicht ideal ist. Zum einen +% funktioniert das Kerning nicht sonderlich gut und zum anderen sind keine +% Schriften für den mathematischen Satz vorhanden. +% +% \begin{macro}{\if@tud@x@fontspec@enabled} +% \changes{v2.02}{2014/08/29}{neu}^^A +% Wird das Paket \pkg{fontspec} durch den Nutzer geladen, wird der passende +% Schlüssel gesetzt und die Schrifteinstellungen erfolgen mit den dazugehörigen +% Befehlen. Dies wurde in früheren Versionen mit der Option \opt{fontspec} +% realisiert, die auch weiterhin bereitgehalten wird. Nach dem Laden des Paketes +% wird geprüft, ob diesem mit den entsprechenden Optionen das Bereitstellen der +% Mathematikschriften überlassen wurde. In diesem Fall wird eine entsprechende +% Warnung an \cs{tud@cdmath@wrn} angehängt. +% \begin{macrocode} +\newif\if@tud@x@fontspec@enabled +\PassOptionsToPackage{no-math}{fontspec} +\AfterPackage*{fontspec}{% + \@ifpackagelater{fontspec}{2017/01/24}{% + \@tud@x@fontspec@enabledtrue% + \@tud@res@swafalse% + \@ifpackagewith{fontspec}{no-math}{}{\@tud@res@swatrue}% + \@ifpackagewith{fontspec}{math}{\@tud@res@swatrue}{}% + \if@tud@res@swa% + \appto\tud@cdmath@wrn{% +%<*class> + \ClassWarningNoLine{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarningNoLine{tudscrfonts}% +%</package> + {% + It's recommended to load package `fontspec'\MessageBreak% + with option `no-math', if you want to use the\MessageBreak% + corporate design fonts in math mode% + }% + }% + \fi% + }{% + \@tud@x@fontspec@enabledfalse% +%<*class> + \ClassWarningNoLine{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarningNoLine{tudscrfonts}% +%</package> + {% + Version `2017/01/24' of package `fontspec' is needed,\MessageBreak% + but only version\MessageBreak% + `\csname ver@fontspec.sty\endcsname'\MessageBreak% + is available, so a fallback layout is used% + }% + }% +} +% \end{macrocode} +% Bei der Nutzung des Pakets \pkg{unicode-math} kann es ebenfalls zu Problemen +% mit den mathematischen Schriften kommen, weshalb auch hier eine Warnung an +% \cs{tud@cdmath@wrn} angehängt wird. +% \begin{macrocode} +\AfterPackage*{unicode-math}{% + \appto\tud@cdmath@wrn{% +%<*class> + \ClassWarningNoLine{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarningNoLine{tudscrfonts}% +%</package> + {% + The usage of package `unicode-math' will\MessageBreak% + most likely cause erroneous outputs in math mode\MessageBreak% + with corporate design fonts% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@x@fontspec@enabled +% \begin{macro}{\if@tud@x@mweights@enabled} +% \changes{v2.04}{2015/04/24}{Erkennung des Paketes \pkg{mweights}}^^A +% Das Paket \pkg{mweights} wird geladen, um unterschiedliche Schriftschnitte +% für beispielsweise die TypeWriter-Schriften nutzen zu können. +% \begin{macrocode} +\TUD@RecommendPackage{mweights}[2017/03/30]% +\newif\if@tud@x@mweights@enabled +\AfterPackage*{mweights}{\@tud@x@mweights@enabledtrue} +% \end{macrocode} +% \end{macro}^^A \if@tud@x@mweights@enabled +% +% \subsection{Prüfen der Schriftverfügbarkeit} +% +% Nachfolgend werden Makros definiert, mit denen geprüft werden kann, ob die +% notwendigen Schriften im passenden Fontformat auch installiert sind. Seit +% 2018 wird \OpenSans als die Hausschrift verwendet. Um weiterhin noch alte +% Dokumente mit den Schriften \Univers und \DIN nutzen zu können, werden die +% entsprechenden Befehle ebenfalls vorgehalten. +% +% \begin{macro}{\if@tud@cdfont@fam@exist} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\if@tud@cdfont@db@exist} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@cdfont@fam} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@cdfont@fam@lf} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@cdfont@fam@osf} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@cdfont@db} +% Zu Beginn werden Schalter und Hilfsmakros sowohl für den Fließtext\dots +% \begin{macrocode} +\newif\if@tud@cdfont@fam@exist +\newif\if@tud@cdfont@db@exist +\newcommand*\tud@cdfont@fam{opensans-TLF} +\newcommand*\tud@cdfont@fam@lf{opensans-TLF} +\newcommand*\tud@cdfont@fam@osf{opensans-TOsF} +\if@tud@cdoldfont@active + \renewcommand*\tud@cdfont@fam{lun} + \renewcommand*\tud@cdfont@fam@lf{lun} + \renewcommand*\tud@cdfont@fam@osf{lun} + \newcommand*\tud@cdfont@db{0m6} +\fi +% \end{macrocode} +% \end{macro}^^A \tud@cdfont@db +% \end{macro}^^A \tud@cdfont@fam@osf +% \end{macro}^^A \tud@cdfont@fam@lf +% \end{macro}^^A \tud@cdfont@fam +% \end{macro}^^A \if@tud@cdfont@db@exist +% \end{macro}^^A \if@tud@cdfont@fam@exist +% \begin{macro}{\tud@ttfont@fam} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@ttfont@rb} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@ttfont@lm} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \dots als auch für die TypeWriter-Schriften definiert. +% \begin{macrocode} +\newcommand*\tud@ttfont@fam{tudtt} +\newcommand*\tud@ttfont@rb{tudtt} +\newcommand*\tud@ttfont@lm{lmtt} +% \end{macrocode} +% \end{macro}^^A \tud@ttfont@lm +% \end{macro}^^A \tud@ttfont@rb +% \end{macro}^^A \tud@ttfont@fam +% \begin{macro}{\if@tud@ttfont@rb@exist} +% \changes{v2.06}{2018/07/12}{neu}^^A +% Die TypeWriter-Schrift aus \pkg{roboto-mono} kann nur genutzt werden, wenn +% diese tatsächlich auch vorhanden ist. +% \begin{macrocode} +\newif\if@tud@ttfont@rb@exist +\IfFileExists{roboto-mono.sty}{% + \@tud@ttfont@rb@existtrue% +}{% + \TUD@key@preset{ttfont}{lmodern}% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@ttfont@rb@exist +% \begin{macro}{\tud@cdfont@check} +% \changes{v2.04}{2015/03/10}{neu}^^A +% \begin{macro}{\tud@cdfont@@check} +% \changes{v2.06}{2018/07/12}{Auswahl der Schriftfamilie angepasst}^^A +% \changes{v2.06b}{2019/07/17}{Verwendung von \cs{tud@if@fdfileexists}}^^A +% \begin{macro}{\tud@cdfont@@@check} +% \changes{v2.06}{2019/06/18}{neu}^^A +% \changes{v2.06b}{2019/07/17}{Verwendung von \cs{tud@if@fdfileexists}}^^A +% \begin{macro}{\tud@cdfont@missing} +% \changes{v2.05l}{2017/03/29}{neu}^^A +% Mit \cs{tud@cdfont@check} wird geprüft, ob die Schrift \OpenSans respektive +% die veralteten Schriften \Univers und \DIN im OTF-Format respektive im +% Type1-Format vorhanden sind. Die Schriftschnitte der \OpenSans werden für +% beide Formate vom Paket \pkg{opensans} geliefert, die veralteten Schriften +% \Univers und \DIN müssen aus lizenrechtlichen Gründen installiert werden. Bei +% Nichtvorhandensein der Schriften wird eine Warnung ausgegeben sowie eine +% Rückfallebene definiert. +% \begin{macrocode} +\newcommand*\tud@cdfont@check{% + \if@tud@cdoldfont@active% + \tud@cdfont@@check{Univers}{% + Light,,Bold,Black,% + LightOblique,Oblique,BoldOblique,BlackOblique% + }{\tud@cdfont@fam@lf}{@tud@cdfont@fam@exist}% + \tud@cdfont@@check{DIN}{Bold}{\tud@cdfont@db}{@tud@cdfont@db@exist}% + \tud@cdfont@@@check{OT1,OML,OMS}{\tud@cdfont@fam@lf}% + \tud@cdfont@@@check{OT1,OML,OMS}{\tud@cdfont@db}% + \else% +% \end{macrocode} +% Die Version von \pkg{opensans} wird geprüft. Das Paket \pkg{iwona} wird +% genutzt, um fehlende Glyphen und Symbole für die Mathematikschriften des \CDs +% zu ergänzen. +% \begin{macrocode} + \@ifpackageloaded{opensans}{% +%<*class> + \ClassWarningNoLine{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarningNoLine{tudscrfonts}% +%</package> + {% + You should not load package `opensans'\MessageBreak% + manually but just use option `cdfont=true'% + }% + }{}% + \if@tud@cdfont@active% + \TUD@CheckPackage{opensans}{2019/06/20}% + \TUD@CheckPackage{iwona}{2005/10/03}% + \fi% + \tud@cdfont@@check{OpenSans}{% + Light,Regular,SemiBold,Bold,ExtraBold,% + LightItalic,Italic,SemiBoldItalic,BoldItalic,ExtraBoldItalic% + }{\tud@cdfont@fam@lf,\tud@cdfont@fam@osf}{@tud@cdfont@fam@exist}% + \fi% +} +% \end{macrocode} +% Dieses Makro prüft auf das Vorhandensein der Schriften für den Fließtext. +% Im optionalen Argument wird das Trennzeichen zwischen dem Hauptnamen für die +% OTF-Schriften aus dem ersten obligatorischen Argument und der Liste der +% Bezeichnungen für die einzelnen Schriftschnitte im zweiten obligatorischen +% Argument angegeben. Die darauffolgenden Argumente enthalten die zu prüfenden +% Type1-Schriftfamilien und die Bezeichnung des zu setzenden Schalters. +% \begin{macrocode} +\newcommand*\tud@cdfont@@check[5][-]{% + \@tud@res@swatrue% + \def\tud@res@a##1{% + \@tud@res@swafalse% + \tud@cdfont@missing{##1}{\tud@cdfont@wrn}% + }% +% \end{macrocode} +% Für jede der OTF-Schriften wird eine Warnung ausgegeben, falls diese nicht +% installiert ist. Um sicher zu gehen, dass das Layout komplett genutzt werden +% kann, ist es hinreichend, wenn eine der benötigten Schriften nicht existiert, +% um die Rückfallebene zu aktivieren. +% \begin{macrocode} + \if@tud@x@fontspec@enabled% + \def\tud@res@b##1{\IfFontExistsTF{##1}{}{\tud@res@a{##1}}}% + \@for\tud@res@c:={#3}\do{% + \expandafter\IfArgIsEmpty\expandafter{\tud@res@c}% + {\tud@res@b{#2}}% + {\tud@res@b{#2#1\tud@res@c}}% + }% + \else% +% \end{macrocode} +% Ist \pkg{fontspec} nicht aktiv, wird auf die Type1-Schriften für den +% Fließtext für die aktuelle Kodierung im gleichen Maße geprüft. +% \begin{macrocode} + \def\tud@res@b##1##2{% +% \end{macrocode} +% Der Schalter \cs{if@tud@res@swa} wird \val{false} gesetzt, falls die Schrift +% gefunden wurde. Der zu prüfenden Schriftname wird dabei in unterschiedlichen +% Varianten getestet, da \cs{IfFileExists} auf unixoiden Betriebssystemen +% case-sensitiv ist. +% \begin{macrocode} + \tud@if@fdfileexists{##1}{##2}{}{% +% \end{macrocode} +% Existiert die Schrift nicht, wird die entsprechende Warnung ausgegeben. +% \begin{macrocode} + \begingroup% + \edef\tud@res@a{% + \endgroup% + \noexpand\tud@res@a{##1##2.fd}% + }% + \tud@res@a% + }% + }% + \@for\tud@res@c:={#4}\do{\tud@res@b{\encodingdefault}{\tud@res@c}}% + \fi% +% \end{macrocode} +% Zuletzt wird der angegebene Schalter gesetzt. +% \begin{macrocode} + \if@tud@res@swa% + \booltrue{#5}% + \else% + \boolfalse{#5}% + \fi% +} +% \end{macrocode} +% Hiermit wird auf Type1-Schriften in den notwendigen Kodierungen für den +% Mathematiksatz geprüft. Warnungen für fehlende Schriften werden dem Hook +% \cs{tud@cdmath@wrn} hinzugefügt. +% \begin{macrocode} +\newcommand*\tud@cdfont@@@check[2]{% + \@tud@res@swatrue% + \def\tud@res@a##1##2{% + \@tud@res@swafalse% + \tud@cdfont@missing[##1]{##2}{\tud@cdmath@wrn}% + }% + \def\tud@res@b##1##2{% + \tud@if@fdfileexists{##1}{##2}{}{% + \begingroup% + \edef\tud@res@a{% + \endgroup% + \noexpand\tud@res@a{##1}{##1##2.fd}% + }% + \tud@res@a% + }% + }% + \@for\tud@res@c:={#1}\do{\tud@res@b{\tud@res@c}{#2}}% +% \end{macrocode} +% Wurde mindestens eine notwendige nicht gefunden, wird \opt{cdmath=false} +% gesetzt. War diese zuvor aktiv, wird eine Warnung dazu ausgegeben. +% \begin{macrocode} + \if@tud@res@swa\else% + \AtBeginDocument{% + \if@tud@cdmath@active% +%<*class> + \ClassWarning{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarning{tudscrfonts}% +%</package> + {% + Some math font encodings are missing. \MessageBreak% + The option `cdmath=false' is executed. You should\MessageBreak% + either use this option by yourself or install\MessageBreak% + all necessary fonts with a installation script\MessageBreak% + listed in the manual + }% + \fi% + \TUDoptions{cdmath=false}% + }% + \fi% +} +% \end{macrocode} +% Das Makro für die Erstellung einer Warnung bei fehlenden Schriften. Diese +% wird an den Hook im letzten Argument angehängt. +% \begin{macrocode} +\newcommand*\tud@cdfont@missing[3][\encodingdefault]{% + \begingroup% + \def\tud@res@a{% + `#2' font\MessageBreak% + not found for `#1' encoding. \MessageBreak% + }% + \if@tud@x@fontspec@enabled% + \ifstr{\encodingdefault}{#1}{% + \appto\tud@res@a{% + It seems, you haven't installed the required\MessageBreak% + OTF-font on your system. You should provide\MessageBreak% + the fonts manually to your OS\MessageBreak% + \if@tud@cdoldfont@active\else% + or install package `opensans'\MessageBreak% + \fi% + }% + }{}% + \else% + \if@tud@cdoldfont@active% + \def\tud@res@b{T1,OT1,OMS,OML}% + \else% + \def\tud@res@b{T1,OT1,T2A,T2B,T2C,X2,LGR}% + \fi% + \@tud@res@swafalse% + \@for\tud@res@c:=\tud@res@b\do{% + \ifstr{\tud@res@c}{#1}{\@tud@res@swatrue}{}% + }% +% \end{macrocode} +% Wird eine unterstützte Kodierung verwendet, müssen die Schriften installiert +% werden. +% \begin{macrocode} + \if@tud@res@swa% + \appto\tud@res@a{% + You should % + \if@tud@cdoldfont@active% + try to install the necessary fonts\MessageBreak% + with a installation script listed in the manual% + \else% + install package `opensans'% + \fi% + . \MessageBreak% + }% + \else% + \ifstr{\encodingdefault}{#1}{% + \ifstr{TU}{#1}{% + \appto\tud@res@a{% + You should either load package `fontspec'\MessageBreak% + or % + }% + }{% + \appto\tud@res@a{Please }% + }% + \appto\tud@res@a{% + choose a possible encoding with package\MessageBreak% + `fontenc' (\tud@res@b). \MessageBreak% + }% + }{}% + \fi% + \fi% + \appto\tud@res@a{A fallback layout is used}% + \edef\tud@res@c{% +%<*class> + \etex@unexpanded{\ClassWarning{\TUD@Class@Name}}% +%</class> +%<*package> + \etex@unexpanded{\PackageWarning{tudscrfonts}}% +%</package> + {\tud@res@a} + }% + \xappto#3{\expandonce\tud@res@c}% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdfont@missing +% \end{macro}^^A \tud@cdfont@@@check +% \end{macro}^^A \tud@cdfont@@check +% \end{macro}^^A \tud@cdfont@check +% +% \subsection{Kompatibilität der Schriften} +% \subsubsection{Majuskel-ß für Unicode-Prozessoren} +% +% Es wird für die Majuskelvariante der Glyphe \enquote*{ß} eine Rückfallebene +% (Substitution mit \enquote*{SS}) definiert, da diese für Unicode-Engines +% standardmäßig nicht bereitgestellt wird. Um diese zu erkennen, wird auf die +% gleiche Methodik wie im Paket \pkg{newunicodechar} zurückgegriffen. +% \begin{macrocode} +\begingroup +\catcode`\^=7 +\catcode30=12 +\catcode`\!=12 +\edef\tud@reserved{\@gobble^^^^0021} +\expandafter\endgroup +% \end{macrocode} +% Wurde eine Unicode-Engine erkannt (|^^^^0021| wird als ein Token gelesen), +% dann werden die Kodierungen für kleines und großes \enquote*{ß} dahingehend +% angepasst, dass diese \enquote*{ss} bzw. \enquote*{SS} verwenden, wenn die +% entsprechende Glyphe nicht vorhanden ist. +% \begin{macrocode} +\ifx\tud@reserved\@empty\relax + \RequirePackage{newunicodechar}[2012/11/12]% + \uccode"00DF="1E9E% + \lccode"1E9E="00DF% + \newunicodechar{^^^^00df}{\iffontchar\font"00DF \symbol{"00DF}\else ss\fi}% + \newunicodechar{^^^^1e9e}{\iffontchar\font"1E9E \symbol{"1E9E}\else SS\fi}% +\fi +% \end{macrocode} +% +% \subsubsection{Ausrichtung von Überschriften und das Paket \pkg{ragged2e}} +% +% \begin{macro}{\tud@raggedright} +% \begin{macro}{\tud@RaggedRight} +% Die Überschriften sollen laut \CD linksbündig und ohne Silbentrennung gesetzt +% werden. Normalerweise ist das dies beim linksbündigen Satz bei \LaTeX{} der +% Fall. Allerdings ist es mit dem Paket \pkg{ragged2e} möglich, das Verhalten +% für den Flattersatz zu ändern und die Silbentrennung zu aktivieren. Mit der +% Option \opt{newcommands} werden dabei die originalen Befehle überschrieben, +% vorher jedoch in \cs{LaTeX\dots} gesichert. Diese Makros dienen dazu, die +% Überschriften in jedem Fall~-- auch bei der Verwendung von \pkg{ragged2e} mit +% der Option \opt{newcommands}~-- ohne Trennungen zu setzen. +% \begin{macrocode} +\newcommand*\tud@raggedright{\raggedright} +\newcommand*\tud@RaggedRight{\raggedright} +\AfterPackage*{ragged2e}{% + \ifundef{\LaTeXraggedright}{}{% + \renewcommand*\tud@raggedright{\LaTeXraggedright}% + }% + \renewcommand*\tud@RaggedRight{\RaggedRight}% +} +% \end{macrocode} +% \end{macro}^^A \tud@RaggedRight +% \end{macro}^^A \tud@raggedright +% +% \subsubsection{Anpassungen für das Paket \pkg{siunitx}} +% +% \begin{macro}{\lseries} +% \begin{macro}{\if@tud@x@siunitx@enabled} +% \changes{v2.05m}{2017/05/29}{neu} +% Das Paket \pkg{siunitx} nutzt den Befehl \cs{lseries} für den Fall, dass für +% den Fließtext eine Schrift die Serie \val{l} verwendet. Dem wird hier +% Rechnung getragen. Außerdem muss bei der Auswahl der Schriften evtl. auf das +% Paket reagiert werden, weil es sich bei der Definition der Schriften für den +% Mathematikmodus auf \cs{familydefault} bzw. \cs{rmfamily} verlässt. +% \begin{macrocode} +\newif\if@tud@x@siunitx@enabled +\AfterPackage*{siunitx}{% + \@tud@x@siunitx@enabledtrue% + \providecommand*\lseries{\fontseries{l}\selectfont}% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@x@siunitx@enabled +% \end{macro}^^A \lseries +% +% \subsubsection{Anpassungen für die Klasse \cls{beamer}} +% +% Die \cls{beamer}-Klasse lädt standardmäßig serifenlose Mathematikschriften. +% Dies soll verhindert werden, damit die Auswahl über die Option \opt{cdmath} +% erfolgen kann. +% \begin{macrocode} +%<*package> +\AfterClass*{beamer}{\usefonttheme[onlymath]{serif}} +%</package> +% \end{macrocode} +% +% \subsubsection{Mathematikschriften in Verbindung mit dem Paket \pkg{bm}} +% +% \begin{macro}{\if@tud@x@bm@requested} +% Das Paket \pkg{bm} stellt den Befehl \cs{bm} für fette und kursive Symbole im +% Mathematiksatz bereit. Damit dies funktioniert, muss das Laden des Paketes +% auf das Ende der Präambel verzögert werden, um zuvor alle Einstellungen für +% die mathematischen Symbole vornehmen zu können. +% \begin{macrocode} +\newif\if@tud@x@bm@requested +%<*package> +\@ifpackageloaded{bm}{% + \PackageWarning{tudscrfonts}{% + Package `bm' must be loaded after `tudscrfonts'. \MessageBreak% + Otherwise the functionality can not be guaranteed% + }% +}{% +%</package> +\PreventPackageFromLoading[\@tud@x@bm@requestedtrue]{bm} +%<*package> +} +%</package> +% \end{macrocode} +% \end{macro}^^A \if@tud@x@bm@requested +% +% \iffalse +%</body> +%<*option> +% \fi +% +% \subsection{Schriftauswahl und -optionen} +% +% Hier werden die Optionen und Befehle zur Schriftauswahl definiert. +% +% \subsubsection{Schriften für den Fließtext} +% \begin{option}{cdfont} +% \changes{v2.02}{2014/07/08}{Schlüsselwerte für \opt{cdhead}}^^A +% \changes{v2.02}{2014/08/29}{Schlüsselwerte für \opt{fontspec}}^^A +% \changes{v2.05}{2016/04/04}{Schlüsselwerte für \val{ultrabold}}^^A +% \changes{v2.05l}{2017/03/29}{Standardeinstellungen für \opt{cdmath}}^^A +% \begin{macro}{\if@tud@cdfont@active} +% \changes{v2.06}{2018/06/26}{neu}^^A +% \begin{macro}{\if@tud@cdfont@heavy} +% \changes{v2.06}{2018/06/26}{neu}^^A +% \begin{macro}{\if@tud@cdfont@ultrabold} +% \changes{v2.05}{2016/04/04}{neu}^^A +% \begin{macro}{\if@tud@cdfont@lining} +% \changes{v2.06}{2018/07/10}{neu}^^A +% \begin{macro}{\tud@cdfont@activate} +% \changes{v2.06}{2018/07/02}{neu}^^A +% \begin{macro}{\tud@cdfont@deactivate} +% \changes{v2.06}{2018/07/24}{neu}^^A +% Mit dieser Option wird die zentrale Benutzerschnittstelle für alle möglichen +% Schrifteinstellungen innerhalb Dokumentes geschaffen. Durch diese Option +% können sowohl die verwendete Schrift für den Fließtext, als auch die Stärke +% der Schrift geändert werden. Zusätzlich lässt sich die Verwendung von +% Minuskelziffern im Fließtext aktivieren. Außerdem kann eingestellt werden, ob +% für den Mathematiksatz serifenlose Schriften zum Einsatz kommen sollen. +% \ToDo{% +% Option evtl. überarbeiten und nicht mehr im Dokument zulassen; +% das macht alles um einiges einfacher, siehe \opt{cdoldfont}, \opt{cdmath} +% }[v2.07] +% \begin{macrocode} +\newif\if@tud@cdfont@active +\newif\if@tud@cdfont@heavy +\newif\if@tud@cdfont@ultrabold +\newif\if@tud@cdfont@lining +\@tud@cdfont@liningtrue +\TUD@key{cdfont}[true]{% + \TUD@set@numkey{cdfont}{@tempa}{% + \TUD@bool@numkey,% + {light}{1},{lightfont}{1},{lite}{1},{litefont}{1},{noheavyfont}{1},% + {heavy}{2},{heavyfont}{2},{bold}{2},{boldfont}{2},% + {normalbold}{3},{boldnormal}{3},% + {ultrabold}{4},{boldultra}{4},{heavybold}{4},{boldheavy}{4},% + {extendedbold}{4},{boldextended}{4},% + {lf}{5},{lfigures}{5},{liningfigures}{5},{lining}{5},% + {ln}{5},{lnumbers}{5},{liningnumbers}{5},% + {nf}{5},{nfigures}{5},{normalfigures}{5},% + {nn}{5},{nnumbers}{5},{normalnumbers}{5},% + {osf}{6},{osfigures}{6},{oldfigures}{6},{oldstylefigures}{6},{oldstyle}{6},% + {osn}{6},{osnumbers}{6},{oldnumbers}{6},{oldstylenumbers}{6},% + {nomath}{7},{nocdmath}{7},% + {serifmath}{7},{serif}{7},{nosansmath}{7},{nosans}{7},% + {math}{8},{cdmath}{8},{sansmath}{8},{sans}{8},% + {upgreek}{9},{uprightgreek}{9},{uprightgreeks}{9},% + {slgreek}{10},{slantedgreek}{10},{slantedgreeks}{10},% + {itgreek}{10},{italicgreek}{10},{italicgreeks}{10},% + {texgreek}{11},{latexgreek}{11},{texgreeks}{11},{latexgreeks}{11},% + {standardgreek}{11},{standardgreeks}{11},% + {fontspec}{12},{luatex}{12},{lualatex}{12}{xetex}{12},{xelatex}{12},% + {nofontspec}{13},{nfss}{13},{pdftex}{13},{pdflatex}{13}% +%<*class> + ,{nohead}{14},{nocdhead}{14},{noheadfont}{14},{noheadcdfont}{14},% + {nocdheadfont}{14},{nobar}{14},{nobarfont}{14},% + {head}{15},{headfont}{15},{cdhead}{15},{headcdfont}{15},{cdheadfont}{15},% + {bar}{15},{barfont}{15},% + {lighthead}{15},{lightheadfont}{15},{lightfonthead}{15},% + {lightcdhead}{15},{lightheadcdfont}{15},{lightcdheadfont}{15},% + {lightbar}{15},{lightbarfont}{15},{lightfontbar}{15},% + {headlight}{15},{headfontlight}{15},{headlightfont}{15},% + {cdheadlight}{15},{headcdfontlight}{15},{cdheadfontlight}{15},% + {barlight}{15},{barfontlight}{15},{barlightfont}{15},% + {litehead}{15},{liteheadfont}{15},{litefonthead}{15},% + {litecdhead}{15},{liteheadcdfont}{15},{litecdheadfont}{15},% + {litebar}{15},{litebarfont}{15},{litefontbar}{15},% + {headlite}{15},{headfontlite}{15},{headlitefont}{15},% + {cdheadlite}{15},{headcdfontlite}{15},{cdheadfontlite}{15},% + {barlite}{15},{barfontlite}{15},{barlitefont}{15},% + {noheavyhead}{15},{noheavyheadfont}{15},{noheavyfonthead}{15},% + {noheavycdhead}{15},{noheavyheadcdfont}{15},{noheavycdheadfont}{15},% + {noheavybar}{15},{noheavybarfont}{15},{noheavyfontbar}{15},% + {headnoheavy}{15},{headfontnoheavy}{15},{headnoheavyfont}{15},% + {cdheadnoheavy}{15},{headcdfontnoheavy}{15},{cdheadfontnoheavy}{15},% + {barnoheavy}{15},{barfontnoheavy}{15},{barnoheavyfont}{15},% + {heavyhead}{16},{heavyheadfont}{16},{heavyfonthead}{16},% + {heavycdhead}{16},{heavyheadcdfont}{16},{heavycdheadfont}{16},% + {heavybar}{16},{heavybarfont}{16},{heavyfontbar}{16},% + {headheavy}{16},{headfontheavy}{16},{headheavyfont}{16},% + {cdheadheavy}{16},{headcdfontheavy}{16},{cdheadfontheavy}{16},% + {barheavy}{16},{barfontheavy}{16},{barheavyfont}{16}% +%</class> + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% +% \end{macrocode} +% Die ersten drei Werte dienen zum Umschalten auf die Schriften des \CDs für +% den Fließtext. +% \begin{macrocode} + \ifcase\@tempa\relax% false + \tud@cdfont@deactivate% + \or% true + \@tud@cdfont@heavyfalse% + \tud@cdfont@activate% + \or% heavy + \@tud@cdfont@heavytrue% + \tud@cdfont@activate% +% \end{macrocode} +% Für die Definition der fetten Schriftstärke kommt je nach Einstellung ein +% anderer Schriftschnitt zum Einsatz. +% \begin{macrocode} + \or% normalbold + \@tud@cdfont@ultraboldfalse% + \tud@cdfont@activate% + \or% ultrabold + \@tud@cdfont@ultraboldtrue% + \tud@cdfont@activate% +% \end{macrocode} +% Hier wird die Art der Ziffern für den Fleißtext festgelegt. +% \begin{macrocode} + \or% liningfigures + \@tud@cdfont@liningtrue% + \tud@cdfont@activate% + \or% oldstylefigures + \@tud@cdfont@liningfalse% + \tud@cdfont@activate% +% \end{macrocode} +% Die Mathematikschriften. +% \begin{macrocode} + \or% nomath + \TUDoptions{cdmath=false}% + \or% math + \TUDoptions{cdmath=true}% +% \end{macrocode} +% Die Neigung der großen griechischen Buchstaben. +% \begin{macrocode} + \or% uprightgreek + \TUDoptions{slantedgreek=false}% + \or% slantedgreek + \TUDoptions{slantedgreek=true}% + \or% standardgreek + \TUDoptions{slantedgreek=standard}% +% \end{macrocode} +% Die Verwendung von \pkg{fontspec}. +% \begin{macrocode} + \or% fontspec + \TUDoptions{fontspec=true}% + \or% nofontspec + \TUDoptions{fontspec=false}% +% \end{macrocode} +% Die Schrift für den Querbalken. +% \begin{macrocode} +%<*class> + \or% nohead + \TUDoptions{cdhead=false}% + \or% head + \TUDoptions{cdhead=true}% + \or% heavyhead + \TUDoptions{cdhead=heavy}% +%</class> + \fi% +% \end{macrocode} +% Wird kein gültiger Wert für die Option angegeben, so wird davon ausgegangen, +% dass es sich bei diesem um die gewünschte Schriftgröße handelt. +% \begin{macrocode} + \else% + \tud@lowerstring\tud@res@a{#1}% + \ifdimen{\tud@res@a}{% + \ifdim\tud@res@a>\z@\relax% + \TUDoptions{fontsize=#1}% + \tud@cdfont@activate% + \FamilyKeyStateProcessed% + \fi% + }{}% + \fi% +} +\newcommand*\tud@cdfont@activate{% + \@tud@cdfont@activetrue% +% \end{macrocode} +% Die Schrift im Querbalken wird bei den Klassen angepasst. +% \begin{macrocode} +%<*class> + \if@tud@cdfont@heavy% + \tud@locked@num@preset{tud@head@font@num}{2}% + \else% + \tud@locked@num@preset{tud@head@font@num}{1}% + \fi% +%</class> + \TUD@SpecialOptionAtDocument{tud@font@set}% + \tud@locked@bool@preset{@tud@cdmath@active}{true}% + \TUD@SpecialOptionAtDocument{tud@math@set}% +} +\newcommand*\tud@cdfont@deactivate{% + \@tud@cdfont@activefalse% +%<*class> + \tud@locked@num@preset{tud@head@font@num}{0}% +%</class> + \TUD@SpecialOptionAtDocument{tud@font@set}% + \tud@locked@bool@preset{@tud@cdmath@active}{false}% + \TUD@SpecialOptionAtDocument{tud@math@set}% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdfont@deactivate +% \end{macro}^^A \tud@cdfont@activate +% \end{macro}^^A \if@tud@cdfont@lining +% \end{macro}^^A \if@tud@cdfont@ultrabold +% \end{macro}^^A \if@tud@cdfont@heavy +% \end{macro}^^A \if@tud@cdfont@active +% \end{option}^^A cdfont +% \begin{option}{cdoldfont} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\if@tud@cdoldfont@active} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\if@tud@cdoldfont@nodin} +% \changes{v2.06}{2018/07/12}{neu}^^A +% Seit 2018 wird \OpenSans als Hausschrift im \TUDCD genutzt. Für die Nutzung +% der vormals verwendeten Schriften \Univers und \DIN für ältere Dokumente wird +% die Option \pkg{cdoldfont} bereitgestellt. Damit werden die Befehle zur +% Schriftauswahl für die \TUDScript-Klassen oder das Paket \pkg{tudscrfonts} +% entsprechend angepasst. +% \begin{macrocode} +\newif\if@tud@cdoldfont@active +\newif\if@tud@cdoldfont@nodin +\TUD@key{cdoldfont}[true]{% + \TUD@set@numkey{cdoldfont}{@tempa}{% + \TUD@bool@numkey,% + {din}{1},{dinbold}{1},% + {nodin}{2},{nodinbold}{2},% + {onlydin}{3},{onlydinbold}{3}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false + \@tud@cdoldfont@activefalse% + \@tud@cdoldfont@nodintrue% +% \end{macrocode} +% Achtung, nicht verwirren lassen! Mit \opt{cdoldfonts=false} kann beim Laden +% der Klasse die Verwendung der alten Schriften deaktiviert werden. Dabei wird +% nicht beeinflusst, ob die Schriften des \CDs (\opt{cdfont=true/false}) denn +% überhaupt zum Einsatz kommen. Nachdem die Klasse geladen wurde, wird jedoch +% \opt{cdoldfonts} eingefroren, ist diese aktiv, kann sie ab diesem Zeitpunkt +% nicht mehr deaktiviert werden. Dann kann mit \opt{cdoldfonts=false} quasi das +% gleiche Verhalten wie mit \opt{cdfont=false} erzeugt werden. +% \begin{macrocode} + \if@tud@cdoldfont@active% + \tud@cdfont@deactivate% + \fi% + \or% true/din + \@tud@cdoldfont@activetrue% + \@tud@cdoldfont@nodinfalse% + \tud@cdfont@activate% + \or% nodin + \@tud@cdoldfont@activetrue% + \@tud@cdoldfont@nodintrue% + \tud@cdfont@activate% + \or% onlydin + \@tud@cdoldfont@activetrue% + \@tud@cdoldfont@nodinfalse% + \tud@cdfont@deactivate% + \fi% + \else% + \@tud@cdoldfont@activetrue% + \TUDoptions{cdfont=#1}% + \fi% +} +%<*class> +\AtEndOfClass% +%</class> +%<*package> +\AtEndOfPackage% +%</package> +{% + \if@tud@cdoldfont@active% +% \end{macrocode} +% Der aktive Zustand der Option \opt{cdoldfont} wird \enquote{eingefroren}. +% \begin{macrocode} + \let\@tud@cdoldfont@activefalse\@tud@cdoldfont@activetrue% +% \end{macrocode} +% Wenn die Option \opt{cdoldfont} beim Laden der Klasse aktiviert wurde, kann +% sie auch im Dokument genutzt werden. Um möglichst einfach alte Dokumente mit +% den alten Schriften setzen zu können, wird die Option \opt{cdfont} in diesem +% Fall um die alten Werte erweitert. +% \begin{macrocode} + \TUD@key[.comp]{cdfont}{% + \TUD@set@numkey{cdfont}{@tempa}{% + {din}{1},{dinbold}{1},% + {nodin}{2},{nodinbold}{2},% + {onlydin}{3},{onlydinbold}{3}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \TUDoptions{cdoldfont=#1}% + \fi% + }% +% \end{macrocode} +% Andernfalls wird \opt{cdoldfont} schlichtweg deaktiviert. +% \begin{macrocode} + \else% + \TUD@key{cdoldfont}[]{% +%<*class> + \ClassError{\TUD@Class@Name}% +%</class> +%<*package> + \PackageError{tudscrfonts}% +%</package> + {Option `cdoldfont' not active}{% + Option `cdoldfont' must be activated while loading the\MessageBreak% +%<*class> + class `\TUD@Class@Name'\space% +%</class> +%<*package> + package `tudscrfonts'\space% +%</package> + but you have tried to set it up later.% + }% + \FamilyKeyStateProcessed% + }% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@cdoldfont@nodin +% \end{macro}^^A \if@tud@cdoldfont@active +% \end{option}^^A cdoldfont +% \begin{option}{fontsize} +% \changes{v2.04}{2015/04/24}{Option aus \KOMAScript{} erweitert}^^A +% \begin{macro}{\if@tud@x@scr@fontsize@set} +% \changes{v2.05}{2015/07/24}{neu}^^A +% Die genutzte Grundschriftgröße kann mit der \KOMAScript-Option \opt{fontsize} +% eingestellt werden. Um ein aktives Setzen der Schriftgröße zu erkennen, wird +% für das Laden der \TUDScript-Klasse ein Schlüssel definiert, der den Wert an +% \KOMAScript{} weiterreicht. +% \begin{macrocode} +\newif\if@tud@x@scr@fontsize@set +\TUD@key{fontsize}{% + \TUD@set@dimenkey{fontsize}{\@tempa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% +% \end{macrocode} +% Für das Paket wird geprüft, ob die gerade abgearbeitete Option global als +% Klassenoption angegeben wurde. Für den Fall, dass dies nicht so ist~-- die +% Option also lokal dem Paket selbst übergeben wurde~--, wird eine Warnung mit +% dem Hinweis auf das vorgeschlagene Vorgehen ausgegeben. +% \begin{macrocode} +%<*package> + \@expandtwoargs\in@{,\CurrentOption,}{,\@globaloptionslist,}% + \ifin@\else% + \edef\tud@res@a{% + \noexpand\PackageWarning{tudscrfonts}% + {% + The key `\CurrentOption' should only be\MessageBreak% + used as class option% + }% + }% + \expandafter\AtEndOfPackage\expandafter{\tud@res@a}% + \fi +%</package> + \@tud@x@scr@fontsize@settrue% + \TUD@KOMAoptions{fontsize=#1}% + \fi% +} +%<*class> +\AtEndOfClass% +%</class> +%<*package> +\AtEndOfPackage% +%</package> +{% + \RelaxFamilyKey{TUD}{fontsize}% + \DefineFamilyMember{KOMA}% + \DefineFamilyKey{KOMA}{fontsize}{% + \@tud@x@scr@fontsize@settrue% +%<*class> + \ClassWarning{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarning{tudscrfonts}% +%</package> + {% + The key `fontsize=#1' should only be\MessageBreak% + used as class option% + }% + \TUD@SpecialOptionAtDocument{tud@font@set}% + \FamilyKeyStateProcessed% + }% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@x@scr@fontsize@set +% \end{option}^^A fontsize +% \begin{option}{relspacing} +% \changes{v2.05}{2015/12/17}{neu}^^A +% \begin{macro}{\if@tud@relspacing} +% \changes{v2.05}{2015/12/17}{neu}^^ +% Die Option \opt{relspacing} setzt einige Abstände und Längen in Abhängigkeit +% der aktuellen Grundschriftgröße, wenn sie aktiviert wurde. Die verwendete +% Grundschriftgröße kann mit der \KOMAScript-Option \opt{fontsize} eingestellt +% werden. Die Definiton der Längen wird durch das Makro \cs{tud@font@skip@set} +% vorgenommen. +% \begin{macrocode} +\newif\if@tud@relspacing +\TUD@key{relspacing}[true]{% + \TUD@set@numkey{relspacing}{@tempa}{% + \TUD@bool@numkey,% + {absolute}{0},{classic}{0},{standard}{0},% + {relative}{1},{fontsize}{1},{font}{1},{size}{1}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false + \@tud@relspacingfalse% + \or% true + \@tud@relspacingtrue% + \fi% + \TUD@SpecialOptionAtDocument{tud@font@skip@set}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@relspacing +% \end{option}^^A relspacing +% +% \iffalse +%</option> +%<*body> +% \fi +% +% \begin{macro}{\tud@x@fontspec@init} +% \changes{v2.06}{2018/06/28}{neu}^^A +% Dieses Makro wird bei der Initialisierun der Schriftfamilien aufgerufen, +% falls \pkg{fontspec} aktiv ist. Das erste Argument enthält den NFSS-Namen +% der Schriftfamilie, das zweite Argument spezifiziert die Schriften für die +% jeweiligen Schriftschnitte. +% \begin{macrocode} +\newcommand*\tud@x@fontspec@init[2]{% +% \end{macrocode} +% Durch die Verwendung des optionalen Argumentes von \cs{defaultfontfeatures} +% werden die gewünschten Features einem Schriftfamiliennamen zugewiesen. Diese +% können anschließend einfach bspw. mit \cs{setsansfont}\marg{Name} genutzt +% werden. Damit alle Änderungen lokal bleiben, werden die Argumente in einer +% Gruppe expandiert. +% \begin{macrocode} + \begingroup% + \edef\tud@res@a{% + \noexpand\defaultfontfeatures[#1]{% + NFSSFamily=#1,% + Ligatures=TeX,% + BoldFont={},% + ItalicFont={},% + BoldItalicFont={},% + SmallCapsFont={},% + #2% + }% + }% +% \end{macrocode} +% Damit die Schrift mit ihrem NFSS-Namen auf jeden Fall definiert ist, auch +% wenn die Schriften des \CDs nicht aktiviert wurden, wird \cs{newfontfamily} +% aufgerufen. +% \begin{macrocode} + \edef\tud@res@b{% + \noexpand\newfontfamily% + \expandafter\noexpand\csname tud@x@fontspec@fam@#1\endcsname{#1}% + }% +% \end{macrocode} +% Die expandierten Argumente werden nach der Gruppe ausgeführt. +% \begin{macrocode} + \edef\tud@res@c{% + \endgroup\expandonce\tud@res@a\expandonce\tud@res@b% + }% + \tud@res@c% +} +% \end{macrocode} +% \end{macro}^^A \tud@x@fontspec@init +% \begin{macro}{\tud@x@fontspec@set} +% \changes{v2.06}{2018/08/31}{neu}^^A +% Das Paket \pkg{fontspec} ermöglicht es leider nicht, mit \cs{newfontfamily} +% bereits definierte Schriftfamilien für die Zuweisung mit \cs{setmainfont} +% etc. zu nutzen. Deshalb wird folgendes Hilfsmakro definiert, welches diese +% Aufgabe übernimmt. +% \begin{macrocode} +\newcommand*\tud@x@fontspec@set[2]{% + \begingroup% + \edef\tud@res@a{% + \expandafter\noexpand\csname tud@x@fontspec@fam@#2\endcsname% + }% + \edef\tud@res@a{% + \endgroup% + \noexpand\DeclareRobustCommand% + \expandafter\noexpand\csname #1family\endcsname{% + \expandafter\noexpand\csname tud@x@fontspec@fam@#2\endcsname% + }% + \def\expandafter\noexpand\csname #1default\endcsname{\tud@cdfont@fam}% + }% + \tud@res@a% +} +% \end{macrocode} +% \end{macro}^^A \tud@x@fontspec@set +% \begin{macro}{\tud@font@set} +% \changes{v2.04}{2015/03/01}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\bfseries@rm} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\mdseries@rm} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\bfseries@sf} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\mdseries@sf} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\bfseries@tt} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\mdseries@tt} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\rmdef@ult} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\sfdef@ult} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\ttdef@ult} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\bfdef@ult} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% \begin{macro}{\mddef@ult} +% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A +% Mit \cs{tud@font@set} werden entweder die normalen oder aber die Schriften +% des \CDs aktiviert. Dabei werden die Pakete \pkg{fontspec} und \pkg{mweights} +% beachtet. +% \begin{macrocode} +\newcommand*\tud@font@set{% +% \end{macrocode} +% Ist die Verwendung der Schriften des \CDs gewünscht, werden die Schnitte der +% Standardschriften vorher vorher gesichert, um diese später vollständig +% wiederherstellen zu können. +% \begin{macrocode} + \if@tud@cdfont@active% + \tud@cs@store{rmdefault}% + \tud@cs@store{sfdefault}% + \tud@cs@store{ttdefault}% + \tud@cs@store{bfdefault}% + \tud@cs@store{mddefault}% + \tud@cs@store{updefault}% + \tud@cs@store{sldefault}% + \tud@cs@store{itdefault}% + \tud@cs@store{familydefault}% + \tud@cs@store{seriesdefault}% + \tud@cs@store{shapedefault}% + \if@tud@x@mweights@enabled% + \tud@cs@store{bfseries@rm}% + \tud@cs@store{mdseries@rm}% + \tud@cs@store{bfseries@sf}% + \tud@cs@store{mdseries@sf}% + \tud@cs@store{bfseries@tt}% + \tud@cs@store{mdseries@tt}% + \fi% +% \end{macrocode} +% Das Paket \pkg{fontspec} definiert u.\,U. die Familienauswahlbefehle um, so +% dass diese ebenfalls gesichert werden. +% \begin{macrocode} + \if@tud@x@fontspec@enabled% + \tud@cs@store{rmfamily}% + \tud@cs@store{sffamily}% + \tud@cs@store{ttfamily}% + \fi% +% \end{macrocode} +% Zunächst werden die Standardwerte für die Schriftfamilien gesetzt. +% \begin{macrocode} + \renewcommand*\rmdefault{\sfdefault}% + \renewcommand*\updefault{n}% + \renewcommand*\itdefault{it}% + \renewcommand*\sldefault{sl}% + \renewcommand*\familydefault{\sfdefault}% + \renewcommand*\seriesdefault{\mddefault}% + \renewcommand*\shapedefault{\updefault}% +% \end{macrocode} +% Danach erfolgt die Definition der Schriften des \CDs. +% \begin{macrocode} + \tud@cdfont@set% + \tud@ttfont@set% + \if@tud@x@mweights@enabled% + \edef\bfseries@rm{\tud@cdfont@bf}% + \edef\mdseries@rm{\tud@cdfont@md}% + \edef\bfseries@sf{\tud@cdfont@bf}% + \edef\mdseries@sf{\tud@cdfont@md}% + \edef\bfseries@tt{\tud@ttfont@bf}% + \edef\mdseries@tt{\tud@ttfont@md}% + \fi% + \let\bfdefault\tud@cdfont@bf% + \let\mddefault\tud@cdfont@md% +% \end{macrocode} +% Werden die Schriften des \CDs deaktiviert, wird auf die zu Dokumentbeginn +% gesicherten Schriften\footnote{mit und ohne Serifen} zurückgeschaltet. +% \begin{macrocode} + \else% + \tud@cs@restore{rmdefault}% + \tud@cs@restore{sfdefault}% + \tud@cs@restore{ttdefault}% + \tud@cs@restore{bfdefault}% + \tud@cs@restore{mddefault}% + \tud@cs@restore{updefault}% + \tud@cs@restore{sldefault}% + \tud@cs@restore{itdefault}% + \tud@cs@restore{familydefault}% + \tud@cs@restore{seriesdefault}% + \tud@cs@restore{shapedefault}% + \if@tud@x@mweights@enabled% + \tud@cs@restore{bfseries@rm}% + \tud@cs@restore{mdseries@rm}% + \tud@cs@restore{bfseries@sf}% + \tud@cs@restore{mdseries@sf}% + \tud@cs@restore{bfseries@tt}% + \tud@cs@restore{mdseries@tt}% + \fi% + \if@tud@x@fontspec@enabled% + \tud@cs@restore{rmfamily}% + \tud@cs@restore{sffamily}% + \tud@cs@restore{ttfamily}% + \fi% + \fi% + \if@tud@x@mweights@enabled% + \edef\rmdef@ult{\rmdefault}% + \edef\sfdef@ult{\sfdefault}% + \edef\ttdef@ult{\ttdefault}% + \edef\bfdef@ult{\bfdefault}% + \edef\mddef@ult{\mddefault}% + \edef\famdef@ult{\familydefault}% + \fi% +% \end{macrocode} +% Zum Ende werden einige Abstände abhängig von der gewählten Schriftgröße +% definiert. Danach wird gewählte Standardschrift aktiviert und für die Klassen +% das Layout erneuert. +% \begin{macrocode} + \tud@font@skip@set% + \normalfont\selectfont% +%<*class> + \tud@cd@process% + \global\@tud@head@font@settrue% +%</class> +} +% \end{macrocode} +% \end{macro}^^A \mddef@ult +% \end{macro}^^A \bfdef@ult +% \end{macro}^^A \ttdef@ult +% \end{macro}^^A \sfdef@ult +% \end{macro}^^A \rmdef@ult +% \end{macro}^^A \mdseries@tt +% \end{macro}^^A \bfseries@tt +% \end{macro}^^A \mdseries@sf +% \end{macro}^^A \bfseries@sf +% \end{macro}^^A \mdseries@rm +% \end{macro}^^A \bfseries@rm +% \end{macro}^^A \tud@font@set +% \begin{macro}{\tud@cdfont@set} +% \changes{v2.06}{2018/06/28}{neu}^^A +% \begin{macro}{\tud@cdfont@@set} +% \changes{v2.06}{2018/06/28}{neu}^^A +% \begin{macro}{\tud@cdfont@md} +% \changes{v2.06}{2018/06/28}{neu}^^A +% \begin{macro}{\tud@cdfont@bf} +% \changes{v2.06}{2018/06/28}{neu}^^A +% \begin{macro}{\tud@cdfont@ebf} +% \changes{v2.06}{2018/06/28}{neu}^^A +% Hiermit erfolgt die eigentliche Auswahl der Schriftfamilien für das \CD. +% \begin{macrocode} +\newcommand*\tud@cdfont@set{% + \if@tud@cdfont@fam@exist% + \if@tud@cdfont@lining% + \let\tud@cdfont@fam\tud@cdfont@fam@lf% + \else% + \let\tud@cdfont@fam\tud@cdfont@fam@osf% + \fi% +% \end{macrocode} +% Das Aktivieren der Schriften erfolgt entweder mit dem Paket \pkg{fontspec} +% oder\dots +% \begin{macrocode} + \if@tud@x@fontspec@enabled% + \tud@x@fontspec@set{sf}{\tud@cdfont@fam}% +% \end{macrocode} +% \dots nach dem NFSS. +% \begin{macrocode} + \else% + \renewcommand*\sfdefault{\tud@cdfont@fam}% + \fi% + \tud@cdfont@@set% + \fi% +% \end{macrocode} +% Sollte versucht werden, die Schriften zu aktivieren, obwohl diese nicht +% installiert sind, werden die entsprechenden Warnungen ausgegeben. +% \begin{macrocode} + \tud@cdfont@wrn% +} +\newcommand*\tud@cdfont@md{m} +\newcommand*\tud@cdfont@bf{b} +\newcommand*\tud@cdfont@ebf{bx} +\newcommand*\tud@cdfont@@set{% + \if@tud@cdfont@heavy% + \renewcommand*\tud@cdfont@md{m}% + \if@tud@cdfont@ultrabold% + \renewcommand*\tud@cdfont@bf{b}% + \renewcommand*\tud@cdfont@ebf{eb}% + \else% + \renewcommand*\tud@cdfont@bf{sb}% + \renewcommand*\tud@cdfont@ebf{b}% + \fi% + \else% + \renewcommand*\tud@cdfont@md{l}% + \if@tud@cdfont@ultrabold% + \renewcommand*\tud@cdfont@bf{sb}% + \renewcommand*\tud@cdfont@ebf{b}% + \else% + \renewcommand*\tud@cdfont@bf{m}% + \renewcommand*\tud@cdfont@ebf{sb}% + \fi% + \fi% +} +\if@tud@cdoldfont@active + \renewcommand*\tud@cdfont@@set{% + \if@tud@cdfont@heavy% + \renewcommand*\tud@cdfont@md{m}% + \if@tud@cdfont@ultrabold% + \renewcommand*\tud@cdfont@bf{eb}% + \renewcommand*\tud@cdfont@ebf{eb}% + \else% + \renewcommand*\tud@cdfont@bf{b}% + \renewcommand*\tud@cdfont@ebf{eb}% + \fi% + \else% + \renewcommand*\tud@cdfont@md{l}% + \if@tud@cdfont@ultrabold% + \renewcommand*\tud@cdfont@bf{b}% + \renewcommand*\tud@cdfont@ebf{eb}% + \else% + \renewcommand*\tud@cdfont@bf{m}% + \renewcommand*\tud@cdfont@ebf{b}% + \fi% + \fi% + }% +\fi +% \end{macrocode} +% \end{macro}^^A \tud@cdfont@ebf +% \end{macro}^^A \tud@cdfont@bf +% \end{macro}^^A \tud@cdfont@md +% \end{macro}^^A \tud@cdfont@@set +% \end{macro}^^A \tud@cdfont@set +% \begin{macro}{\tud@font@skip@set} +% \changes{v2.04}{2015/02/17}{neu}^^A +% \begin{macro}{\tud@font@skip@@set} +% \changes{v2.04}{2015/03/27}{neu}^^A +% \begin{macro}{\smallskipamount} +% \changes{v2.04}{2015/04/24}{Wert abhängig von der Schriftgröße}^^A +% \begin{macro}{\medskipamount} +% \changes{v2.04}{2015/04/24}{Wert abhängig von der Schriftgröße}^^A +% \begin{macro}{\bigskipamount} +% \changes{v2.04}{2015/04/24}{Wert abhängig von der Schriftgröße}^^A +% \begin{macro}{\abovecaptionskip} +% \changes{v2.04}{2015/04/24}{Wert abhängig von der Schriftgröße}^^A +% \begin{macro}{\belowcaptionskip} +% \begin{macro}{\columnsep} +% \changes{v2.04}{2015/04/24}{Wert abhängig von der Schriftgröße}^^A +% Mit diesem Befehl wird nach der Auswahl der Schriftgröße die Länge einiger +% Abstände angepasst, die bei den \KOMAScript-Klassen nicht abhängig von dieser +% sind. +% \begin{macrocode} +\newcommand*\tud@font@skip@set{% +% \end{macrocode} +% Es werden die Standardeinstellungen abhängig von \opt{cdfont} entweder +% wiederhergestellt oder gesichert und neu definiert. +% \begin{macrocode} + \if@tud@relspacing% + \tud@skip@store{smallskipamount}% + \tud@skip@store{medskipamount}% + \tud@skip@store{bigskipamount}% + \tud@skip@store{abovecaptionskip}% + \tud@skip@store{belowcaptionskip}% + \tud@skip@store{columnsep}% + \tud@font@skip@@set% + \else% + \tud@skip@restore{smallskipamount}% + \tud@skip@restore{medskipamount}% + \tud@skip@restore{bigskipamount}% + \tud@skip@restore{abovecaptionskip}% + \tud@skip@restore{belowcaptionskip}% + \tud@skip@restore{columnsep}% + \fi% +} +% \end{macrocode} +% Hiermit erfolgt das eigentliche Setzen der Abstände. +% \begin{macrocode} +\newcommand*\tud@font@skip@@set{% + \smallskipamount=\partopsep% + \medskipamount=\partopsep% + \multiply\medskipamount by 2% + \bigskipamount=\partopsep% + \multiply\bigskipamount by 4% + \tud@skip@set{abovecaptionskip}{\dimexpr\bigskipamount*5/6\relax}% + \tud@skip@set{belowcaptionskip}{\z@}% + \tud@skip@set{columnsep}{1.1\baselineskip}% +} +% \end{macrocode} +% \end{macro}^^A \columnsep +% \end{macro}^^A \belowcaptionskip +% \end{macro}^^A \abovecaptionskip +% \end{macro}^^A \bigskipamount +% \end{macro}^^A \medskipamount +% \end{macro}^^A \smallskipamount +% \end{macro}^^A \tud@font@skip@@set +% \end{macro}^^A \tud@font@skip@set +% \begin{macro}{\tud@cdfont@init} +% \changes{v2.04}{2015/03/10}{neu}^^A +% \begin{macro}{\cdfontln} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\cdfontrn} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\cdfontsn} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\cdfontbn} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\cdfontxn} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\cdfontli} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\cdfontri} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\cdfontsi} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\cdfontbi} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\cdfontxi} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\textcdln} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\textcdrn} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\textcdsn} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\textcdbn} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\textcdxn} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\textcdli} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\textcdri} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\textcdsi} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\textcdbi} +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\textcdxs} +% \changes{v2.06}{2018/06/29}{neu}^^A +% Das Makro \cs{tud@cdfont@init} wird für die Defintion aller Befehle zur +% Auswahl der Schriften des \CDs verwendet. +% \begin{macrocode} +\newcommand*\tud@cdfont@init{% +% \end{macrocode} +% Zur Nutztung der OTF"~Schriften werden mit \cs{tud@x@fontspec@init} alle +% benötigten Schriftfamilien mit ihren einzelnen Schriftschnitten definiert. +% \begin{macrocode} + \if@tud@cdfont@fam@exist% + \if@tud@x@fontspec@enabled% + \def\tud@res@a{% + UprightFont={OpenSans-Regular},% + FontFace={l}{n}{OpenSans-Light},% + FontFace={m}{n}{OpenSans-Regular},% + FontFace={sb}{n}{OpenSans-SemiBold},% + FontFace={b}{n}{OpenSans-Bold},% + FontFace={bx}{n}{OpenSans-Bold},% + FontFace={eb}{n}{OpenSans-ExtraBold},% + FontFace={l}{it}{OpenSans-LightItalic},% + FontFace={m}{it}{OpenSans-Italic},% + FontFace={sb}{it}{OpenSans-SemiBoldItalic},% + FontFace={b}{it}{OpenSans-BoldItalic},% + FontFace={bx}{it}{OpenSans-BoldItalic},% + FontFace={eb}{it}{OpenSans-ExtraBoldItalic}% + }% + \tud@x@fontspec@init{\tud@cdfont@fam@osf}{Numbers=OldStyle,\tud@res@a}% + \tud@x@fontspec@init{\tud@cdfont@fam@lf}{\tud@res@a}% +% \end{macrocode} +% Da einige Befehle mit \cs{DeclareTextSymbolDefault} für den Textmodus +% definiert werden und dabei lediglich die Kodierung auf \val{OMS} oder +% \val{OML} jedoch nicht den Namen der Schriftfamilie anpassen, werden hierfür +% Aliasbefehle definiert, welche sich der Schriften des Paketes \pkg{iwona} +% bedienen. +% \begin{macrocode} + \else% + \IfFileExists{omliwona.fd}{% + \input{omliwona.fd}% + \@for\tud@res@a:={l,m,sb,b,eb}\do{% + \csletcs{OML/\tud@cdfont@fam@lf/\tud@res@a/it}% + {OML/iwona/\tud@res@a/it}% + \csletcs{OML/\tud@cdfont@fam@osf/\tud@res@a/it}% + {OML/iwona/\tud@res@a/it}% + }% + }{}% + \IfFileExists{omsiwona.fd}{% + \input{omsiwona.fd}% + \@for\tud@res@a:={l,m,sb,b,eb}\do{% + \csletcs{OMS/\tud@cdfont@fam@lf/\tud@res@a/n}% + {OMS/iwona/\tud@res@a/n}% + \csletcs{OMS/\tud@cdfont@fam@osf/\tud@res@a/n}% + {OMS/iwona/\tud@res@a/n}% + }% + }{}% + \AtBeginDocument{% + \ifcsundef{textrightarrow}{}{% + \tud@cs@store{textrightarrow}% + \renewrobustcmd*{\textrightarrow}{% + \begingroup% + \if@tud@cdfont@active\fontfamily{iwona}\selectfont\fi% + \tud@cs@use{textrightarrow}% + \endgroup% + }% + }% + }% + \fi% +% \end{macrocode} +% Es werden mehrere Schalter zur expliziten Auswahl für die Schriftschnitte +% \textcdln{Open~Sans~Light}, \textcdrn{Open~Sans~Regular}, +% \textcdsn{Open~Sans~SemiBold}, \textcdbn{Open~Sans~Bold} und +% \textcdxn{Open~Sans~ExtraBold} sowie \textcdli{Open~Sans~Light~Italic}, +% \textcdri{Open~Sans~Regular~Italic}, \textcdsi{Open~Sans~SemiBold} +% \textcdbi{Open~Sans~Bold~Italic} und \textcdxi{Open~Sans~ExtraBold~Italic} +% definiert. Diese können so im Dokument unabhängig von der Option +% \opt{cdfont} genutzt werden. +% \begin{macrocode} + \newrobustcmd*\cdfontln{\usefont{\encodingdefault}{\tud@cdfont@fam}{l}{n}} + \newrobustcmd*\cdfontrn{\usefont{\encodingdefault}{\tud@cdfont@fam}{m}{n}} + \newrobustcmd*\cdfontsn{\usefont{\encodingdefault}{\tud@cdfont@fam}{sb}{n}} + \newrobustcmd*\cdfontbn{\usefont{\encodingdefault}{\tud@cdfont@fam}{b}{n}} + \newrobustcmd*\cdfontxn{\usefont{\encodingdefault}{\tud@cdfont@fam}{eb}{n}} + \newrobustcmd*\cdfontli{\usefont{\encodingdefault}{\tud@cdfont@fam}{l}{it}} + \newrobustcmd*\cdfontri{\usefont{\encodingdefault}{\tud@cdfont@fam}{m}{it}} + \newrobustcmd*\cdfontsi{\usefont{\encodingdefault}{\tud@cdfont@fam}{sb}{it}} + \newrobustcmd*\cdfontbi{\usefont{\encodingdefault}{\tud@cdfont@fam}{b}{it}} + \newrobustcmd*\cdfontxi{\usefont{\encodingdefault}{\tud@cdfont@fam}{eb}{it}} +% \end{macrocode} +% Sind die notwendigen Schriften nicht installiert, werden die Schalter für die +% Rückfallebene so definiert, dass diese eine Warnung ausgeben. +% \begin{macrocode} + \else% + \tud@cdfont@fallback\cdfontln{OpenSans-Light}{md}{up} + \tud@cdfont@fallback\cdfontrn{OpenSans-Regular}{md}{up} + \tud@cdfont@fallback\cdfontsn{OpenSans-SemiBold}{md}{up} + \tud@cdfont@fallback\cdfontbn{OpenSans-Bold}{bf}{up} + \tud@cdfont@fallback\cdfontxn{OpenSans-ExtraBold}{bf}{up} + \tud@cdfont@fallback\cdfontli{OpenSans-LightItalic}{md}{it} + \tud@cdfont@fallback\cdfontri{OpenSans-Italic}{md}{it} + \tud@cdfont@fallback\cdfontsi{OpenSans-SemiBoldItalic}{md}{it} + \tud@cdfont@fallback\cdfontbi{OpenSans-BoldItalic}{bf}{it} + \tud@cdfont@fallback\cdfontxi{OpenSans-ExtraBoldItalic}{bf}{it} + \fi% +% \end{macrocode} +% Außerdem werden für die Schriften noch die entsprechenden Textauswahlbefehle +% bereitgestellt. +% \begin{macrocode} + \newcommand*\textcdln{}% + \newcommand*\textcdrn{}% + \newcommand*\textcdsn{}% + \newcommand*\textcdbn{}% + \newcommand*\textcdxn{}% + \newcommand*\textcdli{}% + \newcommand*\textcdri{}% + \newcommand*\textcdsi{}% + \newcommand*\textcdbi{}% + \newcommand*\textcdxi{}% + \DeclareTextFontCommand\textcdln{\cdfontln}% + \DeclareTextFontCommand\textcdrn{\cdfontrn}% + \DeclareTextFontCommand\textcdsn{\cdfontsn}% + \DeclareTextFontCommand\textcdbn{\cdfontbn}% + \DeclareTextFontCommand\textcdxn{\cdfontxn}% + \DeclareTextFontCommand\textcdli{\cdfontli}% + \DeclareTextFontCommand\textcdri{\cdfontri}% + \DeclareTextFontCommand\textcdsi{\cdfontsi}% + \DeclareTextFontCommand\textcdbi{\cdfontbi}% + \DeclareTextFontCommand\textcdxi{\cdfontxi}% +} +% \end{macrocode} +% \end{macro}^^A \textcdxi +% \end{macro}^^A \textcdbi +% \end{macro}^^A \textcdsi +% \end{macro}^^A \textcdri +% \end{macro}^^A \textcdli +% \end{macro}^^A \textcdxn +% \end{macro}^^A \textcdbn +% \end{macro}^^A \textcdsn +% \end{macro}^^A \textcdrn +% \end{macro}^^A \textcdln +% \end{macro}^^A \cdfontxi +% \end{macro}^^A \cdfontbi +% \end{macro}^^A \cdfontsi +% \end{macro}^^A \cdfontri +% \end{macro}^^A \cdfontli +% \end{macro}^^A \cdfontxn +% \end{macro}^^A \cdfontbn +% \end{macro}^^A \cdfontsn +% \end{macro}^^A \cdfontrn +% \end{macro}^^A \cdfontln +% \end{macro}^^A \tud@cdfont@init +% \begin{macro}{\univln} +% \begin{macro}{\univrn} +% \begin{macro}{\univbn} +% \begin{macro}{\univxn} +% \begin{macro}{\univls} +% \begin{macro}{\univrs} +% \begin{macro}{\univbs} +% \begin{macro}{\univxs} +% \begin{macro}{\dinbn} +% \begin{macro}{\tud@db} +% \begin{macro}{\tud@db@wrn} +% \begin{macro}{\textuln} +% \begin{macro}{\texturn} +% \begin{macro}{\textubn} +% \begin{macro}{\textuxn} +% \begin{macro}{\textuls} +% \begin{macro}{\texturs} +% \begin{macro}{\textubs} +% \begin{macro}{\textuxs} +% \begin{macro}{\textdbn} +% Die Definition der Befehle der veralteten Schriften des \CDs. +% \begin{macrocode} +\if@tud@cdoldfont@active + \renewcommand*\tud@cdfont@init{% + \if@tud@cdfont@fam@exist% + \if@tud@x@fontspec@enabled% + \def\tud@res@a{% + UprightFont={Univers},% + FontFace={l}{n}{Univers-Light},% + FontFace={m}{n}{Univers},% + FontFace={b}{n}{Univers-Bold},% + FontFace={bx}{n}{Univers-Bold},% + FontFace={eb}{n}{Univers-Black},% + FontFace={l}{it}{Univers-LightOblique},% + FontFace={m}{it}{Univers-Oblique},% + FontFace={b}{it}{Univers-BoldOblique},% + FontFace={bx}{it}{Univers-BoldOblique},% + FontFace={eb}{it}{Univers-BlackOblique}% + }% + \tud@x@fontspec@init{\tud@cdfont@fam@lf}{\tud@res@a}% + \fi% +% \end{macrocode} +% Die Schalter zur expliziten Auswahl für die \Univers-Schriftschnitte. +% \begin{macrocode} + \newrobustcmd*\univln{\usefont{\encodingdefault}{\tud@cdfont@fam}{l}{n}} + \newrobustcmd*\univrn{\usefont{\encodingdefault}{\tud@cdfont@fam}{m}{n}} + \newrobustcmd*\univbn{\usefont{\encodingdefault}{\tud@cdfont@fam}{b}{n}} + \newrobustcmd*\univxn{\usefont{\encodingdefault}{\tud@cdfont@fam}{eb}{n}} + \newrobustcmd*\univls{\usefont{\encodingdefault}{\tud@cdfont@fam}{l}{sl}} + \newrobustcmd*\univrs{\usefont{\encodingdefault}{\tud@cdfont@fam}{m}{sl}} + \newrobustcmd*\univbs{\usefont{\encodingdefault}{\tud@cdfont@fam}{b}{sl}} + \newrobustcmd*\univxs{\usefont{\encodingdefault}{\tud@cdfont@fam}{eb}{sl}} +% \end{macrocode} +% Sind die notwendigen Schriften nicht installiert, werden die Schalter für die +% Rückfallebene so definiert, dass diese eine Warnung ausgeben. +% \begin{macrocode} + \else% + \tud@cdfont@fallback\univln{Univers-Light}{md}{up} + \tud@cdfont@fallback\univrn{Univers}{md}{up} + \tud@cdfont@fallback\univbn{Univers-Bold}{bf}{up} + \tud@cdfont@fallback\univxn{Univers-Black}{bf}{up} + \tud@cdfont@fallback\univls{Univers-LightOblique}{md}{sl} + \tud@cdfont@fallback\univrs{Univers-Oblique}{md}{sl} + \tud@cdfont@fallback\univbs{Univers-BoldOblique}{bf}{sl} + \tud@cdfont@fallback\univxs{Univers-BlackOblique}{bf}{sl} + \fi% +% \end{macrocode} +% Außerdem werden für die Schriften noch die entsprechenden Textauswahlbefehle +% bereitgestellt. +% \begin{macrocode} + \newcommand*\textuln{}% + \newcommand*\texturn{}% + \newcommand*\textubn{}% + \newcommand*\textuxn{}% + \newcommand*\textuls{}% + \newcommand*\texturs{}% + \newcommand*\textubs{}% + \newcommand*\textuxs{}% + \DeclareTextFontCommand\textuln{\univln}% + \DeclareTextFontCommand\texturn{\univrn}% + \DeclareTextFontCommand\textubn{\univbn}% + \DeclareTextFontCommand\textuxn{\univxn}% + \DeclareTextFontCommand\textuls{\univls}% + \DeclareTextFontCommand\texturs{\univrs}% + \DeclareTextFontCommand\textubs{\univbs}% + \DeclareTextFontCommand\textuxs{\univxs}% +% \end{macrocode} +% Diese werden auch für die Definition der neuen Schriftauswahlbefehle genutzt. +% \begin{macrocode} + \newrobustcmd*\cdfontln{\univln}% + \newrobustcmd*\cdfontrn{\univrn}% + \newrobustcmd*\cdfontsn{\univrn}% + \newrobustcmd*\cdfontbn{\univbn}% + \newrobustcmd*\cdfontxn{\univxn}% + \newrobustcmd*\cdfontli{\univls}% + \newrobustcmd*\cdfontri{\univrs}% + \newrobustcmd*\cdfontsi{\univrs}% + \newrobustcmd*\cdfontbi{\univbs}% + \newrobustcmd*\cdfontxi{\univxs}% + \newcommand*\textcdln{}% + \newcommand*\textcdrn{}% + \newcommand*\textcdsn{}% + \newcommand*\textcdbn{}% + \newcommand*\textcdxn{}% + \newcommand*\textcdli{}% + \newcommand*\textcdri{}% + \newcommand*\textcdsi{}% + \newcommand*\textcdbi{}% + \newcommand*\textcdxi{}% + \DeclareTextFontCommand\textcdln{\cdfontln}% + \DeclareTextFontCommand\textcdrn{\cdfontrn}% + \DeclareTextFontCommand\textcdsn{\cdfontsn}% + \DeclareTextFontCommand\textcdbn{\cdfontbn}% + \DeclareTextFontCommand\textcdxn{\cdfontxn}% + \DeclareTextFontCommand\textcdli{\cdfontli}% + \DeclareTextFontCommand\textcdri{\cdfontri}% + \DeclareTextFontCommand\textcdsi{\cdfontsi}% + \DeclareTextFontCommand\textcdbi{\cdfontbi}% + \DeclareTextFontCommand\textcdxi{\cdfontxi}% +% \end{macrocode} +% Anschließend wird für \DIN äquivalent verfahren. +% \begin{macrocode} + \if@tud@cdfont@db@exist% + \if@tud@x@fontspec@enabled% + \def\tud@res@a{% + UprightFont={DIN-Bold},% + FontFace={l}{n}{DIN-Bold},% + FontFace={m}{n}{DIN-Bold},% + FontFace={b}{n}{DIN-Bold},% + FontFace={bx}{n}{DIN-Bold},% + FontFace={eb}{n}{DIN-Bold},% + FontFace={l}{it}{Font=DIN-Bold,FakeSlant=0.15},% + FontFace={m}{it}{Font=DIN-Bold,FakeSlant=0.15},% + FontFace={b}{it}{Font=DIN-Bold,FakeSlant=0.15},% + FontFace={bx}{it}{Font=DIN-Bold,FakeSlant=0.15},% + FontFace={eb}{it}{Font=DIN-Bold,FakeSlant=0.15}% + }% + \tud@x@fontspec@init{\tud@cdfont@db}{\tud@res@a}% + \fi% +% \end{macrocode} +% Bei der Schriftauswahl wird die entsprechende Mathematikschrift aktiviert. +% \begin{macrocode} + \newrobustcmd*\tud@db{% + \usefont{\encodingdefault}{\tud@cdfont@db}{b}{n}% + \if@tud@cdmath@active\mathversion{tuddin}\fi% + }% + \newrobustcmd*\dinbn{\tud@db}% +% \end{macrocode} +% Da der Schalter \cs{dinbn} innerhalb der Überschriften verwendet wird, sollte +% dieser zumindest auch auf den Überschriftenstil schalten, falls die benötigte +% Schrift selbst nicht installiert ist. +% \begin{macrocode} + \else% + \newrobustcmd*\tud@db{\tud@db@wrn\sectfont}% + \newcommand*\tud@db@wrn{% +%<*class> + \ClassWarning{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarning{tudscrfonts}% +%</package> + {% + Font `DIN-Bold' is not available and therefore\MessageBreak + can not be used for headings% + }% + \global\let\tud@db@wrn\relax% + }% + \newrobustcmd*\dinbn{\tud@cdfont@fallback@wrn{DIN-Bold}\sectfont}% + \fi% + \newcommand*\textdbn{}% + \DeclareTextFontCommand\textdbn{\dinbn}% + }% +\fi +% \end{macrocode} +% \end{macro}^^A \textdbn +% \end{macro}^^A \textuxs +% \end{macro}^^A \textubs +% \end{macro}^^A \texturs +% \end{macro}^^A \textuls +% \end{macro}^^A \textuxn +% \end{macro}^^A \textubn +% \end{macro}^^A \texturn +% \end{macro}^^A \textuln +% \end{macro}^^A \tud@db@wrn +% \end{macro}^^A \tud@db +% \end{macro}^^A \dinbn +% \end{macro}^^A \univxs +% \end{macro}^^A \univbs +% \end{macro}^^A \univrs +% \end{macro}^^A \univls +% \end{macro}^^A \univxn +% \end{macro}^^A \univbn +% \end{macro}^^A \univrn +% \end{macro}^^A \univln +% \begin{macro}{\tud@cdfont@fallback} +% \changes{v2.05}{2015/12/14}{neu}^^A +% \begin{macro}{\tud@cdfont@fallback@wrn} +% \changes{v2.05}{2015/12/14}{neu}^^A +% Hier wird die Rückfallebene für die Schriftschalter sowie die dazugehörige +% Warnung definiert. +% \begin{macrocode} +\newcommand*\tud@cdfont@fallback[4]{% + \newrobustcmd*#1{% + \tud@cdfont@fallback@wrn{#2}% + \sffamily\csuse{#3series}\csuse{#4shape}% + }% +} +\newcommand*\tud@cdfont@fallback@wrn[1]{% +%<*class> + \ClassWarning{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarning{tudscrfonts}% +%</package> + {% + The requested font `#1'\MessageBreak% + is not available, a fallback layout is used% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdfont@fallback@wrn +% \end{macro}^^A \tud@cdfont@fallback +% \begin{macro}{\cdfont} +% \changes{v2.04}{2015/03/04}{neu}^^A +% \begin{macro}{\tudfont} +% \changes{v2.04}{2015/04/24}{\cls{tudmathposter} wird unterstützt}^^A +% \begin{macro}{\textcd} +% \changes{v2.04}{2015/03/04}{neu}^^A +% \begin{macro}{\tud@cdfont@get} +% \changes{v2.04}{2015/03/04}{neu}^^A +% \changes{v2.06}{2018/06/29}{für \OpenSans überarbeitet}^^A +% \begin{macro}{\tud@cdfont@trim} +% \changes{v2.04}{2015/03/04}{neu}^^A +% \changes{v2.06}{2018/06/29}{für \OpenSans überarbeitet}^^A +% \begin{macro}{\tud@cdfont@@trim} +% \changes{v2.04}{2015/03/04}{neu}^^A +% Die Klassen \cls{tudposter} und \cls{tudmathposter} definieren den Befehl +% \cs{tudfont}, mit welchem die Schriften des \CDs der \TnUD auch mit Klarnamen +% ausgewählt werden können. Zur Kompatibilität wird der Befehl \cs{cdfont} +% definiert, welcher die gleiche Funktionalität bereitstellt. Zusätzlich wird +% der Befehl \cs{textcd} bereitgestellt, der die Auswahl der Schrift als +% Textbefehl ermöglicht. +% \begin{macrocode} +\newcommand*\cdfont[1]{% + \tud@cdfont@get{#1}% + \ifx\@tempc\relax\else% + \csuse{cdfont\@tempc}% + \fi% +} +\newcommand*\textcd[2]{% + \tud@cdfont@get{#1}% + \ifx\@tempc\relax% + \textsf{#2}% + \else% + \csuse{textcd\@tempc}{#2}% + \fi% +} +\if@tud@cdoldfont@active + \renewcommand*\cdfont[1]{% + \tud@cdfont@get{#1}% + \ifx\@tempc\relax\else% + \ifstr{\@tempc}{dinbn}{\dinbn}{\csuse{univ\@tempc}}% + \fi% + }% + \renewcommand*\textcd[2]{% + \tud@cdfont@get{#1}% + \ifx\@tempc\relax% + \textsf{#2}% + \else% + \ifstr{\@tempc}{dinbn}{\textdbn{#2}}{\csuse{textu\@tempc}{#2}}% + \fi% + }% +\fi +\newcommand*\tud@cdfont@get[1]{% + \tud@cdfont@trim\@tempa{#1}% + \ifstr{\@tempa}{l}{\def\@tempc{ln}}{% + \ifstr{\@tempa}{}{\def\@tempc{rn}}{% + \ifstr{\@tempa}{r}{\def\@tempc{rn}}{% + \ifstr{\@tempa}{s}{\def\@tempc{sn}}{% + \ifstr{\@tempa}{b}{\def\@tempc{bn}}{% + \ifstr{\@tempa}{x}{\def\@tempc{xn}}{% + \ifstr{\@tempa}{li}{\def\@tempc{li}}{% + \ifstr{\@tempa}{il}{\def\@tempc{li}}{% + \ifstr{\@tempa}{i}{\def\@tempc{ri}}{% + \ifstr{\@tempa}{ri}{\def\@tempc{ri}}{% + \ifstr{\@tempa}{ir}{\def\@tempc{ri}}{% + \ifstr{\@tempa}{si}{\def\@tempc{si}}{% + \ifstr{\@tempa}{is}{\def\@tempc{si}}{% + \ifstr{\@tempa}{bi}{\def\@tempc{bi}}{% + \ifstr{\@tempa}{ib}{\def\@tempc{bi}}{% + \ifstr{\@tempa}{xi}{\def\@tempc{xi}}{% + \ifstr{\@tempa}{ix}{\def\@tempc{xi}}{% + \let\@tempc\relax% +%<*class> + \ClassWarning{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarning{tudscrfonts}% +%</package> + {The font `#1' is unknown}% + }}}}}}}}}}}}}}}}}% +} +\if@tud@cdoldfont@active + \renewcommand*\tud@cdfont@get[1]{% + \tud@cdfont@trim\@tempa{#1}% + \ifstr{\@tempa}{45}{\def\@tempc{ln}}{% + \ifstr{\@tempa}{55}{\def\@tempc{rn}}{% + \ifstr{\@tempa}{65}{\def\@tempc{bn}}{% + \ifstr{\@tempa}{75}{\def\@tempc{xn}}{% + \ifstr{\@tempa}{45oblique}{\def\@tempc{ls}}{% + \ifstr{\@tempa}{55oblique}{\def\@tempc{rs}}{% + \ifstr{\@tempa}{65oblique}{\def\@tempc{bs}}{% + \ifstr{\@tempa}{75oblique}{\def\@tempc{xs}}{% + \ifstr{\@tempa}{oblique45}{\def\@tempc{ls}}{% + \ifstr{\@tempa}{oblique55}{\def\@tempc{rs}}{% + \ifstr{\@tempa}{oblique65}{\def\@tempc{bs}}{% + \ifstr{\@tempa}{oblique75}{\def\@tempc{xs}}{% + \ifstr{\@tempa}{din}{\def\@tempc{dinbn}}{% + \ifstr{\@tempa}{din65}{\def\@tempc{dinbn}}{% + \let\@tempc\relax% +%<*class> + \ClassWarning{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarning{tudscrfonts}% +%</package> + {The font `#1' is unknown}% + }}}}}}}}}}}}}}% + }% +\fi +\newcommand*\tud@cdfont@trim[2]{% + \protected@edef\@tempa{\trim@spaces{#2}}% + \tud@lowerstring{\@tempa}{\@tempa}% + \tud@cdfont@@trim{ }{}% + \tud@cdfont@@trim{-}{}% + \tud@cdfont@@trim{_}{}% + \tud@cdfont@@trim{~}{}% + \tud@cdfont@@trim{opensans}{}% + \tud@cdfont@@trim{light}{l}% + \tud@cdfont@@trim{regular}{r}% + \tud@cdfont@@trim{book}{r}% + \tud@cdfont@@trim{semibold}{s}% + \tud@cdfont@@trim{demi}{s}% + \tud@cdfont@@trim{extrabold}{x}% + \tud@cdfont@@trim{black}{x}% + \tud@cdfont@@trim{bold}{b}% + \tud@cdfont@@trim{italic}{i}% + \tud@cdfont@@trim{oblique}{i}% + \tud@cdfont@@trim{slanted}{i}% + \let#1\@tempa% +} +\if@tud@cdoldfont@active + \renewcommand*\tud@cdfont@trim[2]{% + \protected@edef\@tempa{\trim@spaces{#2}}% + \tud@lowerstring{\@tempa}{\@tempa}% + \tud@cdfont@@trim{ }{}% + \tud@cdfont@@trim{-}{}% + \tud@cdfont@@trim{_}{}% + \tud@cdfont@@trim{~}{}% + \tud@cdfont@@trim{ce}{}% + \tud@cdfont@@trim{ff}{}% + \tud@cdfont@@trim{univers}{}% + \tud@cdfont@@trim{60}{65}% + \tud@cdfont@@trim{light}{45}% + \tud@cdfont@@trim{regular}{55}% + \tud@cdfont@@trim{bold}{65}% + \tud@cdfont@@trim{black}{75}% + \tud@cdfont@@trim{4545}{45}% + \tud@cdfont@@trim{5555}{55}% + \tud@cdfont@@trim{6565}{65}% + \tud@cdfont@@trim{7575}{75}% + \tud@cdfont@@trim{italic}{oblique}% + \tud@cdfont@@trim{slanted}{oblique}% + \let#1\@tempa% + }% +\fi +\newcommand*\tud@cdfont@@trim[2]{% + \def\@tempb##1#1##2\relax{\def\@tempa{##1#2##2}}% + \@expandtwoargs\in@{#1}{\@tempa}% + \@whilesw\ifin@\fi{% + \expandafter\@tempb\@tempa\relax% + \@expandtwoargs\in@{#1}{\@tempa}% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdfont@@trim +% \end{macro}^^A \tud@cdfont@trim +% \end{macro}^^A \tud@cdfont@get +% \end{macro}^^A \textcd +% \end{macro}^^A \tudfont +% \end{macro}^^A \cdfont +% +% \iffalse +%</body> +%<*option> +% \fi +% +% \subsubsection{TypeWriter-Schriften} +% +% \begin{option}{ttfont} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@ttfont@num} +% \changes{v2.06}{2018/07/12}{neu}^^A +% Mit dieser Option regelt, ob die TypeWriter-Schriften durch den Anwender +% manuell eingestellt werden oder aber die entsprechenden Schriften aus den +% Paketen \pkg{lmodern} oder \pkg{roboto-mono} zum Einsatz kommt. +% \begin{macrocode} +\newcommand*\tud@ttfont@num{0} +\TUD@key{ttfont}[true]{% + \TUD@set@numkey{ttfont}{@tempa}{% + \TUD@bool@numkey,% + {roboto}{1},{roboto-mono}{1},{robo}{1},% + {lm}{2},{lmtt}{2},{lmodern}{2}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false + \renewcommand*\tud@ttfont@num{0}% + \or% roboto + \renewcommand*\tud@ttfont@num{1}% + \or% lmodern + \renewcommand*\tud@ttfont@num{2}% + \fi% + \TUD@SpecialOptionAtDocument{tud@font@set}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@ttfont@num +% \end{option}^^A ttfont +% +% \iffalse +%</option> +%<*body> +% \fi +% +% \begin{macro}{\tud@ttfont@set} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@ttfont@@set} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@ttfont@md} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@ttfont@bf} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@ttfont@ebf} +% \changes{v2.06}{2018/07/12}{neu}^^A +% Die Auswahl der TypeWriter-Schrift. +% \begin{macrocode} +\newcommand*\tud@ttfont@set{% + \if@tud@ttfont@rb@exist\else\ifnum\tud@ttfont@num=\@ne\relax% +%<*class> + \ClassWarning{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarning{tudscrfonts}% +%</package> + {% + The package `roboto-mono' is missing so the\MessageBreak% + typewriter font of package `lmodern' is used% + }% + \TUDoptions{ttfont=lmodern}% + \fi\fi% + \ifcase\tud@ttfont@num\relax% false + \let\tud@ttfont@fam\ttdefault% + \or% roboto + \let\tud@ttfont@fam\tud@ttfont@rb% + \or% lmodern + \let\tud@ttfont@fam\tud@ttfont@lm% + \fi% + \ifcase\tud@ttfont@num\relax\else% !false + \if@tud@x@fontspec@enabled% +% \end{macrocode} +% Das Setzen der TypeWriter-Schriften aus dem Paket \pkg{lmodern} erfolgt nur, +% wenn diese nicht standardmäßig durch \pkg{fontspec} aktiviert ist. +% \begin{macrocode} + \ifx\ttdefault\tud@ttfont@fam\else% + \tud@x@fontspec@set{tt}{\tud@ttfont@fam}% + \fi% + \else% + \renewcommand*\ttdefault{\tud@ttfont@fam}% + \fi% + \fi% + \tud@ttfont@@set% +} +\newcommand*\tud@ttfont@md{} +\newcommand*\tud@ttfont@bf{} +\newcommand*\tud@ttfont@ebf{} +\newcommand*\tud@ttfont@@set{% + \ifcase\tud@ttfont@num\relax% + \ifundef{\mdseries@tt}{% + \edef\tud@ttfont@md{\tud@cs@use{mddefault}}% + }{% + \edef\tud@ttfont@md{\mdseries@tt}% + }% + \ifundef{\bfseries@tt}{% + \edef\tud@ttfont@bf{\tud@cs@use{bfdefault}}% + }{% + \edef\tud@ttfont@bf{\bfseries@tt}% + }% + \edef\tud@ttfont@ebf{\tud@ttfont@bf}% + \or% roboto + \renewcommand*\tud@ttfont@md{\tud@cdfont@md}% + \renewcommand*\tud@ttfont@bf{\tud@cdfont@bf}% + \renewcommand*\tud@ttfont@ebf{\tud@cdfont@ebf}% + \else% lmodern + \if@tud@cdfont@heavy% + \renewcommand*\tud@ttfont@md{m}% + \renewcommand*\tud@ttfont@bf{b}% + \renewcommand*\tud@ttfont@ebf{b}% + \else% + \renewcommand*\tud@ttfont@md{l}% + \if@tud@cdfont@ultrabold% + \renewcommand*\tud@ttfont@bf{b}% + \renewcommand*\tud@ttfont@ebf{b}% + \else% + \renewcommand*\tud@ttfont@bf{m}% + \renewcommand*\tud@ttfont@ebf{b}% + \fi% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@ttfont@ebf +% \end{macro}^^A \tud@ttfont@bf +% \end{macro}^^A \tud@ttfont@md +% \end{macro}^^A \tud@ttfont@@set +% \end{macro}^^A \tud@ttfont@set +% \begin{macro}{\tud@ttfont@init} +% \changes{v2.06}{2018/07/12}{neu}^^A +% \begin{macro}{\tud@ttfont@rb@scale} +% \changes{v2.06}{2018/08/30}{neu}^^A +% Mit \cs{tud@ttfont@init} erfolgt die Defintion der TypeWriter-Schriften. +% \begin{macrocode} +\newcommand*\tud@ttfont@init{% +% \end{macrocode} +% Für die \texttt{RobotoMono} wird der Skalierungsfaktor fest definiert. +% \begin{macrocode} + \newcommand*\tud@ttfont@rb@scale{0.9}% + \if@tud@x@fontspec@enabled% + \if@tud@ttfont@rb@exist% + \tud@x@fontspec@init{\tud@ttfont@rb}{% + Scale={\tud@ttfont@rb@scale},% + UprightFont={RobotoMono-Regular},% + FontFace={l}{n}{RobotoMono-Light},% + FontFace={m}{n}{RobotoMono-Regular},% + FontFace={sb}{n}{RobotoMono-Medium},% + FontFace={b}{n}{RobotoMono-Bold},% + FontFace={bx}{n}{RobotoMono-Bold},% + FontFace={eb}{n}{RobotoMono-Bold},% + FontFace={l}{it}{RobotoMono-LightItalic},% + FontFace={m}{it}{RobotoMono-Italic},% + FontFace={sb}{it}{RobotoMono-MediumItalic},% + FontFace={b}{it}{RobotoMono-BoldItalic},% + FontFace={bx}{it}{RobotoMono-BoldItalic},% + FontFace={eb}{it}{RobotoMono-BoldItalic}% + }% + \fi% +% \end{macrocode} +% Gewöhnlich ist die Schrift \texttt{lmtt} via \pkg{fontspec} voreingestellt. +% Allerdings wird diese von einigen Paketen mit \cs{setmonofont} überschrieben. +% Für diesen Fall wird die Schriftfamilie \texttt{lmtt} mit den Mitteln von +% \pkg{fontspec} definiert. +% \begin{macrocode} + \ifx\ttdefault\tud@ttfont@lm\else% + \tud@x@fontspec@init{\tud@ttfont@lm}{% + UprightFont={LMMono10-Regular},% + FontFace={l}{n}{LMMonoLt10-Regular},% + FontFace={m}{n}{LMMono10-Regular},% + FontFace={b}{n}{LMMonoLt10-Bold},% + FontFace={bx}{n}{LMMonoLt10-Bold},% + FontFace={l}{it}{LMMonoLt10-Oblique},% + FontFace={m}{it}{LMMonoSlant10-Regular},% + FontFace={b}{it}{LMMonoLt10-BoldOblique},% + FontFace={bx}{it}{LMMonoLt10-BoldOblique}% + }% + \fi% + \else% +% \end{macrocode} +% Existiert das Paket \pkg{roboto-mono}, wird die Schriftfamilie \val{tudtt} +% definiert und die passenden Type1-Schriften für diese definiert. +% \begin{macrocode} + \if@tud@ttfont@rb@exist% +% \end{macrocode} +% Der Skalierungsfaktor für das NFSS gesetzt. +% \begin{macrocode} + \edef\tud@ttfont@rb@scale{s*[\tud@ttfont@rb@scale]}% + \begingroup% + \def\tud@res@c##1##2{% + \tud@lowerstring\tud@res@a{##1}% + \DeclareFontFamily{##1}{\tud@ttfont@rb}{\hyphenchar\font=\m@ne}% +% \end{macrocode} +% Das temporäre Makro verlangt im ersten Argument die NFSS-Serie, im zweiten +% den Teil des Dateinamens der \texttt{RobotoMono} für aufrechte Metriken und +% im dritten Argument den für kursive. +% \begin{macrocode} + \def\tud@res@b####1####2####3{% + \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{n}{% + <->\tud@ttfont@rb@scale RobotoMono-####2-tlf-\tud@res@a% + }{}% + \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{it}{% + <->\tud@ttfont@rb@scale RobotoMono-####3-tlf-\tud@res@a% + }{}% + \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{sl}{% + <->ssub*\tud@ttfont@rb/####1/it% + }{}% +% \end{macrocode} +% Kapitälchen sind nicht für alle Kodierungen definiert, weshalb diese nur +% optional definiert werden. +% \begin{macrocode} + \ifbool{##2}{% + \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{sc}{% + <->\tud@ttfont@rb@scale RobotoMono-####2-tlf-sc-\tud@res@a% + }{}% + \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{scit}{% + <->\tud@ttfont@rb@scale RobotoMono-####3-tlf-sc-\tud@res@a% + }{}% + \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{scsl}{% + <->ssub*\tud@ttfont@rb/####1/scit% + }{}% + }{}% + }% + \tud@res@b{l}{Light}{LightItalic}% + \tud@res@b{m}{Regular}{Italic}% + \tud@res@b{sb}{Medium}{MediumItalic}% + \tud@res@b{b}{Bold}{BoldItalic}% + \tud@res@b{bx}{Bold}{BoldItalic}% + }% + \tud@res@c{OT1}{true}% + \tud@res@c{T1}{true}% + \ifcsundef{T@TS1}{}{\tud@res@c{TS1}{false}}% + \endgroup% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@ttfont@rb@scale +% \end{macro}^^A \tud@ttfont@init +% +% \iffalse +%</body> +%<*option> +% \fi +% +% \subsubsection{Schriften für den Mathematiksatz} +% +% Für den mathematischen Satz werden ergänzend zur \OpenSans die Symbole aus +% dem Paket \pkg{mdsymbol} genutzt. Diese werden bereits bei der Erstellung der +% Type1-Schriften eingefügt. +% +% Die veralteten Schriften des \CDs \Univers und \DIN besitzen keine Glyphen für +% den Mathematiksatz. Daher musste~-- insbesondere für griechische Symbole~-- +% eine passende Alternative gefunden werden. Die Auswahl an Mathematikschriften +% für \LaTeX{} ist relativ gering. Dennoch schien das \pkg{cmbright}-Paket dafür +% geeignet, weshalb die darin enthaltenen Glyphen direkt bei der Installation +% der Schriften eingebunden werden. +% +% \begin{option}{cdmath} +% \begin{macro}{\if@tud@cdmath@active} +% \begin{macro}{\if@tud@cdmath@active@locked} +% Mit dieser Option kann die genutzte Standardschrift für den Mathematiksatz +% für das gesamte Dokument umgestellt werden. +% \ToDo{% +% Option evtl. überarbeiten und nicht mehr im Dokument zulassen; +% andernfalls müssten alle bereitgestellte Befehle für den Mathematiksatz +% gesichert und neu definiert werden, weil diese ggf. von anderen Paketen +% umdefiniert werden. Bspw. \cs{the}\cs{mathcode`!} +% }[v2.07] +% \begin{macrocode} +\tud@locked@newbool{@tud@cdmath@active} +\tud@locked@bool@preset{@tud@cdmath@active}{true}% +\TUD@key{cdmath}[true]{% + \TUD@set@numkey{cdmath}{@tempa}{% + \TUD@bool@numkey,% + {serifmath}{0},{serif}{0},{nosansmath}{0},{nosans}{0},% + {sansmath}{1},{sans}{1},% + {upgreek}{2},{uprightgreek}{2},{uprightgreeks}{2},% + {slgreek}{3},{slantedgreek}{3},{slantedgreeks}{3},% + {itgreek}{3},{italicgreek}{3},{italicgreeks}{3},% + {texgreek}{4},{latexgreek}{4},{texgreeks}{4},{latexgreeks}{4},% + {standardgreek}{4},{standardgreeks}{4}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false + \tud@locked@bool@set{@tud@cdmath@active}{false}% + \TUD@SpecialOptionAtDocument{tud@math@set}% + \or% true + \tud@locked@bool@set{@tud@cdmath@active}{true}% + \TUD@SpecialOptionAtDocument{tud@math@set}% + \or% uprightgreek + \TUDoptions{slantedgreek=false}% + \or% slantedgreek + \TUDoptions{slantedgreek=true}% + \or% standardgreek + \TUDoptions{slantedgreek=standard}% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@cdmath@active@locked +% \end{macro}^^A \if@tud@cdmath@active +% \end{option}^^A cdmath +% \begin{option}{slantedgreek} +% \begin{option}{slantedGreek} +% \begin{option}{slantedGreeks} +% \changes{v2.04}{2015/02/27}{neu}^^A +% \begin{macro}{\if@tud@slantedgreek} +% Mit dieser Option kann die Neigung der griechischen Majuskeln geändert werden. +% \begin{macrocode} +\newcommand*\tud@slantedgreek@num{0} +\TUD@key{slantedgreek}[true]{% + \TUD@set@numkey{slantedgreek}{@tempa}{% + \TUD@bool@numkey,% + {up}{0},{upright}{0},% + {sl}{1},{slanted}{1},{it}{1},{italic}{1},% + {standard}{2},{std}{2},{tex}{2},{latex}{2},{stdgrk}{2},{stdgrks}{2},% + {standardgreek}{2},{standardgreeks}{2},% + {texgreek}{2},{latexgreek}{2},{texgreeks}{2},{latexgreeks}{2}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% upright + \renewcommand*\tud@slantedgreek@num{0}% + \or% slanted + \renewcommand*\tud@slantedgreek@num{1}% + \or% standard + \renewcommand*\tud@slantedgreek@num{2}% + \fi% + \TUD@SpecialOptionAtDocument{tud@math@set}% + \fi% +} +\TUD@key{slantedGreek}[true]{\TUDoptions{slantedgreek=#1}} +\TUD@key{slantedGreeks}[true]{\TUDoptions{slantedgreek=#1}} +% \end{macrocode} +% \end{macro}^^A \if@tud@slantedgreek +% \end{option}^^A slantedGreeks +% \end{option}^^A slantedGreek +% \end{option}^^A slantedgreek +% \begin{option}{lgrgreek} +% \changes{v2.06}{2019/06/13}{neu}^^A +% \begin{option}{lgrgreeks} +% \changes{v2.06}{2019/06/13}{neu}^^A +% \begin{option}{LGRgreek} +% \changes{v2.06}{2019/06/13}{neu}^^A +% \begin{option}{LGRgreeks} +% \changes{v2.06}{2019/06/13}{neu}^^A +% \begin{macro}{\if@tud@lgrgreeks} +% \changes{v2.06}{2019/06/13}{neu}^^A +% Mit dieser Option lässt sich die Nutzung von griechischen Glyphen der aus der +% LGR-Kodierung der aktuellen Schriftfamilie für den Mathematiksatz aktivieren. +% \begin{macrocode} +\newif\if@tud@lgrgreeks +\TUD@key{lgrgreeks}[true]{\TUD@set@ifkey{lgrgreeks}{@tud@lgrgreeks}{#1}} +\TUD@key{lgrgreek}[true]{\TUDoptions{lgrgreeks=#1}} +\TUD@key{LGRgreeks}[true]{\TUDoptions{lgrgreeks=#1}} +\TUD@key{LGRgreek}[true]{\TUDoptions{lgrgreeks=#1}} +% \end{macrocode} +% \end{macro}^^A \if@tud@lgrgreeks +% \end{option}^^A LGRgreeks +% \end{option}^^A LGRgreek +% \end{option}^^A lgrgreeks +% \end{option}^^A lgrgreek +% +% \iffalse +%</option> +%<*body> +% \fi +% +% \begin{macro}{\tud@if@issymbolfont} +% \changes{v2.06}{2019/06/17}{neu}^^A +% \begin{macro}{\tud@if@ismathalphabet} +% \changes{v2.06}{2019/06/17}{neu}^^A +% Diese Abfragen prüfen, ob der gegebene Bezeichner bzw. das gegebene Makro +% für eine Deklaration mit \cs{DeclareSymbolFont} bzw. \cs{DeclareMathAlphabet} +% verwendet wurde. +% \begin{macrocode} +\newcommand*\tud@if@issymbolfont[1]{% + \begingroup% + \edef\tud@res@a{% + \noexpand\in@\expandafter\noexpand% + \csname sym#1\endcsname% + {\expandonce\group@list}% + }% + \tud@res@a% + \ifin@% + \aftergroup\@firstoftwo% + \else% + \aftergroup\@secondoftwo% + \fi% + \endgroup% +} +\@onlypreamble\tud@if@issymbolfont +\newcommand*\tud@if@ismathalphabet[1]{% + \begingroup% + \edef\tud@res@a{% + \noexpand\in@\expandafter\noexpand% + \csname\expandafter\@gobble\string#1\space\endcsname% + {\expandonce\alpha@list}% + }% + \tud@res@a% + \ifin@% + \aftergroup\@firstoftwo% + \else% + \aftergroup\@secondoftwo% + \fi% + \endgroup% +} +\@onlypreamble\tud@if@ismathalphabet +% \end{macrocode} +% \end{macro}^^A \tud@if@ismathalphabet +% \end{macro}^^A \tud@if@issymbolfont +% \begin{macro}{\tud@math@loop@greeks@all} +% \changes{v2.04}{2015/03/10}{neu}^^A +% \begin{macro}{\tud@math@loop@greeks@uc} +% \changes{v2.06}{2018/07/17}{neu}^^A +% \begin{macro}{\tud@math@loop@greeks@lc} +% \changes{v2.06}{2018/07/17}{neu}^^A +% Um Änderungen an den griechischen Glyphen vornehmen zu können, wird das Makro +% \cs{tud@math@loop@greeks@all} definiert, mit dem eine Namensliste der Glyphen +% durchlaufen wird. Dabei wird in Majuskeln und Minuskeln unterschieden. +% \begin{macrocode} +\newcommand*\tud@math@loop@greeks@all[1]{% + \tud@math@loop@greeks@uc{#1}% + \tud@math@loop@greeks@lc{#1}% +} +\newcommand*\tud@math@loop@greeks@uc[1]{% + \@for\@tempa:={% + Gamma,Delta,Theta,Lambda,Xi,Pi,Sigma,Upsilon,Phi,Psi,Omega% + }\do{\expandafter#1\expandafter{\@tempa}}% +} +\newcommand*\tud@math@loop@greeks@lc[1]{% + \@for\@tempa:={% + alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,% + mu,nu,xi,pi,rho,sigma,tau,upsilon,phi,chi,psi,omega,% + varepsilon,vartheta,varpi,varrho,varsigma,varphi% + }\do{\expandafter#1\expandafter{\@tempa}}% +} +% \end{macrocode} +% \end{macro}^^A \tud@math@loop@greeks@lc +% \end{macro}^^A \tud@math@loop@greeks@uc +% \end{macro}^^A \tud@math@loop@greeks@all +% \begin{macro}{\tud@math@declare@lgrgreeks} +% \changes{v2.06}{2019/06/18}{neu}^^A +% Hiermit werden die beiden Symbolschriften \val{tudupgrk} und \val{tuditgrk} +% in der LGR-Kodierung definiert. Diese werden insbesondere für die \OpenSans +% benötigt, da das Paket \pkg{opensans} keine Schriften in mathematischen +% Kodierungen enthält. Das etrste Argument enthält die zu deklarierende +% Schriftfamilie, zweites und drittes Argument die Schriftstärke für normale +% und fette Glyphen, die letzten beiden die Schriftgestalt für aufrechte und +% kursive Variante. +% \begin{macrocode} +\newcommand*\tud@math@declare@lgrgreeks[5]{% + \ifundef{\T@LGR}{\DeclareFontEncoding{LGR}{}{}}{}% + \tud@if@issymbolfont{tudupgrk}{% + \SetSymbolFont{tudupgrk}{normal}{LGR}{#1}{#2}{#4}% + }{% + \DeclareSymbolFont{tudupgrk}{LGR}{#1}{#2}{#4}% + }% + \SetSymbolFont{tudupgrk}{bold}{LGR}{#1}{#3}{#4}% + \tud@if@issymbolfont{tuditgrk}{% + \SetSymbolFont{tuditgrk}{normal}{LGR}{#1}{#2}{#5}% + }{% + \DeclareSymbolFont{tuditgrk}{LGR}{#1}{#2}{#5}% + }% + \SetSymbolFont{tuditgrk}{bold}{LGR}{#1}{#3}{#5}% +} +% \end{macrocode} +% \end{macro}^^A \tud@math@declare@lgrgreeks +% \begin{macro}{\tud@math@map@greeks} +% \changes{v2.06}{2018/07/02}{neu}^^A +% \begin{macro}{\tud@math@map@@greeks} +% \changes{v2.06}{2018/07/02}{neu}^^A +% \begin{macro}{\tud@math@map@@@greeks} +% \changes{v2.06}{2018/07/02}{neu}^^A +% \begin{macro}{\tud@math@supplement@greeks} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\upDelta} +% \begin{macro}{\upGamma} +% \begin{macro}{\upLambda} +% \begin{macro}{\upOmega} +% \begin{macro}{\upPhi} +% \begin{macro}{\upPi} +% \begin{macro}{\upPsi} +% \begin{macro}{\upSigma} +% \begin{macro}{\upTheta} +% \begin{macro}{\upUpsilon} +% \begin{macro}{\upXi} +% \begin{macro}{\upalpha} +% \begin{macro}{\upbeta} +% \begin{macro}{\upgamma} +% \begin{macro}{\updelta} +% \begin{macro}{\upepsilon} +% \begin{macro}{\upzeta} +% \begin{macro}{\upeta} +% \begin{macro}{\uptheta} +% \begin{macro}{\upiota} +% \begin{macro}{\upkappa} +% \begin{macro}{\uplambda} +% \begin{macro}{\upmu} +% \begin{macro}{\upnu} +% \begin{macro}{\upxi} +% \begin{macro}{\uppi} +% \begin{macro}{\uprho} +% \begin{macro}{\upsigma} +% \begin{macro}{\uptau} +% \begin{macro}{\upupsilon} +% \begin{macro}{\upphi} +% \begin{macro}{\upchi} +% \begin{macro}{\uppsi} +% \begin{macro}{\upomega} +% \begin{macro}{\upvarepsilon} +% \begin{macro}{\upvartheta} +% \begin{macro}{\upvarpi} +% \begin{macro}{\upvarrho} +% \begin{macro}{\upvarsigma} +% \begin{macro}{\upvarphi} +% \begin{macro}{\itDelta} +% \begin{macro}{\itGamma} +% \begin{macro}{\itLambda} +% \begin{macro}{\itOmega} +% \begin{macro}{\itPhi} +% \begin{macro}{\itPi} +% \begin{macro}{\itPsi} +% \begin{macro}{\itSigma} +% \begin{macro}{\itTheta} +% \begin{macro}{\itUpsilon} +% \begin{macro}{\itXi} +% \begin{macro}{\italpha} +% \begin{macro}{\itbeta} +% \begin{macro}{\itgamma} +% \begin{macro}{\itdelta} +% \begin{macro}{\itepsilon} +% \begin{macro}{\itzeta} +% \begin{macro}{\iteta} +% \begin{macro}{\ittheta} +% \begin{macro}{\itiota} +% \begin{macro}{\itkappa} +% \begin{macro}{\itlambda} +% \begin{macro}{\itmu} +% \begin{macro}{\itnu} +% \begin{macro}{\itxi} +% \begin{macro}{\itpi} +% \begin{macro}{\itrho} +% \begin{macro}{\itsigma} +% \begin{macro}{\ittau} +% \begin{macro}{\itupsilon} +% \begin{macro}{\itphi} +% \begin{macro}{\itchi} +% \begin{macro}{\itpsi} +% \begin{macro}{\itomega} +% \begin{macro}{\itvarepsilon} +% \begin{macro}{\itvartheta} +% \begin{macro}{\itvarpi} +% \begin{macro}{\itvarrho} +% \begin{macro}{\itvarsigma} +% \begin{macro}{\itvarphi} +% \begin{macro}{\otherDelta} +% \begin{macro}{\otherGamma} +% \begin{macro}{\otherLambda} +% \begin{macro}{\otherOmega} +% \begin{macro}{\otherPhi} +% \begin{macro}{\otherPi} +% \begin{macro}{\otherPsi} +% \begin{macro}{\otherSigma} +% \begin{macro}{\otherTheta} +% \begin{macro}{\otherUpsilon} +% \begin{macro}{\otherXi} +% \begin{macro}{\otheralpha} +% \begin{macro}{\otherbeta} +% \begin{macro}{\othergamma} +% \begin{macro}{\otherdelta} +% \begin{macro}{\otherepsilon} +% \begin{macro}{\otherzeta} +% \begin{macro}{\othereta} +% \begin{macro}{\othertheta} +% \begin{macro}{\otheriota} +% \begin{macro}{\otherkappa} +% \begin{macro}{\otherlambda} +% \begin{macro}{\othermu} +% \begin{macro}{\othernu} +% \begin{macro}{\otherxi} +% \begin{macro}{\otherpi} +% \begin{macro}{\otherrho} +% \begin{macro}{\othersigma} +% \begin{macro}{\othertau} +% \begin{macro}{\otherupsilon} +% \begin{macro}{\otherphi} +% \begin{macro}{\otherchi} +% \begin{macro}{\otherpsi} +% \begin{macro}{\otheromega} +% \begin{macro}{\othervarepsilon} +% \begin{macro}{\othervartheta} +% \begin{macro}{\othervarpi} +% \begin{macro}{\othervarrho} +% \begin{macro}{\othervarsigma} +% \begin{macro}{\othervarphi} +% Es gibt eine Vielzahl von Paketen, die das Setzen von aufrechten griechischen +% Glyphen adressieren. Allerdings gibt es keinen einheitlichen Standard, was +% die Nomenklatur der Auswahlbefehle betrifft. Mit diesem Makro wird nach den +% am häufigsten auftretenden Varianten für die Auswahl für aufrechte und +% kursive Glyphen gesucht, um diese auf die von \TUDScript verwendete +% Nomenklatur abzubilden, damit diese unabhängig von der Einstellung für +% \opt{cdmath} genutzt werden kann und somit neben den normalen Makros für die +% zusätzlichen Befehle (\cs{up\meta{Bezeichner}}, \cs{it\meta{Bezeichner}}) +% für das explizite Auswählen aufrechter und kursiver Buchstaben bereitstehen. +% \begin{macrocode} +\newcommand*\tud@math@map@greeks{% + \tud@math@loop@greeks@all\tud@math@map@@greeks% + \tud@math@loop@greeks@uc\tud@math@map@@@greeks% + \tud@math@supplement@greeks% +} +\newcommand*\tud@math@map@@greeks[1]{% + \ifcsundef{it#1}{% + \@for\tud@res@a:={#1sl,sl#1,#1it}\do{% + \ifcsundef{\tud@res@a}{}{\csedef{it#1}{\csname\tud@res@a\endcsname}}% + }% + }{}% + \ifcsundef{up#1}{% + \ifcsundef{#1up}{}{\csedef{up#1}{\csname#1up\endcsname}}% + }{}% + \ifcsundef{other#1}{% + \ifcsundef{#1other}{}{\csedef{other#1}{\csname#1other\endcsname}}% + }{}% +} +% \end{macrocode} +% Einige Pakete stellen für griechische Majuskeln die Befehle \cs{var\dots} +% bereit, um diese im kursiven Schnitt zu setzen. Weiterhin existiert für +% aufrechte Majuskeln auch noch die Form \cs{Up\meta{Bezeichner}}. Diese werden +% ebenfalls ausgewertet und ggf. auf die \TUDScript-Nomenklatur abgebildet. +% \begin{macrocode} +\newcommand*\tud@math@map@@@greeks[1]{% + \ifcsundef{it#1}{% + \ifcsundef{var#1}{}{\csedef{it#1}{\csname var#1\endcsname}}% + }{}% + \ifcsundef{up#1}{% + \tud@lowerstring\tud@res@a{#1}% + \edef\tud@res@a{Up\tud@res@a}% + \ifcsundef{\tud@res@a}{}{\csedef{up#1}{\csname\tud@res@a\endcsname}}% + }{}% +} +% \end{macrocode} +% Mit diesem Makro werden in letztendlich~-- nachdem \cs{tud@math@map@greeks} +% bereits ausgeführt wurde~-- die standardmäßig definierten Symbolschriften +% \val{operators} und \val{letters} geprüft, ob diese in den Kodierungen +% \val{OT1} bzw. \val{OML} genutzt werden. Trifft dies zu, so werden die +% Schriftfamilien der Symbolschriften genutzt, um die Auswahlbefehle für die +% griechischen Glyphen zu definieren, sofern dies noch notwendig ist. +% \begin{macrocode} +\newcommand*\tud@math@supplement@greeks{% +% \end{macrocode} +% Um keine globalen Änderungen vorzunehmen, wird die normale Mathematikversion +% in einer Gruppe durchsucht. Alle mit \cs{DeclareMathSymbol} vorzunehmenden +% Deklarationen werden in \cs{tud@res@c} gesichert und nach der Gruppe +% aufgerufen. +% \begin{macrocode} + \begingroup% + \newcommand*\tud@math@operators@enc{}% + \newcommand*\tud@math@operators@fam{}% + \newcommand*\tud@math@letters@enc{}% + \newcommand*\tud@math@letters@fam{}% + \def\getanddefine@fonts##1##2{% + \ifx\symoperators##1% + \expandafter\tud@res@a\string##2\@nil% + \else\ifx\symletters##1% + \expandafter\tud@res@b\string##2\@nil% + \fi\fi% + }% + \def\tud@res@a##1##2/##3/##4\@nil{% + \def\tud@math@operators@enc{##2}% + \def\tud@math@operators@fam{##3}% + }% + \def\tud@res@b##1##2/##3/##4\@nil{% + \def\tud@math@letters@enc{##2}% + \def\tud@math@letters@fam{##3}% + }% + \tud@cs@use{mv@normal}% + \let\tud@res@c\@empty% + \ifstr{\tud@math@letters@enc}{\detokenize{OML}}{% + \def\tud@res@a##1{% + \ifcsundef{it##1}{% + \eappto\tud@res@c{% + \noexpand\DeclareMathSymbol{\csname it##1\endcsname}% + {\noexpand\mathalpha}{letters}{\the\tud@res@cnt}% + }% + }{}% + \advance\tud@res@cnt\@ne\relax% + }% + \tud@res@cnt=\z@\relax% + \tud@math@loop@greeks@all\tud@res@a% + }{}% + \ifstr{\tud@math@operators@enc}{\detokenize{OT1}}{% + \def\tud@res@a##1{% + \ifcsundef{up##1}{% + \eappto\tud@res@c{% + \noexpand\DeclareMathSymbol{\csname up##1\endcsname}% + {\noexpand\mathalpha}{operators}{\the\tud@res@cnt}% + }% + }{}% + \advance\tud@res@cnt\@ne\relax% + }% + \tud@res@cnt=\z@\relax% + \tud@math@loop@greeks@uc\tud@res@a% + }{}% +% \end{macrocode} +% Mit der Option \opt{lgrgreeks} besteht zusätzlich die Möglichkeit, fehlende +% Glyphen aus einer potenziell sinnvollen Schriftfamilie in der LGR-Kodierung +% zu ergänzen. Wird eine solche gefunden, wird diese in \cs{tud@res@a} abgelegt. +% \begin{macrocode} + \let\tud@res@a\@empty% + \if@tud@lgrgreeks% + \tud@if@fdfileexists{LGR}{\tud@cs@use{familydefault}}{% + \def\tud@res@a{\tud@cs@use{familydefault}}% + }{% + \tud@if@fdfileexists{LGR}{\tud@math@letters@fam}{% + \let\tud@res@a\tud@math@letters@fam% + }{% + \tud@if@fdfileexists{LGR}{\tud@math@operators@fam}{% + \let\tud@res@a\tud@math@operators@fam% + }{}% + }% + }% + \fi% +% \end{macrocode} +% Die Gruppe wird beendet, die in \cs{tud@res@c} gesicherten Deklarationen +% werden ausgeführt, und der Inhalt von \cs{tud@res@a} wird erhalten. +% \begin{macrocode} + \edef\tud@res@a{% + \endgroup% + \expandonce\tud@res@c% + \edef\noexpand\tud@res@a{\tud@res@a}% + }% + \tud@res@a% + \ifx\tud@res@a\@empty\else% +% \end{macrocode} +% Mit der gefunden LGR-Schriftfamilie werden alle bisher nicht vorhanden +% aufrechte und kursive griechische Glyphen aus den entsprechenden Slots +% ergänzt. +% \begin{macrocode} + \tud@math@declare@lgrgreeks{\tud@res@a}% + {\tud@cs@use{mddefault}}{\tud@cs@use{bfdefault}}% + {\tud@cs@use{updefault}}{\tud@cs@use{itdefault}}% + \let\tud@res@c\@empty% + \def\tud@res@b##1##2{% + \ifcsundef{it##1}{% + \eappto\tud@res@c{% + \noexpand\DeclareMathSymbol{\csname it##1\endcsname}% + {\noexpand\mathalpha}{tuditgrk}{##2}% + }% + }{}% + \ifcsundef{up##1}{% + \eappto\tud@res@c{% + \noexpand\DeclareMathSymbol{\csname up##1\endcsname}% + {\noexpand\mathalpha}{tudupgrk}{##2}% + }% + }{}% + }% + \tud@res@b{Gamma}{71}% + \tud@res@b{Delta}{68}% + \tud@res@b{Theta}{74}% + \tud@res@b{Lambda}{76}% + \tud@res@b{Xi}{88}% + \tud@res@b{Pi}{80}% + \tud@res@b{Sigma}{83}% + \tud@res@b{Upsilon}{85}% + \tud@res@b{Phi}{70}% + \tud@res@b{Psi}{89}% + \tud@res@b{Omega}{87}% + \tud@res@b{alpha}{97}% + \tud@res@b{beta}{98}% + \tud@res@b{gamma}{103}% + \tud@res@b{delta}{100}% + \tud@res@b{epsilon}{101}% + \tud@res@b{zeta}{122}% + \tud@res@b{eta}{104}% + \tud@res@b{theta}{106}% + \tud@res@b{iota}{105}% + \tud@res@b{kappa}{107}% + \tud@res@b{lambda}{108}% + \tud@res@b{mu}{109}% + \tud@res@b{nu}{110}% + \tud@res@b{xi}{120}% + \tud@res@b{pi}{112}% + \tud@res@b{rho}{114}% + \tud@res@b{sigma}{115}% + \tud@res@b{tau}{116}% + \tud@res@b{upsilon}{117}% + \tud@res@b{phi}{102}% + \tud@res@b{chi}{113}% + \tud@res@b{psi}{121}% + \tud@res@b{omega}{119}% + \tud@res@c% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \othervarphi +% \end{macro}^^A \othervarsigma +% \end{macro}^^A \othervarrho +% \end{macro}^^A \othervarpi +% \end{macro}^^A \othervartheta +% \end{macro}^^A \othervarepsilon +% \end{macro}^^A \otheromega +% \end{macro}^^A \otherpsi +% \end{macro}^^A \otherchi +% \end{macro}^^A \otherphi +% \end{macro}^^A \otherupsilon +% \end{macro}^^A \othertau +% \end{macro}^^A \othersigma +% \end{macro}^^A \otherrho +% \end{macro}^^A \otherpi +% \end{macro}^^A \otherxi +% \end{macro}^^A \othernu +% \end{macro}^^A \othermu +% \end{macro}^^A \otherlambda +% \end{macro}^^A \otherkappa +% \end{macro}^^A \otheriota +% \end{macro}^^A \othertheta +% \end{macro}^^A \othereta +% \end{macro}^^A \otherzeta +% \end{macro}^^A \otherepsilon +% \end{macro}^^A \otherdelta +% \end{macro}^^A \othergamma +% \end{macro}^^A \otherbeta +% \end{macro}^^A \otheralpha +% \end{macro}^^A \otherXi +% \end{macro}^^A \otherUpsilon +% \end{macro}^^A \otherTheta +% \end{macro}^^A \otherSigma +% \end{macro}^^A \otherPsi +% \end{macro}^^A \otherPi +% \end{macro}^^A \otherPhi +% \end{macro}^^A \otherOmega +% \end{macro}^^A \otherLambda +% \end{macro}^^A \otherGamma +% \end{macro}^^A \otherDelta +% \end{macro}^^A \itvarphi +% \end{macro}^^A \itvarsigma +% \end{macro}^^A \itvarrho +% \end{macro}^^A \itvarpi +% \end{macro}^^A \itvartheta +% \end{macro}^^A \itvarepsilon +% \end{macro}^^A \itomega +% \end{macro}^^A \itpsi +% \end{macro}^^A \itchi +% \end{macro}^^A \itphi +% \end{macro}^^A \itupsilon +% \end{macro}^^A \ittau +% \end{macro}^^A \itsigma +% \end{macro}^^A \itrho +% \end{macro}^^A \itpi +% \end{macro}^^A \itxi +% \end{macro}^^A \itnu +% \end{macro}^^A \itmu +% \end{macro}^^A \itlambda +% \end{macro}^^A \itkappa +% \end{macro}^^A \itiota +% \end{macro}^^A \ittheta +% \end{macro}^^A \iteta +% \end{macro}^^A \itzeta +% \end{macro}^^A \itepsilon +% \end{macro}^^A \itdelta +% \end{macro}^^A \itgamma +% \end{macro}^^A \itbeta +% \end{macro}^^A \italpha +% \end{macro}^^A \itXi +% \end{macro}^^A \itUpsilon +% \end{macro}^^A \itTheta +% \end{macro}^^A \itSigma +% \end{macro}^^A \itPsi +% \end{macro}^^A \itPi +% \end{macro}^^A \itPhi +% \end{macro}^^A \itOmega +% \end{macro}^^A \itLambda +% \end{macro}^^A \itGamma +% \end{macro}^^A \itDelta +% \end{macro}^^A \upvarphi +% \end{macro}^^A \upvarsigma +% \end{macro}^^A \upvarrho +% \end{macro}^^A \upvarpi +% \end{macro}^^A \upvartheta +% \end{macro}^^A \upvarepsilon +% \end{macro}^^A \upomega +% \end{macro}^^A \uppsi +% \end{macro}^^A \upchi +% \end{macro}^^A \upphi +% \end{macro}^^A \upupsilon +% \end{macro}^^A \uptau +% \end{macro}^^A \upsigma +% \end{macro}^^A \uprho +% \end{macro}^^A \uppi +% \end{macro}^^A \upxi +% \end{macro}^^A \upnu +% \end{macro}^^A \upmu +% \end{macro}^^A \uplambda +% \end{macro}^^A \upkappa +% \end{macro}^^A \upiota +% \end{macro}^^A \uptheta +% \end{macro}^^A \upeta +% \end{macro}^^A \upzeta +% \end{macro}^^A \upepsilon +% \end{macro}^^A \updelta +% \end{macro}^^A \upgamma +% \end{macro}^^A \upbeta +% \end{macro}^^A \upalpha +% \end{macro}^^A \upXi +% \end{macro}^^A \upUpsilon +% \end{macro}^^A \upTheta +% \end{macro}^^A \upSigma +% \end{macro}^^A \upPsi +% \end{macro}^^A \upPi +% \end{macro}^^A \upPhi +% \end{macro}^^A \upOmega +% \end{macro}^^A \upLambda +% \end{macro}^^A \upGamma +% \end{macro}^^A \upDelta +% \end{macro}^^A \tud@math@supplement@greeks +% \end{macro}^^A \tud@math@map@@@greeks +% \end{macro}^^A \tud@math@map@@greeks +% \end{macro}^^A \tud@math@map@greeks +% \begin{macro}{\tud@math@checkslanted@greeks} +% \changes{v2.05d}{2016/09/22}{neu}^^A +% Für die Verwendung der griechischen Glyphen im Mathematikmodus wird versucht, +% ein hohes Maß an Kompatibilität für andere Pakete zu gewährleisten. Es wird +% versucht zu erkennen, ob Pakete mit einer Option wie \opt{slantedGreek}, +% \opt{frenchmath} oder ähnlichem geladen wurde. Hierfür wird nach Definitionen +% für \cs{upalpha} als auch \cs{itGamma} gesucht. Existieren die Makros nicht, +% wird zumindest auf die aktuelle Definition von \cs{Gamma} geprüft und mit der +% standardmäßigen Variant der Glyphe verglichen. Wurde eine passende Definition +% gefunden, wird die Option \opt{slantedgreek} voreingestellt. +% \begin{macrocode} +\newcommand*\tud@math@checkslanted@greeks{% + \begingroup% +% \end{macrocode} +% Wird keine Änderung durch Pakete erkannt, werden ab \TUDScript-Version~v2.06 +% die Glyphen kursiv gesetzt. Dies betrifft insbesondere die Majuskeln, welche +% bei \LaTeX{} normalerweise aufrecht gesetzt werden. +% \begin{macrocode} + \def\tud@res@c{% + \tud@if@v@lower{2.06}{% + \TUD@key@preset{slantedgreek}{standard}% + }{% + \TUD@key@preset{slantedgreek}{true}% + }% + }% + \@tud@res@swafalse% + \ifcsdef{upalpha}{% + \ifx\upalpha\alpha% + \@tud@res@swatrue% + \fi% + }{}% +% \end{macrocode} +% Existiert \cs{upalpha} und ist mit \cs{alpha} identisch, werden \emph{alle} +% griechischen Glyphen aufrecht gesetzt. +% \begin{macrocode} + \if@tud@res@swa% + \def\tud@res@c{\TUD@key@preset{slantedgreek}{false}}% + \else% +% \end{macrocode} +% Existiert \cs{itGamma} und ist mit \cs{Gamma} oder\dots +% \begin{macrocode} + \ifcsdef{itGamma}{% + \ifx\itGamma\Gamma% + \@tud@res@swatrue% + \fi% + }{% +% \end{macrocode} +% \dots\cs{Gamma} entspricht einer möglichen Standarddefnition,\dots +% \begin{macrocode} + \let\tud@res@a\relax% + \let\tud@res@b\relax% + \DeclareMathSymbol{\tud@res@a}{\mathalpha}{letters}{0}% + \DeclareMathSymbol{\tud@res@b}{\mathord}{letters}{0}% + \ifx\Gamma\tud@res@a\relax\@tud@res@swatrue\fi% + \ifx\Gamma\tud@res@b\relax\@tud@res@swatrue\fi% + }% +% \end{macrocode} +% \dots werden \emph{alle} griechischen Glyphen kursiv gesetzt. +% \begin{macrocode} + \if@tud@res@swa% + \def\tud@res@c{\TUD@key@preset{slantedgreek}{true}}% + \fi% + \fi% + \edef\tud@res@c{\endgroup\expandonce\tud@res@c}% + \tud@res@c% +} +% \end{macrocode} +% \end{macro}^^A \tud@math@checkslanted@greeks +% \begin{macro}{\tud@cdmath@init} +% \changes{v2.06}{2018/07/02}{neu}^^A +% \begin{macro}{\tud@cdmath@@init} +% \changes{v2.06}{2018/07/02}{neu}^^A +% \changes{v2.06a}{2019/07/09}{Bugfix für \pkg{mathastext} Eingabekodierung}^^A +% \begin{macro}{\tud@x@mathastext@enc} +% \changes{v2.06a}{2019/07/09}{neu}^^A +% \begin{macro}{\mv@tudnormal} +% \begin{macro}{\mv@tudbold} +% \begin{macro}{\mv@tuddin} +% \begin{macro}{\tud@mathversion} +% \changes{v2.06}{2019/06/17}{neu}^^A +% \begin{macro}{\MTDeclareVersion} +% \changes{v2.06}{2019/06/17}{neu}^^A +% \begin{macro}{\MTversion@@} +% \changes{v2.06}{2019/06/17}{neu}^^A +% Die folgenden Befehle dienen allesamt für das Bereitstellen der Schriften des +% \CDs im mathematischen Satz. Hierbei kommt das Paket \pkg{mathastext} zum +% Einsatz, falls \OpenSans verwendet wird. +% \begin{macrocode} +\newcommand*\mv@tudnormal{} +\newcommand*\mv@tudbold{} +\newcommand*\mv@tuddin{} +% \end{macrocode} +% Um das Umschalten der Mathematikversion mit \cs{mathversion} auch nutzen zu +% können, wenn \pkg{mathastext} für die Schriften des \CDs aktiv ist, wird ein +% Wrappermakro benötigt, welches im Bedarfsfall\cs{MTversion*} aufruft. Hierfür +% wird zunächst auf die gewünschte Mathematikversion, danach der originale +% Befehl \cs{mathversion} wiederhergestellt, aufgerufen und anschließend wieder +% auf das Wrappermakro \cs{tud@mathversion} zurückgesetzt. +% \begin{macrocode} +\AfterPackage*{mathastext}{% + \newrobustcmd*\tud@mathversion[1]{% + \begingroup% + \let\tud@res@a\relax% + \if@tud@cdmath@active% + \ifstr{#1}{normal}{% + \def\tud@res@a{tudnormal}% + }{% + \ifstr{#1}{bold}{% + \def\tud@res@a{tudbold}% + }{}% + }% + \fi% + \edef\tud@res@a{% + \endgroup% + \noexpand\tud@cs@restore{mathversion}% + \ifx\tud@res@a\relax% + \noexpand\mathversion{#1}% + \else% + \noexpand\MTversion*{\tud@res@a}% + \fi% + \noexpand\tud@cs@store{mathversion}% + \noexpand\tud@cs@letltx{mathversion}{tud@mathversion}% + }% + \tud@res@a% + }% + \AtEndPreamble{% + \tud@cs@store{mathversion}% + \tud@cs@letltx{mathversion}{tud@mathversion}% + }% +} +% \end{macrocode} +% Mit \cs{tud@cdmath@init} werden für den Mathematikmodus die Schriften im +% \CD deklariert. +% \begin{macrocode} +\newcommand*\tud@cdmath@init{% +% \end{macrocode} +% Für die Schriftfamilie \OpenSans existieren leider bisher keine Kodierung für +% den Mathematikmodus (\val{OML}, \val{OMS}, \val{OMX}), weshalb hierfür das +% Paket \pkg{mathastext} genutzt wird, um trotzdem einen mathematischen Satz zu +% ermöglichen. Dabei wird die Computer~Modern in der \val{LGR}~Kodierung +% zwingend benötigt. +% +% Für die LGR-Kodierung werden die Bundles \pkg{cbfonts} und \pkg{cbfonts-fd} +% benötigt. Leider lässt sich momentan nur auf letzteres testen. Für ersteres +% ließe sich |\font\testfont=grmn1200|\footnote{\file{ltxcheck.tex}} oder +% \verb+\immediate\openin\pathfont="|kpsewhich grmn1200.tfm"+\ignorespaces% +% \footnote{\url{https://tex.stackexchange.com/questions/306980/}} oder nutzen. +% Beide Ansätze sind aber nicht vollends stimmig. Der erste funktioniert nicht, +% sobald der Anwender \val{-interaction-mode} selbst definiert und für den +% zweiten müssen zumindest eingeschränkte Schreibrechte aktiviert sein. +% \begin{macrocode} + \@tud@res@swafalse% + \if@tud@cdfont@fam@exist% + \@tud@res@swatrue% + \if@tud@cdoldfont@active\else% + \tud@if@fdfileexists{LGR}{cmr}{}{% + \@tud@res@swafalse% + \def\tud@res@a{% +%<*class> + \ClassWarningNoLine{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarningNoLine{tudscrfonts}% +%</package> + {% + The packages `cbfonts/cbgreek' and\MessageBreak% + `cbfonts-fd' have to be installed for using\MessageBreak% + corporate design fonts in math mode. As they\MessageBreak% + are not, standard math versions are applied% + }% + }% + \if@tud@cdmath@active% + \tud@res@a% + \else% + \eappto\tud@cdmath@wrn{\expandonce\tud@res@a}% + \fi% + }% + \fi% + \fi% +% \end{macrocode} +% Um die Mathematikschriften sauber zu definieren, ist das Laden von bestimmten +% Paketen durch den Anwender ungünstig. Deshalb wird für diesen Fall eine +% Warnung ausgegeben. +% \begin{macrocode} + \if@tud@res@swa% + \if@tud@cdoldfont@active\else% + \if@tud@cdmath@active% + \def\tud@res@a##1{% +%<*class> + \ClassWarningNoLine{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarningNoLine{tudscrfonts}% +%</package> + {% + You should not load package `##1'\MessageBreak% + manually when option `cdmath=true' is active as\MessageBreak% + TUD-Script uses package `mathastext' internally\MessageBreak% + with a specific set of required options for the\MessageBreak% + math font setup% + }% + }% + \@ifpackageloaded{sansmath}{% + \tud@res@a{sansmath}% + }{}% + \@ifpackageloaded{mathastext}{% + \tud@res@a{mathastext}% + }{}% + \fi% + \PassOptionsToPackage{% + subdued,defaultmathsizes,nosmalldelims,noequal,% + defaultrm,defaultbf,defaultit,defaultsf,defaulttt% + }{mathastext}% + \RequirePackage{mathastext}[2018/08/22]% + \tud@math@declare@lgrgreeks{cmr}{m}{bx}{n}{it}% + \fi% + \providecommand*\MTDeclareVersion[6][]{\DeclareMathVersion{##2}}% + \providecommand*\MTversion@@[1]{}% + \tud@cdmath@@init{\tud@cdfont@fam@lf}{\tud@ttfont@fam}% +% \end{macrocode} +% Die Symbole für aufrechte und kursive griechische Glyphen werden definiert. +% Da im Paket \pkg{opensans} keine mathematischen Schriftkodierungen enthalten +% sind, wird in diesem Fall auf die LGR-Kodierung zurückgegriffen. +% \ToDo{kann mit \pkg{opensans-math} raus}[v2.??] +% \begin{macrocode} + \if@tud@cdoldfont@active% + \tud@res@cnt=\z@\relax% + \tud@math@loop@greeks@uc\tud@cdmath@declare@greek@uc% + \tud@math@loop@greeks@lc\tud@cdmath@declare@greek@lc% + \else% + \tud@cdmath@declare@greek@lgr% + \fi% +% \end{macrocode} +% Abschließend werden einzelne Zeichen für die Mathematikversionen definiert. +% \begin{macrocode} + \tud@cdmath@declare@char{*}{\mathbin}{symbols}{"03}% +% \end{macrocode} +% Nach der Definition der griechischen Glyphen werden diese~-- inklusive aller +% Auswahlvariationen~-- deklariert. +% \begin{macrocode} + \tud@cdmath@also@greeks% +% \end{macrocode} +% Sollten die notwendigen Schriftfamilien nicht gefunden worden sein, werden +% keine separaten Mathematikversionen definiert. +% \begin{macrocode} + \else% + \let\mv@tudnormal\mv@normal% + \let\mv@tudbold\mv@bold% + \if@tud@cdoldfont@active% + \let\mv@tuddin\mv@bold% + \fi% + \fi% +} +% \end{macrocode} +% Mit \cs{tud@cdmath@@init} werden die notwendigen Mathematikversionen und die +% dazugehörigen Symbolschriften sowie Alphabete deklariert. +% \begin{macrocode} +\newcommand*\tud@x@mathastext@enc{OT1} +\newcommand*\tud@cdmath@@init[2]{% +% \end{macrocode} +% Mit \cs{tud@cdfont@@set} werden die Schriftstärken gemäß den ausgewählten +% Schriftoptionen aktiviert (\cs{tud@cdfont@md}, \cs{tud@cdfont@bf}, +% \cs{tud@cdfont@ebf}), um diese auch für die Mathematikschriften zu nutzen. +% \begin{macrocode} + \tud@cdfont@@set% + \tud@ttfont@@set% +% \end{macrocode} +% Die Deklaration der Mathematikversionen für die alten Schriften. Auch für die +% Schrift \DIN werden mathematische Glyphen bereitgestellt. Diese wurden schon +% bei der Installation aus dem \pkg{iwona}-Paket entnommen. Die verwendeten +% Symbole stammen aus diesem Paket. +% \begin{macrocode} + \if@tud@cdoldfont@active% + \DeclareMathVersion{tudnormal}% + \DeclareMathVersion{tudbold}% + \DeclareMathVersion{tuddin}% + \SetSymbolFont{operators}{tudnormal}{OT1}{#1}{\tud@cdfont@md}{n}% + \SetSymbolFont{operators}{tudbold}{OT1}{#1}{\tud@cdfont@bf}{n}% + \SetSymbolFont{operators}{tuddin}{OT1}{\tud@cdfont@db}{b}{n}% + \SetSymbolFont{letters}{tudnormal}{OML}{#1}{\tud@cdfont@md}{sl}% + \SetSymbolFont{letters}{tudbold}{OML}{#1}{\tud@cdfont@bf}{sl}% + \SetSymbolFont{letters}{tuddin}{OML}{\tud@cdfont@db}{b}{sl}% + \SetSymbolFont{symbols}{tudnormal}{OMS}{#1}{\tud@cdfont@md}{n}% + \SetSymbolFont{symbols}{tudbold}{OMS}{#1}{\tud@cdfont@bf}{n}% + \SetSymbolFont{symbols}{tuddin}{OMS}{\tud@cdfont@db}{b}{n}% + \SetSymbolFont{largesymbols}{tudnormal}{OMX}{iwona}{\tud@cdfont@md}{n}% + \SetSymbolFont{largesymbols}{tudbold}{OMX}{iwona}{\tud@cdfont@bf}{n}% + \SetSymbolFont{largesymbols}{tuddin}{OMX}{iwona}{ebc}{n}% + \SetMathAlphabet{\mathnormal}{tudnormal}{OML}{#1}{\tud@cdfont@md}{sl}% + \SetMathAlphabet{\mathnormal}{tudbold}{OML}{#1}{\tud@cdfont@bf}{sl}% + \SetMathAlphabet{\mathnormal}{tuddin}{OML}{\tud@cdfont@db}{b}{sl}% + \tud@if@ismathalphabet{\mathbold}{% + \SetMathAlphabet{\mathbold}{tudnormal}{OML}{#1}{\tud@cdfont@bf}{sl}% + \SetMathAlphabet{\mathbold}{tudbold}{OML}{#1}{\tud@cdfont@ebf}{sl}% + \SetMathAlphabet{\mathbold}{tuddin}{OML}{\tud@cdfont@db}{b}{sl}% + }{}% + \else% +% \end{macrocode} +% Für \OpenSans wird mangels der Kodierungen \val{OML}, \val{OMS} und \val{OMX} +% im Paket \pkg{opensans} zur Deklaration der Mathematikversionen der Befehl +% \cs{MTDeclareVersion} aus dem Paket \pkg{mathastext} genutzt. Dabei wird die +% Kodierung der Mathematikschriften identisch zur genutzten Eingabekodierung +% für den Text gesetzt, da diese in der Version \val{v1.3t} nicht problemfrei +% unabhängig davon gewählt werden kann. Sämtliche fehlenden Kodierungen werden +% notdürftig mit dem Paket \pkg{iwona} definiert. Zur Definition griechischer +% Glyphen wird die LGR-Kodierung der \OpenSans genutzt. +% \begin{macrocode} + \edef\tud@res@b{\encodingdefault}% + \@tfor\tud@res@a:={T1}{TU}{EU1}{EU2}\do{% + \ifx\tud@res@a\tud@res@b% + \let\tud@x@mathastext@enc\tud@res@b% + \@break@tfor + \fi% + }% + \MTDeclareVersion[it]{tudnormal}% + {\tud@x@mathastext@enc}{#1}{\tud@cdfont@md}{n}% + \MTDeclareVersion[it]{tudbold}% + {\tud@x@mathastext@enc}{#1}{\tud@cdfont@bf}{n}% + \SetSymbolFont{operators}{tudnormal}{OT1}{iwona}{\tud@cdfont@md}{n}% + \SetSymbolFont{operators}{tudbold}{OT1}{iwona}{\tud@cdfont@bf}{n}% +% \end{macrocode} +% \ToDo{% +% sollte \pkg{opensans-math} irgendwann einmal real werden, dann würde es +% sich anbieten, die OML-Kodierung ähnlich zu \pkg{euler[vm]} auf eine +% U-Kodierung zu erweitern und aufrechte griechische Glyphen einzubinden, um +% ein Alphabet zu sparen. Siehe Kodierungen FML/FMS, LML/LMS, LBL/LBS, LS1/LS2 +% }[v2.??] +% \begin{macrocode} + \SetSymbolFont{letters}{tudnormal}{OML}{iwona}{\tud@cdfont@md}{it}% + \SetSymbolFont{letters}{tudbold}{OML}{iwona}{\tud@cdfont@bf}{it}% +%^^A \SetSymbolFont{letters}{tudnormal}{U}{#1m}{\tud@cdfont@md}{it}% +%^^A \SetSymbolFont{letters}{tudbold}{U}{#1m}{\tud@cdfont@bf}{it}% + \SetSymbolFont{symbols}{tudnormal}{OMS}{iwona}{\tud@cdfont@md}{n}% + \SetSymbolFont{symbols}{tudbold}{OMS}{iwona}{\tud@cdfont@bf}{n}% + \SetSymbolFont{largesymbols}{tudnormal}{OMX}{iwona}{\tud@cdfont@md}{n}% + \SetSymbolFont{largesymbols}{tudbold}{OMX}{iwona}{\tud@cdfont@bf}{n}% + \SetSymbolFont{tudupgrk}{tudnormal}{LGR}{#1}{\tud@cdfont@md}{n}% + \SetSymbolFont{tuditgrk}{tudnormal}{LGR}{#1}{\tud@cdfont@md}{it}% + \SetSymbolFont{tudupgrk}{tudbold}{LGR}{#1}{\tud@cdfont@bf}{n}% + \SetSymbolFont{tuditgrk}{tudbold}{LGR}{#1}{\tud@cdfont@bf}{it}% +%^^A \SetMathAlphabet{\mathnormal}{tudnormal}{U}{#1m}{\tud@cdfont@md}{it}% +%^^A \SetMathAlphabet{\mathnormal}{tudbold}{U}{#1m}{\tud@cdfont@bf}{it}% + \tud@if@ismathalphabet{\mathbold}{% + \SetMathAlphabet{\mathbold}{tudnormal}% + {\tud@x@mathastext@enc}{#1}{\tud@cdfont@bf}{it}% + \SetMathAlphabet{\mathbold}{tudbold}% + {\tud@x@mathastext@enc}{#1}{\tud@cdfont@ebf}{it}% +%^^A \SetMathAlphabet{\mathbold}{tudnormal}{U}{#1m}{\tud@cdfont@bf}{it}% +%^^A \SetMathAlphabet{\mathbold}{tudbold}{U}{#1m}{\tud@cdfont@ebf}{it}% + }{}% + \fi% + \SetMathAlphabet{\mathrm}{tudnormal}{OT1}{#1}{\tud@cdfont@md}{n}% + \SetMathAlphabet{\mathrm}{tudbold}{OT1}{#1}{\tud@cdfont@bf}{n}% + \SetMathAlphabet{\mathbf}{tudnormal}{OT1}{#1}{\tud@cdfont@bf}{n}% + \SetMathAlphabet{\mathbf}{tudbold}{OT1}{#1}{\tud@cdfont@ebf}{n}% + \SetMathAlphabet{\mathsf}{tudnormal}{OT1}{#1}{\tud@cdfont@md}{n}% + \SetMathAlphabet{\mathsf}{tudbold}{OT1}{#1}{\tud@cdfont@bf}{n}% + \SetMathAlphabet{\mathit}{tudnormal}{OT1}{#1}{\tud@cdfont@md}{it}% + \SetMathAlphabet{\mathit}{tudbold}{OT1}{#1}{\tud@cdfont@bf}{it}% + \SetMathAlphabet{\mathtt}{tudnormal}{OT1}{#2}{\tud@ttfont@md}{n}% + \SetMathAlphabet{\mathtt}{tudbold}{OT1}{#2}{\tud@ttfont@bf}{n}% + \if@tud@cdoldfont@active% + \SetMathAlphabet{\mathrm}{tuddin}{OT1}{\tud@cdfont@db}{b}{n}% + \SetMathAlphabet{\mathbf}{tuddin}{OT1}{\tud@cdfont@db}{b}{n}% + \SetMathAlphabet{\mathsf}{tuddin}{OT1}{\tud@cdfont@db}{b}{n}% + \SetMathAlphabet{\mathit}{tuddin}{OT1}{\tud@cdfont@db}{b}{sl}% + \SetMathAlphabet{\mathtt}{tuddin}{OT1}{#2}{\tud@ttfont@ebf}{n}% + \fi% + \IfFileExists{ueus.fd}{% + \SetMathAlphabet{\mathcal}{tudnormal}{U}{eus}{m}{n}% + \SetMathAlphabet{\mathcal}{tudbold}{U}{eus}{b}{n}% + \if@tud@cdoldfont@active% + \SetMathAlphabet{\mathcal}{tuddin}{U}{eus}{b}{n}% + \fi% + }{}% + \tud@if@ismathalphabet{\mathfrak}{% + \IfFileExists{ueuf.fd}{% + \SetMathAlphabet{\mathfrak}{tudnormal}{U}{euf}{m}{n}% + \SetMathAlphabet{\mathfrak}{tudbold}{U}{euf}{b}{n}% + \if@tud@cdoldfont@active% + \SetMathAlphabet{\mathfrak}{tuddin}{U}{euf}{b}{n}% + \fi% + }{}% + }{}% +% \end{macrocode} +% Das Paket \pkg{cmbright} stelt zusätzlich noch Schriftschnitte für die +% Symbolschriften \val{AMSa} und \val{AMSb} bereit, welche gegebenenfalls für +% die alten Schriften geladen werden. +% \begin{macrocode} + \AtBeginDocument{% + \@tud@res@swafalse% + \tud@if@issymbolfont{AMSa}{\@tud@res@swatrue}{}% + \tud@if@issymbolfont{AMSb}{\@tud@res@swatrue}{}% + \if@tud@res@swa% + \if@tud@cdoldfont@active% + \DeclareFontFamily{U}{\tud@cdfont@fam@lf a}{}% + \DeclareFontShape{U}{\tud@cdfont@fam@lf a}{m}{n}{<->cmbras10}{}% + \SetSymbolFont{AMSa}{tudnormal}{U}{\tud@cdfont@fam@lf a}{m}{n}% + \SetSymbolFont{AMSa}{tudbold}{U}{\tud@cdfont@fam@lf a}{m}{n}% + \DeclareFontFamily{U}{\tud@cdfont@fam@lf b}{}% + \DeclareFontShape{U}{\tud@cdfont@fam@lf b}{m}{n}{<->cmbrbs10}{}% + \SetSymbolFont{AMSb}{tudnormal}{U}{\tud@cdfont@fam@lf b}{m}{n}% + \SetSymbolFont{AMSb}{tudbold}{U}{\tud@cdfont@fam@lf b}{m}{n}% +% \end{macrocode} +% Wurde ein Paket geladen, welches die \pkg{amsfonts}-Schriftfamilie definiert, +% so wird bei der Verwendung von \OpenSans eine Information ausgegeben, dass im +% Zweifel das Paket \pkg{mdsymbol} besser zu den Schriften des \CDs passt. +% \begin{macrocode} + \else% + \@ifpackageloaded{mdsymbol}{}{% + \appto\tud@cdmath@wrn{% +%<*class> + \ClassInfoNoLine{\TUD@Class@Name}% +%</class> +%<*package> + \PackageInfoNoLine{tudscrfonts}% +%</package> + {% + You may load package `mdsymbol' in order to\MessageBreak% + get symbols matching the used math font% + }% + }% + }% + \fi% + \fi% +% \end{macrocode} +% Wurde das Paket \pkg{fontspec} mit der Option \opt{math} geladen, so wird +% durch dieses die Symbolschrift \val{legacymaths} erstellt. Diese wird +% gegebenenfalls für die Mathematikversionen sinnvoll definiert. +% \begin{macrocode} + \tud@if@issymbolfont{legacymaths}{% + \SetSymbolFont{legacymaths}{tudnormal}{OT1}{#1}{\tud@cdfont@md}{n}% + \SetSymbolFont{legacymaths}{tudbold}{OT1}{#1}{\tud@cdfont@bf}{n}% + \if@tud@cdoldfont@active% + \SetSymbolFont{legacymaths}{tuddin}{OT1}{\tud@cdfont@db}{b}{n}% + \fi% + }{}% +% \end{macrocode} +% Daran anschließend wird die zuvor definierte Schrift in einer Box verwendet, +% um das Laden der Schriftdefinitionen am Dokumentbeginn zu forcieren. +% \begin{macrocode} + \if@tud@cdoldfont@active% + \if@tud@cdmath@active% + \sbox\z@{\mathversion{tudnormal}$ $\mathversion{tuddin}$ $}% + \fi% + \fi% + }% +} +% \end{macrocode} +% \end{macro}^^A \MTversion@@ +% \end{macro}^^A \MTDeclareVersion +% \end{macro}^^A \tud@mathversion +% \end{macro}^^A \mv@tuddin +% \end{macro}^^A \mv@tudbold +% \end{macro}^^A \mv@tudnormal +% \end{macro}^^A \tud@x@mathastext@enc +% \end{macro}^^A \tud@cdmath@@init +% \end{macro}^^A \tud@cdmath@init +% \begin{macro}{\tud@cdmath@declare@symb} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@cdmath@declare@alias} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@cdmath@symb@list} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@cdmath@declare@char} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@cdmath@char@list} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@DeclareMathSymbol} +% \changes{v2.06}{2019/06/19}{neu}^^A +% Mit \cs{tud@cdmath@declare@symb} und \cs{tud@cdmath@declare@char} können +% Glyhen respektive einzelne Zeichen definiert werden, welche über das Makro +% \cs{tud@cdmath@symbols@set} nur zum Einsatz kommen, wenn \opt{cdmath=true} +% aktiviert wurde. Damit können in den unterschiedlichen Mathematikversionen +% Symbole wie beispielsweise \cs{alpha} unterschiedlich kodiert werden, was +% über die einfache Verwendung von \cs{DeclareMathSymbol} nicht möglich ist. +% \begin{macrocode} +\newcommand*\tud@cdmath@symb@list{} +\newcommand*\tud@cdmath@declare@symb[4]{% + \listeadd\tud@cdmath@symb@list{#1}% + \tud@DeclareMathSymbol{#1}{#2}{#3}{#4}% +} +% \end{macrocode} +% Hiermit kann ein Alias-Befehl für ein Symbol definiert werden. +% \begin{macrocode} +\newcommand*\tud@cdmath@declare@alias[2]{% + \listeadd\tud@cdmath@symb@list{#1}% + \ifcsdef{tud@cdmath@symbol@#2}{% + \csedef{tud@cdmath@symbol@#1}{\csname tud@cdmath@symbol@#2\endcsname}% + }{}% +} +\newcommand*\tud@cdmath@char@list{} +\newcommand*\tud@cdmath@declare@char[4]{% + \listeadd\tud@cdmath@char@list{#1}% + \tud@DeclareMathSymbol{#1}{#2}{#3}{#4}% +} +% \end{macrocode} +% Die an \cs{tud@cdmath@declare@symb} und \cs{tud@cdmath@declare@char} +% übergebene Bezeichner für Auswahlbefehle erhalten \cs{tud@cdmath@symbol@} als +% Präfix, wodurch sich die Definitionen für die einzelnen Mathematikversionen +% beliebig tauschen lassen. +% \begin{macrocode} +\newcommand*\tud@DeclareMathSymbol[4]{% + \begingroup% + \edef\tud@res@a{% + \endgroup% + \noexpand\DeclareMathSymbol% + {\csname tud@cdmath@symbol@#1\endcsname}% + {\etex@unexpanded{#2}}{#3}{#4}% + }% + \tud@res@a% +} +% \end{macrocode} +% \end{macro}^^A \tud@DeclareMathSymbol +% \end{macro}^^A \tud@cdmath@char@list +% \end{macro}^^A \tud@cdmath@declare@char +% \end{macro}^^A \tud@cdmath@symb@list +% \end{macro}^^A \tud@cdmath@declare@alias +% \end{macro}^^A \tud@cdmath@declare@symb +% \begin{macro}{\tud@cdmath@symbols@set} +% \changes{v2.04}{2015/03/10}{neu}^^A +% \begin{macro}{\tud@cdmath@symbols@toks} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@cdmath@symbols@set@cmd} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@cdmath@symbols@set@chr} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@cdmath@symbols@reset} +% \changes{v2.04}{2015/03/10}{neu}^^A +% Mit diesen beiden Befehlen kann innerhalb des Dokumentes problemlos zwischen +% mathematischen Symbolen und Zeichen für die Schriften des \CDs, welche mit +% \cs{tud@cdmath@declare@symb} sowie \cs{tud@cdmath@declare@char} deklariert +% wurden, und den normalen gewechselt werden. +% \begin{macrocode} +\newtoks\tud@cdmath@symbols@toks +\newcommand*\tud@cdmath@symbols@set{% +% \end{macrocode} +% Die Sicherung der alten Definitionen erfolgt nur einmalig. Die Liste der +% Symbole respektive Zeichen wird durchlaufen und die erfolgten Definitionen +% werden umgesetzt. +% \begin{macrocode} + \expandafter\IfArgIsEmpty\expandafter{\the\tud@cdmath@symbols@toks}{% + \forlistloop\tud@cdmath@symbols@set@cmd\tud@cdmath@symb@list% + \forlistloop\tud@cdmath@symbols@set@chr\tud@cdmath@char@list% +% \end{macrocode} +% Wird das Tokenregister abgerufen, soll es anschließend auch wieder geleert +% werden. +% \begin{macrocode} + \addto@hook\tud@cdmath@symbols@toks{\tud@cdmath@symbols@toks{}}% + }{}% +} +% \end{macrocode} +% Beim Setzen der Mathematikversion im \CD wird zur Wiederherstellung der +% Standardmathematikversion das Vorgehen im Token \cs{tud@cdmath@symbols@toks} +% definiert. +% \begin{macrocode} +\newcommand*\tud@cdmath@symbols@set@cmd[1]{% +% \end{macrocode} +% Existiert ein Befehl in der Standardmathematikversion, dann wird dieser +% gesichert und später wiederhergestellt. Andernfalls wird er wieder undefinert +% gesetzt. +% \begin{macrocode} + \ifcsdef{#1}{% + \tud@cs@store{#1}% + \addto@hook\tud@cdmath@symbols@toks{\tud@cs@restore{#1}}% + }{% + \addto@hook\tud@cdmath@symbols@toks{\csundef{#1}}% + }% +% \end{macrocode} +% Nur wenn ein gewünschtes Symbol auch existiert, wird es gesetzt. Damit können +% Symbole für \opt{cdmath=true} auch gezielt undefiniert gesetzt werden. +% \begin{macrocode} + \ifcsdef{tud@cdmath@symbol@#1}{% + \tud@cs@letltx{#1}{tud@cdmath@symbol@#1}% + }{% + \csundef{#1}% + }% +} +% \end{macrocode} +% Für einzelne Zeichen ist das Vorgehen vom Prinzip her gleich. Allerdings wird +% hier der zu sichernde \cs{mathcode} direkt in \cs{tud@cdmath@symbols@toks} +% geschrieben. +% \begin{macrocode} +\newcommand*\tud@cdmath@symbols@set@chr[1]{% + \edef\tud@res@a{\global\mathcode`#1=\the\mathcode`#1\relax}% + \eaddto@hook\tud@cdmath@symbols@toks{\tud@res@a}% +% \end{macrocode} +% Für das Überschreiben des \cs{mathcode} des gewünschen \meta{Zeichen} wird +% dieser aus der Bedeutung von \cs{tud@cdmath@symbols@\meta{Zeichen}} mit +% \cs{meaning} herausgelöst. +% \begin{macrocode} + \begingroup% + \edef\tud@res@a{\expandafter\meaning\csname tud@cdmath@symbol@#1\endcsname}% + \def\tud@res@b##1"##2\@nil{"##2}% + \edef\tud@res@c{\expandafter\tud@res@b\tud@res@a\@nil}% + \edef\tud@res@a{% + \endgroup% + \global\mathcode`#1=\tud@res@c% + }% + \tud@res@a% +} +% \end{macrocode} +% Für das Zurücksetzen muss lediglich das Tokenregister aufgerufen werden. +% \begin{macrocode} +\newcommand*\tud@cdmath@symbols@reset{\the\tud@cdmath@symbols@toks} +% \end{macrocode} +% \end{macro}^^A \tud@cdmath@symbols@reset +% \end{macro}^^A \tud@cdmath@symbols@set@chr +% \end{macro}^^A \tud@cdmath@symbols@set@cmd +% \end{macro}^^A \tud@cdmath@symbols@toks +% \end{macro}^^A \tud@cdmath@symbols@set +% \begin{macro}{\tud@cdmath@declare@greek@uc} +% \changes{v2.04}{2015/03/10}{neu}^^A +% \begin{macro}{\tud@cdmath@symbol@upGamma} +% \begin{macro}{\tud@cdmath@symbol@upDelta} +% \begin{macro}{\tud@cdmath@symbol@upTheta} +% \begin{macro}{\tud@cdmath@symbol@upLambda} +% \begin{macro}{\tud@cdmath@symbol@upXi} +% \begin{macro}{\tud@cdmath@symbol@upPi} +% \begin{macro}{\tud@cdmath@symbol@upSigma} +% \begin{macro}{\tud@cdmath@symbol@upUpsilon} +% \begin{macro}{\tud@cdmath@symbol@upPhi} +% \begin{macro}{\tud@cdmath@symbol@upPsi} +% \begin{macro}{\tud@cdmath@symbol@upOmega} +% \begin{macro}{\tud@cdmath@symbol@itGamma} +% \begin{macro}{\tud@cdmath@symbol@itDelta} +% \begin{macro}{\tud@cdmath@symbol@itTheta} +% \begin{macro}{\tud@cdmath@symbol@itLambda} +% \begin{macro}{\tud@cdmath@symbol@itXi} +% \begin{macro}{\tud@cdmath@symbol@itPi} +% \begin{macro}{\tud@cdmath@symbol@itSigma} +% \begin{macro}{\tud@cdmath@symbol@itUpsilon} +% \begin{macro}{\tud@cdmath@symbol@itPhi} +% \begin{macro}{\tud@cdmath@symbol@itPsi} +% \begin{macro}{\tud@cdmath@symbol@itOmega} +% In Anlehnung an verschiedene Pakete für Mathematikschriften werden Symbole +% für aufrechte und kursive Majuskeln der griechischen Lettern definiert. Damit +% auch bei diesen Buchstaben ein Umschalten für die unterschiedlichen Schriften +% möglich ist, wird eine interne Version definiert und im Bedarfsfall der +% dazugehörige \LaTeX-Befehl mit dieser überschrieben. Hierfür sind die beiden +% Befehle \cs{tud@cdmath@symbols@set} und \cs{tud@cdmath@symbols@reset} +% verantwortlich. +% \ToDo{Codierungen \val{LS1/LS2}; siehe \pkg{stix,libertinust1math}}[v2.??] +% \begin{macrocode} +\newcommand*\tud@cdmath@declare@greek@uc[1]{% + \tud@cdmath@declare@symb{it#1}{\mathalpha}{letters}{\the\tud@res@cnt}% + \tud@cdmath@declare@symb{up#1}{\mathalpha}{operators}{\the\tud@res@cnt}% + \advance\tud@res@cnt\@ne\relax% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdmath@symbol@itOmega +% \end{macro}^^A \tud@cdmath@symbol@itPsi +% \end{macro}^^A \tud@cdmath@symbol@itPhi +% \end{macro}^^A \tud@cdmath@symbol@itUpsilon +% \end{macro}^^A \tud@cdmath@symbol@itSigma +% \end{macro}^^A \tud@cdmath@symbol@itPi +% \end{macro}^^A \tud@cdmath@symbol@itXi +% \end{macro}^^A \tud@cdmath@symbol@itLambda +% \end{macro}^^A \tud@cdmath@symbol@itTheta +% \end{macro}^^A \tud@cdmath@symbol@itDelta +% \end{macro}^^A \tud@cdmath@symbol@itGamma +% \end{macro}^^A \tud@cdmath@symbol@upOmega +% \end{macro}^^A \tud@cdmath@symbol@upPsi +% \end{macro}^^A \tud@cdmath@symbol@upPhi +% \end{macro}^^A \tud@cdmath@symbol@upUpsilon +% \end{macro}^^A \tud@cdmath@symbol@upSigma +% \end{macro}^^A \tud@cdmath@symbol@upPi +% \end{macro}^^A \tud@cdmath@symbol@upXi +% \end{macro}^^A \tud@cdmath@symbol@upLambda +% \end{macro}^^A \tud@cdmath@symbol@upTheta +% \end{macro}^^A \tud@cdmath@symbol@upDelta +% \end{macro}^^A \tud@cdmath@symbol@upGamma +% \end{macro}^^A \tud@cdmath@declare@greek@uc +% \begin{macro}{\tud@cdmath@declare@greek@lc} +% \changes{v2.06}{2018/07/17}{neu}^^A +% \begin{macro}{\tud@cdmath@symbol@upalpha} +% \begin{macro}{\tud@cdmath@symbol@upbeta} +% \begin{macro}{\tud@cdmath@symbol@upgamma} +% \begin{macro}{\tud@cdmath@symbol@updelta} +% \begin{macro}{\tud@cdmath@symbol@upepsilon} +% \begin{macro}{\tud@cdmath@symbol@upzeta} +% \begin{macro}{\tud@cdmath@symbol@upeta} +% \begin{macro}{\tud@cdmath@symbol@uptheta} +% \begin{macro}{\tud@cdmath@symbol@upiota} +% \begin{macro}{\tud@cdmath@symbol@upkappa} +% \begin{macro}{\tud@cdmath@symbol@uplambda} +% \begin{macro}{\tud@cdmath@symbol@upmu} +% \begin{macro}{\tud@cdmath@symbol@upnu} +% \begin{macro}{\tud@cdmath@symbol@upxi} +% \begin{macro}{\tud@cdmath@symbol@uppi} +% \begin{macro}{\tud@cdmath@symbol@uprho} +% \begin{macro}{\tud@cdmath@symbol@upsigma} +% \begin{macro}{\tud@cdmath@symbol@uptau} +% \begin{macro}{\tud@cdmath@symbol@upupsilon} +% \begin{macro}{\tud@cdmath@symbol@upphi} +% \begin{macro}{\tud@cdmath@symbol@upchi} +% \begin{macro}{\tud@cdmath@symbol@uppsi} +% \begin{macro}{\tud@cdmath@symbol@upomega} +% \begin{macro}{\tud@cdmath@symbol@upvarepsilon} +% \begin{macro}{\tud@cdmath@symbol@upvartheta} +% \begin{macro}{\tud@cdmath@symbol@upvarpi} +% \begin{macro}{\tud@cdmath@symbol@upvarrho} +% \begin{macro}{\tud@cdmath@symbol@upvarsigma} +% \begin{macro}{\tud@cdmath@symbol@upvarphi} +% \begin{macro}{\tud@cdmath@symbol@italpha} +% \begin{macro}{\tud@cdmath@symbol@itbeta} +% \begin{macro}{\tud@cdmath@symbol@itgamma} +% \begin{macro}{\tud@cdmath@symbol@itdelta} +% \begin{macro}{\tud@cdmath@symbol@itepsilon} +% \begin{macro}{\tud@cdmath@symbol@itzeta} +% \begin{macro}{\tud@cdmath@symbol@iteta} +% \begin{macro}{\tud@cdmath@symbol@ittheta} +% \begin{macro}{\tud@cdmath@symbol@itiota} +% \begin{macro}{\tud@cdmath@symbol@itkappa} +% \begin{macro}{\tud@cdmath@symbol@itlambda} +% \begin{macro}{\tud@cdmath@symbol@itmu} +% \begin{macro}{\tud@cdmath@symbol@itnu} +% \begin{macro}{\tud@cdmath@symbol@itxi} +% \begin{macro}{\tud@cdmath@symbol@itpi} +% \begin{macro}{\tud@cdmath@symbol@itrho} +% \begin{macro}{\tud@cdmath@symbol@itsigma} +% \begin{macro}{\tud@cdmath@symbol@ittau} +% \begin{macro}{\tud@cdmath@symbol@itupsilon} +% \begin{macro}{\tud@cdmath@symbol@itphi} +% \begin{macro}{\tud@cdmath@symbol@itchi} +% \begin{macro}{\tud@cdmath@symbol@itpsi} +% \begin{macro}{\tud@cdmath@symbol@itomega} +% \begin{macro}{\tud@cdmath@symbol@itvarepsilon} +% \begin{macro}{\tud@cdmath@symbol@itvartheta} +% \begin{macro}{\tud@cdmath@symbol@itvarpi} +% \begin{macro}{\tud@cdmath@symbol@itvarrho} +% \begin{macro}{\tud@cdmath@symbol@itvarsigma} +% \begin{macro}{\tud@cdmath@symbol@itvarphi} +% Aufrechte griechische Minuskeln sind in den mathematischen Kodierungen von +% \LaTeXe{} leider nicht enthalten, weshalb diese hier auch nicht für die +% normale OML-Kodierung deklariert werden können. +% \begin{macrocode} +\newcommand*\tud@cdmath@declare@greek@lc[1]{% + \tud@cdmath@declare@symb{it#1}{\mathalpha}{letters}{\the\tud@res@cnt}% +% \end{macrocode} +% Für aufrechte griechische Minuskeln gibt es gewöhnlich keine Symbolschrift, +% weshalb ein einfacher Eintrag \cs{up\meta{Bezeichner}} in die Liste +% {tud@cdmath@symb@list} gesetzt wird, was in Verbindung mit einem fehlenden +% Symbol \cs{tud@cdmath@symbol@\meta{Bezeichner}} zu einem undefinierten +% cs{up\meta{Bezeichner}} bei \opt{cdmath=true} führt. +% \ToDo{falls irgendwann erweiterte OML-Kodierung existiert, dann nutzen}[v2.??] +% \begin{macrocode} +%^^A \tud@cdmath@declare@symb{it##1}{\mathalpha}{letters}% +%^^A {\the\numexpr\tud@res@cnt+128\relax}% + \listeadd\tud@cdmath@symb@list{up#1}% + \advance\tud@res@cnt\@ne\relax% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdmath@symbol@itvarphi +% \end{macro}^^A \tud@cdmath@symbol@itvarsigma +% \end{macro}^^A \tud@cdmath@symbol@itvarrho +% \end{macro}^^A \tud@cdmath@symbol@itvarpi +% \end{macro}^^A \tud@cdmath@symbol@itvartheta +% \end{macro}^^A \tud@cdmath@symbol@itvarepsilon +% \end{macro}^^A \tud@cdmath@symbol@itomega +% \end{macro}^^A \tud@cdmath@symbol@itpsi +% \end{macro}^^A \tud@cdmath@symbol@itchi +% \end{macro}^^A \tud@cdmath@symbol@itphi +% \end{macro}^^A \tud@cdmath@symbol@itupsilon +% \end{macro}^^A \tud@cdmath@symbol@ittau +% \end{macro}^^A \tud@cdmath@symbol@itsigma +% \end{macro}^^A \tud@cdmath@symbol@itrho +% \end{macro}^^A \tud@cdmath@symbol@itpi +% \end{macro}^^A \tud@cdmath@symbol@itxi +% \end{macro}^^A \tud@cdmath@symbol@itnu +% \end{macro}^^A \tud@cdmath@symbol@itmu +% \end{macro}^^A \tud@cdmath@symbol@itlambda +% \end{macro}^^A \tud@cdmath@symbol@itkappa +% \end{macro}^^A \tud@cdmath@symbol@itiota +% \end{macro}^^A \tud@cdmath@symbol@ittheta +% \end{macro}^^A \tud@cdmath@symbol@iteta +% \end{macro}^^A \tud@cdmath@symbol@itzeta +% \end{macro}^^A \tud@cdmath@symbol@itepsilon +% \end{macro}^^A \tud@cdmath@symbol@itdelta +% \end{macro}^^A \tud@cdmath@symbol@itgamma +% \end{macro}^^A \tud@cdmath@symbol@itbeta +% \end{macro}^^A \tud@cdmath@symbol@italpha +% \end{macro}^^A \tud@cdmath@symbol@upvarphi +% \end{macro}^^A \tud@cdmath@symbol@upvarsigma +% \end{macro}^^A \tud@cdmath@symbol@upvarrho +% \end{macro}^^A \tud@cdmath@symbol@upvarpi +% \end{macro}^^A \tud@cdmath@symbol@upvartheta +% \end{macro}^^A \tud@cdmath@symbol@upvarepsilon +% \end{macro}^^A \tud@cdmath@symbol@upomega +% \end{macro}^^A \tud@cdmath@symbol@uppsi +% \end{macro}^^A \tud@cdmath@symbol@upchi +% \end{macro}^^A \tud@cdmath@symbol@upphi +% \end{macro}^^A \tud@cdmath@symbol@upupsilon +% \end{macro}^^A \tud@cdmath@symbol@uptau +% \end{macro}^^A \tud@cdmath@symbol@upsigma +% \end{macro}^^A \tud@cdmath@symbol@uprho +% \end{macro}^^A \tud@cdmath@symbol@uppi +% \end{macro}^^A \tud@cdmath@symbol@upxi +% \end{macro}^^A \tud@cdmath@symbol@upnu +% \end{macro}^^A \tud@cdmath@symbol@upmu +% \end{macro}^^A \tud@cdmath@symbol@uplambda +% \end{macro}^^A \tud@cdmath@symbol@upkappa +% \end{macro}^^A \tud@cdmath@symbol@upiota +% \end{macro}^^A \tud@cdmath@symbol@uptheta +% \end{macro}^^A \tud@cdmath@symbol@upeta +% \end{macro}^^A \tud@cdmath@symbol@upzeta +% \end{macro}^^A \tud@cdmath@symbol@upepsilon +% \end{macro}^^A \tud@cdmath@symbol@updelta +% \end{macro}^^A \tud@cdmath@symbol@upgamma +% \end{macro}^^A \tud@cdmath@symbol@upbeta +% \end{macro}^^A \tud@cdmath@symbol@upalpha +% \end{macro}^^A \tud@cdmath@declare@greek@lc +% \begin{macro}{\tud@cdmath@declare@greek@lgr} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@cdmath@declare@greek@@lgr} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \changes{v2.06d}{2019/08/27}{Ligaturen für Lua\LaTeX{} deaktiviert}^^A +% Die \OpenSans hält die griechischen Glyphen nur in der LGR-Kodierung bereit. +% Hiermit werden diese für den mathematischen Satz definiert. Die übergebenen +% Argumente an das Makro \cs{tud@cdmath@declare@greek@@lgr} sind Bezeichnung +% und LGR-Slot der Glyphe. +% \begin{macrocode} +\newcommand*\tud@cdmath@declare@greek@lgr{% + \tud@cdmath@declare@greek@@lgr{Gamma}{71}% + \tud@cdmath@declare@greek@@lgr{Delta}{68}% + \tud@cdmath@declare@greek@@lgr{Theta}{74}% + \tud@cdmath@declare@greek@@lgr{Lambda}{76}% + \tud@cdmath@declare@greek@@lgr{Xi}{88}% + \tud@cdmath@declare@greek@@lgr{Pi}{80}% + \tud@cdmath@declare@greek@@lgr{Sigma}{83}% + \tud@cdmath@declare@greek@@lgr{Upsilon}{85}% + \tud@cdmath@declare@greek@@lgr{Phi}{70}% + \tud@cdmath@declare@greek@@lgr{Psi}{89}% + \tud@cdmath@declare@greek@@lgr{Omega}{87}% + \tud@cdmath@declare@greek@@lgr{alpha}{97}% + \tud@cdmath@declare@greek@@lgr{beta}{98}% + \tud@cdmath@declare@greek@@lgr{gamma}{103}% + \tud@cdmath@declare@greek@@lgr{delta}{100}% + \tud@cdmath@declare@greek@@lgr{epsilon}{101}% + \tud@cdmath@declare@greek@@lgr{zeta}{122}% + \tud@cdmath@declare@greek@@lgr{eta}{104}% + \tud@cdmath@declare@greek@@lgr{theta}{106}% + \tud@cdmath@declare@greek@@lgr{iota}{105}% + \tud@cdmath@declare@greek@@lgr{kappa}{107}% + \tud@cdmath@declare@greek@@lgr{lambda}{108}% + \tud@cdmath@declare@greek@@lgr{mu}{109}% + \tud@cdmath@declare@greek@@lgr{nu}{110}% + \tud@cdmath@declare@greek@@lgr{xi}{120}% + \tud@cdmath@declare@greek@@lgr{pi}{112}% + \tud@cdmath@declare@greek@@lgr{rho}{114}% + \tud@cdmath@declare@greek@@lgr{sigma}{115}% + \tud@cdmath@declare@greek@@lgr{tau}{116}% + \tud@cdmath@declare@greek@@lgr{upsilon}{117}% + \tud@cdmath@declare@greek@@lgr{phi}{102}% + \tud@cdmath@declare@greek@@lgr{chi}{113}% + \tud@cdmath@declare@greek@@lgr{psi}{121}% + \tud@cdmath@declare@greek@@lgr{omega}{119}% + \tud@cdmath@declare@greek@@lgr{varepsilon}{101}% + \tud@cdmath@declare@greek@@lgr{vartheta}{106}% + \tud@cdmath@declare@greek@@lgr{varpi}{119}% + \tud@cdmath@declare@greek@@lgr{varrho}{114}% + \tud@cdmath@declare@greek@@lgr{varsigma}{99}% + \tud@cdmath@declare@greek@@lgr{varphi}{102}% +} +\newcommand*\tud@cdmath@declare@greek@@lgr[2]{% + \tud@cdmath@declare@symb{it#1}{\mathalpha}{tuditgrk}{#2}% + \tud@cdmath@declare@symb{up#1}{\mathalpha}{tudupgrk}{#2}% +% \end{macrocode} +% Normalerweise sollten Ligaturen für angrenzende Glyphen (boundary ligatures) +% im Mathematikmodus deaktiviert werden. Bei Lua\LaTeX{} ist dies jedoch nicht +% der Fall, weshalb hier etwas nachgeholfen werden muss, indem nach der Glyphe +% schlichtweg ein Klammernpaar in der richtigen Kodierung eingefügt wird. +% \begin{macrocode} + \scr@ifluatex{% + \begingroup% + \def\tud@res@a{\if@tud@cdmath@active\fontencoding{LGR}\selectfont{}\fi}% + \def\tud@res@b##1{% + \csxdef{tud@cdmath@symbol@##1}{% + {% + \mathchar\expandafter\the\csuse{tud@cdmath@symbol@##1}% + \expandonce\tud@res@a% + }% + }% + }% + \tud@res@b{it#1}% + \tud@res@b{up#1}% + \endgroup% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdmath@declare@greek@@lgr +% \end{macro}^^A \tud@cdmath@declare@greek@lgr +% \begin{macro}{\tud@cdmath@also@greeks} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@cdmath@also@@greeks} +% \changes{v2.06}{2019/06/19}{neu}^^A +% \begin{macro}{\tud@cdmath@also@@@greeks} +% \changes{v2.06}{2019/06/19}{neu}^^A +% Das ist quasi das Gegenstück zu \cs{tud@math@map@greeks}. Alle bekannten +% Variationen der Auswahlbefehle für griechische Glyphen werden durch die +% Definitionen für die Mathematikschriften im \CD gespiegelt. +% \begin{macrocode} +\newcommand*\tud@cdmath@also@greeks{% + \tud@math@loop@greeks@all\tud@cdmath@also@@greeks% + \tud@math@loop@greeks@uc\tud@cdmath@also@@@greeks% +} +\newcommand*\tud@cdmath@also@@greeks[1]{% + \tud@cdmath@declare@alias{#1}{it#1}% + \tud@cdmath@declare@alias{other#1}{up#1}% + \ifcsundef{#1up}{}{% + \tud@cdmath@declare@alias{#1up}{up#1}% + }% + \@for\tud@res@a:={#1sl,sl#1,#1it}\do{% + \ifcsundef{\tud@res@a}{}{% + \expandafter\tud@cdmath@declare@alias\expandafter{\tud@res@a}{it#1}% + }% + }% + \ifcsundef{#1other}{}{% + \tud@cdmath@declare@alias{#1other}{other#1}% + }% +} +\newcommand*\tud@cdmath@also@@@greeks[1]{% + \tud@lowerstring\tud@res@a{#1}% + \edef\tud@res@a{Up\tud@res@a}% + \ifcsundef{\tud@res@a}{}{% + \expandafter\tud@cdmath@declare@alias\expandafter{\tud@res@a}{up#1}% + }% + \ifcsundef{var#1}{}{% + \expandafter\tud@cdmath@declare@alias\expandafter{var#1}{it#1}% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdmath@also@@@greeks +% \end{macro}^^A \tud@cdmath@also@@greeks +% \end{macro}^^A \tud@cdmath@also@greeks +% \begin{macro}{\tud@math@set} +% Mit diesem Befehl werden die Einstellungen für den Mathematiksatz übernommen. +% Die Option \opt{cdmath} wird ausgewertet, um zwischen dem Standard"~ und +% neuem Mathematiksatz hin"~ und herschalten zu können. Dabei wird zum einen +% das Mapping der griechischen Glyphen geändert, zum anderen werden die +% originalen Mathematikversionen überschrieben respektive wiederhergestellt. +% \begin{macrocode} +\newcommand*\tud@math@set{% +% \end{macrocode} +% Beim Aktivieren der Mathematikschriften im \CD werden einmalig alle Warnungen +% ausgegeben, falls bei der Initialisierung Probleme aufgetreten sind und +% dementsprechend der Hook \cs{tud@cdmath@wrn} gefüllt wurde. +% \begin{macrocode} + \if@tud@cdmath@active% + \tud@cdmath@wrn% + \tud@cs@store{mv@normal}% + \tud@cs@store{mv@bold}% + \let\mv@normal\mv@tudnormal% + \let\mv@bold\mv@tudbold% + \tud@cdmath@symbols@set% +% \end{macrocode} +% Anschließend erfolgt~-- abhängig von der Option \opt{slantedgreek}~-- die +% Einstellung der Neigung der griechischen Glyphen. +% \begin{macrocode} + \ifcase\tud@slantedgreek@num\relax% upright + \tud@math@loop@greeks@all\tud@math@upright@greeks% + \or% slanted + \tud@math@loop@greeks@all\tud@math@slanted@greeks% + \or% standard + \tud@math@loop@greeks@uc\tud@math@upright@greeks% + \tud@math@loop@greeks@lc\tud@math@slanted@greeks% + \fi% + \else% + \tud@cs@restore{mv@normal}% + \tud@cs@restore{mv@bold}% + \tud@cdmath@symbols@reset% + \fi% + \mathversion{normal}% +} +% \end{macrocode} +% \end{macro}^^A \tud@math@set +% \begin{macro}{\tud@math@upright@greeks} +% \changes{v2.06}{2018/07/02}{neu}^^A +% \begin{macro}{\tud@math@slanted@greeks} +% \changes{v2.06}{2018/07/02}{neu}^^A +% Mit den beiden Befehlen kann die Definition der griechischen Buchstaben +% entweder auf aufrecht bzw. kursiv gesetzt werden. +% \begin{macrocode} +\newcommand*\tud@math@upright@greeks[1]{% + \ifcsundef{up#1}{}{% + \csletcs{#1}{up#1}% + \csletcs{other#1}{it#1}% + }% +} +\newcommand*\tud@math@slanted@greeks[1]{% + \ifcsundef{up#1}{}{% + \csletcs{#1}{it#1}% + \csletcs{other#1}{up#1}% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@math@slanted@greeks +% \end{macro}^^A \tud@math@upright@greeks +% Sämtliche Schrifteinstellungen erfolgen erst am Ende der Präambel, um etwaige +% Einstellungen irgendwelcher Schriftpakete beachten zu können. Dabei erfolgt +% das Setzen der Mathematikschriften durch \cs{AtBeginDocument} innerhalb von +% \cs{AtEndPreamble} am Ende \emph{aller} \cs{AtBeginDocument}. +% \begin{macrocode} +\AtEndPreamble{% +% \end{macrocode} +% Falls das Paket \pkg{mweights} geladen wurde, werden im Bedarfsfall die vom +% Paket erwarteten Makros für die Schriftstärken der einzelnen Schriftfamilien +% definiert. Beim Aufruf von \cs{tud@font@set} werden diese anschließend +% gesichert. +% \begin{macrocode} + \if@tud@x@mweights@enabled% + \ifundef{\bfseries@rm}{\edef\bfseries@rm{\bfdefault}}{}% + \ifundef{\mdseries@rm}{\edef\mdseries@rm{\mddefault}}{}% + \ifundef{\bfseries@sf}{\edef\bfseries@sf{\bfdefault}}{}% + \ifundef{\mdseries@sf}{\edef\mdseries@sf{\mddefault}}{}% + \ifundef{\bfseries@tt}{\edef\bfseries@tt{\bfdefault}}{}% + \ifundef{\mdseries@tt}{\edef\mdseries@tt{\mddefault}}{}% + \fi% +% \end{macrocode} +% Hier wird auf das Vorhandensein aller benötigten Schriften geprüft. +% \begin{macrocode} + \tud@cdfont@check% +% \end{macrocode} +% Damit \pkg{tudscrfonts} reibungslos mit den nachfolgenden Definitionen +% funktioniert, wird im Bedarfsfall der Befehl \cs{sectfont} vorgehalten. +% \begin{macrocode} +%<package> \ifdef{\sectfont}{}{\let\sectfont\relax}% +% \end{macrocode} +% Nachdem auf die Schriften geprüft wurde, werden noch die Schriftschalter und +% die dazugehörigen Befehle definiert. Auch die mathematischen Schriften werden +% initialisiert. +% \begin{macrocode} + \tud@cdfont@init% + \tud@ttfont@init% + \tud@cdmath@init% +% \end{macrocode} +% Die Einstellungen für den Mathematiksatz erfolgen erst zu Dokumentbeginn, um +% auf Einstellungen von anderen Schriftpaketen reagieren zu können. Da es +% so gut wie keine freien OpenType-Schriften für den mathmatischen Formelsatz +% gibt, werden \emph{immer} die Type1-Schriften verwendet, falls diese +% installiert sind. Wurde jedoch das Paket \pkg{bm} angefordert, so müssen die +% Mathematikschriften spätestens zum Ende der Präambel initialisiert werden. +% \begin{macrocode} + \if@tud@x@bm@requested% + \UnPreventPackageFromLoading{bm}% + \if@tud@cdmath@active% + \tud@cs@store{mv@normal}% + \tud@cs@store{mv@bold}% + \let\mv@normal\mv@tudnormal% + \let\mv@bold\mv@tudbold% + \fi% + \RequirePackage{bm}[2017/01/16]% + \tud@cs@restore{mv@normal}% + \tud@cs@restore{mv@bold}% + \fi% +% \end{macrocode} +% Wurde das Paket \pkg{siunitx} geladen, so werden die Schrifteinstellungen +% mit \opt{cdfont}|=|\val{false} deaktiviert und zu Beginn des Dokumentes +% auf die aktuelle Einstellung gesetzt. +% \begin{macrocode} + \if@tud@x@siunitx@enabled% + \if@tud@cdfont@active% + \if@tud@cdfont@heavy% + \def\tud@reserved{\TUDoptions{cdfont=heavy}}% + \else% + \def\tud@reserved{\TUDoptions{cdfont=true}}% + \fi% + \else% + \def\tud@reserved{\TUDoptions{cdfont=false}}% + \fi% + \expandafter\AfterEndPreamble\expandafter{\tud@reserved}% + \TUDoptions{cdfont=false}% + \fi% +% \end{macrocode} +% Damit die Schrift im Dokument später noch umgestellt werden kann, werden +% sämtliche Einstellungen erst am Ende der Präambel gesichert. Deshalb wird +% der dafür verantwortliche Befehl \cs{tud@font@set} hier zum ersten Mal +% verwendet. Damit ist es möglich, die Schriften eventuell geladener Pakete wie +% \pkg{lmodern} oder \pkg{libertine} vorher zu sichern und später wieder zu +% aktivieren. +% \begin{macrocode} + \tud@font@set% + \AtBeginDocument{% +% \end{macrocode} +% Bereitstellung der Auswahlbefehle für griechische Glyphen in der Nomenklatur +% von \TUDScript (\cs{up\meta{Bezeichner}}, \cs{it\meta{Bezeichner}}). +% \begin{macrocode} + \tud@math@map@greeks% +% \end{macrocode} +% Für die griechischen Glyphen wird mit \cs{tud@math@checkslanted@greeks} +% geprüft, ob diese durch ein Paket explizit auf kursive Majuskeln oder eine +% vollständig aufrechte Variante gesetzt wurden. Ist dies der Fall, wird der +% Standardwert für die Option \opt{slantedgreek} entsprechend angepasst. +% \begin{macrocode} + \tud@math@checkslanted@greeks% +% \end{macrocode} +% Nachdem alle Vorbereitungen getroffen wurden, werden die Schriften für den +% mathematischen Satz nun endlich gesetzt. +% \begin{macrocode} + \tud@math@set% + }% +} +% \end{macrocode} +% +% \iffalse +%<*class> +% \fi +% +% \subsubsection{Schriften für die speziellen Seitenstile} +% +% \begin{macro}{\tud@head@font@set} +% \changes{v2.02}{2014/07/08}{Unterstützung für \opt{cdhead} hinzugefügt}^^A +% \changes{v2.03}{2015/01/30}{Bugfix für die Änderung von \cs{spaceskip} durch +% das Paket \pkg{ragged2e}}^^A +% \begin{macro}{\tud@head@cdfont@set}% +% \changes{v2.06}{2018/06/29}{neu}^^A +% \begin{macro}{\tud@head@font@light} +% \begin{macro}{\tud@head@font@bold} +% \begin{macro}{\tud@head@font@@bold} +% \changes{v2.05}{2016/04/17}{neu}^^A +% Die Schrift der Kopfzeile wird entweder in den Schriften des \CDs oder aber +% in den serifenlosen Standardschriften gesetzt, wobei für beide Varianten +% sowohl eine fettgedruckte als auch eine normale Version benötigt wird. Die +% Schrifthöhe ist durch das \CD unabhängig von der gewählten Schriftgröße im +% Dokument vorgegeben und wird in Abhängigkeit von der Papiergröße gewählt und +% in \cs{tud@head@fontsize} gespeichert. Das Makro \cs{tud@head@font@@bold} +% wird verwendet, um die Einstellung der fetten Schriften ohne die fixierte +% Schriftgröße nutzen zu können. +% \begin{macrocode} +\newcommand*\tud@head@font@light{} +\newcommand*\tud@head@font@bold{} +%<poster>\newcommand*\tud@head@font@@bold{} +\newcommand*\tud@head@font@set{% +% \end{macrocode} +% Die Option \opt{cdhead} wird ausgewertet. Sollte diese inkompatibel gesetzt +% sein, wird eine Warnung ausgegeben. +% \begin{macrocode} + \if@tud@cdfont@active\ifcase\tud@head@font@num\relax% false + \if@tud@head@font@set% + \ClassWarning{\TUD@Class@Name}{% + It isn't possible to use `cdhead=false'\MessageBreak% + together with `cdfont=true'% + }% + \fi% + \if@tud@cdfont@heavy% + \TUDoptions{cdhead=heavy}% + \else% + \TUDoptions{cdhead=true}% + \fi% + \fi\fi% +% \end{macrocode} +% Die Schriften für die Kopfzeile werden hier definiert. Abhängig von +% \cs{if@tud@cdfont@active} werden entweder die Schriften des \CDs oder die +% serifenlose Standardschrift für die Kopfzeile verwendet. Die Rückfallebene: +% \begin{macrocode} + \if@tud@head@font@set% + \if@tud@x@mweights@enabled% + \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}% + {\sfdefault}{\mdseries@sf}{\updefault}{\tud@head@fontsize}% + \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}% + {\sfdefault}{\bfseries@sf}{\updefault}{\tud@head@fontsize}% +%<*poster> + \protected\gdef\tud@head@font@@bold{% + \usefont{\encodingdefault}{\sfdefault}{\bfseries@sf}{\updefault}% + }% +%</poster> + \else% + \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}% + {\sfdefault}{\mddefault}{\updefault}{\tud@head@fontsize}% + \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}% + {\sfdefault}{\bfdefault}{\updefault}{\tud@head@fontsize}% +%<*poster> + \protected\gdef\tud@head@font@@bold{% + \usefont{\encodingdefault}{\sfdefault}{\bfdefault}{\updefault}% + }% +%</poster> + \fi% + \ifcase\tud@head@font@num\relax\else% true/heavy + \tud@head@cdfont@set% + \fi% + \global\@tud@head@font@setfalse% + \global\@tud@head@text@settrue% + \fi% +} +% \end{macrocode} +% Hiermit werden die eigentlichen Schriften des \CDs gesetzt. +% \begin{macrocode} +\newcommand*\tud@head@cdfont@set{% + \if@tud@cdfont@fam@exist% + \ifcase\tud@head@font@num\relax\or% true + \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{n}{\tud@head@fontsize}% + \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}% + {\tud@cdfont@fam@lf}{sb}{n}{\tud@head@fontsize}% +%<*poster> + \protected\gdef\tud@head@font@@bold{% + \usefont{\encodingdefault}{\tud@cdfont@fam@lf}{sb}{n}% + }% +%</poster> + \or% heavy + \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}% + {\tud@cdfont@fam@lf}{m}{n}{\tud@head@fontsize}% + \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}% + {\tud@cdfont@fam@lf}{b}{n}{\tud@head@fontsize}% +%<*poster> + \protected\gdef\tud@head@font@@bold{% + \usefont{\encodingdefault}{\tud@cdfont@fam@lf}{b}{n}% + }% +%</poster> + \fi% + \fi% +} +% \end{macrocode} +% Und noch die Variante für die alten Schriften. +% \begin{macrocode} +\if@tud@cdoldfont@active + \renewcommand*\tud@head@cdfont@set{% + \if@tud@cdfont@fam@exist% + \ifcase\tud@head@font@num\relax\or% true + \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}% + {\tud@cdfont@fam@lf}{l}{n}{\tud@head@fontsize}% + \or% heavy + \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}% + {\tud@cdfont@fam@lf}{m}{n}{\tud@head@fontsize}% + \fi% + \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}% + {\tud@cdfont@fam@lf}{b}{n}{\tud@head@fontsize}% +%<*poster> + \protected\gdef\tud@head@font@@bold{% + \usefont{\encodingdefault}{\tud@cdfont@fam@lf}{b}{n}% + }% +%</poster> + \fi% + }% +\fi +% \end{macrocode} +% \end{macro}^^A \tud@head@font@@bold +% \end{macro}^^A \tud@head@font@bold +% \end{macro}^^A \tud@head@font@light +% \end{macro}^^A \tud@head@cdfont@set +% \end{macro}^^A \tud@head@font@set +% +% \iffalse +%</class> +%</body> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-frontmatter.dtx b/macros/latex/contrib/tudscr/source/tudscr-frontmatter.dtx new file mode 100644 index 0000000000..57017e1136 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-frontmatter.dtx @@ -0,0 +1,1339 @@ +% \CheckSum{815} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-frontmatter.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-frontmatter.dtx}[2019/06/28 v2.06 TUD-Script\space% + (frontmatter)% +] +% +% \iffalse +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-frontmatter.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.02}{2014/07/08}{\cs{FamilyKeyState} wird von Optionen genutzt}^^A +% \changes{v2.05}{2015/07/07}{Umgebung \env{abstract} für Poster}^^A +% +% \section{Befehle und Umgebungen für den Vorspann} +% +% Im Vorspann des Dokumentes kann der Benutzer eine Zusammenfassung oder auch +% Kurzfassung angegeben. Des Weiteren kann eine Selbstständigkeitserklärung +% sowie ein Sperrvermerk hinzugefügt werden. Damit sich für diese das Layout +% möglichst individuell wählen lässt, werden hier entsprechende Optionen und +% die dafür notwendige Ausgabe definiert. Im weiteren Verlauf der Dokumentation +% werden die Begriffe \enquote*{Zusammenfassung}, \enquote*{Kurzfassung} sowie +% \enquote*{Erklärung} für die unterschiedlichen Elemente als gleichwertige +% Synonyme verwendet. Die Schalter und Befehle zum Setzen der Optionen heißen +% entweder \cs{tud@abstract@\dots} oder aber \cs{tud@declaration@\dots} je nach +% Element. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*class&body> +% \fi +% +% \begin{macro}{\tud@fm@check} +% \changes{v2.02}{2014/07/18}{neu}^^A +% Mit diesem Befehl wird für den Fall, dass eine oder mehrerer Erklärungen auf +% einer einzelnen Seite gesetzt werden sollen geprüft, ob dies überhaupt +% möglich ist. Sollte dies nicht der Fall sein, wird eine Warnung ausgegeben. +% \begin{macrocode} +\newcommand*\tud@fm@check[2]{% +% \end{macrocode} +% Das Makro \cs{tud@fm@set} wird zur erstmaligen Verwendung in jedem Fall auf +% die Definition von \cs{tud@fm@first} gesetzt. +% \begin{macrocode} +%<*book|report|article> + \global\let\tud@fm@set\tud@fm@first% +% \end{macrocode} +% Danach erfolgt ggf. die Prüfung der resultierenden Seitenhöhe. +% \begin{macrocode} + \ifnumless{\csuse{tud@#1@level@num}}{3}{% false/true/section + \ifboolexpr{% + bool {@titlepage} and bool {@tud@#1@fil} and bool {@tud@#1@multi}% + }{% + \sbox\z@{\vbox{#2}}% + \ifdim\textheight<\dimexpr\ht\z@+\dp\z@\relax% + \ClassWarning{\TUD@Class@Name}{% + The given content within the `#1'\MessageBreak% + environment is too large, so it wasn't possible\MessageBreak% + to center the body vertically. Setting the option\MessageBreak% + `#1=nofill' would be a solution. You\MessageBreak% + could also use multiple `#1' environments% + }% + \boolfalse{@tud@#1@fil}% + \fi% + }{}% +% \end{macrocode} +% Sollte die Gliederungsebene der Erklärung einem Kapitel entsprechen, wird +% jede Erklärung immer auf eine neue Seite gesetzt. Die Optionen zum vertikalen +% Zentrieren wird ignoriert. Auf eine Warnung für den Anwender wird verzichtet. +% \begin{macrocode} + }{% chapter +%<*book|report> + \boolfalse{@tud@#1@multi}% + \boolfalse{@tud@#1@fil}% +%</book|report> + }% +% \end{macrocode} +% Zum Schluss wird ggf. der gesammelte Eintrag im Inhaltsverzeichnis erstellt. +% Danach wird das übergebene Argument ausgeführt. +% \begin{macrocode} + \ifnum\csuse{tud@#1@toc@num}>\tw@\relax% + \tud@fm@toc{#1}{#2}% + \fi% +% \end{macrocode} +% Das Makro \cs{tud@fm@set} wird~-- aufgrund der immanenten Zuweisung auf +% \cs{tud@fm@next} innerhalb von \cs{tud@fm@first}~-- abermals auf die +% Definition von \cs{tud@fm@first} gesetzt. +% \begin{macrocode} +%</book|report|article> + \global\let\tud@fm@set\tud@fm@first% + #2% +} +% \end{macrocode} +% \end{macro}^^A \tud@fm@check +% +% \iffalse +%<*book|report|article> +% \fi +% +% \begin{macro}{\tud@fm@toc} +% \changes{v2.04}{2015/03/20}{neu}^^A +% \changes{v2.06}{2018/02/22}{% +% Bugfix: \cs{csuse\{phantomsection\}} für Anker% +% }^^A +% \begin{macro}{\tud@fm@@toc} +% \changes{v2.04}{2015/03/20}{neu}^^A +% \begin{macro}{\tud@fm@@@toc} +% \changes{v2.04}{2015/03/20}{neu}^^A +% Ist die Einstellung \val{tocaggregate} aktiv, wird der gesammelte Eintrag ins +% Inhaltsverzeichnis generiert. +% \begin{macrocode} +\newcommand*\tud@fm@@toc{} +\newcommand*\tud@fm@@@toc{} +\newcommand*\tud@fm@toc[2]{% +% \end{macrocode} +% Der gesammelte Eintrag aller Überschriften ins Inhaltsverzeichnis. +% \begin{macrocode} + \ifbool{@tud@#1@multi}{% + \begingroup% + \let\tud@fm@@@toc\@empty% + \renewcommand*\tud@fm@head[2]{% + \protected@edef\@tempa{##2}% + \protected@xdef\tud@fm@@toc{\tud@fm@@@toc\@tempa}% + \protected@xdef\tud@fm@@@toc{\tud@fm@@toc/}% + }% + \let\clearpage\relax% + \sbox\z@{\vbox{#2}}% + \csuse{phantomsection}% + \protected@edef\@tempa{% + \noexpand\endgroup% + \noexpand\ifnumodd{\csname tud@#1@toc@num\endcsname}{% +%<*book|report> + \noexpand\addchaptertocentry{}{\tud@fm@@toc}% +%</book|report> +%<*article> + \noexpand\addsectiontocentry{}{\tud@fm@@toc}% +%</article> + }{% +%<*book|report> + \noexpand\addsectiontocentry{}{\tud@fm@@toc}% +%</book|report> +%<*article> + \noexpand\addsubsectiontocentry{}{\tud@fm@@toc}% +%</article> + }% + }% + \@tempa% + }{% + \ClassWarning{\TUD@Class@Name}{% + It isn't possible to use `#1=single'\MessageBreak% +%<*book|report> + or `#1=chapter'\space% +%</book|report> + with `#1=tocmultiple'% + }% + \edef\@tempa{% + \noexpand\tud@locked@num@set{tud@#1@toc@num}{% + \the\numexpr\csuse{tud@#1@toc@num}-2\relax% + }% + }% + \@tempa% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@fm@@@toc +% \end{macro}^^A \tud@fm@@toc +% \end{macro}^^A \tud@fm@toc +% +% \iffalse +%</book|report|article> +% \fi +% +% \begin{macro}{\tud@fm@set} +% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}^^A +% \changes{v2.04}{2015/03/20}{Reimplementierung}^^A +% \begin{macro}{\tud@fm@first} +% \changes{v2.04}{2015/03/20}{neu}^^A +% \begin{macro}{\tud@fm@next} +% \changes{v2.02}{2014/07/19}{neu}^^A +% \changes{v2.04}{2015/03/20}{Reimplementierung}^^A +% \changes{v2.05}{2015/07/14}{Bugfix bei vertikaler Zentrierung}^^A +% Mit diesen Makros werden bei der Ausgabe der einzelnen Erklärungen alle +% relevanten Optionen\footnote{\ignorespaces% +% \opt{titlepage}, \opt{twocolumn}, \opt{abstract/declaration}|=|\val{multi}, +% \opt{abstract/declaration}|=|\val{fill}\ignorespaces% +% } ausgewertet und die notwendigen vertikalen Abstände entsprechend gesetzt. +% Dabei wird durch jede Zusammenfassung bzw. Erklärung \cs{tud@fm@set} über +% \cs{tud@fm@body@start} verwendet. Der Inhalt der beiden Umgebungen +% \env{abstract} und \env{descriptions} wird mit \cs{tud@fm@check} ausgegeben. +% \begin{macrocode} +\newcommand\tud@fm@set[1]{} +\newcommand\tud@fm@first[1]{% +% \end{macrocode} +% Im Zweispaltensatz wird der Inhalt der Umgebung einfach ausgegeben, eine +% vertikale Zentrierung findet nicht statt. Beim einspaltigen Satz wird die +% \opt{titlepage}-Option beachtet. +% \begin{macrocode} +%<*book|report|article> + \if@twocolumn\else% +% \end{macrocode} +% Sollte diese aktiv sein, wird jede Erklärung oder Zusammenfassung abhängig +% von der Einstellung von \opt{abstract/declaration}|=|\val{multi} entweder auf +% eine neue Seite gesetzt, oder aber auf der aktuellen ausgegeben. Dabei werden +% diese ggf. vertikal auf der Seite ausgerichtet. +% \begin{macrocode} + \if@titlepage% + \ifbool{@tud@#1@fil}{\null\vfil}{}% + \fi% + \fi% +%</book|report|article> +% \end{macrocode} +% Das Makro \cs{tud@fm@check} setzt die Definition von \cs{tud@fm@set} auf +% \cs{tud@fm@first}. Bei der erstmaligen Verwendung von \cs{tud@fm@first} wird +% diese auf \cs{tud@fm@next} geändert. +% \begin{macrocode} + \global\let\tud@fm@set\tud@fm@next% +} +% \end{macrocode} +% Bei der abermaligen Verwendung des Makros \cs{tud@fm@set} in der gleichen +% Umgebung wird \cs{tud@fm@next} ausgeführt, um die vertikalen Abstände +% zwischen den einzelnen Teilen einzufügen. +% \begin{macrocode} +\newcommand\tud@fm@next[1]{% +% \end{macrocode} +% Im Zweispaltensatz wird entweder ein Absatz eingefügt oder eine neue Spalte +% begonnen. +% \begin{macrocode} + \if@twocolumn% +%<book|report|article> \ifbool{@tud@#1@multi}{\par}{\newpage}% +%<poster> \par% + \else% +% \end{macrocode} +% Wird eine Titelseite verwendet, wird jede Erklärung oder Zusammenfassung +% abhängig von der Einstellung von \opt{abstract/declaration}|=|\val{multi} +% entweder auf eine neue Seite gesetzt, oder aber auf der aktuellen ausgegeben. +% Dabei werden diese ggf. vertikal auf der Seite ausgerichtet. +% \begin{macrocode} +%<*book|report|article> + \if@titlepage% + \ifbool{@tud@#1@multi}{% + \ifbool{@tud@#1@fil}{\vfil}{}% + }{% + \ifbool{@tud@#1@fil}{\vfil\null\clearpage\null\vfil}{\clearpage}% + }% + \else% +%</book|report|article> +% \end{macrocode} +% Werden weder Titelseite noch Überschriften verwendet, so führt die Auswahl +% einer Sprache mit \cs{selectlanguage} zu einem zusätzlichen vertikalen +% Abstand. Dieser wird hiermit negiert. +% \begin{macrocode} + \ifnum\csuse{tud@#1@level@num}=\z@\relax% + \ifundef{\main@language}{}{\vspace*{-\baselineskip}}% + \fi% +%<*book|report|article> + \fi% +%</book|report|article> + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@fm@next +% \end{macro}^^A \tud@fm@first +% \end{macro}^^A \tud@fm@set +% \begin{macro}{\tud@fm@body@start} +% \changes{v2.04}{2015/03/20}{neu}^^A +% \begin{macro}{\tud@fm@body@end} +% \changes{v2.04}{2015/03/20}{neu}^^A +% Das Makro \cs{tud@fm@body@start} setzt erst alle übergebenen Parameter für +% die aktuelle Umgebung. Anschließend werden alle notwendigen vertikalen +% Abstände mit \cs{tud@fm@set} eingefügt und ggf. notwendige Umgebungen +% geöffnet. Der Gegenpart dazu ist das Makro \cs{tud@fm@body@end}. +% \begin{macrocode} +\newcommand*\tud@fm@body@start[3]{% + \begingroup% + \TUD@parameter@set{#1}{#2}% + \tud@fm@set{#1}% +% \end{macrocode} +% Bei deaktivierter \opt{titlepage}-Option werden die Inhalte jeder erzeugten +% Erklärung oder Zusammenfassung direkt nacheinander ausgegeben. Sollte die +% Überschrift \emph{nicht} als Gliederungsebene (\cs{section}, \cs{chapter}) +% gesetzt werden, wird der Inhalt entweder in der \env{quotation}-Umgebung +% oder~-- wenn entsprechend das Paket \pkg{quoting} geladen wurde~-- in der +% \env{quoting}-Umgebung gesetzt. Die entsprechende Umgebung wird hierfür im +% Makro \cs{tud@quoting} gespeichert. +% \begin{macrocode} + \if@twocolumn\else\if@titlepage\else\relax% + \ifnum\csuse{tud@#1@level@num}<\tw@\relax% false/true + \begin{\tud@quoting}% + \fi% + \fi\fi% +% \end{macrocode} +% Sollte das Paket \pkg{multicol} Verwendung finden, wird die entsprechende +% Umgebung gestartet. Für das Setzen der Überschrift und der Kolumnentitel wird +% \cs{tud@fm@head} verwendet, welches abhängig von den gewählten Optionen die +% Gliederungsebene der Überschrift und die dazugehörigen Abstände setzt. Daher +% wird die Länge \cs{multicolsep} auf Null gesetzt. +% \begin{macrocode} + \ifnum\tud@x@multicol@num>\@ne\relax% + \vspace{-\multicolsep}% + \begin{multicols}{\tud@x@multicol@num}[{\tud@fm@head{#1}{#3}}]% + \else% +% \end{macrocode} +% Ansonsten wird lediglich die Überschrift der Zusammenfassung oder Erklärung +% im dritten Argument entsprechend der gewählten Option erzeugt. +% \begin{macrocode} + \tud@fm@head{#1}{#3}% + \fi% +} +% \end{macrocode} +% Nach der Ausgabe des Inhaltes werden mit \cs{tud@fm@body@end} alle ggf. +% geöffneten Umgebungen wieder geschlossen. +% \begin{macrocode} +\newcommand*\tud@fm@body@end[1]{% + \ifnum\tud@x@multicol@num>\@ne\relax% + \end{multicols}% + \vspace{-\multicolsep}% + \else% + \par% + \fi% + \if@twocolumn\else\if@titlepage\else\relax% + \ifnum\csuse{tud@#1@level@num}<\tw@\relax% false/true + \end{\tud@quoting}\par% + \fi% + \fi\fi% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \tud@fm@body@end +% \end{macro}^^A \tud@fm@body@start +% \begin{macro}{\tud@fm@head} +% \changes{v2.02}{2014/07/18}{an \pkg{scrlayer-scrpage} angepasst}^^A +% \changes{v2.02}{2014/10/09}{Bugfix für Kolumnentitel}^^A +% \changes{v2.02}{2014/11/05}{Bugfix Kolumnentitel und Inhaltsverzeichnis}^^A +% \changes{v2.04}{2015/04/21}{Abstände nur, wenn keine Zitatumgebung aktiv}^^A +% Dieses Makro dient zur Ausgabe der Erklärungsüberschrift auf der gewünschten +% Gliederungsebene. Die gewählte Ebene ist in \cs{tud@\meta{Typ}@level@num} +% gespeichert. Verwendet wird das Makro folgendermaßen: +% \cs{tud@fm@head}\marg{Erklärungstyp}\marg{Überschrift}. Damit +% die ggf. aktive Option \opt{abstract/declaration}|=|\val{toc} funktionieren +% kann, wird für die Level, in denen keine Standardüberschrift verwendet wird, +% mit dem Befehl \cs{phantomsection} aus dem Paket \pkg{hyperref}~-- wenn es +% tatsächlich geladen wurde~-- ein Anker für einen Hyperlink erzeugt. +% +% Ist \cs{tud@\meta{Typ}@toc@num} ungerade, so entspricht die Ebene des +% erzeugten Eintrags ins Inhaltsverzeichnis für \cls{tudscrartcl} normalerweise +% dem eines Abschnitts, der für \cls{tudscrbook} und \cls{tudscrreprt} dem eines +% Kapitels.\footnote{sonst sieht das Inhaltsverzeichnis recht bescheiden aus} +% Mit der Eintellung \val{tocleveldown} kann der Eintrag um eine Ebene +% reduziert werden. +% \begin{macrocode} +\newcommand*\tud@fm@head[2]{% + \ifcase\csuse{tud@#1@level@num}\relax% false + \if@titlepage\endgraf\fi% + \csuse{phantomsection}% + \ifstr{\@currenvir}{\tud@quoting}{}{% + \if@twocolumn% + \vskip\dimexpr\smallskipamount-\parskip\relax% + \else% + \vskip\dimexpr\bigskipamount-\parskip\relax% + \fi% + }% + \or% true + \if@titlepage\endgraf\fi% + \csuse{phantomsection}% + \@afterindentfalse% + \ifstr{\@currenvir}{\tud@quoting}{}{% + \vskip\dimexpr\bigskipamount-\parskip\relax% + }% + \begingroup% + \noindent\centering% + \normalfont\sectfont\nobreak#2% + \@endparpenalty\@M% + \endgraf% + \endgroup% + \nopagebreak% + \vskip\dimexpr\medskipamount-\parskip\relax% + \@afterheading% + \or% section + \section*{#2}% +%<*book|report|article> + \ifx\@mkboth\@gobbletwo\else\markright{\MakeMarkcase{#2}}\fi% +%<*book|report> + \or% chapter + \chapter*{#2}% + \@mkdouble{\MakeMarkcase{#2}}% +%</book|report> +%</book|report|article> + \fi% +%<*book|report|article> + \ifbool{@tud@#1@markboth}{% + \markboth{\MakeMarkcase{#2}}{\MakeMarkcase{#2}}% + }{}% + \ifcase\csuse{tud@#1@toc@num}\relax\or% totoc +%<*book|report> + \addchaptertocentry{}{#2}% +%</book|report> +%<*article> + \addsectiontocentry{}{#2}% +%</article> + \or% totocleveldown +%<*book|report> + \addsectiontocentry{}{#2}% +%</book|report> +%<*article> + \addsubsectiontocentry{}{#2}% +%</article> + \fi% +%</book|report|article>% +} +% \end{macrocode} +% \end{macro}^^A \tud@fm@head +% +% \iffalse +%<*book|report|article> +% \fi +% +% \begin{macro}{\tud@fm@pagestyle} +% \changes{v2.02}{2014/07/19}{neu}^^A +% Dieser Befehl sorgt für die Auswahl des Seitenstiles über die Parameter von +% \env{abstract} und \env{declarations}. +% \begin{macrocode} +\newcommand*\tud@fm@pagestyle[2]{% + \if@titlepage% + \ifcsundef{ps@#2}{% + \ClassError{\TUD@Class@Name}{`#2' is no valid pagestyle}{% + You tried to use `#2' as a pagestyle for the\MessageBreak% + `#1' environment, but it was never defined.% + }% + }{\def\tud@envir@ps{#2}}% + \else% + \ClassWarning{\TUD@Class@Name}{% +%<*article> + The key `pagestyle' can only be used with\MessageBreak% + activated option `titlepage'% +%</article> +%<*book|report> + The key `pagestyle' can only be used either with\MessageBreak% + activated option `titlepage' or with chapter\MessageBreak% + headings (`#1=chapter')% +%</book|report> + }% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@fm@pagestyle +% +% \iffalse +%</book|report|article> +% \fi +% +% \begin{macro}{\tud@quoting} +% Mit diesem Befehl kann das empfehlenswerte Paket \pkg{quoting} unterstützt +% werden. Sollte dieses geladen werden, wird für das Setzen der Zusammenfassung +% bei einem Titelkopf die \env{quoting}-Umgebung genutzt. +% \begin{macrocode} +\newcommand*\tud@quoting{quotation} +\AfterPackage{quoting}{\renewcommand*\tud@quoting{quoting}} +% \end{macrocode} +% \end{macro}^^A \tud@quoting +% +% \iffalse +%</class&body> +%<*class&option> +% \fi +% +% \begin{macro}{\tud@fm@switch} +% \changes{v2.02}{2014/11/05}{neu}^^A +% Das aus \KOMAScript{} bekannte Verhalten für die Zusammenfassung wird für die +% beiden Klassen \cls{tudscrartcl} und \cls{tudscrreprt} adaptiert. Dazu werden +% boolesche Schlüssel bei der Definiton der beiden Optionen \opt{abstract} und +% \opt{declaration} eingefügt. Außerdem werden zusätzliche Werte zur Auswahl +% einer Gliederungsebene für die gesetzten Überschriften wie \cs{section} oder +% \cs{chapter}\footnote{nicht für \cls{tudscrartcl}} oder bereitgestellt, +% welche auch für die Buchklasse \cls{tudscrbook} zur Verfügung stehen. Das +% Setzen von Einträgen ins Inhaltsverzeichnis lässt sich ebenfalls anpassen. +% +% Des Weiteren werden mehrere Schlüssel für die Anordnung und Positionierung +% von Zusammenfassung bzw. Erklärungen bereitgestellt. Diese dienen dem Setzen +% der Optionen \opt{abstract} bzw. \opt{declaration} mit den Werten +% \val{single/multi}, \val{toc/notoc}, \val{fill/nofill} sowie \val{leveldown}. +% \begin{macrocode} +\newcommand*\tud@fm@switch{% + {section}{2},{sect}{2},{sec}{2},{addsec}{2},% +%<*article|poster> + {new}{2},{standard}{2},{heading}{2},% +%</article|poster> +%<*book|report> + {chapter}{3},{chap}{3},{addchap}{3},% + {new}{3},{standard}{3},{heading}{3},% +%</book|report> +%<*book|report|article> + {single}{4},{one}{4},{simple}{4},% + {multiple}{5},{multi}{5},{all}{5},{aggregate}{5},% + {two}{5},{both}{5},{double}{5},% + {nofil}{6},{nofill}{6},{novfil}{6},{novfill}{6},% + {fil}{7},{fill}{7},{vfil}{7},{vfill}{7},% + {markboth}{8},{mark}{8},% + {nomarkboth}{9},{nomark}{9},% + {nottotoc}{10},{notoc}{10},% + {totoc}{11},{toc}{11},{totoclevelup}{11},{toclevelup}{11},{levelup}{11},% + {totocleveldown}{12},{tocleveldown}{12},{leveldown}{12},% + {tocmultiple}{13},{tocmulti}{13},{tocall}{13},{tocaggregate}{13},% + {totocmultiple}{13},{totocmulti}{13},{totocall}{13},{totocaggregate}{13}% +%</book|report|article> +} +% \end{macrocode} +% \end{macro}^^A \tud@fm@switch +% +% \subsection{Erweiterung der Umgebung für eine Zusammenfassung} +% +% Die \env{abstract}-Umgebung wird um mehrere Optionen erweitert. So kann +% in den neuen \TUDScript-Klassen die Sprache der Zusammenfassung leicht +% eingestellt und auch zwei Zusammenfassungen auf eine Seite gesetzt werden. +% \begin{macro}{\tud@abstract@level@num} +% \begin{macro}{\tud@abstract@toc@num} +% \changes{v2.04}{2015/04/24}{neu}^^A +% \begin{macro}{\tud@abstract@toc@num@locked} +% \changes{v2.04}{2015/04/24}{neu}^^A +% Der Befehl \cs{tud@abstract@level@num} beschreibt die Gliederungsebene der +% Überschrift der Zusammenfassung numerisch und wird über die Schlüssel der +% Option \opt{abstract} gesetzt. Über \opt{abstract}|=|\val{toc/notoc} wird +% festgelegt, ob die Zusammenfassung einen Eintrag ins Inhaltsverzeichnis +% bekommt. Da unterschiedliche Gliederungsebenen der Überschriften möglich +% sind, wird das Standardverhalten in Abhängigkeit dieser gewählt. Initial +% erscheint für \cls{tudscrreprt} und \cls{tudscrartcl}~-- wie in \KOMAScript{} +% auch~-- keine Überschrift und kein Eintrag im Inhaltsverzeichnis. In +% \cls{tudscrbook} wird standardmäßig eine Überschrift in Form eines Kapitels +% mit Eintrag ins Inhaltsverzeichnis gesetzt. +% +% Mit \cs{tud@abstract@toc@num} wird die Gestalt des Inhaltsverzeichniseintrag +% festgelegt. Folgende Werte sind möglich: +% \begin{description} +% \item[0] kein Eintrag ins Inhaltverzeichnis +% \item[1] Individuelle Einträge auf der obersten Gliederungsebene +% \item[2] Individuelle Einträge auf der zweithöchsten Gliederungsebene +% \item[3] Ein gesammelter Eintrag auf der obersten Gliederungsebene +% \item[4] Ein gesammelter Eintrag auf der zweithöchsten Gliederungsebene +% \end{description} +% Dabei ist die oberste Gliederungsebene \cs{chapter} für \cls{tudscrbook} und +% \cls{tudscrreprt} sowie \cs{section} für \cls{tudscrartcl}. +% \begin{macrocode} +%<*report|article|poster> +\newcommand*\tud@abstract@level@num{0} +%<report|article>\tud@locked@newnum{tud@abstract@toc@num}{0} +%</report|article|poster> +%<*book> +\newcommand*\tud@abstract@level@num{3} +\tud@locked@newnum{tud@abstract@toc@num}{1} +%</book> +% \end{macrocode} +% \end{macro}^^A \tud@abstract@toc@num@locked +% \end{macro}^^A \tud@abstract@toc@num +% \end{macro}^^A \tud@abstract@level@num +% +% \iffalse +%<*book|report|article> +% \fi +% +% \begin{macro}{\if@tud@abstract@multi} +% Is dieser Schalter aktiviert, wird eine durch \cs{nextabstract} angegebene +% zweite~-- wahrscheinlich in einer Fremdsprache verfasste~-- Zusammenfassung +% auf die gleiche Seite wie die erste zu setzen. Gesetzt wird der Schalter über +% die Option \opt{abstract}|=|\val{single/multi}. +% \begin{macrocode} +\newif\if@tud@abstract@multi +\@tud@abstract@multitrue +% \end{macrocode} +% \end{macro}^^A \if@tud@abstract@multi +% \begin{macro}{\if@tud@abstract@fil} +% Mit diesem Schalter wird bestimmt, ob eine Zusammenfassung auf einer Seite +% vertikal zentriert wird. Er wird mit \opt{abstract}|=|\val{fill/nofill} +% gesetzt und ist normalerweise aktiviert. +% \begin{macrocode} +\newif\if@tud@abstract@fil +\@tud@abstract@filtrue +% \end{macrocode} +% \end{macro}^^A \if@tud@abstract@fil +% \begin{macro}{\if@tud@abstract@markboth} +% \changes{v2.02}{2014/11/05}{neu}^^A +% Dieser Schalter setzt rechten und linken Kolumnentitel automatisch auf die +% verwendete Überschrift. +% \begin{macrocode} +\newif\if@tud@abstract@markboth +% \end{macrocode} +% \end{macro}^^A \if@tud@abstract@markboth +% +% \iffalse +%</book|report|article> +% \fi +% +% \begin{option}{abstract} +% Alle Klassen unterstützen die Werte, welche in \cs{tud@fm@switch} definiert +% wurden. Die beiden Klassen \cls{tudscrartcl} und \cls{tudscrreprt} adaptieren +% außerdem das aus \KOMAScript{} bekannte Verhalten über die booleschen Werte +% aus \cs{TUD@bool@numkey}. +% \begin{macrocode} +%<*report|article|poster> +\TUD@key{abstract}[true]{% + \edef\@tempb{\TUD@bool@numkey,\tud@fm@switch}% +%</report|article|poster> +%<*book> +\TUD@key{abstract}[chapter]{% + \edef\@tempb{\tud@fm@switch}% +%</book> + \TUD@set@numkey{abstract}{@tempa}{\@tempb}{#1}% +% \end{macrocode} +% Bei der Einstellungen der Überschriftgliederungsebene wird außerdem das +% Standardverhalten für einen Eintrag ins Inhaltsverzeichnis festgelegt, was +% allerdings vom Anwender jederzeit überschrieben werden kann. +% \begin{macrocode} + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false +%<*report|article|poster> + \renewcommand*\tud@abstract@level@num{0}% +%<report|article> \tud@locked@num@preset{tud@abstract@toc@num}{0}% +%</report|article|poster> + \or% true +%<*report|article|poster> + \renewcommand*\tud@abstract@level@num{1}% +%<report|article> \tud@locked@num@preset{tud@abstract@toc@num}{0}% +%</report|article|poster> + \or% section + \renewcommand*\tud@abstract@level@num{2}% +%<*book|report|article> + \tud@locked@num@preset{tud@abstract@toc@num}{1}% + \or% chapter +%<*book|report> + \renewcommand*\tud@abstract@level@num{3}% + \tud@locked@num@preset{tud@abstract@toc@num}{1}% +%</book|report> +%</book|report|article> +% \end{macrocode} +% Neben den Einstellungen für die Art der Gliederungsebene der Überschrift für +% die Zusammenfassung können außerdem noch die Optionen gesetzt werden, ob +% versucht werden soll, eine mögliche Zusammenfassung in einer anderen Sprache +% auf die gleiche Seite wie die erste zu setzen (\opt{abstract}|=|\val{multi}). +% \begin{macrocode} +%<*book|report|article> + \or% single + \@tud@abstract@multifalse% + \or% multiple + \@tud@abstract@multitrue% + \or% nofil + \@tud@abstract@filfalse% + \or% fil + \@tud@abstract@filtrue% + \or% markboth + \@tud@abstract@markbothtrue% + \or% nomarkboth + \@tud@abstract@markbothfalse% +% \end{macrocode} +% Bei den Einstellungen für das Inhaltsverzeichnis werden die unterschiedlichen +% Möglichkeiten im Makro \cs{tud@abstract@toc@num} zusammengefasst. +% \begin{macrocode} + \or% nottotoc + \tud@locked@num@set{tud@abstract@toc@num}{0}% + \or% totoc + \ifnum\tud@abstract@toc@num<\thr@@\relax% + \tud@locked@num@set{tud@abstract@toc@num}{1}% + \else% + \tud@locked@num@set{tud@abstract@toc@num}{3}% + \fi% + \or% totocleveldown + \ifnum\tud@abstract@toc@num<\thr@@\relax% + \tud@locked@num@set{tud@abstract@toc@num}{2}% + \else% + \tud@locked@num@set{tud@abstract@toc@num}{4}% + \fi% + \or% totocmutliple + \ifnum\tud@abstract@toc@num=\z@\relax% + \tud@locked@num@set{tud@abstract@toc@num}{1}% + \fi% + \ifnum\tud@abstract@toc@num<\thr@@\relax% + \edef\@tempa{% + \noexpand\tud@locked@num@set{tud@abstract@toc@num}{% + \the\numexpr\tud@abstract@toc@num+2\relax% + }% + }\@tempa% + \fi% +%</book|report|article> + \fi% + \fi% +} +% \end{macrocode} +% Damit der Anwender die erweiterten Einstellungen für die Zusammenfassung auch +% wie gewohnt über \cs{KOMAoptions} setzen kann, wird die entsprechende Option +% ebenfalls definiert. +% \begin{macrocode} +\DefineFamilyMember{KOMA} +\DefineFamilyKey{KOMA}{abstract}[true]{% + \AtEndOfFamilyOptions{\TUDoptions{abstract=#1}}% +} +% \end{macrocode} +% \end{option}^^A abstract +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% \begin{environment}{abstract} +% \changes{v2.03}{2015/01/09}{Bugfix für Seitenstilauswahl}^^A +% \changes{v2.04}{2015/03/20}{Reimplementierung}^^A +% \begin{parameter}{language} +% \begin{parameter}{columns} +% \begin{parameter}{pagestyle} +% \changes{v2.02}{2014/07/19}{neu}^^A +% \begin{parameter}{markboth} +% \changes{v2.02}{2014/11/05}{neu}^^A +% \begin{parameter}{abstract} +% \begin{parameter}{option} +% \begin{macro}{\nextabstract} +% \changes{v2.02}{2014/11/05}{neu}^^A +% Die \env{abstract}-Umgebung wird komplett überarbeitet. Um alle gewünschten +% Optionen\footnote{\ignorespaces% +% \opt{titlepage}, \opt{twocolumn}, \opt{abstract}|=|\val{multi}, +% \opt{abstract}|=|\val{fill}\ignorespaces% +% } sowie Gliederungsebene der Überschrift beachten zu können, wird auf die +% Möglichkeiten der Definition mit \cs{NewEnviron} aus dem Paket \pkg{environ} +% zurückgegriffen. Damit ist es möglich, gezielt auf den Inhalt der Umgebung +% selbst mit dem Befehl \cs{BODY} zuzugreifen. Dieser Mechanismus wird +% innerhalb von \cs{tud@abstractbody} verwendet. +% \begin{macrocode} +%<*report|article|poster> +\undef\abstract +\undef\endabstract +%</report|article|poster> +\NewEnviron{abstract}[1][]{% +% \end{macrocode} +% Sollten Überschriften in Form von Kapiteln gewählt worden sein, so wird +% temporär die \opt{titlepage}-Option aktivert, da alle weiteren notwendigen +% Einstellungen dieser entsprechen. Über den Parameter \opt{pagestyle} kann bei +% der Verwendung einer Titelseite der Seitenstil definiert werden. Dafür wird +% das dafür verantwortliche Makro \cs{tud@envir@ps} auf \cs{relax} gesetzt. +% \begin{macrocode} +%<*book|report> + \ifnum\tud@abstract@level@num>\tw@\relax\@titlepagetrue\fi% chapter +%</book|report> +%<*book|report|article> + \let\tud@envir@ps\relax% +%</book|report|article> +% \end{macrocode} +% Als nächstes werden die Optionen verarbeitet. Sollte nach Abarbeitung der +% Optionen für \env{abstract} festgestellt werden, dass eine spezielle +% Spaltenanzahl gewünscht ist, so wird~-- für den Fall, dass das Paket +% \pkg{multicol} geladen ist~-- diese gesetzt. Sonst wird die angegbene Anzahl +% der Spalten ignoriert und eine Warnung ausgegeben. +% \begin{macrocode} + \TUD@parameter@set{abstract}{#1}% + \tud@x@multicol@check% +% \end{macrocode} +% Bei aktiver \opt{titlepage}-Option wird anschließend der aktuelle Seitenstil +% gesichert, um diesen nach der Umgebung wiederherstellen zu können. Wurde über +% die möglichen Parameter \opt{pagestyle} oder indirekt mit \opt{markboth} kein +% Seitenstil definiert, so wird dieser auf \val{empty} gesetzt. +% \begin{macrocode} +%<*book|report|article> + \if@titlepage% + \tud@currentpagestyle@set% + \ifx\tud@envir@ps\relax% + \tud@if@tudheadings{\currentpagestyle}{% + \def\tud@envir@ps{empty.tudheadings}% + }{% + \def\tud@envir@ps{empty}% + }% + \fi% + \clearpage% + \tud@envir@selectps% + \fi% +%</book|report|article> +% \end{macrocode} +% Mit dem Befehl \cs{nextabstract} können einzelne Abschnitte innerhalb einer +% Zusammenfassung getrennt werden. +% \begin{macrocode} + \renewcommand*\nextabstract[1][]{% + \tud@fm@body@end{abstract}% + \tud@fm@body@start{abstract}{##1}{\abstractname}% + }% + \tud@fm@check{abstract}{% + \tud@fm@body@start{abstract}{#1}{\abstractname}% + \BODY% + \tud@fm@body@end{abstract}% + }% +% \end{macrocode} +% Nach der Umgebung wird bei aktiver \opt{titlepage}-Option der ursprüngliche +% Seitenstil zurückgesetzt. Zuvor wird ggf. der notwendige vertikale Leerraum +% eingefügt. +% \begin{macrocode} +}[% +%<*book|report|article> + \if@titlepage% + \if@tud@abstract@fil\vfil\null\fi% + \aftergroup\tud@currentpagestyle@reset% + \clearpage% + \else% +%</book|report|article> + \ifnum\tud@abstract@level@num=\tw@\relax% + \vskip\dimexpr\bigskipamount-\parskip\relax% + \fi% +%<*book|report|article> + \fi% +%</book|report|article> +] +% \end{macrocode} +% Als Schlüssel für die \env{abstract}-Umgebung können Sprache, Anzahl der +% Spalten oder auch die zur Umgebung gehörigen Klassenoptionen angegeben werden. +% \begin{macrocode} +\TUD@parameter@family{abstract}{% + \TUD@parameter@def{language}{\selectlanguage{#1}}% + \TUD@parameter@def{columns}{\renewcommand*\tud@x@multicol@num{#1}}% +%<*book|report|article> + \TUD@parameter@def{pagestyle}{\tud@fm@pagestyle{abstract}{#1}}% +% \end{macrocode} +% Für das Setzen von Kolumnentiteln wird der Seitenstil auf \val{headings} +% gesetzt, falls kein anderer mit \opt{pagestyle} angegeben wurde. +% \begin{macrocode} + \TUD@parameter@def{markboth}[true]{% + \ifstrbool{#1}{% + \@tud@abstract@markbothtrue% + \ifx\tud@envir@ps\relax\def\tud@envir@ps{headings}\fi% + }{% + \@tud@abstract@markbothfalse% + }{% + \@tud@abstract@markbothfalse% + \ifx\tud@envir@ps\relax\def\tud@envir@ps{headings}\fi% + \manualmark\markboth{#1}{#1}% + }% + }% +%</book|report|article> + \TUD@parameter@def{abstract}{\TUDoption{abstract}{#1}}% + \TUD@parameter@let{option}{abstract}% +% \end{macrocode} +% Für die Optionsangabe ohne Schlüssel und Wert kann eine Anzahl an Spalten +% oder eine alternative Sprache angegeben werden. Für die Auswertung des +% Argumentes verantwortlich ist der Befehl \cs{TUD@parameter@handler@default}, +% welcher auch von der Umgebung \env{tudpage} verwendet wird. +% \begin{macrocode} + \TUD@parameter@handler@default{}% +} +% \end{macrocode} +% Der Befehl \cs{nextabstract} lässt sich nur in der Umgebung \env{abstract} +% verwenden. +% \begin{macrocode} +\newcommand*\nextabstract[1][]{% + \ClassError{\TUD@Class@Name}{Incorrect usage of `\string\nextabstract'}{% + The command `\string\nextabstract' can only be used within\MessageBreak% + the environment `abstract'.% + }% +} +% \end{macrocode} +% \end{macro}^^A \nextabstract +% \end{parameter}^^A option +% \end{parameter}^^A abstract +% \end{parameter}^^A markboth +% \end{parameter}^^A pagestyle +% \end{parameter}^^A columns +% \end{parameter}^^A language +% \end{environment}^^A abstract +% +% \iffalse +%</class&body> +%<*book|report|article> +%<*class&option> +% \fi +% +% \subsection{Selbstständigkeitserklärung und Sperrvermerk} +% +% Die Befehle für die Selbstständigkeitserklärung und den Sperrvermerk werden +% äquivalent zur \env{abstract}-Umgebung mit den gleichen Optionen +% ausgestattet. +% \begin{macro}{\tud@declaration@level@num} +% \begin{macro}{\tud@declaration@toc@num} +% \changes{v2.04}{2015/04/24}{neu}^^A +% \begin{macro}{\tud@declaration@toc@num@locked} +% \changes{v2.04}{2015/04/24}{neu}^^A +% \begin{macro}{\if@tud@declaration@multi} +% \begin{macro}{\if@tud@declaration@fil} +% \begin{macro}{\if@tud@declaration@markboth} +% \changes{v2.02}{2014/11/05}{neu}^^A +% Siehe die Option \opt{abstract}. +% \begin{macrocode} +%<*report|article> +\newcommand*\tud@declaration@level@num{1} +\tud@locked@newnum{tud@declaration@toc@num}{0} +%</report|article> +%<*book> +\newcommand*\tud@declaration@level@num{3} +\tud@locked@newnum{tud@declaration@toc@num}{1} +%</book> +\newif\if@tud@declaration@multi +\@tud@declaration@multitrue +\newif\if@tud@declaration@fil +\@tud@declaration@filtrue +\newif\if@tud@declaration@markboth +% \end{macrocode} +% \end{macro}^^A \if@tud@declaration@markboth +% \end{macro}^^A \if@tud@declaration@fil +% \end{macro}^^A \if@tud@declaration@multi +% \end{macro}^^A \tud@declaration@toc@num@locked +% \end{macro}^^A \tud@declaration@toc@num +% \end{macro}^^A \tud@declaration@level@num +% \begin{option}{declaration} +% Siehe die Option \opt{abstract}. +% \begin{macrocode} +%<*report|article> +\TUD@key{declaration}[true]{% +%</report|article> +%<*book> +\TUD@key{declaration}[chapter]{% +%</book> + \edef\@tempb{\TUD@bool@numkey,\tud@fm@switch}% + \TUD@set@numkey{declaration}{@tempa}{\@tempb}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false + \renewcommand*\tud@declaration@level@num{0}% + \tud@locked@num@preset{tud@declaration@toc@num}{0}% + \or% true + \renewcommand*\tud@declaration@level@num{1}% + \tud@locked@num@preset{tud@declaration@toc@num}{0}% + \or% section + \renewcommand*\tud@declaration@level@num{2}% + \tud@locked@num@preset{tud@declaration@toc@num}{1}% + \or% chapter +%<*book|report> + \renewcommand*\tud@declaration@level@num{3}% + \tud@locked@num@preset{tud@declaration@toc@num}{1}% +%</book|report> + \or% single + \@tud@declaration@multifalse% + \or% multiple + \@tud@declaration@multitrue% + \or% nofil + \@tud@declaration@filfalse% + \or% fil + \@tud@declaration@filtrue% + \or% markboth + \@tud@declaration@markbothtrue% + \or% nomarkboth + \@tud@declaration@markbothfalse% + \or% nottotoc + \tud@locked@num@set{tud@declaration@toc@num}{0}% + \or% totoc + \ifnum\tud@declaration@toc@num<\thr@@\relax% + \tud@locked@num@set{tud@declaration@toc@num}{1}% + \else% + \tud@locked@num@set{tud@declaration@toc@num}{3}% + \fi% + \or% totocleveldown + \ifnum\tud@declaration@toc@num<\thr@@\relax% + \tud@locked@num@set{tud@declaration@toc@num}{2}% + \else% + \tud@locked@num@set{tud@declaration@toc@num}{4}% + \fi% + \or% totocmutliple + \ifnum\tud@declaration@toc@num=\z@\relax% + \tud@locked@num@set{tud@declaration@toc@num}{1}% + \fi% + \ifnum\tud@declaration@toc@num<\thr@@\relax% + \edef\@tempa{% + \noexpand\tud@locked@num@set{tud@declaration@toc@num}{% + \the\numexpr\tud@declaration@toc@num+2\relax% + }% + }\@tempa% + \fi% + \fi% + \fi% +} +% \end{macrocode} +% \end{option}^^A declaration +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% \begin{environment}{declarations} +% \changes{v2.02}{2014/11/05}{neu}^^A +% \changes{v2.03}{2015/01/09}{Bugfix für Seitenstilauswahl}^^A +% \changes{v2.03}{2015/01/30}{Bugfix für Spaltenanzahl}^^A +% \changes{v2.04}{2015/03/20}{Reimplementierung}^^A +% \begin{parameter}{language} +% \begin{parameter}{columns} +% \changes{v2.02}{2014/07/19}{neu}^^A +% \begin{parameter}{pagestyle} +% \changes{v2.02}{2014/07/19}{neu}^^A +% \begin{parameter}{markboth} +% \changes{v2.02}{2014/11/05}{neu}^^A +% \begin{parameter}{company} +% \begin{parameter}{supporter} +% \begin{parameter}{place} +% \begin{parameter}{closing} +% \begin{parameter}{declaration} +% \begin{parameter}{option} +% \begin{macro}{\if@tud@declarations} +% Die \env{declarations}-Umgebung wird ähnlich zur \env{abstract}-Umgebung +% definiert. Prinzipiell funktioniert diese genauso, inklusive der Parameter. +% Der Schalter \cs{if@tud@declarations} wird verwendet, um die weiteren Befehle +% \cs{declaration}, \cs{confirmation} und \cs{blocking} innerhalb und außerhalb +% dieser Umgebung verwenden zu können. +% \begin{macrocode} +\newif\if@tud@declarations +\NewEnviron{declarations}[1][]{% + \@tud@declarationstrue% +%<*book|report> + \ifnum\tud@declaration@level@num>\tw@\relax\@titlepagetrue\fi% chapter +%</book|report> + \let\tud@envir@ps\relax% + \TUD@parameter@set{declaration}{#1}% + \tud@x@multicol@check% + \if@titlepage% + \tud@currentpagestyle@set% + \ifx\tud@envir@ps\relax% + \tud@if@tudheadings{\currentpagestyle}{% + \def\tud@envir@ps{empty.tudheadings}% + }{% + \def\tud@envir@ps{empty}% + }% + \fi% + \clearpage% + \tud@envir@selectps% + \fi% +% \end{macrocode} +% Falls innerhalb der Erklärung durch den Anwender bestimmte Felder verwendet +% werden, werden vorsichtshalber Befehle für die Titelei \enquote{entschärft}. +% \begin{macrocode} + \def\and{, }% + \let\thanks\@gobble% +% \end{macrocode} +% Im Gegensatz zur \env{abstract}-Umgebung werden in der Umgebung +% \env{declarations} alle Erklärungen als \emph{geschlossene} Variante genutzt, +% um diese einzeln und nacheinander anzugeben. Jedes hierfür nutzbare Makro +% (\cs{declaration}, \cs{nextdeclaration}, \cs{blocking} und \cs{confirmation}) +% kann so innerhalb der Umgebung verwendet werden und führt intern die beiden +% Makros \cs{tud@fm@body@start} und \cs{tud@fm@body@end} selbstständig aus. +% Alternativ dazu müsste relativ umständlich geprüft werden, ob der Aufruf von +% \cs{tud@fm@body@start} bereits erfolgte \emph{und} danach auch schon Text +% ausgegeben wurde. Einen Mehrwert bei der Nutzung hätte dies jedoch nicht +% gehabt außer der äquivalenten Verwendung von \cs{nextdeclaration} und +% \cs{nextabstract}, worauf der Einfachheit halber gerne verzichtet wurde, +% insbesondere da die erwartete Nutzung des Befehls \cs{nextdeclaration} als +% sehr gering einzustufen ist. +% \begin{macrocode} + \tud@fm@check{declaration}{\BODY}% +}[% + \if@titlepage% + \if@tud@declaration@fil\vfil\null\fi% + \aftergroup\tud@currentpagestyle@reset% + \clearpage% + \else% + \ifnum\tud@declaration@level@num=\tw@\relax% + \vskip\dimexpr\bigskipamount-\parskip\relax% + \fi% + \fi% +] +% \end{macrocode} +% Dies sind die möglichen Schlüssel für die Befehle \cs{declaration}, +% \cs{confirmation} und \cs{blocking}. Die Schlüssel \opt{declaration} bzw. +% \opt{option} dienen zum Setzen der Werte, welche auch als Klassenoptionen +% gesetzt werden können. +% \begin{macrocode} +\TUD@parameter@family{declaration}{% + \TUD@parameter@def{language}{\selectlanguage{#1}}% + \TUD@parameter@def{columns}{\renewcommand*\tud@x@multicol@num{#1}}% + \TUD@parameter@def{pagestyle}{\tud@fm@pagestyle{declaration}{#1}}% + \TUD@parameter@def{markboth}[true]{% + \ifstrbool{#1}{% + \@tud@declaration@markbothtrue% + \ifx\tud@envir@ps\relax\def\tud@envir@ps{headings}\fi% + }{% + \@tud@declaration@markbothfalse% + }{% + \@tud@declaration@markbothfalse% + \ifx\tud@envir@ps\relax\def\tud@envir@ps{headings}\fi% + \manualmark\markboth{#1}{#1}% + }% + }% + \TUD@parameter@def{company}{\def\@company{#1}}% + \TUD@parameter@def{supporter}{\def\@supporter{#1}}% + \TUD@parameter@def{place}{\def\@place{#1}}% + \TUD@parameter@def{closing}{\def\@confirmationclosing{#1}}% + \TUD@parameter@let{confirmationclosing}{closing}% + \TUD@parameter@def{declaration}{\TUDoption{declaration}{#1}}% + \TUD@parameter@let{option}{declaration}% + \TUD@parameter@handler@default{}% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@declarations +% \end{parameter}^^A option +% \end{parameter}^^A declaration +% \end{parameter}^^A closing +% \end{parameter}^^A place +% \end{parameter}^^A supporter +% \end{parameter}^^A company +% \end{parameter}^^A markboth +% \end{parameter}^^A pagestyle +% \end{parameter}^^A columns +% \end{parameter}^^A language +% \end{environment}^^A declarations +% \begin{macro}{\tud@fm@supporter} +% \changes{v2.05}{2015/10/27}{neu}^^A +% Dies ist ein Hilfsmakro, um die Sternversionen der beiden Befehle +% \cs{declaration} und \cs{confirmation} zu realisieren. +% \begin{macrocode} +\newcommand*\tud@fm@supporter{} +% \end{macrocode} +% \end{macro}^^A \tud@fm@supporter +% \begin{macro}{\declaration} +% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}^^A +% \changes{v2.03}{2015/01/30}{Bugfix für Spaltenanzahl}^^A +% \changes{v2.05}{2015/10/27}{Sternversion für Betreuer als Unterstützer}^^A +% \begin{macro}{\tud@fm@declaration} +% \changes{v2.05}{2015/10/27}{neu}^^A +% \begin{macro}{\nextdeclaration} +% \changes{v2.04}{2015/03/20}{neu}^^A +% Dieser Befehl dient zur Ausgabe von sowohl Selbstständigkeitserklärung als +% auch Sperrvermerk. Über das optionale Argument kann ohne Schlüssel die +% gewünschte Sprache eingestellt werden. Zusätzlich können Optionen als +% Schlüssel-Wert-Paare angegeben werden. Die Sternversion erzwingt die Ausgabe +% der in \cs{@supporter} gespeicherten Betreuer als Unterstützer. +% \begin{macrocode} +\newcommand*\declaration{% + \kernel@ifstar{% + \def\tud@fm@supporter{supporter=\@supervisor}% + \tud@fm@declaration% + }{% + \def\tud@fm@supporter{supporter=\@supporter}% + \tud@fm@declaration% + }% +} +\newcommand*\tud@fm@declaration[1][]{% + \ifbool{@tud@declarations}{% + \begingroup% + \tud@fm@@confirmation[\tud@fm@supporter,#1]% + \tud@fm@blocking[#1]% + \endgroup% + }{% + \begin{declarations}[\tud@fm@supporter,#1]% + \tud@fm@@confirmation% + \tud@fm@blocking% + \end{declarations}% + }% +} +% \end{macrocode} +% Mit \cs{nextdeclaration} kann eine freie Erklärung abgegeben werden. Dabei +% sind~-- im Gegensatz zu \cs{nextabstract}~-- sowohl Überschrift als auch der +% Inhalt als obligatorisches Argument anzugeben, da innerhalb der Umgebung +% \env{declarations} die geschlossene Angabe des Inhalts innerhalb von +% \cs{tud@fm@body@start} und \cs{tud@fm@body@end} notwendig ist. +% \begin{macrocode} +\newcommand*\nextdeclaration[3][]{% + \ifbool{@tud@declarations}{% + \tud@fm@body@start{declaration}{#1}{#2}% + #3% + \tud@fm@body@end{declaration}% + }{% + \ClassError{\TUD@Class@Name}{Incorrect usage of `\string\nextdeclaration'}{% + The command `\string\nextdeclaration' can only be used\MessageBreak% + within the environment `declarations'.% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \nextdeclaration +% \end{macro}^^A \tud@fm@declaration +% \end{macro}^^A \declaration +% \begin{macro}{\confirmation} +% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}^^A +% \changes{v2.03}{2015/01/30}{Bugfix für Spaltenanzahl}^^A +% \changes{v2.05}{2015/10/27}{Sternversion für Betreuer als Unterstützer}^^A +% \begin{macro}{\tud@fm@confirmation} +% \changes{v2.05}{2015/10/27}{neu}^^A +% \begin{macro}{\tud@fm@@confirmation} +% \changes{v2.02}{2014/07/18}{neu}^^A +% Mit diesem Befehl kann die Selbstständigkeitserklärung ausgegeben werden. Das +% optionale Argument bestimmt, wer als Unterstützer angegeben wird. Außerdem +% sind Schlüssel-Wert-Paare als Option nutzbar. Mit der Sternversion werden die +% mit \cs{supervisor} angegebenen Betreuer als Unterstützer genannt. +% \begin{macrocode} +\newcommand*\confirmation{% + \kernel@ifstar{% + \def\tud@fm@supporter{supporter=\@supervisor}% + \tud@fm@confirmation% + }{% + \def\tud@fm@supporter{supporter=\@supporter}% + \tud@fm@confirmation% + }% +} +\newcommand*\tud@fm@confirmation[1][]{% +% \end{macrocode} +% Damit das optionale Argument ohne Schlüssel für die Unterstützer verwendet +% werden kann, wird der Handler lokal umdefiniert. Außerdem werden irrelevante +% Parameter undefiniert gesetzt. +% \begin{macrocode} + \begingroup% + \TUD@parameter@handler@default[declaration]{supporter}% + \undef\KV@declaration@company% + \ifbool{@tud@declarations}{% + \tud@fm@@confirmation[\tud@fm@supporter,#1]% + }{% + \begin{declarations}[\tud@fm@supporter,#1]% + \tud@fm@@confirmation% + \end{declarations}% + }% + \endgroup% +} +% \end{macrocode} +% Dies ist der eigentliche Inhalt des Befehls \cs{confirmation}. +% \begin{macrocode} +\newcommand*\tud@fm@@confirmation[1][]{% + \tud@fm@body@start{declaration}{#1}{\confirmationname}% + \confirmationtext\vskip\z@\@confirmationclosing% + \tud@fm@body@end{declaration}% +} +% \end{macrocode} +% \end{macro}^^A \tud@fm@@confirmation +% \end{macro}^^A \tud@fm@confirmation +% \end{macro}^^A \confirmation +% \begin{macro}{\blocking} +% \changes{v2.02}{2014/05/16}{neu, \cs{restriction} umbenannt}^^A +% \changes{v2.02}{2014/07/18}{an \pkg{scrlayer-scrpage} angepasst}^^A +% \changes{v2.03}{2015/01/30}{Bugfix für Spaltenanzahl}^^A +% \begin{macro}{\tud@fm@blocking} +% \changes{v2.02}{2014/07/18}{neu}^^A +% Für den Sperrvermerk wird äquivalent zu \cs{confirmation} verfahren. Das +% optionale Argument ohne Schlüssel setzt hier die Firma für den Sperrvermerk. +% \begin{macrocode} +\newcommand*\blocking[1][]{% + \begingroup% + \TUD@parameter@handler@default[declaration]{company}% + \undef\KV@declaration@supporter% + \undef\KV@declaration@closing% + \undef\KV@declaration@confirmationclosing% + \ifbool{@tud@declarations}{% + \tud@fm@blocking[#1]% + }{% + \begin{declarations}[#1]% + \tud@fm@blocking% + \end{declarations}% + }% + \endgroup% +} +% \end{macrocode} +% Dies ist der eigentliche Inhalt des Befehls \cs{blocking}. +% \begin{macrocode} +\newcommand*\tud@fm@blocking[1][]{% + \tud@fm@body@start{declaration}{#1}{\blockingname}% + \blockingtext% + \tud@fm@body@end{declaration}% +} +% \end{macrocode} +% \end{macro}^^A \tud@fm@blocking +% \end{macro}^^A \blocking +% +% \iffalse +%</class&body> +%</book|report|article> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-layout.dtx b/macros/latex/contrib/tudscr/source/tudscr-layout.dtx new file mode 100644 index 0000000000..4e6fe56ae7 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-layout.dtx @@ -0,0 +1,1825 @@ +% \CheckSum{1215} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-layout.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-layout.dtx}[2019/07/19 v2.06c TUD-Script\space% + (layout)% +] +% +% \iffalse +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-layout.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.02}{2014/07/08}{\cs{FamilyKeyState} wird von Optionen genutzt}^^A +% \changes{v2.05}{2015/07/06}{Layout für Poster}^^A +% +% \section{Das Layout des \CDs} +% +% Unter Layout wird die Wahl von Schriftart und "~größe, die Positionierung +% verschiedener Textelemente sowie die farbliche Gestaltung verstanden. Für das +% \CD gibt es dabei drei wesentliche Ausprägungen, die für die verschiedenen +% Elemente auch unabhängig gewählt werden können. +% +% Für das \CD werden sowohl Teile- als auch die Kapitelseiten neu gestaltet. +% Es werden eine monochrome Version, eine Version mit leichtem Farbeinsatz und +% eine durchweg farbige Version bereitgestellt. Außerdem wird hier das Aussehen +% und die Position der Überschriften festgelegt. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*class&option> +% \fi +% +% \subsection{Gestalt von Umschlagseite, Titel, Teile und Kapitel} +% +% Ein zentraler Teil der Wrapper-Klassen ist die Auswahl der Darstellung des +% \CDs. Dabei kann gewählt werden, ob es einfarbig, mit leichtem oder aber mit +% starkem Farbeinsatz genutzt werden soll. Die folgenden Optionen sind hierfür +% zuständig. +% +% \begin{macro}{\tud@cd@switch} +% Dies sind die Standardoptionen für alle einzelnen Einstellungen des Layouts. +% Es gibt die Varianten monochrom~(1), leichter~(2) und voller Farbeinsatz~(5) +% sowie die Möglichkeit, das \CD vollständig zu deaktivieren~(0). Außerdem kann +% die farbige Ausprägung des Querbalkens im Zusammenspiel mit dem Seitenkopf +% festgelegt werden (farbiger Querbalken~(3), farbiger Kopf~(4) und voller +% Farbeinsatz mit hervorgehobenem Querbalken~(6)). +% \begin{macrocode} +\newcommand*\tud@cd@switch{} +\edef\tud@cd@switch{% + \TUD@bool@numkey,% + {nocolor}{1},{nocolour}{1},{monochrome}{1},{monochromatic}{1},% + {lite}{2},{colorlite}{2},{litecolor}{2},{colourlite}{2},{litecolour}{2},% + {light}{2},{colorlight}{2},{lightcolor}{2},{colourlight}{2},{lightcolour}{2},% + {pale}{2},{colorpale}{2},{palecolor}{2},{colourpale}{2},{palecolour}{2},% + {colorbar}{3},{barcolor}{3},{colourbar}{3},{barcolour}{3},% + {bicolor}{4},{bicolour}{4},{twocolor}{4},{twocolour}{4},% + {bichrome}{4},{bichromatic}{4},{dichrome}{4},{dichromatic}{4},% + {color}{5},{colour}{5},% + {full}{6},{colorfull}{6},{fullcolor}{6},{colourfull}{6},{fullcolour}{6}% +} +% \end{macrocode} +% \end{macro}^^A \tud@cd@switch +% \begin{option}{cd} +% \changes{v2.04}{2015/05/18}{Wert \val{barcolor} neu}^^A +% \begin{macro}{\tud@cd@num} +% Diese Option dient für die Hauptklassen zur globalen Einstellung für Cover- +% Titel-, Teil- und Kapitelseiten. Mit dem Schalter werden für alle Komponenten +% die gleichen Einstellungen gesetzt. Die Standardfarbe des Kopfes der Seiten +% im \pgs{tudheadings}-Stil ist schwarz und wird für die farbigen Layouts auf +% dunkelblau gesetzt. Abhängig von der gewählten Option~-- der nummerische Wert +% ist über \cs{tud@cd@switch} festgelegt~-- werden die sog. Layoutschlüssel +% (\cs{tud@cd@\meta{Typ}@num}) auf einen Wert gesetzt (0\dots 6), welcher +% später ausgewertet werden kann. Der Schalter für Kapitel wird lediglich für +% die Klassen \cls{tudscrbook} und \cls{tudscrreprt} definiert und genutzt. +% Damit werden alle Komponenten mit einer zentralen Option festgelegt, können +% aber auch durch den Nutzer explizit überschrieben werden. +% +% Für die Klasse \cls{tudscrposter} wird mit der Option die farbige Ausprägung +% eines Posters definiert. Dabei sind alle Werte gültig, die auch für die +% meisten anderen Layouteinstellungen verwendet werden können. Abhängig vom +% gewählten Wert, wird der Seitenstil, die Ausprägung der Fußzeile sowie die +% farbliche Gestalt von Kopf- und Fußzeile festgelegt. Da dabei unter anderem +% auch gegebenenfalls der Seitenstil auf einen vom Typ \pgs{tudheadings} +% festgelegt wird, erfolgt die Ausführung der Option frühestens zu Beginn des +% Dokumentes. +% \begin{macrocode} +\newcommand*\tud@cd@num{0} +\TUD@key{cd}[true]{% + \TUD@set@numkey{cd}{tud@cd@num}{\tud@cd@switch}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% +% \end{macrocode} +% Die Umschlagseite wird standardmäßig immer monochrom gesetzt. +% \begin{macrocode} +%<*book|report|article> + \ifcase\tud@cd@num\relax% false + \TUD@key@preset{cdcover}{false}% + \else% !false + \TUD@key@preset{cdcover}{true}% + \fi% +%</book|report|article> +% \end{macrocode} +% Alle übrigen Varianten des Layouts im \CD~-- schwarze Schrift und schwarzer +% Kopf, blaue Schrift und blauer Kopf, blaue Schrift und farbiger Querbalken, +% blaue Schrift und zweifarbiger Kopf sowie farbiger Hintergrund mit weißer +% Schrift und entweder Outline oder farbigem Querbalken im Kopf~-- werden als +% Voreinstellung an die anderen Schlüssel durgereicht. +% \begin{macrocode} + \TUD@key@preset{cdtitle}{#1}% + \TUD@key@preset{cdpart}{#1}% +%<*book|report> + \TUD@key@preset{cdchapter}{#1}% +%</book|report> + \TUD@key@preset{cdsection}{#1}% +% \end{macrocode} +% Die Ausführung des Befehls \cs{tud@cd@process} sorgt dafür, dass alle +% Optionen auch verarbeitet und wirksam werden. Dieser wird standardmäßig nach +% der Abarbeitung aller Optionen innerhalb der Präambel einmalig ausgeführt. +% Deshalb wird er hier nur innerhalb des Dokumentes genutzt. Dies gilt auch für +% die folgenden Optionen. +% \begin{macrocode} + \TUD@SpecialOptionAtDocument{tud@cd@process}% +% \end{macrocode} +% Innerhalb der Präambel wird der Satzspiegel abhängig vom gewünschten Layout +% festgelegt. Dies kann vom Benutzer mit dem Setzen der Option \opt{cdgeometry} +% überschrieben werden. +% \begin{macrocode} + \if@atdocument\else% + \ifcase\tud@cd@num\relax% false + \tud@locked@num@preset{tud@cdgeometry@num}{0}% + \else% !false + \tud@locked@num@preset{tud@cdgeometry@num}{2}% + \fi% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@cd@num +% \end{option}^^A cd +% \begin{option}{cdcover} +% \changes{v2.02}{2014/08/08}{neue Option für \cs{makecover}}^^A +% \changes{v2.04}{2015/05/18}{Wert \val{barcolor} neu}^^A +% \begin{macro}{\tud@cd@cover@num} +% \changes{v2.02}{2014/08/08}{neu}^^A +% Das durch die Option \opt{cd} insgesamt festgelegte Layout kann für die +% einzelnen Elemente Umschlagseite (\opt{cdcover}),\dots +% \begin{macrocode} +%<*book|report|article> +\newcommand*\tud@cd@cover@num{0} +\TUD@key{cdcover}[true]{% + \TUD@set@numkey{cdcover}{tud@cd@cover@num}{\tud@cd@switch}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \TUD@SpecialOptionAtDocument{tud@cd@process}% + \fi% +} +%</book|report|article> +% \end{macrocode} +% \end{macro}^^A \tud@cd@cover@num +% \end{option}^^A cdcover +% \begin{option}{cdtitle} +% \changes{v2.04}{2015/05/18}{Wert \val{barcolor} neu}^^A +% \begin{macro}{\tud@cd@title@num} +% \dots Titel (\opt{cdtitle}),\dots +% \begin{macrocode} +\newcommand*\tud@cd@title@num{0} +\TUD@key{cdtitle}[true]{% + \TUD@set@numkey{cdtitle}{tud@cd@title@num}{\tud@cd@switch}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \TUD@SpecialOptionAtDocument{tud@cd@process}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@cd@title@num +% \end{option}^^A cdtitle +% \begin{option}{cdpart} +% \changes{v2.04}{2015/05/18}{Wert \val{barcolor} neu}^^A +% \begin{macro}{\tud@cd@part@num} +% \dots Teile- (\opt{cdpart}) und\dots +% \begin{macrocode} +\newcommand*\tud@cd@part@num{0} +\TUD@key{cdpart}[true]{% + \TUD@set@numkey{cdpart}{tud@cd@part@num}{\tud@cd@switch}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \TUD@SpecialOptionAtDocument{tud@cd@process}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@cd@part@num +% \end{option}^^A cdpart +% \begin{option}{cdchapter} +% \changes{v2.04}{2015/05/18}{Wert \val{barcolor} neu}^^A +% \begin{macro}{\tud@cd@chapter@num} +% \dots bei den entsprechenden Klassen (\cls{tudscrbook} und \cls{tudscrreprt}) +% auch für die Kapitelseiten (\opt{cdchapter}) separat für die einzelnen +% Elemente geändert bzw. überschrieben werden. +% \begin{macrocode} +%<*book|report> +\newcommand*\tud@cd@chapter@num{0} +\TUD@key{cdchapter}[true]{% + \TUD@set@numkey{cdchapter}{tud@cd@chapter@num}{\tud@cd@switch}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifnum\tud@cd@chapter@num>4\relax% color/full + \TUD@key@preset{chapterpage}{true}% + \else% + \TUD@key@preset{chapterpage}{false}% + \fi% + \TUD@SpecialOptionAtDocument{tud@cd@process}% + \fi% +} +%</book|report> +% \end{macrocode} +% \end{macro}^^A \tud@cd@chapter@num +% \end{option}^^A cdchapter +% \begin{option}{cdsection} +% \changes{v2.05}{2015/07/07}{neu}^^A +% \begin{macro}{\tud@cd@section@num} +% \changes{v2.05}{2015/07/07}{neu}^^A +% Zuletzt noch alle nachgelagerten Gliederungsebenen. +% \begin{macrocode} +\newcommand*\tud@cd@section@num{0} +\TUD@key{cdsection}[true]{% + \TUD@set@numkey{cdsection}{tud@cd@section@num}{\tud@cd@switch}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \TUD@SpecialOptionAtDocument{tud@cd@process}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@cd@section@num +% \end{option}^^A cdsection +% +% \iffalse +%</class&option> +%<*book|report> +%<*class&option> +% \fi +% +% Die nun folgenden Optionen und Befehle werden nur für die beiden Klassen +% \cls{tudscrbook} und \cls{tudscrreprt} definiert. +% \begin{option}{parttitle} +% \begin{macro}{\if@tud@parttitle} +% Der Schalter dient zur Steuerung, ob der Titel des Dokumentes wie im Handbuch +% des \CDs auf den Teileseiten stehen soll. +% \begin{macrocode} +\newif\if@tud@parttitle +\TUD@key{parttitle}[true]{% + \TUD@set@ifkey{parttitle}{@tud@parttitle}{#1}% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@parttitle +% \end{option}^^A parttitle +% \begin{option}{chapterpage} +% \begin{macro}{\if@tud@chapterpage} +% Mit dieser Option können Kapitelüberschriften alleine auf einer Seite stehen. +% Es werden separate Kapitelseiten erzeugt. +% \begin{macrocode} +\newif\if@tud@chapterpage +\TUD@key{chapterpage}[true]{% + \TUD@set@ifkey{chapterpage}{@tud@chapterpage}{#1}% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@chapterpage +% \end{option}^^A chapterpage +% \begin{option}{cleardoublespecialpage} +% \changes{v2.02}{2014/07/08}{Werte für Seitenstil aus den \TUDScript- bzw. +% \KOMAScript-Klassen möglich}^^A +% \changes{v2.03}{2015/01/09}{Prüfung des Seitenstils mit \cs{AfterPreamble} +% auf Beginn des Dokumentes verzögert}^^A +% \changes{v2.06}{2018/08/21}{Farbeinstellungen integriert}^^A +% \begin{macro}{\tud@cleardoublepage} +% \begin{macro}{\if@tud@clearcolor} +% Für Klassen mit separaten Teileseiten und Kapiteln wird eine zusätzliche +% Option definiert, welche nur bei zweiseitigem Satz (\opt{twoside}) und +% zusätzlich immer auf nur der rechten Seite öffnenden Teilen bzw. Kapiteln +% (\opt{open}|=|\val{right}) zum Tragen kommen. +% +% Diese Option steuert, ob die Rückseite von Titel, Teilen und ggf. auch bei +% separaten Kapitelseiten\footnote{bei aktivierter \opt{chapterpage}-Option} +% entweder zwingend als leere Seite oder~-- abhängig von der \KOMAScript-Option +% \opt{cleardoublepage}~-- als Vakatseite ausgegeben werden. Außerdem ist die +% Festlegung eines bestimmten Seitenstiles möglich. Weiterhin kann eingestellt +% werden, ob bei der Verwendung einer Hintergrundfarbe auf Titel- Teil- oder +% Kapitelseiten im Stile des \CDs verwendet (\opt{cd\dots}|=|\val{color}) die +% entsprechende Rückseite in der gleichen Farbe wie die Vorderseite erschienen +% soll. Dafür muss die Option \opt{cleardoublespecialpage} aktiviert sein. +% +% Der Befehl \cs{tud@cleardoublepage} enthält die Definition der zu erzeugenden +% Doppelseite. +% \begin{macrocode} +\newif\if@tud@clearcolor +\newcommand*\tud@cleardoublepage{\cleardoubleoddpage} +% \end{macrocode} +% Mit der Option \opt{cleardoublespecialpage} kann dieser festgelegt werden. +% \begin{macrocode} +\TUD@key{cleardoublespecialpage}[true]{% + \TUD@set@numkey{cleardoublespecialpage}{@tempa}{% + \TUD@bool@numkey,% + {nocolor}{2},{nocolour}{2},{monochrome}{2},{monochromatic}{2},% + {bicolor}{3},{bicolour}{3},{twocolor}{3},{twocolour}{3},% + {bichrome}{3},{bichromatic}{3},{dichrome}{3},{dichromatic}{3},% + {color}{3},{colour}{3},% + {full}{3},{colorfull}{3},{fullcolor}{3},{colourfull}{3},{fullcolour}{3},% + {current}{4}% + }{#1}% +% \end{macrocode} +% Dabei wird die Rückseite entweder wie alle Vakatseiten oder leer gesetzt. +% \begin{macrocode} + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false + \renewcommand*\tud@cleardoublepage{\null\thispagestyle{empty}\newpage}% + \or% true + \renewcommand*\tud@cleardoublepage{\cleardoubleoddpage}% +% \end{macrocode} +% Zusätzlich kann die Vakatseite gegebenenfalls auch farbig ausgegeben werden, +% was abhängig von \opt{cd=true/color/pale/bicolor/fullcolor} erfolgt. +% \begin{macrocode} + \or% nocolor + \@tud@clearcolorfalse% + \or% color + \@tud@clearcolortrue% +% \end{macrocode} +% Außerdem kann ein Seitenstil gezielt ausgewählt werden. +% \begin{macrocode} + \or% current + \renewcommand*\tud@cleardoublepage{\cleardoubleoddstandardpage}% + \fi% +% \end{macrocode} +% Beim Laden der Klasse selbst sind die speziellen Seitenstile der \KOMAScript- +% bzw. \TUDScript-Klassen noch nicht definiert. Diese sollen als Werte jedoch +% trotzdem erlaubt sein. Deshalb wird für diesen Fall das Überprüfen mit +% \cs{AfterPreamble} auf den Beginn des Dokumentes verzögert. +% \begin{macrocode} + \else% + \AfterPreamble{% + \ifcsundef{ps@#1}{% + \ClassError{\TUD@Class@Name}{`#1' is no valid pagestyle}{% + You tried to use `#1' as a pagestyle for option\MessageBreak% + `cleardoublespecialpage', but it was never defined.% + }% + }{% + \renewcommand*\tud@cleardoublepage{\cleardoubleoddpageusingstyle{#1}}% + }% + }% + \FamilyKeyStateProcessed% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@clearcolor +% \end{macro}^^A \tud@cleardoublepage +% \end{option}^^A cleardoublespecialpage +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% \begin{macro}{\tud@cleardoublespecialpage} +% \begin{macro}{\tud@clearcolor@wrn} +% Der Befehl \cs{tud@cleardoublespecialpage} dient zur eigentlichen Umsetzung. +% Das obligatorische Argument enthält alles, was innerhalb der Gruppe an +% lokalen Einstellungen vorgenommen werden soll. Das optionale Argument wird +% ggf. genutzt, um einen Inhalt auf der Rückseite auszugeben. +% \begin{macrocode} +\newcommand*\tud@cleardoublespecialpage[2][]{% + \begingroup% + \addtokomafont{pagenumber}{\usekomafont{tudheadings}}% + \addtokomafont{pagefoot}{\usekomafont{tudheadings}}% + #2% + \ifboolexpr{bool {@twoside} and bool {@openright}}{% + \if@tud@clearcolor% + \def\@tempa{% + #1% + \tud@cleardoublepage% + \endgroup% + }% + \else% + \def\@tempa{% + \endgroup% + #1% + \tud@cleardoublepage% + }% + \fi% + }{% + \if@tud@clearcolor\tud@clearcolor@wrn\fi% + \def\@tempa{% + \endgroup% + #1% + }% + }% + \@tempa% + \@afterindentfalse\@afterheading% +} +% \end{macrocode} +% Die Warnung für den Fall, dass die Option \opt{clearcolor} ohne +% \opt{open}|=|\val{right} und \opt{twoside} verwendet wird. +% \begin{macrocode} +\newcommand*\tud@clearcolor@wrn{% + \ClassWarning{\TUD@Class@Name}{% + Option `clearcolor' is only available together with\MessageBreak% + options `twoside' and `open=right'% + }% + \global\let\tud@clearcolor@wrn\relax% +} +% \end{macrocode} +% \end{macro}^^A \tud@clearcolor@wrn +% \end{macro}^^A \tud@cleardoublespecialpage +% +% \iffalse +%</class&body> +%</book|report> +%<*class&option> +% \fi +% +% Damit endet der Abschnitt für \cls{tudscrbook}- und \cls{tudscrreprt}-Klasse. +% +% \begin{macro}{\tud@pagecolor} +% Der Befehl \cs{tud@pagecolor} dient für die Hauptklassen als Hilfsmakro, um +% je nach gewählter Ausprägung des Layouts die farblichen Seitenhintergründe zu +% aktivieren. Für die Klasse \cls{tudscrposter} wird der Befehl zusätzlich für +% das benutzerdefinierte Festlegen einer standardmäßigen Hintergrundfarbe mit +% der Option \opt{backcolor} genutzt. +% \begin{macrocode} +\newcommand*\tud@pagecolor{}% +% \end{macrocode} +% \end{macro}^^A \tud@pagecolor +% \begin{option}{backcolor} +% \changes{v2.05}{2016/04/15}{neu}^^A +% \begin{option}{backgroundcolor} +% \begin{option}{bgcolor} +% \begin{macro}{\normalcolor} +% Mit dieser Option kann die standardmäßige Hintergrundfarbe für Poster gesetzt +% werden. +% \begin{macrocode} +%<*poster> +\TUD@key{backcolor}[true]{% + \TUD@set@numkey{backcolor}{@tempa}{% + \TUD@bool@numkey,% + {nocolor}{0},{nocolour}{0},{none}{0},% + {color}{1},{colour}{1},{cdcolor}{1},{cdcolour}{1}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false + \renewcommand*\tud@pagecolor{}% + \else% true + \renewcommand*\tud@pagecolor{HKS41}% + \fi% + \else% + \renewcommand*\tud@pagecolor{#1}% + \FamilyKeyStateProcessed% + \fi% +% \end{macrocode} +% Wird die Option innerhalb des Dokumentes verwendet, wird mit einer Box erst +% die gewählte Farbe verifiziert und anschließend auf die am Dokumentbeginn +% definierte Textfarbe umgestellt. +% \begin{macrocode} + \if@atdocument% + \ifdefvoid{\tud@pagecolor}{}{\sbox\z@{\color{\tud@pagecolor}}}% + \normalcolor% + \fi% +} +\TUD@key{backgroundcolor}[true]{\TUDoptions{backcolor=#1}} +\TUD@key{bgcolor}[true]{\TUDoptions{backcolor=#1}} +% \end{macrocode} +% Für das Aktivieren der Farbe \val{HKS41} wird \cs{normalcolor} erweitert, um +% hier in jedem Fall als Schriftfarbe \emph{weiß} zu verwenden. +% \begin{macrocode} +\AfterPackage{xcolor}{% + \CheckCommand*\normalcolor{\let\current@color\default@color\set@color}% + \apptocmd{\normalcolor}{% + \ifstr{\tud@pagecolor}{HKS41}{\color{white}}{}% + }{}{\tud@patch@wrn{normalcolor}}% + \AtBeginDocument{% + \ifdefvoid{\tud@pagecolor}{}{\sbox\z@{\color{\tud@pagecolor}}}% + \normalcolor% + }% +} +%</poster> +% \end{macrocode} +% \end{macro}^^A \normalcolor +% \end{option}^^A bgcolor +% \end{option}^^A backgroundcolor +% \end{option}^^A backcolor +% \begin{option}{pageheadingsvskip} +% \changes{v2.05}{2016/06/20}{neu}^^A +% \begin{macro}{\tud@dim@pageheadingsvskip} +% \changes{v2.05}{2016/06/20}{neu}^^A +% \begin{option}{headingsvskip} +% \changes{v2.05}{2016/06/20}{neu}^^A +% \begin{macro}{\tud@dim@headingsvskip} +% \changes{v2.05}{2016/06/20}{neu}^^A +% Mit diesen Optionen kann der Anwender die Überschriften von Titel, Teilen und +% Kapiteln vertikal von ihrer Standardposition verschieben, welche vom \CD +% eigentlich vorgegeben ist. Die Option \opt{pageheadingsvskip} verschiebt +% dabei Überschriften, welche allein auf einer Seite stehen, also Überschriften +% von Teilen oder auf Kapitelseiten. Auch die vertikale Position des Titels +% kann damit beeinflusst werden. Mit der Option \opt{headingsvskip} werden die +% Überschriften von Kapiteln, bei denen direkt danach der Fließtext folgt, oder +% die des Titelkopfes (\opt{titlepage}|=|\val{false}) verschoben. +% \begin{macrocode} +%<*book|report|article> +\newcommand*\tud@dim@pageheadingsvskip{0pt} +\TUD@key{pageheadingsvskip}{% + \TUD@set@dimenkey{pageheadingsvskip}{\tud@dim@pageheadingsvskip}{#1}% +} +\newcommand*\tud@dim@headingsvskip{0pt} +\TUD@key{headingsvskip}{% + \TUD@set@dimenkey{headingsvskip}{\tud@dim@headingsvskip}{#1}% +} +%</book|report|article> +% \end{macrocode} +% \end{macro}^^A \tud@dim@headingsvskip +% \end{option}^^A headingsvskip +% \end{macro}^^A \tud@dim@pageheadingsvskip +% \end{option}^^A pageheadingsvskip +% +% \iffalse +%</class&option> +%<*class|package&fixfonts> +%<*option> +% \fi +% +% \subsection{Schrifteinstellung und -größe der Überschriften} +% +% \begin{option}{headings} +% \changes{v2.06}{2018/08/20}{neu}^^A +% \begin{macro}{\if@tud@heavyheadings} +% \changes{v2.06}{2018/08/20}{neu}^^A +% Die Option wird dahingehend erweitert, dass die Überschriften auch im +% extra-fetten Schnitt gesetzt werden können. +% \begin{macrocode} +\newif\if@tud@heavyheadings +\TUD@key{headings}{% + \TUD@set@numkey{headings}{@tempa}{% + {light}{0},{lightfont}{0},{lite}{0},{litefont}{0},{noheavyfont}{0},% + {normal}{0},{standard}{0},{std}{0},{normalbold}{0},{boldnormal}{0},% + {heavy}{1},{heavyfont}{1},{bold}{1},{boldfont}{1},% + {ultrabold}{1},{boldultra}{1},{heavybold}{1},{boldheavy}{1},% + {extendedbold}{1},{boldextended}{1}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% light + \@tud@heavyheadingsfalse% + \or% heavy + \@tud@heavyheadingstrue% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@heavyheadings +% \end{option}^^A headings +% +% \iffalse +%</option> +%</class|package&fixfonts> +%<*class&option> +% \fi +% +% \begin{option}{headings} +% \begin{option}{open} +% \begin{option}{chapterprefix} +% Die \KOMAScript-Option \opt{headings} setzt für alle Überschriften die +% Formatierung zurück. Um die Einstellungen für das \CD aktiv zu halten, werden +% nach der Ausführung der Option durch \cs{tud@x@scr@headings@reset} die mit +% \cs{tud@komafont@set} definierten Makros \cs{tud@komafont@\meta{Element}} +% erneut an die entsprechenden Schriftelemente angehängt. Bei der Verwendung +% der \KOMAScript-Option \opt{headings}|=|\val{standardclasses} werden außerdem +% noch die Optionen \opt{open} und \opt{chapterprefix} ausgeführt, weshalb auch +% auf diese reagiert werden muss. +% \begin{macrocode} +\DefineFamilyMember{KOMA} +\DefineFamilyKey{KOMA}{headings}{% + \TUD@SpecialOptionAtDocument{tud@x@scr@headings@reset}% + \FamilyKeyStateProcessed% +} +%<*book|report> +\DefineFamilyKey{KOMA}{open}{% + \TUD@SpecialOptionAtDocument{tud@x@scr@headings@reset}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{KOMA}{chapterprefix}{% + \TUD@SpecialOptionAtDocument{tud@x@scr@headings@reset}% + \FamilyKeyStateProcessed% +} +%</book|report> +% \end{macrocode} +% \end{option}^^A chapterprefix +% \end{option}^^A open +% \end{option}^^A headings +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% \begin{macro}{\tud@x@scr@headings@set} +% \changes{v2.05}{2015/11/24}{neu}^^A +% \begin{macro}{\tud@x@scr@headings@current} +% \changes{v2.05}{2015/11/24}{neu}^^A +% \begin{macro}{\tud@sec@fontsize} +% \changes{v2.05}{2015/11/24}{neu}^^A +% \begin{macro}{\tud@thesis@fontsize} +% \changes{v2.05}{2015/11/24}{neu}^^A +% Als erstes werden die Optionen verarbeitet, welche einen Einfluss auf die +% Formatierung respektive die Schriftgröße der Überschriften haben. Wird über +% die Option \opt{headings} eine andere Überschriftengröße gewählt, werden mit +% dem Makro \cs{tud@x@scr@headings@set} die passenden Schriftgrößen sowohl für +% die Überschriften (\cs{tud@sec@fontsize}) als auch die Titelseite +% (\cs{tud@thesis@fontsize}) gesetzt. Dafür wird gewählte Schriftgröße +% der Überschriften\footnote{\ignorespaces% +% Option \opt{headings}|=|\val{standardclasses/big/normal/small}\ignorespaces% +% } im Hilfsmakro \cs{tud@x@scr@headings@current} gesichert. +% \begin{macrocode} +\newcommand*\tud@x@scr@headings@current{} +\newcommand*\tud@sec@fontsize{} +\newcommand*\tud@thesis@fontsize{} +\newcommand*\tud@x@scr@headings@set[1][]{% + \def\@tempa##1##2##3{% + \ifstr{##1}{\tud@x@scr@headings@current}{}{% + \renewcommand*\tud@x@scr@headings@current{##1}% + \renewcommand*\tud@sec@fontsize{##2}% + \renewcommand*\tud@thesis@fontsize{##3}% + #1% + }% + }% +% \end{macrocode} +% Wird \cs{tud@x@scr@headings@set} aufgerufen, so werden mit \cs{KOMAoptionOf} +% die aktuellen Werte der Option \opt{headings} ausgelesen, welche in einer +% Liste ausgegeben werden. Diese wird durchlaufen und dabei auf die relevanten +% Werte reagiert. +% \begin{macrocode} + \KOMAoptionOf[\def\@tempb]{\KOMAClassFileName}{headings}% + \@for\@tempc:=\@tempb\do{% + \ifstr{standardclasses}{\@tempc}{\@tempa{standardclasses}{\Huge}{\LARGE}}{% + \ifstr{big}{\@tempc}{\@tempa{big}{\Huge}{\LARGE}}{% + \ifstr{normal}{\@tempc}{\@tempa{normal}{\huge}{\Large}}{% + \ifstr{small}{\@tempc}{\@tempa{small}{\LARGE}{\large}}{}}}}% + }% +% \end{macrocode} +% Der Abstand nach Teil- und Kapitelüberschriften wird ebenso in Abhängigkeit +% der gewählten Einstellung für \opt{headings} definiert. +% \begin{macrocode} + \begingroup + \tud@sec@fontsize% + \@tempskipa=\glueexpr% + .8\baselineskip \@plus .05\baselineskip \@minus .1\baselineskip% + \relax\relax% + \edef\tud@res@a{% + \endgroup% + \def\noexpand\tud@cd@afterskip{\the\@tempskipa}% + }% + \tud@res@a% +} +% \end{macrocode} +% Damit die Einstellungen für die Größe wirksam werden, wird das Makro einmalig +% zu Beginn des Dokumentes ausgeführt. +% \begin{macrocode} +\AtEndPreamble{\tud@x@scr@headings@set} +% \end{macrocode} +% \end{macro}^^A \tud@thesis@fontsize +% \end{macro}^^A \tud@sec@fontsize +% \end{macro}^^A \tud@x@scr@headings@current +% \end{macro}^^A \tud@x@scr@headings@set +% \begin{macro}{\tud@x@scr@headings@reset} +% \changes{v2.05}{2015/11/24}{neu}^^A +% Hiermit wird nach dem Ausführen der Option \opt{headings} im Zweifelsfall die +% Größe und Formatierung der Überschriften neu gesetzt. +% \begin{macrocode} +\newcommand*\tud@x@scr@headings@reset{% + \tud@cd@process% + \tud@x@scr@headings@set[% + \ifcase\tud@cd@part@num\relax\else% !false + \tud@komafont@reset{part}% + \tud@komafont@reset{partnumber}% + \fi% +%<*book|report> + \ifcase\tud@cd@chapter@num\relax\else% !false + \tud@komafont@reset{chapter}% + \tud@komafont@reset{chapterprefix}% + \fi% +%</book|report> + \ifcase\tud@cd@section@num\relax\else% !false + \tud@komafont@reset{section}% + \tud@komafont@reset{subsection}% + \tud@komafont@reset{subsubsection}% + \fi% + ]% +} +% \end{macrocode} +% \end{macro}^^A \tud@x@scr@headings@reset +% +% \iffalse +%</class&body> +%<*body> +%<*class|package&fixfonts> +% \fi +% +% \subsection{Umsetzung des Layouts} +% +% \begin{macro}{\tud@sec@fontface} +% \changes{v2.05}{2016/04/04}{Optionales Argument für \pkg{tudscrcomp}}^^A +% \changes{v2.06}{2018/08/20}{extra-fette Überschriften möglich}^^A +% \begin{macro}{\tud@sec@@fontface} +% \begin{macro}{\tud@sec@format} +% \begin{macro}{\tud@sec@uppercase} +% \begin{macro}{\tud@sec@strut} +% \changes{v2.06}{2018/07/24}{neu}^^A +% Mit \cs{tud@sec@fontface} wird die Schriftart für Überschriften im +% Layout des \CDs definiert. +% \begin{macrocode} +%<package&fixfonts>\AfterPackage{tudscrfonts}{% +\newcommand*\tud@sec@fontface[1][]{\tud@sec@@fontface{#1}}% +\newcommand*\tud@sec@@fontface[1]{% + \sectfont#1% + \if@tud@cdfont@active\if@tud@heavyheadings% + \if@tud@x@mweights@enabled% + \edef\bfseries@rm{\tud@cdfont@ebf}% + \edef\bfseries@sf{\tud@cdfont@ebf}% + \edef\bfseries@tt{\tud@ttfont@ebf}% + \fi% + \let\bfdefault\tud@cdfont@ebf% + \fontseries{\tud@cdfont@ebf}% + \fi\fi% + \selectfont% +} +% \end{macrocode} +% Sind die alten Schriftfamilien aktiv, wird mit \cs{tud@sec@fontface} \DIN als +% Schriftart für Überschriften im Layout des \CDs definiert. Allerdings kann +% dies per Option auch deaktiviert werden. +% \begin{macrocode} +\if@tud@cdoldfont@active + \renewcommand*\tud@sec@fontface[1][]{% + \if@tud@cdoldfont@nodin% + \tud@sec@@fontface{#1}% + \else% + \tud@db\tud@raggedright% + \fi% + }% +\fi +% \end{macrocode} +% Der Befehl \cs{tud@sec@format} dient zur Formatierung von Überschriften. +% Dabei wird dieser mit der von \KOMAScript{} bereitgestellten Schnittstelle für +% Teile\footnote{\cs{partlineswithprefixformat}}, +% Kapitel\footnote{\cs{chapterlineswithprefixformat}, \cs{chapterlinesformat}} +% und +% Abschnitte\footnote{\cs{sectionlinesformat}, \cs{sectioncatchphraseformat}} +% verwendet. Dadurch wird eine Anpassung der Gliederungsbefehle~-- wie es +% einschließlich Version~v2.05 für die erzwungene Großschreibung umgesetzt +% wurde~-- vermieden. Für die \OpenSans führt das Makro \cs{tud@sec@format} +% lediglich \cs{tud@sec@strut} aus. +% \begin{macrocode} +\newcommand*\tud@sec@format[2][]{% + \IfArgIsEmpty{#1}{% + \tud@sec@strut% + }{% + \begingroup% + \usefontofkomafont{#1}% + \tud@sec@strut% + \endgroup% + }% + #2% +} +% \end{macrocode} +% Für die alten Schriften hat der Befehl eine erweiterte Funktionalität, wenn +% die Schriftfamilie \DIN aktiv ist, welche für Überschriften einzusetzen ist. +% Das \CD verlangt dabei, dass zwingend Majuskeln\footnote{Großbuchstaben} zu +% verwenden sind. Hierfür wird der Befehl \cs{MakeTextUppercase} aus dem Paket +% \pkg{textcase} genutzt, welcher den internen \LaTeX-Befehl \cs{MakeUppercase} +% verbessert. Das optionale Argument kann genutzt werden, falls nicht die +% aktuelle Schrift sondern ein durch \KOMAScript{} definiertes Schriftelement +% ausgewertet werden soll. +% \begin{macrocode} +\if@tud@cdoldfont@active + \newcommand*\tud@sec@uppercase{\MakeUppercase}% + \AfterPackage*{textcase}{% + \renewcommand*\tud@sec@uppercase{\MakeTextUppercase}% + }% + \renewcommand*\tud@sec@format[2][]{% + \@tud@res@swafalse% + \IfArgIsEmpty{#1}{% + \tud@sec@strut% + \tud@ifdin{\@tud@res@swatrue}{}% + }{% + \begingroup% + \usefontofkomafont{#1}% + \tud@sec@strut% + \tud@ifdin{\aftergroup\@tud@res@swatrue}{}% + \endgroup% + }% + \if@tud@res@swa% + \tud@sec@uppercase{#2}% + \else% + #2% + \fi% + }% +\fi +% \end{macrocode} +% Für Abschnitte etc. liegt auf einer neuen Seite dier erste Grundlinie höher, +% als für Großbuchstaben in der größeren Schrift für \cs{section} etc. benötigt +% wird. Deshalb wird die Grundlinie \enquote{notfallmäßig} so weit nach unten +% verschoben, wie für den höchsten Buchstabe benötigt wird. Mit dem Befehl +% \cs{tud@sec@strut} wird für alle Überschriften dafür gesorgt, dass immer der +% gleiche Freiraum bereitgehalten wird, unabhängig vom Inhalt der spezifischen +% Überschrift. Hierfür wird \cs{strutbox} aus dem \LaTeXe"~Kernel~-- nachdem +% \cs{strut} zuvor bereits einmal ausgeführt wird, um die Standardgröße der Box +% zu verwenden~-- temporär umdefiniert. +% \begin{macrocode} +\newrobustcmd*\tud@sec@strut{% +%<*class> + \begingroup% + \strut\setbox\strutbox\hbox{\vphantom{\textsuperscript{\"A\"O\"U}}}\strut% + \endgroup% +%</class> +} +%<package&fixfonts>} +% \end{macrocode} +% \end{macro}^^A \tud@sec@strut +% \end{macro}^^A \tud@sec@uppercase +% \end{macro}^^A \tud@sec@format +% \end{macro}^^A \tud@sec@@fontface +% \end{macro}^^A \tud@sec@fontface +% +% \iffalse +%</class|package&fixfonts> +%</body> +%<*class&body> +% \fi +% +% \begin{macro}{\tud@title@fontcolor} +% \begin{macro}{\tud@part@fontcolor} +% \begin{macro}{\tud@chapter@fontcolor} +% \begin{macro}{\tud@section@fontcolor} +% \changes{v2.05}{2015/07/07}{neu}^^A +% Die Makros werden für die Farbe der Überschriften verwendet. +% \begin{macrocode} +\newcommand*\tud@title@fontcolor{} +\newcommand*\tud@part@fontcolor{} +%<*book|report> +\newcommand*\tud@chapter@fontcolor{} +%</book|report> +\newcommand*\tud@section@fontcolor{} +% \end{macrocode} +% \end{macro}^^A \tud@section@fontcolor +% \end{macro}^^A \tud@chapter@fontcolor +% \end{macro}^^A \tud@part@fontcolor +% \end{macro}^^A \tud@title@fontcolor +% \begin{macro}{\raggedtitle} +% \changes{v2.05}{2016/04/05}{neu}^^A +% Dieses Makro wird für die Ausrichtung des Titels bereitgehalten. +% \begin{macrocode} +\providecommand*\raggedtitle{\tud@raggedright} +% \end{macrocode} +% \end{macro}^^A \raggedtitle +% \begin{macro}{\tud@cd@process} +% \changes{v2.02}{2014/08/29}{Anpassungen für \pkg{fontspec}}^^A +% \changes{v2.05}{2016/04/04}{Schrift für \val{subtitle} abhängig von +% \cs{mddefault}}^^A +% \changes{v2.05}{2016/04/05}{Einstellung für Ausrichtung der Überschriften}^^A +% Dieser Befehl kümmert sich darum, dass die gewählten Optionen für den +% Seitenstil auch umgesetzt werden. Dabei wird insbesondere darauf Wert gelegt, +% dass die Optionen auch im Dokument geändert und wiederhergestellt werden +% können. +% \ToDo{\cs{...pagecolor} und {\cs{...fontcolor} (part/chapter/title)}}[v2.07] +% \ToDo{Schriftfarbauswahl in \cs{tud@cd@process}}[v2.07] +% \begin{macrocode} +\newcommand*\tud@cd@process{% +% \end{macrocode} +% Die Einstellungen für den Titel. Vor dessen Umstellung werden die relevanten +% Originalbefehle mit \cs{tud@cs@store}\marg{Befehl} gesichert, damit diese +% mit \cs{tud@cs@restore}\marg{Befehl} wiederhergestellt werden können. +% \begin{macrocode} + \ifcase\tud@cd@title@num\relax% false +%<*book|report|article> + \tud@cs@restore{titlepagestyle}% +%</book|report|article> +%<*poster> + \renewcommand*\titlepagestyle{empty}% +%</poster> + \tud@komafont@unset{titlehead}% + \tud@komafont@unset{title}% + \tud@komafont@unset{subtitle}% + \tud@komafont@unset{subject}% +%<*book|report|article> + \tud@komafont@unset{author}% + \tud@komafont@unset{date}% + \tud@komafont@unset{publishers}% +%</book|report|article> + \else% !false +%<*book|report|article> + \tud@cs@store{titlepagestyle}% + \renewcommand*\titlepagestyle{plain.tudheadings}% +%</book|report|article> +%<*poster> + \renewcommand*\titlepagestyle{empty.tudheadings}% +%</poster> + \tud@komafont@set{titlehead}{\usekomafont{titlepage}}% + \tud@komafont@set{title}{% + \usekomafont{disposition}% + \raggedtitle% + \tud@sec@fontface% + \tud@sec@fontsize% + \tud@color{\tud@title@fontcolor}% + }% + \tud@komafont@set{subtitle}{% + \tud@thesis@fontsize% + \fontseries{\tud@cdfont@bf}\selectfont% + }% + \tud@komafont@set{subject}{% + \sffamily% + \usesizeofkomafont{section}% + \tud@color{\tud@title@fontcolor}% + }% +%<*book|report|article> + \tud@komafont@set{author}{\usekomafont{subject}}% + \tud@komafont@set{publishers}{\usekomafont{author}}% + \tud@komafont@set{date}{\usekomafont{titlepage}}% +%</book|report|article> + \fi% +% \end{macrocode} +% Das gleiche für die Teileseiten. +% \begin{macrocode} + \ifcase\tud@cd@part@num\relax% false + \tud@cs@restore{scr@part@beforeskip}% +%<*book|report> + \tud@cs@restore{scr@part@innerskip}% +%</book|report> + \tud@cs@restore{scr@part@afterskip}% + \tud@cs@restore{partheadstartvskip}% +%<*book|report> + \tud@cs@restore{partheadendvskip}% + \tud@cs@restore{partheademptypage}% + \tud@cs@restore{partpagestyle}% +%</book|report> + \tud@cs@restore{partlineswithprefixformat}% + \tud@komafont@unset{part}% + \tud@komafont@unset{partnumber}% + \tud@cs@restore{raggedpart}% +% \end{macrocode} +% Es werden die Standardbefehle gesichert und für das \CD angepasst. Einigen +% Makros werden mittels \cs{let} Definitionen von anderen Makros zugewiesen, +% die sich wiederum am Original orientieren. Hintergrund ist, dass die +% originalen Befehle angepasst werden sollen. Damit dies nicht bei jeder +% Optionswahl sondern nur einmalig geschehen muss und um möglichst einfach auf +% die Originaldefinition zurückschalten zu können, wird so verfahren. Die +% angepassten Befehle selbst und die dazugehörige Beschreibung sind etwas +% weiter unten im Quelltext zu finden. +% \begin{macrocode} + \else% !false + \tud@cs@store{scr@part@beforeskip}% +%<*book|report> + \renewcommand*\scr@part@beforeskip{\tud@cd@beforeskip}% +%</book|report> +%<*article|poster> + \renewcommand*\scr@part@beforeskip{\tud@cd@afterskip+\baselineskip}% +%</article|poster> +%<*book|report> + \tud@cs@store{scr@part@innerskip}% + \renewcommand*\scr@part@innerskip{\tud@cd@innerskip}% +%</book|report> + \tud@cs@store{scr@part@afterskip}% + \renewcommand*\scr@part@afterskip{\tud@cd@afterskip}% + \tud@cs@store{partheadstartvskip}% + \let\partheadstartvskip\tud@partheadstartvskip% +%<*book|report> + \tud@cs@store{partheadendvskip}% + \let\partheadendvskip\relax% + \tud@cs@store{partheademptypage}% + \let\partheademptypage\tud@partheademptypage% + \tud@cs@store{partpagestyle}% + \renewcommand*\partpagestyle{plain.tudheadings}% +%</book|report> + \tud@cs@store{partlineswithprefixformat}% + \let\partlineswithprefixformat\tud@partlineswithprefixformat% +% \end{macrocode} +% Es wird die Schriftfarbe, "~größe und "~art angepasst, je nachdem ob der +% Titel des Dokumentes auf den Teileseiten auftauchen soll oder eben nicht. +% \begin{macrocode} + \tud@komafont@set{part}{% + \tud@sec@fontface% + \tud@color{\tud@part@fontcolor}% + }% + \tud@komafont@set{partnumber}{% + \tud@sec@fontface% + \tud@color{\tud@part@fontcolor}% + }% + \tud@cs@store{raggedpart}% + \renewcommand*\raggedpart{\tud@raggedright}% + \fi% +% \end{macrocode} +% Die Einstellungen für die Kapitel. Auch hier werden alle relevanten Befehle +% gesichert, damit diese wiederhergestellt werden können. Verständlicherweise +% fällt für die \cls{tudscrartcl}-Klasse der Anteil für die Kapitel weg. +% \begin{macrocode} +%<*book|report> + \ifcase\tud@cd@chapter@num\relax% false + \tud@cs@restore{scr@chapter@beforeskip}% + \tud@cs@restore{scr@chapter@innerskip}% + \tud@cs@restore{scr@chapter@afterskip}% + \tud@cs@restore{chapterheadstartvskip}% + \tud@cs@restore{chapterlineswithprefixformat}% + \tud@cs@restore{chapterlinesformat}% + \tud@cs@restore{tud@chapter@before@hook}% + \tud@cs@restore{tud@chapter@after@hook}% + \tud@komafont@unset{chapter}% + \tud@komafont@unset{chapterprefix}% + \tud@cs@restore{raggedchapter}% +% \end{macrocode} +% Auch hier werden die Standardbefehle für ein mögliches Deaktivieren der +% Optionen gesichert und anschließend geändert. Dabei erfolgt die Zuweisung der +% angepassten Befehle abermals über \cs{let}. +% \begin{macrocode} + \else% !false + \tud@cs@store{scr@chapter@beforeskip}% + \renewcommand*\scr@chapter@beforeskip{\tud@cd@beforeskip}% + \tud@cs@store{scr@chapter@innerskip}% + \renewcommand*\scr@chapter@innerskip{\tud@cd@innerskip}% + \tud@cs@store{scr@chapter@afterskip}% + \renewcommand*\scr@chapter@afterskip{\tud@cd@afterskip}% + \tud@cs@store{chapterheadstartvskip}% + \let\chapterheadstartvskip\tud@chapterheadstartvskip% + \tud@cs@store{chapterlineswithprefixformat}% + \let\chapterlineswithprefixformat\tud@chapterlineswithprefixformat% + \tud@cs@store{chapterlinesformat}% + \let\chapterlinesformat\tud@chapterlinesformat% + \tud@cs@store{tud@chapter@before@hook}% + \renewcommand*\tud@chapter@before@hook{\tud@chapter@pre}% + \tud@cs@store{tud@chapter@after@hook}% + \renewcommand*\tud@chapter@after@hook{\tud@chapter@app}% + \tud@komafont@set{chapter}{% + \tud@sec@fontface% + \tud@sec@fontsize% + \tud@color{\tud@chapter@fontcolor}% + }% + \tud@komafont@set{chapterprefix}{\usesizeofkomafont{partnumber}}% + \tud@cs@store{raggedchapter}% + \renewcommand*\raggedchapter{\tud@raggedright}% + \fi% +%</book|report> +% \end{macrocode} +% Die Einstellungen für die Abschnittsebene. Wiederum werden alle relevanten +% Befehle gesichert. +% \begin{macrocode} + \ifcase\tud@cd@section@num\relax% false + \tud@cs@restore{sectionlinesformat}% + \tud@cs@restore{sectioncatchphraseformat}% + \tud@komafont@unset{section}% + \tud@komafont@unset{subsection}% + \tud@komafont@unset{subsubsection}% + \tud@komafont@unset{paragraph}% + \tud@komafont@unset{subparagraph}% + \tud@cs@restore{raggedsection}% + \tud@cs@restore{minisec}% + \tud@komafont@unset{minisec}% + \else% !false + \tud@cs@store{sectionlinesformat}% + \let\sectionlinesformat\tud@sectionlinesformat% + \tud@cs@store{sectioncatchphraseformat}% + \let\sectioncatchphraseformat\tud@sectioncatchphraseformat% + \tud@komafont@set{section}{% + \tud@sec@fontface% + \tud@color{\tud@section@fontcolor}% + }% + \tud@komafont@set{subsection}{% + \tud@sec@fontface% + \tud@color{\tud@section@fontcolor}% + }% + \tud@komafont@set{subsubsection}{% + \tud@sec@fontface% + \tud@color{\tud@section@fontcolor}% + }% + \tud@komafont@set{paragraph}{% + \tud@color{\tud@section@fontcolor}% + }% + \tud@komafont@set{subparagraph}{% + \tud@color{\tud@section@fontcolor}% + }% + \tud@cs@store{raggedsection}% + \renewcommand*\raggedsection{\tud@raggedright}% + \tud@cs@store{minisec}% + \renewcommand\minisec[1]{% + \tud@cs@use{minisec}{\tud@sec@format{##1}}% + }% + \tud@komafont@set{minisec}{% + \tud@sec@fontface% + \ifcase\tud@cd@section@num\relax\or\else% *color + \ifstr{\tud@pagecolor}{HKS41}{}{\color{HKS41}}% + \fi% + }% + \fi% +% \end{macrocode} +% Für Poster wird außerdem der passende Seitenstil und die Ausprägung von Kopf +% und Fuß sowie die Schriftfarbe festgelegt. +% \begin{macrocode} +%<*poster> + \ifcase\tud@cd@num\relax% false + \pagestyle{empty}% + \color{black}% + \else% !false + \pagestyle{empty.tudheadings}% + \ifcase\tud@cd@num\relax\or% true + \tud@locked@num@preset{tud@head@bar@num}{0}% + \tud@locked@bool@preset{@tud@foot@colored}{false}% + \color{black}% + \or% litecolor + \tud@locked@num@preset{tud@head@bar@num}{1}% + \tud@locked@bool@preset{@tud@foot@colored}{false}% + \color{HKS41}% + \or% barcolor + \tud@locked@num@preset{tud@head@bar@num}{2}% + \tud@locked@bool@preset{@tud@foot@colored}{false}% + \color{HKS41}% + \else% bicolor/color/full + \tud@locked@num@preset{tud@head@bar@num}{3}% + \tud@locked@bool@preset{@tud@foot@colored}{true}% + \color{HKS41}% + \fi% + \fi% +%</poster> +} +% \end{macrocode} +% \end{macro}^^A \tud@cd@process +% \begin{macro}{\tud@cd@specialpage@set} +% \changes{v2.04}{2015/04/21}{neu}^^A +% \changes{v2.04d}{2016/03/26}{Bugfix für \cls{tudscrartcl}}^^A +% \begin{macro}{\tud@cd@specialpage@unset} +% \changes{v2.04}{2015/04/21}{neu}^^A +% Diese beiden Hilfsmakros werden für Titel- Teile und separate Kapitelseite +% benötigt, um die Fußnoten auf diesen speziellen Seiten in der gleichen Farbe +% wie den Rest der verwendeten Schriften zu setzen. +% \begin{macrocode} +%<*book|report|article> +\newcommand*\tud@cd@specialpage@set[1]{% + \tud@komafont@set{footnote}{% + \edef\@tempa{% + \noexpand\tud@color{% + \expandafter\noexpand\csname tud@#1@fontcolor\endcsname% + }% + }\@tempa% + }% + \tud@cs@store{footnoterule}% + \let\footnoterule\relax% +} +%</book|report|article> +%<*book|report> +\newcommand*\tud@cd@specialpage@unset{% + \tud@komafont@unset{footnote}% + \tud@cs@restore{footnoterule}% +} +%</book|report> +% \end{macrocode} +% \end{macro}^^A \tud@cd@specialpage@unset +% \end{macro}^^A \tud@cd@specialpage@set +% \begin{macro}{\tud@cd@headstartvskip} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@cd@vphantom} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@cd@beforeskip} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@cd@innerskip} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@cd@afterskip} +% \changes{v2.06}{2018/08/01}{neu}^^A +% Im \TUDCD werden sowohl Titel als auch Teil- und Kapitelüberschriften auf der +% gleichen Grundlinienhöhe gesetzt. Hierfür sind Anpassungen der entsprechenden +% Gliederungsbefehle notwendig. Insbesondere der vor den Überschriften gesetzte +% Abstand wird für gewöhnlich über die Befehle \cs{partheadstartvskip} bzw. +% \cs{chapterheadstartvskip} gesetzt. Um das Layout des \CDs umzusetzen, werden +% diese beiden Makros als Haken genutzt. +% +% Das Makro \cs{tud@cd@beforeskip} enthält den Abstand vor einer Überschrift, +% welcher über \cs{tud@cd@headstartvskip} gesetzt wird. Der Abstand zwischen +% der Nummerierung eines Teils und der eigentlichen Bezeichnung wird mit +% \cs{tud@cd@innerskip} definiert und durch \KOMAScript{} eingefügt. Gleiches +% gilt für eine separate Kapitelnummernzeile (\opt{chapterprefix}) und dem +% eigentlichen Kapiteltitel. Durch \cs{tud@cd@afterskip} wird der Abstand +% zwischen Titel und Fließtext respektive der unteren Prääambel definiert. +% Dieser Abstand ist abhängig von der gewählten Einstellung für \opt{headings}. +% \begin{macrocode} +\newcommand*\tud@cd@beforeskip{% + \dimexpr-\tud@len@areavskip-\tud@len@areaheadvskip\relax% +} +\newcommand*\tud@cd@innerskip{.25\baselineskip}% +\newcommand*\tud@cd@afterskip{% + .75\baselineskip \@plus .05\baselineskip \@minus .1\baselineskip% +} +\newcommand*\tud@cd@headstartvskip{% + \@tempskipa=\glueexpr\tud@cd@beforeskip\relax\relax% + \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\fi% + \null\vskip-\baselineskip\vskip\@tempskipa% +} +% \end{macrocode} +% Sollte keine Präfixzeile für Teile oder Kapitel verwendet werden, muss für +% die exakte Positionierung der Grundlinie des Titels der entsprechende Abstand +% eingefügt werden, wofür \cs{tud@cd@vphantom} genutzt wird. +% \begin{macrocode} +\newcommand*\tud@cd@vphantom{% + \begingroup% + \usekomafont{partnumber}{\nobreak\tud@sec@strut}% + \setlength\@tempskipa{\tud@cd@innerskip}% + \par\nobreak\vskip\@tempskipa% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \tud@cd@afterskip +% \end{macro}^^A \tud@cd@innerskip +% \end{macro}^^A \tud@cd@beforeskip +% \end{macro}^^A \tud@cd@vphantom +% \end{macro}^^A \tud@cd@headstartvskip +% +% \iffalse +%<*book|report> +% \fi +% +% \subsection{Positionierung und Formatierung von Überschriften} +% \subsubsection{Präambeln für Teile und Kapitel} +% +% \begin{macro}{\tud@preamble@fontcolor} +% \changes{v2.06}{2018/08/08}{neu}^^A +% Der Befehl wird innerhalb von \cs{set@@@@preamble} genutzt, um die notwendige +% Farbe des Textes zu aktivieren. +% \begin{macrocode} +\newcommand*\tud@preamble@fontcolor{} +% \end{macrocode} +% \end{macro}^^A \tud@preamble@fontcolor +% \begin{macro}{\tud@partpreamble} +% Um die \KOMAScript-Befehle für die Teilepräambel auch für das farbige Layout +% nutzen zu können, müssen diese leicht angepasst werden. Für die Präambeln wird +% die Überschrift einer Zusammenfassung ausschließlich zentriert und relativ +% klein gesetzt. Außerdem wird für eine mögliche Zusammenfassung die +% \opt{titlepage}-Option deaktiviert. Aufgerufen wird der Befehl durch die +% gepatchte Version von \cs{set@@@@preamble}. +% \begin{macrocode} +\newcommand*\tud@partpreamble{% +% \end{macrocode} +% Zunächst wird der unterschiedliche Abstand bei Teil- und Kapitelpräambeln +% ausgeglichen. +% \begin{macrocode} + \@tempskipa=\glueexpr\tud@cd@afterskip\relax% + \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\fi% + \vskip\@tempskipa% +% \end{macrocode} +% Anschließend folgen die Anpassungen für die Teilpräambel. +% \begin{macrocode} + \ifnum\tud@abstract@level@num>\@ne\relax% sec/chap + \renewcommand*\tud@abstract@level@num{1}% + \fi% + \KOMAoptions{titlepage=false}% + \null\vskip-\baselineskip% + \addtokomafont{disposition}{\tud@color{\tud@part@fontcolor}}% + \addtokomafont{dictum}{\tud@color{\tud@part@fontcolor}}% + \let\tud@preamble@fontcolor\tud@part@fontcolor% + \@afterindentfalse\@afterheading% +} +% \end{macrocode} +% \end{macro}^^A \tud@partpreamble +% \begin{macro}{\tud@chapterpreamble} +% Um die \KOMAScript-Befehle für die Kapitelpräambel auch für das farbige Layout +% nutzen zu können, müssen diese leicht angepasst werden. Für die Präambeln der +% Kapitel gilt das gleiche wie für die der Teileseiten. Auch hier erfolgt die +% Ausführung des Befehls durch die gepatchte Version von \cs{set@@@@preamble}. +% \begin{macrocode} +\newcommand*\tud@chapterpreamble{% + \ifnum\tud@abstract@level@num>\@ne\relax% sec/chap + \renewcommand*\tud@abstract@level@num{1}% + \fi% + \KOMAoptions{titlepage=false}% + \null\vskip-\baselineskip% +% \end{macrocode} +% Die Farb- und Schrifteinstellungen sind nur für reine Kapitelseiten notwendig. +% \begin{macrocode} + \if@tud@chapterpage% + \addtokomafont{disposition}{\tud@color{\tud@chapter@fontcolor}}% + \addtokomafont{dictum}{\tud@color{\tud@chapter@fontcolor}}% + \let\tud@preamble@fontcolor\tud@chapter@fontcolor% + \fi% + \@afterindentfalse\@afterheading% +} +% \end{macrocode} +% \end{macro}^^A \tud@chapterpreamble +% \begin{macro}{\set@@@@preamble} +% Die beiden Befehle für Präambeln aus \KOMAScript{} ignorieren in ihrer +% ursprünglichen Form die Einstellungen für \opt{parskip}. Dies wird mit diesem +% Patch beseitigt. Außerdem wird das Makro für die Layouteinstellungen für +% Teile (\cs{tud@partpreamble}) respektive Kapitel (\cs{tud@chapterpreamble}) +% aufgerufen. Für die Verwendung der \env{abstract}-Umgebung in den Präambeln +% wird außerdem der Befehl \cs{phantomsection} auf \cs{relax} gesetzt, um mit +% \cs{autoref} automatisch generierte Querverweise aus dem Paket \pkg{hyperref} +% nicht zu verändern. Alternativ zu \cs{let}\cs{@parboxrestore}\cs{relax} +% müsste innerhalb des Argumentes von \cs{parbox} die \KOMAScript-Option +% \opt{parskip} neu gesetzt werden. +% \begin{macrocode} +\CheckCommand\set@@@@preamble[6]{% + \expandafter\gdef\csname #1@preamble\endcsname{% + \hbox to\hsize{#4\parbox[{#2}]{#3}{#6\par}#5\par}% + }% +} +\patchcmd{\set@@@@preamble}{% + \hbox to\hsize{#4\parbox[{#2}]{#3}{#6\par}#5\par}% +}{% + \def\@tempa####1@####2{% + \@nameuse{tud@####1preamble}% + \tud@color{\tud@preamble@fontcolor}% + \KOMAoptionOf[\KOMAoption{parskip}]{\KOMAClassFileName}{parskip}% + }% + \hbox to\hsize{% + \let\phantomsection\relax% + #4\parbox[{#2}]{#3}{\@tempa#1#6\par\bigskip}#5\par% + }% +}{}{\tud@patch@wrn{set@@@@preamble}} +% \end{macrocode} +% \end{macro}^^A \set@@@@preamble +% +% \iffalse +%</book|report> +% \fi +% +% \subsubsection{Untertitel für Teile und Kapitel} +% Im Layout des \CDs können für Teile und Kapitel auch Untertitel angegeben +% werden. +% +% \begin{macro}{\setpartsubtitle} +% \changes{v2.06}{2018/08/20}{neu}^^A +% \begin{KOMAfont}{partsubtitle} +% \changes{v2.06}{2018/08/20}{neu}^^A +% \begin{KOMAfont}{parttitle} +% \begin{macro}{\tud@part@subtitle} +% \changes{v2.06}{2018/08/20}{neu}^^A +% Auf Anwenderebene können mit \cs{setpartsubtitle} und \cs{setchaptersubtitle} +% die gewünschten Untertitel angegegben werden. +% \begin{macrocode} +\newcommand*\tud@part@subtitle{} +\newcommand*\setpartsubtitle[1]{\gdef\tud@part@subtitle{#1}} +% \end{macrocode} +% Die Schriftelement für die Untertitel von Teilen. +% \begin{macrocode} +\newkomafont{partsubtitle}{% + \tud@thesis@fontsize% + \fontseries{\tud@cdfont@bf}\selectfont% + \tud@color{\tud@part@fontcolor}% +} +\aliaskomafont{parttitle}{partsubtitle} +% \end{macrocode} +% \end{macro}^^A \tud@part@subtitle +% \end{KOMAfont}^^A parttitle +% \end{KOMAfont}^^A partsubtitle +% \end{macro}^^A \setpartsubtitle +% \begin{macro}{\setchaptersubtitle} +% \changes{v2.06}{2018/08/20}{neu}^^A +% \begin{KOMAfont}{chaptersubtitle} +% \changes{v2.06}{2018/08/20}{neu}^^A +% \begin{macro}{\tud@chapter@subtitle} +% \changes{v2.06}{2018/08/20}{neu}^^A +% Das gleiche Spiel für Kapitel. +% \begin{macrocode} +%<*book|report> +\newcommand*\tud@chapter@subtitle{} +\newcommand*\setchaptersubtitle[1]{\gdef\tud@chapter@subtitle{#1}} +% \end{macrocode} +% Die Schriftelement für die Untertitel von Kapiteln. +% \begin{macrocode} +\newkomafont{chaptersubtitle}{% + \tud@thesis@fontsize% + \fontseries{\tud@cdfont@bf}\selectfont% + \tud@color{\tud@chapter@fontcolor}% +} +%</book|report> +% \end{macrocode} +% \end{macro}^^A \tud@chapter@subtitle +% \end{KOMAfont}^^A chaptersubtitle +% \end{macro}^^A \setchaptersubtitle +% \begin{macro}{\tud@sec@subtitle} +% \changes{v2.06}{2018/08/01}{neu}^^A +% Dieses Makro dient zur Umsetzung der Untertitel. +% \begin{macrocode} +\newcommand*\tud@sec@subtitle[1]{% + \ifcsvoid{tud@#1@subtitle}{}{% + {\usekomafont{#1subtitle}{\tud@sec@format{\csuse{tud@#1@subtitle}}}}\par% + \global\cslet{tud@#1@subtitle}{\@empty}% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@sec@subtitle +% +% +% \subsubsection{Umsetzung für Teile} +% +% \begin{macro}{\tud@partheadstartvskip} +% \begin{macro}{\partheadstartvskip} +% Dieses Makro ersetzt den Standardbefehl \cs{partheadstartvskip} für die +% CD-Teilseiten. Damit lassen sich insbesondere die Farbanpassungen für alle +% Klassen einfach realisieren und gleichzeitig das Zurückschalten auf das +% Standardverhalten gewährleisten. +% +% Für die \cls{tudscrartcl}-Klasse wird der vertikale Standardabstand +% beibehalten und lediglich die Farbanpassung hinzugefügt. +% \begin{macrocode} +%<*article|poster> +\newcommand*\tud@partheadstartvskip{} +\let\tud@partheadstartvskip\partheadstartvskip +\pretocmd{\tud@partheadstartvskip}{% + \renewcommand*\tud@part@fontcolor{}% false/true + \ifcase\tud@cd@part@num\relax\or\else% *color + \renewcommand*\tud@part@fontcolor{HKS41}% + \fi% +}{}{\tud@patch@wrn{tud@partheadstartvskip}} +%</article|poster> +% \end{macrocode} +% Für \cls{tudscrreprt}- und \cls{tudscrbook}-Klasse werden die Farben gesetzt +% und die vertikalen Abstände neu definiert. +% \begin{macrocode} +%<*book|report> +\newcommand*\tud@partheadstartvskip{% + \renewcommand*\tud@part@fontcolor{}% false/true + \ifcase\tud@cd@part@num\relax\or\or% litecolor + \renewcommand*\tud@part@fontcolor{HKS41}% + \or% barcolor + \renewcommand*\tud@part@fontcolor{HKS41}% + \or% bicolor + \renewcommand*\tud@part@fontcolor{HKS41}% + \or% color + \renewcommand*\tud@part@fontcolor{HKS41!30}% + \or% full + \renewcommand*\tud@part@fontcolor{HKS41!30}% + \fi% + \tud@cd@specialpage@set{part}% + \tud@cd@headstartvskip% + \TUD@deprecated@lengthcs{pageheadingsvskip}% + \vspace*{\tud@dim@pageheadingsvskip}% +} +%</book|report> +% \end{macrocode} +% \end{macro}^^A \partheadstartvskip +% \end{macro}^^A \tud@partheadstartvskip +% \begin{macro}{\tud@partheademptypage} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Hiermit wird die Seitenfarbe gesetzt sowie die Schrift für Kopf und +% Seitenzahl verändert. Die Änderungen sollen dabei lokal bleiben, wofür +% der Befehl \cs{tud@cleardoublespecialpage} verwendet wird. Damit wird +% abhängig von den beiden Optionen \opt{cleardoublespecialpage} und +% \opt{clearcolor} die Rückseite farbig gesetzt. +% \begin{macrocode} +%<*book|report> +\newcommand*\tud@partheademptypage{% + \tud@cleardoublespecialpage{% + \renewcommand*\tud@pagecolor{}% + \ifcase\tud@cd@part@num\relax\or% true + \tud@locked@num@preset{tud@head@bar@num}{0}% + \or% litecolor + \tud@locked@num@set{tud@head@bar@num}{1}% + \or% barcolor + \tud@locked@num@set{tud@head@bar@num}{2}% + \or% bicolor + \tud@locked@num@set{tud@head@bar@num}{3}% + \or% color + \renewcommand*\tud@pagecolor{HKS41}% + \tud@locked@num@set{tud@head@bar@num}{1}% + \or% full + \renewcommand*\tud@pagecolor{HKS41}% + \tud@locked@num@set{tud@head@bar@num}{3}% + \fi% + \clearpage% + }% + \tud@cd@specialpage@unset% +} +%</book|report> +% \end{macrocode} +% \end{macro}^^A \tud@partheademptypage +% \begin{macro}{\tud@partlineswithprefixformat} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@partformat} +% \changes{v2.06}{2018/08/01}{neu}^^A +% Die Formatierungsbefehle für die Überschriften von Teilen. +% \begin{macrocode} +\newcommand*\tud@partformat{}% +\newcommand*\tud@partlineswithprefixformat[3]{% +%<*book|report> + \if@tud@parttitle% + \ifx\@@title\@empty% + \ClassWarning{\TUD@Class@Name}{% + You activated the option `parttitle' but\MessageBreak% + no title was given% + }% + \fi% + \tud@cd@vphantom% + \tud@sec@format[#1]{% + \usekomafont{#1}{\nobreak\interlinepenalty \@M\@@title\strut\@@par}% + }% + \setpartsubtitle{% + \setkomafont{part}{}% + \tud@sec@format[partnumber]{\IfUseNumber{\partformat\enskip}{}#3}% + }% + \else% +%</book|report> + \edef\tud@partformat{\noexpand\tud@sec@format{\expandonce\partformat}}% + \let\partformat\tud@partformat% + \IfUseNumber{}{\tud@cd@vphantom}% + #2\tud@sec@format[#1]{#3}% +%<*book|report> + \fi% +%</book|report> + \tud@sec@subtitle{#1}% +} +% \end{macrocode} +% \end{macro}^^A \tud@partformat +% \end{macro}^^A \tud@partlineswithprefixformat +% +% \iffalse +%<*book|report> +% \fi +% +% \subsubsection{Umsetzung für Kapitel} +% +% \begin{macro}{\tud@chapterheadstartvskip} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \cs{chapterheadstartvskip} wird für die Position der Kapitelüberschriften im +% \CD angepasst. Mit der Option \opt{headingsvskip} kann diese vertikal durch +% den Benutzer verschoben werden. Außerdem werden die benötigten Farben für die +% jeweils gewählte Option ausgewählt. +% \begin{macrocode} +\newcommand*\tud@chapterheadstartvskip{% + \renewcommand*\tud@chapter@fontcolor{}% + \ifcase\tud@cd@chapter@num\relax\or\else% *color + \renewcommand*\tud@chapter@fontcolor{HKS41}% + \fi% + \tud@cd@headstartvskip% + \if@tud@chapterpage% + \TUD@deprecated@lengthcs{pageheadingsvskip}% + \vspace*{\tud@dim@pageheadingsvskip}% + \else% + \TUD@deprecated@lengthcs{headingsvskip}% + \vspace*{\tud@dim@headingsvskip}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@chapterheadstartvskip +% \begin{macro}{\tud@chapterlineswithprefixformat} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@chapterformat} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@chapterlinesformat} +% \changes{v2.06}{2018/08/01}{neu}^^A +% Die Formatierungsbefehle für die Überschriften von Kapiteln. +% \begin{macrocode} +\newcommand*\tud@chapterformat{}% +\newcommand*\tud@chapterlineswithprefixformat[3]{% + \edef\tud@chapterformat{% + \noexpand\tud@sec@format{\expandonce\chapterformat}% + }% + \let\chapterformat\tud@chapterformat% + \IfUseNumber{}{\tud@cd@vphantom}% + #2\tud@sec@format[#1]{#3}% + \tud@sec@subtitle{#1}% +} +\newcommand*\tud@chapterlinesformat[3]{% + \tud@cd@vphantom% + \@hangfrom{#2}{\tud@sec@format[#1]{#3}}% + \tud@sec@subtitle{#1}% +} +% \end{macrocode} +% \end{macro}^^A \tud@chapterlinesformat +% \end{macro}^^A \tud@chapterformat +% \end{macro}^^A \tud@chapterlineswithprefixformat +% \begin{macro}{\tud@chapter@pre} +% \begin{macro}{\tud@chapter@app} +% \begin{macro}{\tud@head@bar@restore} +% \changes{v2.04}{2015/04/01}{neu}^^A +% Diese Makros dienen zur Behandlung der Besonderheiten von Kapiteln. Dies gilt +% sowohl für normale Kapitelüberschriften als auch für separate Kapitelseiten +% (Option~\opt{chapterpage}). Eingefügt werden sie für die Gliederungsbefehle +% der Kapitel durch die beiden Haken \cs{tud@chapter@before@hook} sowie +% \cs{tud@chapter@after@hook}, den Start und das Ende der Gliederungsbefehle +% für Kapitel definieren. +% \begin{macrocode} +\newcommand*\tud@chapter@pre{% + \if@tud@chapterpage% +% \end{macrocode} +% Für den zweispaltigen Satz und aktivierter \opt{chapterpage}-Option muss +% für die Kapitelseiten temporär auf einseitigen Satz umgestellt werden, damit +% alle Befehle und Einstellungen beim Erzeugen des jeweiligen Kapitels zum +% Tragen kommen. Soll der Fehler behoben werden, dass bei Kapitelüberschriften +% im zweispaltigen Satz der Abstand zwischen Überschrift und Textkörper nicht +% stimmt, sei außerdem das Paket \pkg{twocolfix} empfohlen. +% \begin{macrocode} + \@restonecolfalse% + \if@twocolumn\@restonecoltrue\onecolumn\fi% + \tud@cd@specialpage@set{chapter}% + \fi% +} +% \end{macrocode} +% Unabhängig von der Nutzung einer Kapitelseite, wird die Einstellung der +% Option \opt{cdchapter} für die Gestalt des TUD-Kopfes beachtet, falls dieser +% zum Einsatz kommt. +% \begin{macrocode} +\newcommand*\tud@head@bar@restore{} +\let\tud@head@bar@restore\relax +\newcommand*\tud@chapter@app{% +% \end{macrocode} +% Nach dem Setzen der Kapitelüberschrift selbst werden die Farbe für den +% Hintergrund, die Seitenzahl und den ggf. verwendeten TUD-Kopf angewendet. +% Danach wird die Seite beendet. Sollte zweiseitiger Satz, immer rechts +% öffnende Kapitel und die Option \opt{chapterpage} gewählt sein, so wird für +% ein konsistentes Layout für Überschriften auf Einzelseiten die Rückseite +% abhängig von der Option \opt{clearcolor} gegebenenfalls farbig gesetzt und +% die Option \opt{cleardoublespecialpage} bezüglich des Seitenstils der +% Rückseite beachtet. Umgesetzt wird dies mit \cs{tud@cleardoublespecialpage}. +% \begin{macrocode} + \if@tud@chapterpage% + \tud@cleardoublespecialpage{% + \renewcommand*\tud@pagecolor{}% + \let\tud@foot@fontcolor\tud@chapter@fontcolor% + \ifcase\tud@cd@chapter@num\relax\or% true + \tud@locked@num@preset{tud@head@bar@num}{0}% + \or% litecolor + \tud@locked@num@set{tud@head@bar@num}{1}% + \or% barcolor + \tud@locked@num@set{tud@head@bar@num}{2}% + \or% bicolor + \tud@locked@num@set{tud@head@bar@num}{3}% + \or% color + \renewcommand*\tud@pagecolor{HKS41!10}% + \tud@locked@num@set{tud@head@bar@num}{1}% + \or% fullcolor + \renewcommand*\tud@pagecolor{HKS41!10}% + \tud@locked@num@set{tud@head@bar@num}{3}% + \fi% + \clearpage% + }% + \tud@cd@specialpage@unset% +% \end{macrocode} +% Außerdem wird für den Zweispaltensatz auf normales Verhalten zurückgestellt. +% \begin{macrocode} + \if@restonecol\twocolumn\fi% +% \end{macrocode} +% Sollten keine reinen Kapitelseiten verwendet werden, wird die Einstellung für +% die Gestalt des Seitenkopfes im restlichen Dokument (\cs{tud@head@bar@num}) +% in \cs{tud@head@bar@restore} gesichert. Dieser Befehl wird beim Ausführen der +% Ebene \pgs{tudheadings.last} aufgerufen, wodurch der geischerte Wert ab der +% darauffolgenden Seite wiederhergestellt wird. +% \begin{macrocode} + \else% + \edef\tud@head@bar@restore{% + \gdef\noexpand\tud@head@bar@num{\tud@head@bar@num}% + \global\let\noexpand\tud@head@bar@restore\relax% + }% + \ifcase\tud@cd@chapter@num\relax\or% true + \tud@locked@num@preset{tud@head@bar@num}{0}% + \or% litecolor + \tud@locked@num@set{tud@head@bar@num}{1}% + \or% barcolor + \tud@locked@num@set{tud@head@bar@num}{2}% + \or% bicolor + \tud@locked@num@set{tud@head@bar@num}{3}% + \or% color + \tud@locked@num@set{tud@head@bar@num}{1}% + \or% fullcolor + \tud@locked@num@set{tud@head@bar@num}{3}% + \fi% +% \end{macrocode} +% Im Kompatibilitätsmodus muss genügend zusätzlicher Freiraum für ein ggf. +% auszugebendes \DDC-Logo gelassen werden. +% \begin{macrocode} + \tud@if@v@lower{2.03}{\tud@ddc@enlargepage[\chapterpagestyle]}{}% + \fi% +% \end{macrocode} +% Unabhängig von der Option \opt{chapterpage} wird deim zweispaltigen Layout +% der Einzug des ersten Absatzes verhindert. +% \begin{macrocode} + \if@twocolumn% + \@afterindentfalse\@afterheading% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@head@bar@restore +% \end{macro}^^A \tud@chapter@pre +% \end{macro}^^A \tud@chapter@app +% \begin{macro}{\tud@chapter@before@hook} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@chapter@after@hook} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\scr@startchapter} +% \begin{macro}{\scr@@startchapter} +% \begin{macro}{\scr@@startschapter} +% Die beiden Haken \cs{tud@chapter@before@hook} und \cs{tud@chapter@after@hook} +% werden den \KOMAScript-Befehlen hinzugefügt, welche den Start und das Ende +% der Gliederungsbefehle für Kapitel definieren. +% \begin{macrocode} +\newcommand*\tud@chapter@before@hook{} +\newcommand*\tud@chapter@after@hook{} +\pretocmd{\scr@startchapter}{% + \tud@chapter@before@hook% +}{}{\tud@patch@wrn{scr@startchapter}} +\apptocmd{\scr@@startchapter}{% + \tud@chapter@after@hook% +}{}{\tud@patch@wrn{scr@@startchapter}} +\apptocmd{\scr@@startschapter}{% + \tud@chapter@after@hook% +}{}{\tud@patch@wrn{scr@@startschapter}} +% \end{macrocode} +% \end{macro}^^A \scr@@startschapter +% \end{macro}^^A \scr@@startchapter +% \end{macro}^^A \scr@startchapter +% \end{macro}^^A \tud@chapter@after@hook +% \end{macro}^^A \tud@chapter@before@hook +% +% \iffalse +%</book|report> +% \fi +% +% \subsubsection{Umsetzung für Abschnitte etc.} +% +% Die Farbwahl wird einfach in dem von \KOMAScript{} bereitgestellten Haken +% zu Beginn einer Abschnittsüberschrift ausgeführt. +% \begin{macrocode} +\At@startsection{% + \renewcommand*\tud@section@fontcolor{}% + \ifcase\tud@cd@section@num\relax\or\else% *color + \ifstr{\tud@pagecolor}{HKS41}{}{% + \renewcommand*\tud@section@fontcolor{HKS41}% + }% + \fi% +} +% \end{macrocode} +% \begin{macro}{\tud@sectionlinesformat} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@sectioncatchphraseformat} +% \changes{v2.06}{2018/08/01}{neu}^^A +% Die Formatierungsbefehle für die Überschriften von Abschnitten etc. +% \begin{macrocode} +\newcommand*\tud@sectionlinesformat[4]{% + \@hangfrom{\hskip #2#3}{\tud@sec@format[#1]{#4}}% +} +% \end{macrocode} +% Für Überschriften mit Einzug wird \cs{tud@sec@strut} wirkungslos definiert. +% \begin{macrocode} +\newcommand*\tud@sectioncatchphraseformat[4]{% + \let\tud@sec@strut\relax% + \hskip #2#3\tud@sec@format[#1]{#4}% +} +% \end{macrocode} +% \end{macro}^^A \tud@sectioncatchphraseformat +% \end{macro}^^A \tud@sectionlinesformat +% +% \iffalse +%</class&body> +% \fi +% +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-localization.dtx b/macros/latex/contrib/tudscr/source/tudscr-localization.dtx new file mode 100644 index 0000000000..954773033b --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-localization.dtx @@ -0,0 +1,1006 @@ +% \CheckSum{774} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-localization.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-localization.dtx}[2019/07/19 v2.06c TUD-Script\space% + (localization)% +] +% +% \iffalse +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-localization.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.02}{2014/06/23}{Paket \pkg{titlepage} nicht weiter unterstützt}^^A +% \changes{v2.05}{2015/07/06}{Bezeichner für Poster}^^A +% +% \section{Lokalisierung mithilfe sprachabhängiger Bezeichner} +% +% Das \TUDScript-Bundle ist für die deutsche und englische Sprache lokalisiert. +% Dies bedeutet, dass abhängig von der gewählten Sprache die entsprechenden +% Bezeichner gesetzt werden. Hierfür werden die Möglichkeiten von \KOMAScript{} +% in Form des Befehls \cs{providecaptionname} genutzt. +% +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \subsection{Definition der sprachabhängigen Bezeichner} +% +% \begin{macro}{\tud@localization@define} +% +% \iffalse +%<*class&!manual> +% \fi +% +% Die neu definierten Bezeichner werden mit einer Fehlermeldung initialisiert. +% Wird eine unterstützte Dokumentsprache~-- momentan sind dies lediglich +% Deutsch und Englisch~-- in der Präambel des Dokumentes geladen, so werden die +% Bezeichner sprachspezifisch überschrieben. Andernfalls bekommt der Anwender +% eine Fehlermeldung mit Hinweisen, wie er selbst die Bezeichner für die +% gewählte Sprache manuell definieren muss. +% \begin{macrocode} +\newcommand*\tud@localization@define[1]{% + \providecommand*#1{% + \ClassError{\TUD@Class@Name}{% + `\string#1' not defined for language `\languagename'% + }{% + Currently the class `\TUD@Class@Name' only supports the\MessageBreak% + languages german and english an its dialects. You must\MessageBreak% + define single patterns by yourself, e.g.:\MessageBreak% + `\string\providecaptionname{\languagename}\string#1{<text>}'\MessageBreak% + You can send your definitions to \tudscrmail\space in\MessageBreak% + order to implement support for additional languages.% + }% + }% +} +% \end{macrocode} +% +% \iffalse +%<*!doc> +%<*book|report|article> +% \fi +% +% \begin{localization}{\graduationtext} +% \changes{v2.02}{2014/05/16}{neu, umbenannt von \cs{degreetext}}^^A +% \begin{localization}{\refereename} +% \changes{v2.02}{2014/05/20}{Unterscheidung, ob ein oder mehrere Gutachter +% angegeben sind}^^A +% \begin{localization}{\refereeothername} +% \begin{localization}{\advisorname} +% \begin{localization}{\advisorothername} +% \begin{localization}{\supervisorname} +% \begin{localization}{\supervisorothername} +% \begin{localization}{\professorname} +% \begin{localization}{\professorothername} +% \changes{v2.02}{2014/09/03}{neu}^^A +% \begin{localization}{\datetext} +% \begin{localization}{\dateofbirthtext} +% \begin{localization}{\placeofbirthtext} +% \begin{localization}{\defensedatetext} +% \begin{localization}{\matriculationnumbername} +% \begin{localization}{\matriculationyearname} +% \begin{localization}{\coverpagename} +% \begin{localization}{\titlepagename} +% \begin{localization}{\titlename} +% \begin{localization}{\abstractname} +% \begin{localization}{\confirmationname} +% \begin{localization}{\confirmationtext} +% \changes{v2.02}{2014/11/05}{Korrektur bei der Verwendung von \cs{@@title}}^^A +% \begin{localization}{\blockingname} +% \changes{v2.02}{2014/05/16}{neu, \cs{restrictionname} umbenannt}^^A +% \begin{localization}{\blockingtext} +% \changes{v2.02}{2014/05/16}{neu, \cs{restrictiontext} umbenannt}^^A +% \changes{v2.02}{2014/11/05}{Korrektur bei der Verwendung von \cs{@@title}}^^A +% Diese Bezeichner existieren nur für die drei Hauptklassen. +% \begin{macrocode} +\tud@localization@define{\graduationtext} +\tud@localization@define{\refereename} +\tud@localization@define{\refereeothername} +\tud@localization@define{\advisorname} +\tud@localization@define{\advisorothername} +\tud@localization@define{\supervisorname} +\tud@localization@define{\supervisorothername} +\tud@localization@define{\professorname} +\tud@localization@define{\professorothername} +\tud@localization@define{\datetext} +\tud@localization@define{\dateofbirthtext} +\tud@localization@define{\placeofbirthtext} +\tud@localization@define{\defensedatetext} +\tud@localization@define{\matriculationyearname} +\tud@localization@define{\matriculationnumbername} +\tud@localization@define{\coverpagename} +\tud@localization@define{\titlepagename} +\tud@localization@define{\titlename} +%<*book> +\tud@localization@define{\abstractname} +%</book> +\tud@localization@define{\confirmationname} +\tud@localization@define{\confirmationtext} +\tud@localization@define{\blockingname} +\tud@localization@define{\blockingtext} +% \end{macrocode} +% \end{localization}^^A \blockingtext +% \end{localization}^^A \blockingname +% \end{localization}^^A \confirmationtext +% \end{localization}^^A \confirmationname +% \end{localization}^^A \abstractname +% \end{localization}^^A \titlename +% \end{localization}^^A \titlepagename +% \end{localization}^^A \coverpagename +% \end{localization}^^A \matriculationyearname +% \end{localization}^^A \matriculationnumbername +% \end{localization}^^A \defensedatetext +% \end{localization}^^A \placeofbirthtext +% \end{localization}^^A \dateofbirthtext +% \end{localization}^^A \datetext +% \end{localization}^^A \professorothername +% \end{localization}^^A \professorname +% \end{localization}^^A \supervisorothername +% \end{localization}^^A \supervisorname +% \end{localization}^^A \advisorothername +% \end{localization}^^A \advisorname +% \end{localization}^^A \refereeothername +% \end{localization}^^A \refereename +% \end{localization}^^A \graduationtext +% +% \iffalse +%</book|report|article> +% \fi +% +% \begin{localization}{\coursename} +% \begin{localization}{\disciplinename} +% \changes{v2.02}{2014/05/16}{neu, Umbenennung von \cs{branchname}}^^A +% \begin{localization}{\listingname} +% \begin{localization}{\listlistingname} +% \begin{localization}{\dissertationname} +% \begin{localization}{\diplomathesisname} +% \begin{localization}{\masterthesisname} +% \begin{localization}{\bachelorthesisname} +% \begin{localization}{\studentthesisname} +% \begin{localization}{\studentresearchname} +% \begin{localization}{\projectpapername} +% \begin{localization}{\seminarpapername} +% \begin{localization}{\termpapername} +% \begin{localization}{\researchname} +% \begin{localization}{\logname} +% \begin{localization}{\internshipname} +% \begin{localization}{\reportname} +% Diese Bezeichner stehen zusätzlich auch für \cls{tudscrposter} zur Verfügung. +% \begin{macrocode} +\tud@localization@define{\coursename} +\tud@localization@define{\disciplinename} +\tud@localization@define{\listingname} +\tud@localization@define{\listlistingname} +\tud@localization@define{\dissertationname} +\tud@localization@define{\diplomathesisname} +\tud@localization@define{\masterthesisname} +\tud@localization@define{\bachelorthesisname} +\tud@localization@define{\studentthesisname} +\tud@localization@define{\studentresearchname} +\tud@localization@define{\projectpapername} +\tud@localization@define{\seminarpapername} +\tud@localization@define{\termpapername} +\tud@localization@define{\researchname} +\tud@localization@define{\logname} +\tud@localization@define{\internshipname} +\tud@localization@define{\reportname} +% \end{macrocode} +% \end{localization}^^A \reportname +% \end{localization}^^A \internshipname +% \end{localization}^^A \logname +% \end{localization}^^A \researchname +% \end{localization}^^A \termpapername +% \end{localization}^^A \seminarpapername +% \end{localization}^^A \projectpapername +% \end{localization}^^A \studentresearchname +% \end{localization}^^A \studentthesisname +% \end{localization}^^A \bachelorthesisname +% \end{localization}^^A \masterthesisname +% \end{localization}^^A \diplomathesisname +% \end{localization}^^A \dissertationname +% \end{localization}^^A \listlistingname +% \end{localization}^^A \listingname +% \end{localization}^^A \disciplinename +% \end{localization}^^A \coursename +% +% \iffalse +%</!doc> +%</class&!manual> +%<*class&poster|package&supervisor|class&manual> +% \fi +% +% \begin{localization}{\authorname} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \begin{localization}{\contactname} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \begin{localization}{\contactpersonname} +% Diese Bezeichner stehen für \cls{tudscrposter} sowie \pkg{tudscrsupervisor} +% bereit. +% \begin{macrocode} +\tud@localization@define{\authorname} +\tud@localization@define{\contactname} +\tud@localization@define{\contactpersonname} +% \end{macrocode} +% \end{localization}^^A \contactpersonname +% \end{localization}^^A \contactname +% \end{localization}^^A \authorname +% +% \iffalse +%</class&poster|package&supervisor|class&manual> +%<*package&supervisor|class&manual> +% \fi +% +% \begin{localization}{\taskname} +% \begin{localization}{\tasktext} +% \begin{localization}{\namesname} +% \changes{v2.04}{2015/05/06}{neu, Umbenennung von \cs{authorname}}^^A +% \begin{localization}{\issuedatetext} +% \begin{localization}{\duedatetext} +% \begin{localization}{\chairmanname} +% \begin{localization}{\focusname} +% \begin{localization}{\objectivesname} +% \begin{localization}{\evaluationname} +% \begin{localization}{\evaluationtext} +% \begin{localization}{\contentname} +% \begin{localization}{\assessmentname} +% \begin{localization}{\gradetext} +% \begin{localization}{\noticename} +% \changes{v2.02}{2014/05/16}{neu, umbenannt von \cs{contactname}}^^A +% Die für das Paket \pkg{tudscrsupervisor} definierten Bezeichner werden durch +% das Makro \cs{tud@localization@define} mit einer Fehlermeldung initialisiert. +% \begin{macrocode} +\tud@localization@define{\taskname} +\tud@localization@define{\tasktext} +\tud@localization@define{\namesname} +\tud@localization@define{\issuedatetext} +\tud@localization@define{\duedatetext} +\tud@localization@define{\chairmanname} +\tud@localization@define{\focusname} +\tud@localization@define{\objectivesname} +\tud@localization@define{\evaluationname} +\tud@localization@define{\evaluationtext} +\tud@localization@define{\contentname} +\tud@localization@define{\assessmentname} +\tud@localization@define{\gradetext} +\tud@localization@define{\noticename} +% \end{macrocode} +% \end{localization}^^A \noticename +% \end{localization}^^A \gradetext +% \end{localization}^^A \assessmentname +% \end{localization}^^A \contentname +% \end{localization}^^A \evaluationtext +% \end{localization}^^A \evaluationname +% \end{localization}^^A \objectivesname +% \end{localization}^^A \focusname +% \end{localization}^^A \chairmanname +% \end{localization}^^A \duedatetext +% \end{localization}^^A \issuedatetext +% \end{localization}^^A \namesname +% \end{localization}^^A \tasktext +% \end{localization}^^A \taskname +% +% \iffalse +%</package&supervisor|class&manual> +%<*class&doc> +% \fi +% +% \begin{localization}{\tud@general@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@implementation@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@changes@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@todo@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@environment@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@environments@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@option@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@options@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@layerpagestyle@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@layerpagestyles@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@layer@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@layers@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@length@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@lengths@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@counter@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@counters@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@TUDcolor@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@TUDcolors@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@localization@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@localizations@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@field@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@fields@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@KOMAfont@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@KOMAfonts@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@parameter@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@parameters@name} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% \begin{localization}{\tud@index@text} +% \changes{v2.05g}{2016/11/02}{neu}^^A +% Diese Bezeichner werden von der Klasse \cls{tudscrdoc} genutzt. +% \begin{macrocode} +\tud@localization@define{\tud@general@name} +\tud@localization@define{\tud@implementation@name} +\tud@localization@define{\tud@changes@name} +\tud@localization@define{\tud@todo@name} +\tud@localization@define{\tud@environment@name} +\tud@localization@define{\tud@environments@name} +\tud@localization@define{\tud@option@name} +\tud@localization@define{\tud@options@name} +\tud@localization@define{\tud@layerpagestyle@name} +\tud@localization@define{\tud@layerpagestyles@name} +\tud@localization@define{\tud@layer@name} +\tud@localization@define{\tud@layers@name} +\tud@localization@define{\tud@length@name} +\tud@localization@define{\tud@lengths@name} +\tud@localization@define{\tud@counter@name} +\tud@localization@define{\tud@counters@name} +\tud@localization@define{\tud@TUDcolor@name} +\tud@localization@define{\tud@TUDcolors@name} +\tud@localization@define{\tud@localization@name} +\tud@localization@define{\tud@localizations@name} +\tud@localization@define{\tud@field@name} +\tud@localization@define{\tud@fields@name} +\tud@localization@define{\tud@KOMAfont@name} +\tud@localization@define{\tud@KOMAfonts@name} +\tud@localization@define{\tud@parameter@name} +\tud@localization@define{\tud@parameters@name} +\tud@localization@define{\tud@index@text} +% \end{macrocode} +% \end{localization}^^A \tud@index@text +% \end{localization}^^A \tud@parameters@name +% \end{localization}^^A \tud@parameter@name +% \end{localization}^^A \tud@KOMAfonts@name +% \end{localization}^^A \tud@KOMAfont@name +% \end{localization}^^A \tud@fields@name +% \end{localization}^^A \tud@field@name +% \end{localization}^^A \tud@localizations@name +% \end{localization}^^A \tud@localization@name +% \end{localization}^^A \tud@TUDcolors@name +% \end{localization}^^A \tud@TUDcolor@name +% \end{localization}^^A \tud@counters@name +% \end{localization}^^A \tud@counter@name +% \end{localization}^^A \tud@lengths@name +% \end{localization}^^A \tud@length@name +% \end{localization}^^A \tud@layers@name +% \end{localization}^^A \tud@layer@name +% \end{localization}^^A \tud@layerpagestyles@name +% \end{localization}^^A \tud@layerpagestyle@name +% \end{localization}^^A \tud@options@name +% \end{localization}^^A \tud@option@name +% \end{localization}^^A \tud@environments@name +% \end{localization}^^A \tud@environment@name +% \end{localization}^^A \tud@todo@name +% \end{localization}^^A \tud@changes@name +% \end{localization}^^A \tud@implementation@name +% \end{localization}^^A \tud@general@name +% +% \iffalse +%</class&doc> +% \fi +% +% \end{macro}^^A \tud@localization@define +% +% \iffalse +%<*class&!(manual|doc)> +% \fi +% +% \subsection{Hilfsmakros für selektive Bezeichner} +% +% Einige Bezeichner verhalten sich je nach der Angabe für einzelne Felder +% selektiv, die zur Auswahl notwendigen Makros werden hier definiert. +% +% \begin{macro}{\tud@ifin@and} +% \changes{v2.05}{2015/08/05}{neu}^^A +% Dieser Befehl prüft, ob innerhalb eines Feldes, welches im ersten Argument +% angegeben werden muss, \cs{and} verwendet wurde. Ist dies der Fall, wird das +% zweite Argument ausgeführt, andernfalls das dritte. +% \begin{macrocode} +\newcommand*\tud@ifin@and[1]{% + \begingroup% + \let\and\relax% + \robustify\\% + \protected@edef\@tempb{#1}% + \def\@tempa##1\and##2\relax{% + \IfArgIsEmpty{##2}{% + \aftergroup\@secondoftwo% + }{% + \aftergroup\@firstoftwo% + }% + }% + \expandafter\@tempa\@tempb\and\relax% + \endgroup +} +% \end{macrocode} +% \end{macro}^^A \tud@ifin@and +% +% \iffalse +%</class&!(manual|doc)> +%<*class&!manual> +% \fi +% +% \subsection{Deutschsprachige Bezeichner} +% \begin{macro}{\tud@localization@german} +% \changes{v2.02}{2014/07/07}{als Aliasbefehl für \cs{providecaptionname} mit +% dem Argument \marg{deutsche Sprachliste}}^^A +% Dieser Befehl dient zur Definition der deutschsprachigen Bezeichner. Dabei +% müssen als Argumente der Bezeichnerbefehl selbst sowie die dazugehörige +% Definition angegeben werden. Intern wird dabei \cs{providecaptionname} +% verwendet. +% \begin{macrocode} +\newcommand*\tud@localization@german{% + \providecaptionname{% + german,ngerman,austrian,naustrian,swissgerman,nswissgerman% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@localization@german +% +% \iffalse +%<*!doc> +% \fi +% +% Hier erfolgt die eigentliche Definition der sprachabhängigen Bezeichner für +% die deutsche Sprache und ihre Dialekte. +% \begin{macrocode} +%<*book|report|article> +\tud@localization@german{\graduationtext}{% + zur Erlangung des akademischen Grades% +}% +% \end{macrocode} +% Für die nachfolgenden Felder, für die es bedarfsweise einen Bezeichner für +% eine zweite Person gibt (\cs{\dots{}othername}), werden jeweils verschiedene +% Varianten definiert. Existiert in einem Feld nur eine Person, wird der +% Singular der Bezeichnung verwendet. Wurden mindestens zwei Personen angegeben +% (\cs{and}), so wird geprüft, ob der Bezeichner für die zusätzlichen Personen +% nicht leer ist. Ist dies der Fall, wird die alternative Form des Bezeichners +% der ersten Person verwendet, andernfalls wird der Bezeichner im Plural +% verwendet. +% \begin{macrocode} +\tud@localization@german{\refereename}{% + \tud@ifin@and{\@referee}{% + \ifx\refereeothername\@empty% + Gutachter% + \else% + Erstgutachter% + \fi% + }{Gutachter}% +}% +\tud@localization@german{\refereeothername}{Zweitgutachter}% +\tud@localization@german{\advisorname}{% + \tud@ifin@and{\@advisor}{% + \ifx\advisorothername\@empty% + Fachreferenten% + \else% + Erster Fachreferent% + \fi% + }{Fachreferent}% +}% +\tud@localization@german{\advisorothername}{}% +\tud@localization@german{\supervisorname}{% + \tud@ifin@and{\@supervisor}{% + \ifx\supervisorothername\@empty% + Betreuer% + \else% + Erstbetreuer% + \fi% + }{Betreuer}% +}% +\tud@localization@german{\supervisorothername}{}% +\tud@localization@german{\professorname}{% + \tud@ifin@and{\@professor}{% + \ifx\professorothername\@empty% + Betreuende Hochschullehrer% + \else% + Erster betreuender Hochschullehrer% + \fi% + }{Betreuender Hochschullehrer}% +}% +\tud@localization@german{\professorothername}{}% +\tud@localization@german{\datetext}{Eingereicht am}% +\tud@localization@german{\dateofbirthtext}{Geboren am}% +\tud@localization@german{\placeofbirthtext}{in}% +\tud@localization@german{\defensedatetext}{Verteidigt am}% +\tud@localization@german{\matriculationyearname}{Immatrikulationsjahr}% +\tud@localization@german{\matriculationnumbername}{Matrikelnummer}% +\tud@localization@german{\coverpagename}{Umschlagseite}% +\tud@localization@german{\titlepagename}{Titelblatt}% +\tud@localization@german{\titlename}{Titel}% +%<*book> +\tud@localization@german{\abstractname}{Zusammenfassung}% +%</book> +\tud@localization@german{\confirmationname}{Selbstst\"andigkeitserkl\"arung}% +\tud@localization@german{\confirmationtext}{% + Hiermit versichere ich, dass ich die vorliegende Arbeit + \ifx\@@title\@empty\else mit dem Titel \emph{\@@title} \fi + selbstst\"andig und ohne unzul\"assige Hilfe Dritter verfasst habe. + Es wurden keine anderen als die in der Arbeit angegebenen Hilfsmittel + und Quellen benutzt. Die w\"ortlichen und sinngem\"a\ss{} + \"ubernommenen Zitate habe ich als solche kenntlich gemacht. + \ifx\@supporter\@empty% + Es waren keine weiteren Personen an der geistigen Herstellung + der vorliegenden Arbeit beteiligt. + \else% + W\"ahrend der Anfertigung dieser Arbeit wurde ich nur von + folgenden Personen unterst\"utzt:% + \begin{quote}\def\and{\newline}\@supporter\end{quote}% + \noindent Weitere Personen waren an der geistigen Herstellung + der vorliegenden Arbeit nicht beteiligt. + \fi% + Mir ist bekannt, dass die Nichteinhaltung dieser Erkl\"arung zum + nachtr\"aglichen Entzug des Hochschulabschlusses f\"uhren kann.% +}% +\tud@localization@german{\blockingname}{Sperrvermerk}% +\tud@localization@german{\blockingtext}{% + Diese Arbeit + \ifx\@@title\@empty\else mit dem Titel \emph{\@@title} \fi + enth\"alt vertrauliche Informationen\ifx\@company\@empty\else + , offengelegt durch \emph{\@company}\fi. Ver\"offentlichungen, + Vervielf\"altigungen und Einsichtnahme~-- auch nur auszugsweise~-- + sind ohne ausdr\"uckliche Genehmigung \ifx\@company\@empty\else + durch \emph{\@company} \fi nicht gestattet, ebenso wie + Ver\"offentlichungen \"uber den Inhalt dieser Arbeit. Die + vorliegende Arbeit ist nur dem Betreuer an der Technischen + Universit\"at Dresden, den Gutachtern sowie den Mitgliedern + des Pr\"ufungsausschusses zug\"anglich zu machen.% +}% +%</book|report|article> +\tud@localization@german{\coursename}{Studiengang}% +\tud@localization@german{\disciplinename}{Studienrichtung}% +\tud@localization@german{\listingname}{Quelltext}% +\tud@localization@german{\listlistingname}{Quelltextverzeichnis}% +\tud@localization@german{\dissertationname}{Dissertation}% +\tud@localization@german{\diplomathesisname}{Diplomarbeit}% +\tud@localization@german{\masterthesisname}{Master-Arbeit}% +\tud@localization@german{\bachelorthesisname}{Bachelor-Arbeit}% +\tud@localization@german{\studentthesisname}{Studienarbeit}% +\tud@localization@german{\studentresearchname}{Gro\ss{}er Beleg}% +\tud@localization@german{\projectpapername}{Projektarbeit}% +\tud@localization@german{\seminarpapername}{Seminararbeit}% +\tud@localization@german{\termpapername}{Hausarbeit}% +\tud@localization@german{\researchname}{Forschungsbericht}% +\tud@localization@german{\logname}{Protokoll}% +\tud@localization@german{\internshipname}{Praktikumsbericht}% +\tud@localization@german{\reportname}{Bericht}% +% \end{macrocode} +% +% \iffalse +%</!doc> +%</class&!manual> +%<*class&poster|package&supervisor|class&manual> +% \fi +% +% Hier erfolgen für die Klasse \cls{tudscrposter} sowie das Paket +% \pkg{tudscrsupervisor} weitere Definitionen. +% \begin{macrocode} +\tud@localization@german{\authorname}{Autor}% +\tud@localization@german{\contactname}{Kontakt}% +\tud@localization@german{\contactpersonname}{Ansprechpartner}% +% \end{macrocode} +% +% \iffalse +%</class&poster|package&supervisor|class&manual> +%<*package&supervisor|class&manual> +% \fi +% +% Hier erfolgen für das Paket \pkg{tudscrsupervisor} weitere Definitionen. +% \begin{macrocode} +\tud@localization@german{\taskname}{Aufgabenstellung}% +\tud@localization@german{\tasktext}{f\"ur die Anfertigung einer}% +\tud@localization@german{\namesname}{Name}% +\tud@localization@german{\issuedatetext}{Ausgeh\"andigt am}% +\tud@localization@german{\duedatetext}{Einzureichen am}% +\tud@localization@german{\chairmanname}{Pr\"ufungsausschussvorsitzender}% +\tud@localization@german{\focusname}{Schwerpunkte der Arbeit}% +\tud@localization@german{\objectivesname}{Ziele der Arbeit}% +\tud@localization@german{\evaluationname}{Gutachten}% +\tud@localization@german{\evaluationtext}{f\"ur die}% +\tud@localization@german{\contentname}{Inhalt}% +\tud@localization@german{\assessmentname}{Bewertung}% +\tud@localization@german{\gradetext}{% + Die Arbeit wird mit der Note \textbf{\@grade} bewertet.% +}% +\tud@localization@german{\noticename}{Aushang}% +% \end{macrocode} +% +% \iffalse +%</package&supervisor|class&manual> +%<*class&doc> +% \fi +% +% Dies sind die Bezeichner für die Quelltextdokumentation. +% \begin{macrocode} +\tud@localization@german{\tud@general@name}{Allgemein}% +\tud@localization@german{\tud@implementation@name}{Implementierung}% +\tud@localization@german{\tud@changes@name}{\"Anderungsliste} +\tud@localization@german{\tud@todo@name}{Liste der noch zu erledigenden Punkte} +\tud@localization@german{\tud@environment@name}{Umg.} +\tud@localization@german{\tud@environments@name}{Umgebungen} +\tud@localization@german{\tud@option@name}{Opt.} +\tud@localization@german{\tud@options@name}{Optionen} +\tud@localization@german{\tud@layerpagestyle@name}{Seitenstil} +\tud@localization@german{\tud@layerpagestyles@name}{Seitenstile} +\tud@localization@german{\tud@layer@name}{Layer} +\tud@localization@german{\tud@layers@name}{Layer (Seitenstilebenen)} +\tud@localization@german{\tud@length@name}{L\"ange} +\tud@localization@german{\tud@lengths@name}{L\"angen} +\tud@localization@german{\tud@counter@name}{Z\"ahler} +\tud@localization@german{\tud@counters@name}{Z\"ahler} +\tud@localization@german{\tud@TUDcolor@name}{Farbe} +\tud@localization@german{\tud@TUDcolors@name}{Farben} +\tud@localization@german{\tud@localization@name}{Lok.} +\tud@localization@german{\tud@localizations@name}{Lokalisierungsmakros} +\tud@localization@german{\tud@field@name}{Feld} +\tud@localization@german{\tud@fields@name}{Eingabefelder} +\tud@localization@german{\tud@KOMAfont@name}{Schriftel.} +\tud@localization@german{\tud@KOMAfonts@name}{Schriftelemente} +\tud@localization@german{\tud@parameter@name}{Param.} +\tud@localization@german{\tud@parameters@name}{Parameter} +\tud@localization@german{\tud@index@text}{% + Kursive Zahlen entsprechen der Seite, auf welcher der korrespondierende + Eintrag beschrieben wird. Unterstrichene Zahlen verweisen auf die + \ifcodeline@index Codezeile der \fi Definition. + \ifscan@allowed% + Alle weiteren Eintr\"age sind + \ifcodeline@index Zeilennummern\else Seitenzahlen\fi, + wo der jeweilige Eintrag verwendet wird. + \fi% +} +% \end{macrocode} +% +% \iffalse +%</class&doc> +%<*class&!manual> +% \fi +% +% \subsection{Englischsprachige Bezeichner} +% +% \begin{macro}{\tud@localization@english} +% \changes{v2.02}{2014/07/07}{Pseudonym für \cs{providecaptionname} mit +% dem Argument \marg{englische Sprachliste}}^^A +% Dieser Befehl dient zur Definition der englischsprachigen Bezeichner. Dabei +% müssen als Argumente der Bezeichnerbefehl selbst sowie die dazugehörige +% Definition angegeben werden. Intern wird dabei \cs{providecaptionname} +% verwendet. +% \begin{macrocode} +\newcommand*\tud@localization@english{% + \providecaptionname{% + american,australian,british,canadian,english,newzealand,UKenglish,USenglish% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@localization@english +% +% \iffalse +%<*!doc> +% \fi +% +% Hier erfolgt die eigentliche Definition der sprachabhängigen Bezeichner für +% die deutsche Sprache und ihre Dialekte. +% \begin{macrocode} +%<*book|report|article> +\tud@localization@english{\graduationtext}{to achieve the academic degree}% +\tud@localization@english{\refereename}{% + \tud@ifin@and{\@referee}{% + \ifx\refereeothername\@empty% + Referees% + \else% + First referee% + \fi% + }{Referee}% +}% +\tud@localization@english{\refereeothername}{Second referee}% +\tud@localization@english{\advisorname}{% + \tud@ifin@and{\@advisor}{% + \ifx\advisorothername\@empty% + Advisors% + \else% + First advisor% + \fi% + }{Advisor}% +}% +\tud@localization@english{\advisorothername}{}% +\tud@localization@english{\supervisorname}{% + \tud@ifin@and{\@supervisor}{% + \ifx\supervisorothername\@empty% + Supervisors% + \else% + First supervisor% + \fi% + }{Supervisor}% +}% +\tud@localization@english{\supervisorothername}{}% +\tud@localization@english{\professorname}{% + \tud@ifin@and{\@professor}{% + \ifx\professorothername\@empty% + Supervising professors% + \else% + First supervising professor% + \fi% + }{Supervising professor}% +}% +\tud@localization@english{\professorothername}{}% +\tud@localization@english{\datetext}{Submitted on}% +\tud@localization@english{\dateofbirthtext}{Born on}% +\tud@localization@english{\placeofbirthtext}{in}% +\tud@localization@english{\defensedatetext}{Defended on}% +\tud@localization@english{\matriculationyearname}{Matriculation year}% +\tud@localization@english{\matriculationnumbername}{Matriculation number}% +\tud@localization@english{\coverpagename}{Cover page}% +\tud@localization@english{\titlepagename}{Title page}% +\tud@localization@english{\titlename}{Title}% +%<*book> +\tud@localization@english{\abstractname}{Abstract}% +%</book> +\tud@localization@english{\confirmationname}{Statement of authorship}% +\tud@localization@english{\confirmationtext}{% + I hereby certify that I have authored this + \ifx\@@thesis\@empty thesis\else\@@thesis{} \fi + \ifx\@@title\@empty\else entitled \emph{\@@title} \fi + independently and without undue assistance from third + parties. No other than the resources and references + indicated in this thesis have been used. I have marked + both literal and accordingly adopted quotations as such. + \ifx\@supporter\@empty% + There were no additional persons involved in the + intellectual preparation of the present thesis. + \else% + During the preparation of this thesis I was only + supported by the following persons:% + \begin{quote}\def\and{\newline}\@supporter\end{quote}% + \noindent Additional persons were not involved in the + intellectual preparation of the present thesis. + \fi% + I am aware that violations of this declaration may lead to + subsequent withdrawal of the degree.% +}% +\tud@localization@english{\blockingname}{Restriction note}% +\tud@localization@english{\blockingtext}{% + This \ifx\@@thesis\@empty thesis \else\@@thesis{} \fi + \ifx\@@title\@empty\else entitled \emph{\@@title} \fi + contains confidential data\ifx\@company\@empty\else + , disclosed by \emph{\@company}\fi. Publications, duplications + and inspections---even in part---are prohibited without explicit + permission\ifx\@company\@empty\else\space by \emph{\@company}\fi, + as well as publications about the content of this thesis. + This thesis may only be made accessible to the supervisor at + Technische Universit\"at Dresden, the reviewers and also the + members of the examination board.% +}% +%</book|report|article> +\tud@localization@english{\coursename}{Course}% +\tud@localization@english{\disciplinename}{Discipline}% +\tud@localization@english{\listingname}{Listing}% +\tud@localization@english{\listlistingname}{List of Listings}% +\tud@localization@english{\dissertationname}{Dissertation}% +\tud@localization@english{\diplomathesisname}{Diploma Thesis}% +\tud@localization@english{\masterthesisname}{Master Thesis}% +\tud@localization@english{\bachelorthesisname}{Bachelor Thesis}% +\tud@localization@english{\studentthesisname}{Student Thesis}% +\tud@localization@english{\studentresearchname}{Student Research Project}% +\tud@localization@english{\projectpapername}{Project Paper}% +\tud@localization@english{\seminarpapername}{Seminar Paper}% +\tud@localization@english{\termpapername}{Term Paper}% +\tud@localization@english{\researchname}{Research Report}% +\tud@localization@english{\logname}{Log}% +\tud@localization@english{\internshipname}{Internship Report}% +\tud@localization@english{\reportname}{Report}% +% \end{macrocode} +% +% \iffalse +%</!doc> +%</class&!manual> +%<*class&poster|package&supervisor|class&manual> +% \fi +% +% Hier erfolgen für die Klasse \cls{tudscrposter} sowie das Paket +% \pkg{tudscrsupervisor} weitere Definitionen. +% \begin{macrocode} +\tud@localization@english{\authorname}{Author}% +\tud@localization@english{\contactname}{Contact}% +\tud@localization@english{\contactpersonname}{Counterpart}% +% \end{macrocode} +% +% \iffalse +%</class&poster|package&supervisor|class&manual> +%<*package&supervisor|class&manual> +% \fi +% +% Hier erfolgen für das Paket \pkg{tudscrsupervisor} weitere Definitionen. +% \begin{macrocode} +\tud@localization@english{\taskname}{Task}% +\tud@localization@english{\tasktext}{for the preparation of a}% +\tud@localization@english{\namesname}{Name}% +\tud@localization@english{\issuedatetext}{Issued on}% +\tud@localization@english{\duedatetext}{Due date for submission}% +\tud@localization@english{\chairmanname}{Chairman of the Audit Committee}% +\tud@localization@english{\focusname}{Focus of work}% +\tud@localization@english{\objectivesname}{Objectives of work}% +\tud@localization@english{\evaluationname}{Evaluation}% +\tud@localization@english{\evaluationtext}{for the}% +\tud@localization@english{\contentname}{Content}% +\tud@localization@english{\assessmentname}{Assessment}% +\tud@localization@english{\gradetext}{% + The thesis is evaluated with a grade of \textbf{\@grade}.% +}% +\tud@localization@english{\noticename}{Notice}% +% \end{macrocode} +% +% \iffalse +%</package&supervisor|class&manual> +%<*class&doc> +% \fi +% +% Dies sind die Bezeichner für die Quelltextdokumentation. +% \begin{macrocode} +\tud@localization@english{\tud@general@name}{General}% +\tud@localization@english{\tud@implementation@name}{Implementation}% +\tud@localization@english{\tud@changes@name}{Change History} +\tud@localization@english{\tud@todo@name}{List of ToDos} +\tud@localization@english{\tud@environment@name}{env.} +\tud@localization@english{\tud@environments@name}{environments} +\tud@localization@english{\tud@option@name}{opt.} +\tud@localization@english{\tud@options@name}{options} +\tud@localization@english{\tud@layerpagestyle@name}{pagestyle} +\tud@localization@english{\tud@layerpagestyles@name}{pagestyles} +\tud@localization@english{\tud@layer@name}{layer} +\tud@localization@english{\tud@layers@name}{layers (pagestyle)} +\tud@localization@english{\tud@length@name}{length} +\tud@localization@english{\tud@lengths@name}{lengths} +\tud@localization@english{\tud@counter@name}{counter} +\tud@localization@english{\tud@counters@name}{counters} +\tud@localization@english{\tud@TUDcolor@name}{color} +\tud@localization@english{\tud@TUDcolors@name}{colors} +\tud@localization@english{\tud@localization@name}{localization} +\tud@localization@english{\tud@localizations@name}{localizations} +\tud@localization@english{\tud@field@name}{field} +\tud@localization@english{\tud@fields@name}{input fields} +\tud@localization@english{\tud@KOMAfont@name}{font} +\tud@localization@english{\tud@KOMAfonts@name}{font elements} +\tud@localization@english{\tud@parameter@name}{param.} +\tud@localization@english{\tud@parameters@name}{parameters} +\tud@localization@english{\tud@index@text}{% + Numbers written in italic refer to the page where the corresponding entry is + described. Numbers underlined refer to the + \ifcodeline@index code line of the \fi definition. + \ifscan@allowed% + All additional entries refer to the + \ifcodeline@index code lines \else pages \fi + where the entry is used. + \fi% +} +% \end{macrocode} +% +% \iffalse +%</class&doc> +%<*class&!(manual|doc)> +% \fi +% +% \subsection{Kompatibilität der Bezeichner mit verschiedenen Pakete} +% \subsubsection{Unterstützung des Paketes \pkg{listings}} +% +% Die Bezeichner des Paketes werden auf die bereits definierten gesetzt. +% \begin{macrocode} +\AfterPackage{listings}{% + \renewcommand*\lstlistingname{\listingname}% + \renewcommand*\lstlistlistingname{\listlistingname}% +} +% \end{macrocode} +% +% \subsubsection{Unterstützung des Paketes \pkg{mathswap}} +% +% Wird das Paket \pkg{mathswap} verwendet, werden die Ersetzungen für Punkt und +% Komma im Mathematikmodus sprachspezifisch angepasst. +% \begin{macrocode} +\AfterPackage{mathswap}{% + \tud@localization@german{\@commaswap}{,}% + \tud@localization@german{\@dotswap}{\,}% + \tud@localization@english{\@commaswap}{\,}% + \tud@localization@english{\@dotswap}{.}% +} +% \end{macrocode} +% +% \iffalse +%</class&!(manual|doc)> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-manual.dtx b/macros/latex/contrib/tudscr/source/tudscr-manual.dtx new file mode 100644 index 0000000000..4df997a44b --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-manual.dtx @@ -0,0 +1,6388 @@ +% \CheckSum{4470} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-manual.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-manual.dtx}[2019/08/20 v2.06c TUD-Script\space% +% +% \iffalse +%</dtx> +%<package&identify>\ProvidesPackage{tudscrtutorial}[% +%<*package&identify> +%!TUD@Version +%</package&identify> +%<package&identify> package +%<*dtx|package&identify> +% \fi + (internal tutorials)% +] +% \iffalse +%</dtx|package&identify> +%<*dtx> +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-manual.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.02}{2014/12/17}{Erstellung der \app{texindy}-Stildatei während +% der Kompilierung}^^A +% \changes{v2.02}{2014/11/18}{\pkg{tudscrtutorial}: Index für Tutorials}^^A +% \changes{v2.05}{2015/08/04}{Geteilte Deklarationen für Klasse und Paket}^^A +% +% \section{Handbuch und Leitfäden zu \TUDScript} +% +% Es werden die Klasse \cls{tudscrmanual} für das Handuch sowie das Paket +% \pkg{tudscrtutorial} für das Setzen von einigen Anwenderleitfäden bzw. +% Tutorials erzeugt. Da es zwischen der Klasse und dem Paket es eine große +% Menge an Überschneidungen gibt, basieren diese auf der gleichen Quelldatei. +% Einiges davon wird auch für die Quelltextdokumentationsklasse \cls{tudscrdoc} +% verwendet. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*body|class&doc> +% \fi +% +% \subsection{Notwendige Pakete und Befehle} +% +% Basis für die Handbuchklasse \cls{tudscrmanual} ist \cls{tudscrreprt}. +% Zusätzlich wird das Paket \pkg{tudscrtutorial} erstellt, um an das Handbuch +% angelehnte Tutorials in einem Unterordner zu erstellen. Sowohl für die Klasse +% als auch das Paket werden einige Pakete geladen, um Einstellungen vorzunehmen +% und nützliche Befehle zu definieren. +% +% Das Paket \pkg{xparse} erlaubt eine sehr freie Deklaration von Makros mit +% nahezu beliebig arrangierbaren (optionalen) Argumenten. +% \begin{macrocode} +%<*!doc> +\PassOptionsToPackage{log-declarations=false}{xparse} +\RequirePackage{xparse}[2013/12/31] +%</!doc> +% \end{macrocode} +% Bugfixes für unterschiedliche Pakete. +% \begin{macrocode} +\RequirePackage{scrhack}[2014/02/27] +% \end{macrocode} +% Die Sprachunterstützung für Klasse und Paket. +% \begin{macrocode} +%<*!doc> +\RequirePackage{babel}[2014/03/24] +%</!doc> +% \end{macrocode} +% Das Paket \pkg{marginnote} stellt nicht fließenden Randnotizen bereit, welche +% für die Kennzeichnung von Änderungen, Hinweise oder ToDo-Notizen verwendet +% werden. Die Randnotizen werden auf dem linken~-- weil größeren~-- Seitenrand +% gesetzt. +% \begin{macrocode} +\PassOptionsToPackage{quiet}{marginnote} +\RequirePackage{marginnote}[2012/03/29] +%<!doc>\reversemarginpar +% \end{macrocode} +% Das Paket für intelligente Leerzeichen am Ende von Makros mit \cs{xspace}. +% \begin{macrocode} +\RequirePackage{xspace}[2009/10/20] +\xspaceaddexceptions{"=} +% \end{macrocode} +% Für das Paket \pkg{geometry} erfolgen durch \TUDScript vielerlei Anpassungen. +% Um bei einer signifikanten Änderung des Paketes passend reagieren zu können, +% wird auf das aktuelle Paketdatum geprüft und für neue Versionen eine Warnung +% erzeugt. +% \ToDo{Kann raus, sobald \pkg{geometry} nicht mehr notwendig}[v2.07] +% \begin{macrocode} +%<*!(doc|package)> +\@ifpackagelater{geometry}{2018/04/17}{% + \ClassWarning{\TUD@Class@Name}{% + Package `geometry' was updated so some patches\MessageBreak% + are maybe outdated% + }% +}{}% +%</!(doc|package)> +% \end{macrocode} +% \begin{macro}{\vTUDScript} +% \begin{macro}{\vKOMAScript} +% Diese Befehle geben in der Dokumentation die aktuelle Version von \TUDScript +% sowie die mindestens notwendige Version von \KOMAScript{} aus. +% \begin{macrocode} +\newcommand*\vTUDScript{v\TUDScriptVersionNumber} +\newcommand*\vKOMAScript{v\TUD@Version@KOMA} +% \end{macrocode} +% \end{macro}^^A \vKOMAScript +% \end{macro}^^A \vTUDScript +% \begin{macro}{\tud@english} +% Mit diesem Befehl wird der Inhalt des Arumentes mit englischen Trennmustern +% gesetzt, falls die Sprache geladen wurde. +% \begin{macrocode} +\newcommand*\tud@english[1]{#1} +\AtBeginDocument{% + \iflanguageloaded{english}{% + \renewcommand*\tud@english[1]{\foreignlanguage{english}{#1}}% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \tud@english +% Das Paket \pkg{shellesc} ermöglicht mit dem Befehl \cs{ShellEscape} die +% Verwendung von Systembefehlen auf der Kommandozeile unabhängig von der +% genutzten Engine. Sollte \app{lualatex} als Dokumentprozessor eingesetzt +% werden, sind dennoch die \app{pdflatex}-Primitiven \cs{pdf(@)strcmp} und +% \cs{pdf(@)shellescape} nötig, wofür das Paket \pkg{pdftexcmds} geladen wird. +% \begin{macrocode} +\RequirePackage{shellesc}[2016/06/07] +\RequirePackage{pdftexcmds}[2016/05/21] +% \end{macrocode} +% +% \iffalse +%</body|class&doc> +%<*!doc> +%<*body> +%<*class> +% \fi +% +% \begin{macro}{\tud@list@sort} +% \changes{v2.02}{2014/07/25}{neu}^^A +% \begin{macro}{\tud@list@@sort} +% \changes{v2.02}{2014/07/25}{neu}^^A +% \begin{macro}{\tud@templist} +% \changes{v2.02}{2014/07/25}{neu}^^A +% \begin{macro}{\if@tud@list@sorted} +% \changes{v2.02}{2014/07/25}{neu}^^A +% Der Befehl \cs{tud@list@sort} erwartet eine \pkg{etoolbox}-Liste und sortiert +% diese mit dem Makro \cs{sort@list} in alphabetischer Reihenfolge in eine +% kommagetrennte Auflistung. Diese wird anschließend wieder in eine +% \pkg{etoolbox}-Liste umgewandelt. +% \begin{macrocode} +\newcommand*\tud@templist{} +\let\tud@templist\relax +\newcommand*\tud@list@sort[1]{% + \ifdefvoid{#1}{% + \ClassWarning{tudscrmanual}{% + The given list \string#1\space\MessageBreak% + is empty, nothing to sort here% + }% + }{% + \let\tud@reserved#1% + \let\tud@templist\relax% + \forlistloop\tud@list@@sort{\tud@reserved}% + \let\tud@reserved\relax% + \@for\@tempa:=\tud@templist\do{\listeadd\tud@reserved{\@tempa}}% + \let#1\tud@reserved% + }% +} +% \end{macrocode} +% Hier erfolgt die eigentliche Sortierung der Liste. +% \begin{macrocode} +\newif\if@tud@list@sorted +\newcommand*\tud@list@@sort[1]{% +% \end{macrocode} +% Der erste Eintrag wird direkt der Liste hinzugefügt. +% \begin{macrocode} + \ifx\tud@templist\relax% + \def\tud@templist{#1}% +% \end{macrocode} +% Weitere Einräge werden mit \cs{pdfstrcmp} an der richtigen Stelle eingefügt. +% Dabei wird die kommagetrennte Liste \cs{tud@templist} durchlaufen und +% \cs{@tempb} als Hilfsmakro verwendet, in welches die aktuelle Liste innerhalb +% der \cs{@for}-Schleife stückweise expandiert wird. Wenn das aktuelle Element +% an der dafür passenden Stelle eingesetzt wurde, wird \cs{if@tud@list@sorted} +% gesetzt. +% \begin{macrocode} + \else% + \@tud@list@sortedfalse% + \let\@tempb\@empty% + \@for\@tempa:=\tud@templist\do{% +% \end{macrocode} +% Ist der Eintrag bereits erfolgt, wird der verbliebene Teil der Liste +% angehangen. +% \ToDo{\cs{expandafter}\cs{edef}\cs{expandafter} ist quatsch, oder?}[v2.07] +% \begin{macrocode} + \if@tud@list@sorted% + \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,\@tempa}% + \else% +% \end{macrocode} +% Liegt der Eintrag in alphabetischer Reihenfolge vor dem aktuellen der +% durchlaufenenen Liste, so wird dieser davor eingefügt. Dabei muss der Fall, +% dass das Element der erste Eintrag in der temporären Liste \cs{@tempb} ist, +% eine Sonderbehandlung erfolgen. Anschließend wird \cs{@tud@list@sortedtrue} +% gesetzt. +% \begin{macrocode} + \expandafter\ifnum\pdf@strcmp{#1}{\@tempa}<\z@\relax% + \ifx\@tempb\@empty% + \expandafter\edef\expandafter\@tempb\expandafter{% + #1,\@tempa% + }% + \else% + \expandafter\edef\expandafter\@tempb\expandafter{% + \@tempb,#1,\@tempa% + }% + \fi% + \@tud@list@sortedtrue% + \else% +% \end{macrocode} +% Ist Eintrag in alphabetischer Reihenfolge nach dem aktuellen der geprüften +% Liste, so wird dieser (noch) nicht eingefügt. Der Sonderfall des ersten +% Elementes wird abgedeckt. +% \begin{macrocode} + \ifx\@tempb\@empty% + \expandafter\edef\expandafter\@tempb\expandafter{\@tempa}% + \else% + \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,\@tempa}% + \fi% + \fi% + \fi% + }% +% \end{macrocode} +% Wurde der Eintrag nach dem Durchlaufen der Liste nicht eingefügt, so erfolgt +% dies hier am Ende der Liste. +% \begin{macrocode} + \if@tud@list@sorted\else% + \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,#1}% + \fi% +% \end{macrocode} +% Die temporäre Liste \cs{@tempb} wird auf \cs{tud@templist} überschrieben. +% \begin{macrocode} + \let\tud@templist\@tempb% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@list@sorted +% \end{macro}^^A \tud@templist +% \end{macro}^^A \tud@list@@sort +% \end{macro}^^A \tud@list@sort +% +% \iffalse +%</class> +%<*package> +% \fi +% +% \subsection{Zusätzliche Pakete für das Paket \pkg{tudscrtutorial}} +% +% Mit dem Paket \pkg{scrwfile} lassen sich Probleme mit zu wenig verfügbaren +% Streams für das Schreiben externer Datein beheben. Hintergrund ist die +% Verwendung des Paketes \pkg{glossaries} in einem der Tutorials, welches eine +% Vielzahl solcher Streams benötigt. Das Paket \pkg{morewrites} hat keinen +% Einfluss auf \pkg{glossaries}. +% \begin{macrocode} +\RequirePackage{scrwfile}[2013/08/05] +% \end{macrocode} +% Die Umgebungen \env{Preamble}, \env{Trunk} und \env{Hint} sowie deren +% Varianten nutzen das Paket \pkg{filecontents}, um ihren Inhalt in eine +% temporäre Datei zu schreiben und diese direkt mit dem Paket \pkg{listings} +% darzustellen sowie ggf. den Quelltext auszuführen. Beim Überschreiben einer +% Datei wird für gewöhnlich eine Warnung erzeugt. Dies wird mit dem Patch +% unterbunden. +% \begin{macrocode} +\RequirePackage{filecontents}[2011/10/08] +\begingroup% + \catcode`\*=11% + \catcode`\^^M\active% + \catcode`\^^L\active\let^^L\relax% + \catcode`\^^I\active% + \patchcmd{\filec@ntents}{% + \@latex@warning@no@line{Overwriting file `\@currdir#1'}% + }{}{}{\tud@patch@wrn{filec@tents}}% + \global\let\filec@ntents\filec@ntents% +\endgroup% +% \end{macrocode} +% +% \iffalse +%</package> +%</body> +%<*option> +% \fi +% +% \subsection{% +% Optionen für die Ausgabe von \cls{tudscrmanual} und \pkg{tudscrtutorial}% +% } +% +% \begin{option}{final} +% \begin{option}{print} +% \begin{macro}{\tudfinalflag} +% \begin{macro}{\tudprintflag} +% Diese beiden Optionen dienen zur finalen und/oder der unbunten Ausgabe. +% \begin{macrocode} +\TUD@key{final}[true]{% + \TUD@set@ifkey{final}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \let\tudfinalflag\relax% + \fi% + \fi% +} +\TUD@key{print}[true]{% + \TUD@set@ifkey{print}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa% + \let\tudprintflag\relax% + \fi% + \fi% +} +% \end{macrocode} +% Wurde eine oder beide der Optionen \opt{final} oder \opt{print} gesetzt bzw. +% vor einem externen \app{pdflatex}-Aufruf die Flags \cs{tudfinalflag} und/oder +% \cs{tudprintflag} definiert, werden die entsprechenden Einstellungen zur +% finalen Ausgabe und/oder unbunten Druck vorgenommen und anschließend die +% entsprechenden Optionen unschädlich gemacht. +% \begin{macrocode} +\AtEndPreamble{% + \ifdef{\tudfinalflag}{% + \TUDoptions{ToDo=false}% + \TUD@key{ToDo}{\FamilyKeyStateProcessed}% + }{% + \KOMAoptions{overfullrule}% + }% + \ifdef{\tudprintflag}{% + \ifnum\tud@cd@num>\z@\relax% + \TUDoptions{cd=true}% + \fi% + \TUD@key{cd}{\FamilyKeyStateProcessed}% + \ifundef{\hypersetup}{}{\hypersetup{hidelinks}}% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \tudprintflag +% \end{macro}^^A \tudfinalflag +% \end{option}^^A print +% \end{option}^^A final +% +% \iffalse +%<*class> +% \fi +% +% \subsection{Standardoptionen der Klasse \cls{tudscrmanual}} +% +% Es werden einige Optionen für das Handbuch standardmäßig aktiviert. Dazu +% werden diese an die entsprechende Elternklasse übergeben. +% \begin{macrocode} +\PassOptionsToClass{% + cdfoot=true,% + chapterpage=true,% + chapterprefix=true,% + headings=optiontoheadandtoc,% + captions=tableheading,% + numbers=noenddot,% + cd=color,% +}{\TUD@Class@Parent} +\PassOptionsToPackage{automark}{scrlayer-scrpage} +% \end{macrocode} +% +% \iffalse +%</class> +%</option> +%<*body> +%<*class> +% \fi +% +% \subsection{Debug-Traces für die Klasse \cls{tudscrmanual}} +% +% Ab und an ist es beim Erstellen des Handbuchs recht sinnvoll, verschiedene +% Dinge direkt im Logfile zu überprüfen. Hierfür werden folgend einige Befehle +% zur Ablaufkontrolle definiert. +% +% \begin{macro}{\tracinglabels} +% \changes{v2.05}{2015/10/29}{neu}^^A +% \begin{macro}{\tud@trace@lbl@created@add} +% \changes{v2.05}{2015/10/29}{neu}^^A +% \begin{macro}{\tud@trace@lbl@missing@add} +% \changes{v2.05}{2015/10/29}{neu}^^A +% \begin{macro}{\tud@trace@lbl@created@list} +% \changes{v2.05}{2015/10/29}{neu}^^A +% \begin{macro}{\tud@trace@lbl@missing@list} +% \changes{v2.05}{2015/10/29}{neu}^^A +% Mit \cs{tracinglabels} wird die Nachverfolgung aller erstellten Labels in der +% Dokumentation aktiviert werden. Die Label werden zum einen direkt im Logfile +% ausgegeben und am Ende des selbigen in einer sortierten Liste ausgegeben. Die +% Sternversion des Befehls erzeugt keine sortierte Liste. Über das optionale +% Argument kann mit verschiedenen Schlüsseln zudem eingestellt werden, ob alle +% Label (\val{all}) oder nur die erstellten (\val{created}) beziehungsweise die +% fehlenden (\val{missing}) nachverfolgt werden sollen. +% \begin{macrocode} +\newcommand*\tud@trace@lbl@created@add[1]{} +\newcommand*\tud@trace@lbl@missing@add[1]{} +\NewDocumentCommand\tracinglabels{!s !O{missing}}{% + \newcommand*\tud@trace@lbl@created@list{}% + \newcommand*\tud@trace@lbl@missing@list{}% + \@tempswafalse% + \ifstr{#2}{created}{\@tempswatrue}{}% + \ifstr{#2}{all}{\@tempswatrue}{}% + \if@tempswa% + \renewcommand*\tud@trace@lbl@created@add[1]{% + \typeout{% + +++++ label created: ##1 on page \thepage% + }% + \xifinlist{##1}{\tud@trace@lbl@created@list}{}{% + \listxadd\tud@trace@lbl@created@list{##1}% + }% + }% + \IfBooleanF{#1}{% + \AfterEndDocument{% + \typeout{+++++ labels created (sorted) +++++}% + \tud@list@sort\tud@trace@lbl@created@list% + \forlistloop\typeout{\tud@trace@lbl@created@list}% + }% + }% + \fi% + \@tempswafalse% + \ifstr{#2}{missing}{\@tempswatrue}{}% + \ifstr{#2}{all}{\@tempswatrue}{}% + \if@tempswa% + \renewcommand*\tud@trace@lbl@missing@add[1]{% + \typeout{% + +++++ label missing: ##1 on page \thepage% + }% + \xifinlist{##1}{\tud@trace@lbl@missing@list}{}{% + \listxadd\tud@trace@lbl@missing@list{##1}% + }% + }% + \IfBooleanF{#1}{% + \AfterEndDocument{% + \typeout{+++++ labels missing (sorted) +++++}% + \tud@list@sort\tud@trace@lbl@missing@list% + \forlistloop\typeout{\tud@trace@lbl@missing@list}% + }% + }% + \fi% +} +\@onlypreamble\tracinglabels +% \end{macrocode} +% \end{macro}^^A \tud@trace@lbl@missing@list +% \end{macro}^^A \tud@trace@lbl@created@list +% \end{macro}^^A \tud@trace@lbl@missing@add +% \end{macro}^^A \tud@trace@lbl@created@add +% \end{macro}^^A \tracinglabels +% \begin{macro}{\tracingmarkup} +% \changes{v2.05}{2015/10/29}{neu}^^A +% \begin{macro}{\tud@trace@markup} +% \changes{v2.05}{2015/10/29}{neu}^^A +% Mit \cs{tracinglabels} wird die Nachverfolgung aller Aufrufe von +% \cs{Process@@MarkupDeclare} und \cs{Process@@MarkupInline} durch +% \cs{Process@Markup} inklusive all ihrer Argumente aktiviert. Dies ist für die +% Kontrolle des erzeugten Markups sinnvoll. +% \begin{macrocode} +\newcommand*\tud@trace@markup[2]{} +\newcommand*\tracingmarkup{% + \renewcommand*\tud@trace@markup[2]{% + \typeout{+++++ markup ##1 on page \thepage^^J##2}% + }% +} +\@onlypreamble\tracingmarkup +% \end{macrocode} +% \end{macro}^^A \tud@trace@markup +% \end{macro}^^A \tracingmarkup +% \begin{macro}{\tracingbundle} +% \changes{v2.05}{2015/10/29}{neu}^^A +% \begin{macro}{\tud@trace@bdl@add} +% \changes{v2.05}{2015/10/29}{neu}^^A +% \begin{macro}{\tud@trace@bdl@list} +% \changes{v2.05}{2015/10/29}{neu}^^A +% Wird \cs{tracingbundle} in der Präambel verwendet, werden alle direkt oder +% indirekt durch \cs{Process@Markup} im Handbuch erzeugten Querverweise auf +% Klassen oder Pakete aus dem \TUDScript-Bundle nachverfolgt und am Ende des +% Logfiles ausgegeben. Damit kann im Zweifel übeprüft werden, ob eventuell eine +% falsche Referenz genutzt wurde, wodurch u.\,U. Querverweise oder Einträge in +% Index und Änderungsliste fehlerhaft werden oder erst gar nicht erscheinen. +% \begin{macrocode} +\newcommand*\tud@trace@bdl@add[1]{} +\newcommand*\tud@trace@bdl@list{} +\newcommand*\tracingbundle{% + \renewcommand*\tud@trace@bdl@add[1]{% + \begingroup% + \def\Class####1{class:####1}% + \def\Package####1{package:####1}% + \xifinlist{##1}{\tud@trace@bdl@list}{}{% + \listxadd\tud@trace@bdl@list{##1}% + }% + \endgroup% + }% + \AfterEndDocument{% + \typeout{+++++ bundle list +++++}% + \forlistloop\typeout{\tud@trace@bdl@list}% + }% +} +\@onlypreamble\tracingbundle +% \end{macrocode} +% \end{macro}^^A \tud@trace@bdl@list +% \end{macro}^^A \tud@trace@bfundle +% \end{macro}^^A \tracingbundle +% +% \iffalse +%</class> +%</body> +%</!doc> +%<*body|class&doc> +% \fi +% +% \subsection{Anpassungen für das Paket \pkg{hyperref} und Querverweise} +% +% Das Paket \pkg{hyperref} wird für alle möglichen Links und Querverweise +% geladen, \pkg{bookmark} verbessert das Erstellen der Outline-Einträge. +% \begin{macrocode} +\PassOptionsToPackage{hyperindex=false,colorlinks,linkcolor=blue}{hyperref} +\PassOptionsToPackage{open,openlevel=0}{bookmark} +% \end{macrocode} +% Es folgen einige Befehle, die an das Paket \pkg{hyperref} gekoppelt sind. +% Sobald das Paket geladen wurde, werden die Makros mit der jeweiligen +% Funktionalität definiert. +% \begin{macrocode} +\AfterPackage*{hyperref}{% +% \end{macrocode} +% Zuerst die Einstellungen für \cls{tudscrmanual} und \pkg{tudscrtutorial}. +% +% \iffalse +%<*!doc> +% \fi +% +% Die Bezeichner für die Abschnittsebenen werden umbenannt. +% \begin{macrocode} + \renewcaptionname{ngerman}{\sectionautorefname}{Unterkapitel}% + \renewcaptionname{ngerman}{\subsectionautorefname}{Abschnitt}% + \renewcaptionname{ngerman}{\subsubsectionautorefname}{Unterabschnitt}% +% \end{macrocode} +% \begin{macro}{\tudhyperdef} +% \changes{v2.02}{2014/10/27}{neu}^^A +% \begin{macro}{\tudhyperref} +% \changes{v2.02}{2014/10/27}{neu}^^A +% \begin{macro}{\tud@manualname} +% \changes{v2.05}{2015/1q/19}{neu}^^A +% Diese Befehle dienen sowohl zum Definieren von Textankern im Handbuch als +% auch zum Referenzieren auf diese. Bei der Erstellung des Ankers mit +% \cs{tudhyperdef} wird zusätzlich auch noch ein Label (\cs{label}) erzeugt. +% Der Anker wird mit \cs{Hy@raisedlink}~-- wie es auch bei pkg{hyperref}-Labels +% geschieht~-- über die Grundlinie gehoben. Die Sternversion sollte nach +% Überschriften verwendet werden und verschiebt die vertikale Position des +% Ankers noch weiter nach oben. +% \begin{macrocode} + \newcommand*\tud@manualname{tudscr}% +%<*class> + \NewDocumentCommand\tudhyperdef{s t' m}{% + \@tempswafalse% + \IfBooleanT{#1}{\@tempswatrue\setlength\@tempdima{3\baselineskip}}% + \IfBooleanT{#2}{\@tempswatrue\setlength\@tempdima{15\baselineskip}}% + \if@tempswa% + \raisebox{\@tempdima}[0pt][0pt]{\hyperdef{\tud@manualname}{#3}{}}% + \par\nobreak\vskip\dimexpr-\parskip-\baselineskip\relax% + \@afterindentfalse\@afterheading% + \else% + \Hy@raisedlink{\hyperdef{\tud@manualname}{#3}{}}\ignorespaces% + \fi% + \label{#3}% + \tud@trace@lbl@created@add{#3}% + }% + \newcommand*\tudhyperref[2]{\hyperref{}{\tud@manualname}{#1}{#2}}% +%</class> +% \end{macrocode} +% Aus einem Tutorial erfolgen alle Querverweise mit \cs{tudhyperref} auf das +% Anwenderhandbuch \enquote*{tudscr} im übergeordneten Ordner. +% \begin{macrocode} +%<*package> + \newcommand*\tudhyperref[2]{% + \hyperref{../\tud@manualname.pdf}{\tud@manualname}{#1}{#2}% + }% +%</package> +% \end{macrocode} +% \end{macro}^^A \tud@manualname +% \end{macro}^^A \tudhyperref +% \end{macro}^^A \tudhyperdef +% \begin{macro}{\autorefname} +% \begin{macro}{\auto@refname} +% \begin{macro}{\auto@@refname} +% Der Befehl \cs{autorefname} dient dazu, den Verweistyp beziehungsweise den +% Bezeichner des aktuellen~-- oder optional eines speziellen~-- Labels ohne die +% dazugehörige Nummerierung zu erhalten. Das zugrunde liegende Funktionsprinzip +% wurde bei \hrfn{http://tex.stackexchange.com/q/33776/}{LaTeX Stack Exchange} +% vorgestellt und hier übernommen. +% \begin{macrocode} + \newcommand*\autorefname[1][current]{% + \ifstr{#1}{current}{% + \expandafter\HyPsd@@autorefname\@currentHref\@nil% + }{% + \auto@refname\HyPsd@@autorefname{#1}% + }% + \unskip\xspace% + }% + \newcommand*\auto@refname[2]{% + \expandafter\ifx\csname r@#2\endcsname\relax% + ??% + \else% + \expandafter\expandafter\expandafter\auto@@refname% + \csname r@#2\endcsname{}{}{}{}\@nil#1\@nil% + \fi% + }% + \newcommand*\auto@@refname{}% + \def\auto@@refname#1#2#3#4#5\@nil#6\@nil{#6#4.\@nil}% +% \end{macrocode} +% \end{macro}^^A \auto@@refname +% \end{macro}^^A \auto@refname +% \end{macro}^^A \autorefname +% Nun die Einstellungen für \cls{tudscrdoc}. +% +% \iffalse +%</!doc> +%<*doc> +% \fi +% +% \begin{macro}{\hypersourcedef} +% \changes{v2.05}{2016/04/26}{neu}^^A +% \begin{macro}{\hypersource@def} +% \changes{v2.05}{2016/04/26}{neu}^^A +% \begin{macro}{\hypersource@ref@codeline} +% \changes{v2.05}{2016/04/26}{neu}^^A +% \begin{macro}{\hypersource@ref@page} +% \changes{v2.05}{2016/04/26}{neu}^^A +% Diese Makros werden verwendet, um im Index respektive in der Änderungsliste +% mithilfe von \pkg{hyperref} Hyperlinks auf Codezeilen respektive Seiten im +% Dokument zu setzen. +% +% Mit \cs{hypersourcedef} wird ein Textanker gesetzt, falls dieser noch nicht +% definiert wurde, was durch \cs{hypersource@def} abgesichert wird. Als +% Argument wird hierfür die aktuelle Codezeile verwendet. +% \begin{macrocode} + \newcommand*\hypersource@def{} + \newcommand*\hypersourcedef[1]{% + \ifstr{#1}{\hypersource@def}{}{% + \Hy@raisedlink{\hyperdef{}{source:#1}{}}% + \xdef\hypersource@def{#1}% + }% + }% +% \end{macrocode} +% Mit \cs{hypersource@ref@\dots} wird auf Anker im Dokument verlinkt. Dies +% erfolgt indirekt über die Attribute \val{main} bzw. \val{usage}, welche bei +% der Definitionen von Befehlen etc. im Index genutzt werden. Hierfür werden +% die dazugehörigen Makros umdefiniert. +% \begin{macrocode} + \newcommand*\hypersource@ref@codeline[2][\@firstofone]{% + \begingroup% + \def\@tempa##1{\hyperref{}{}{source:##1}{#1{##1}}}% + \forcsvlist\@tempa{#2}% + \endgroup% + }% + \newcommand*\hypersource@ref@page[2][\@firstofone]{% + \begingroup% + \def\@tempa##1{\hyperlink{page.##1}{#1{##1}}}% + \forcsvlist\@tempa{#2}% + \endgroup% + }% + \renewcommand*\main[1]{% + \ifcodeline@index% + \hypersource@ref@codeline[\underline]{#1}% + \else% + \hypersource@ref@page[\underline]{#1}% + \fi% + }% + \renewcommand*\usage[1]{\hypersource@ref@page[\textit]{#1}}% +% \end{macrocode} +% \end{macro}^^A \hypersource@ref@page +% \end{macro}^^A \hypersource@ref@codeline +% \end{macro}^^A \hypersource@def +% \end{macro}^^A \hypersourcedef +% +% \iffalse +%</doc> +% \fi +% +% Das war's. Damit sind die Ausführungen für das Paket \pkg{hyperref} beendet. +% \begin{macrocode} +} +% \end{macrocode} +% Sollte das Paket \pkg{hyperref} nicht geladen werden, wird eine Rückfallebene +% definiert, wodurch die Klasse dennoch verwendet werden kann. +% \begin{macrocode} +\TUD@UnwindPackage{hyperref}{% +% \end{macrocode} +% Zunächst die direkt innerhalb der Dokumentation verwendeten Befehle nebst +% dazugehöriger Warnung. +% \begin{macrocode} +%<*!doc> +%<*class> + \ClassWarningNoLine{tudscrmanual}% +%</class> +%<*package> + \PackageWarningNoLine{tudscrtutorial}% +%</package> + {% + It is strongly recommended to load package `hyperref'. \MessageBreak% + Nevertheless, essential commands are rudimentarily\MessageBreak% + defined. At least the package `url' is loaded% + }% +%</!doc> +% \end{macrocode} +% \begin{macro}{\hypersetup} +% \begin{macro}{\href} +% \begin{macro}{\phantomsection} +% \begin{macro}{\texorpdfstring} +% \begin{macro}{\nolinkurl} +% Einige vom Paket \pkg{hyperref} definierten Befehle werden vorgehalten. +% \begin{macrocode} + \providecommand*\hypersetup[1]{}% + \providecommand*\href[3][]{#3}% + \providecommand*\phantomsection{}% + \providecommand*\texorpdfstring[2]{#1}% + \RequirePackage{url}[2013/09/16]% + \providecommand*\nolinkurl[1]{\url{#1}}% +% \end{macrocode} +% \end{macro}^^A \nolinkurl +% \end{macro}^^A \texorpdfstring +% \end{macro}^^A \phantomsection +% \end{macro}^^A \href +% \end{macro}^^A \hypersetup +% +% \iffalse +%<*!doc> +% \fi +% +% \begin{macro}{\hyperpage} +% \begin{macro}{\autoref} +% Der Befehl \cs{autoref} wird auch in der Sternversion genutzt. +% \begin{macrocode} + \providecommand*\hyperpage[1]{#1}% + \providecommand*\autoref{??\xspace\kernel@ifstar{\ref}{\ref}}% +% \end{macrocode} +% \end{macro}^^A \autoref +% \end{macro}^^A \hyperpage +% \begin{macro}{\hyperdef} +% \begin{macro}{\hyperref} +% \begin{macro}{\tud@hyperref@a} +% \begin{macro}{\tud@hyperref@b} +% Mit \cs{hyperdef} wird ein ein Label direkt vor dem Text eingefügt. +% \begin{macrocode} + \providecommand*\hyperdef[3]{\label{#1.#2}#3}% +% \end{macrocode} +% Der Befehl \cs{hyperref} existiert in zwei Varianten. Entweder mit einem +% optionalen und einem obligatorischen Argument oder mit vier Argumenten. +% \begin{macrocode} + \providerobustcmd*\hyperref{% + \kernel@ifnextchar[{\tud@hyperref@a}{\tud@hyperref@b}% + } + \newcommand*\tud@hyperref@a[2][]{#2} + \newcommand*\tud@hyperref@b[4]{#4} +% \end{macrocode} +% \end{macro}^^A \tud@hyperref@b +% \end{macro}^^A \tud@hyperref@a +% \end{macro}^^A \hyperref +% \end{macro}^^A \hyperdef +% \begin{macro}{\partautorefname} +% \begin{macro}{\chapterautorefname} +% \begin{macro}{\sectionautorefname} +% \begin{macro}{\subsectionautorefname} +% \begin{macro}{\subsubsectionautorefname} +% Die notwendigen, lokalen Bezeichner der Gliederungsebenen. +% \begin{macrocode} + \tud@localization@german{\partautorefname}{Teil}% + \tud@localization@german{\chapterautorefname}{Kapitel}% + \tud@localization@german{\sectionautorefname}{Unterkapitel}% + \tud@localization@german{\subsectionautorefname}{Abschnitt}% + \tud@localization@german{\subsubsectionautorefname}{Unterabschnitt}% + \tud@localization@english{\partautorefname}{Part}% + \tud@localization@english{\chapterautorefname}{chapter}% + \tud@localization@english{\sectionautorefname}{section}% + \tud@localization@english{\subsectionautorefname}{subsection}% + \tud@localization@english{\subsubsectionautorefname}{subsubsection}% +% \end{macrocode} +% \end{macro}^^A \subsubsectionautorefname +% \end{macro}^^A \subsectionautorefname +% \end{macro}^^A \sectionautorefname +% \end{macro}^^A \chapterautorefname +% \end{macro}^^A \partautorefname +% Anschließend folgen die für Anwenderdokumentation eigens definierten Befehle. +% \begin{macrocode} +%<*class> + \ProvideDocumentCommand\tudhyperdef{st'm}{\label{#3}}% +%</class> + \providecommand*\tudhyperref[2]{#2}% + \providecommand*\autorefname[1][]{??\xspace}% +% +% \iffalse +%</!doc> +%<*doc> +% \fi +% +% \end{macrocode} +% Und hier der Teil für die Quelltextdokumentation. +% \begin{macrocode} + \providecommand*\hypersourcedef[1]{} + \providecommand*\hypersource@def{} + \providecommand*\hypersource@ref@codeline[2][]{} + \providecommand*\hypersource@ref@page[2][]{} +% +% \iffalse +%</doc> +% \fi +% +% \begin{macrocode} +} +% \end{macrocode} +% \begin{macro}{\hrfn} +% \changes{v2.02}{2014/08/16}{neu}^^A +% \changes{v2.04}{2015/02/18}{Schriftgröße mit \cs{scalebox}}^^A +% Mit diesem Makro können Hyperlinks im Fließtext erzeugt werden, welche +% zusätzlich noch die dazugeörige URL als Fußnote anzeigen. +% \begin{macrocode} +\newcommand*\hrfn[2]{% + \href{#1}{\trim@spaces{#2}}% + \footnote{% + \begingroup% +% \end{macrocode} +% Die Gruppe wird verwendet, um Unterstriche zu entschärfen, die im Zweifel zu +% Fehlern führen können. +% \begin{macrocode} + \def\_{_}% + \edef\@tempa{#1}% + \strut\expandafter\url\expandafter{\@tempa}% + \endgroup% + }% +} +% \end{macrocode} +% \end{macro}^^A \hrfn +% \begin{macro}{\mailto} +% Ein Makro zur Angabe einer verlinkten E"~Mail-Adresse. +% \begin{macrocode} +\newrobustcmd*\mailto[1]{\mbox{\href{mailto:#1}{\nolinkurl{#1}}}}% +% \end{macrocode} +% \end{macro}^^A \mailto +% Wenn \pkg{hyperref} geladen wird, erzeugt das Paket \pkg{babel} innerhalb von +% \cs{pdfstringdef} ziemlich viele und absolut unnötige Infos in der Form +% \texttt{Package babel Info: Redefining ngerman shorthand}. Dieser Patch dient +% zum Unterdrücken dieser Infos. +% \begin{macro}{\pdfstringdef} +% \begin{macrocode} +\AfterPackage*{hyperref}{% + \patchcmd{\pdfstringdef}{\csname HyPsd@babel@}{% + \let\bbl@info\@gobble\csname HyPsd@babel@% + }{}{\tud@patch@wrn{pdfstringdef}}% +} +% \end{macrocode} +% \end{macro}^^A \pdfstringdef +% +% \iffalse +%</body|class&doc> +%<*body> +% \fi +% +% \begin{macro}{\fullref} +% Verbesserte Referenzierungen auf Seiten. +% \begin{macrocode} +\RequirePackage{varioref}[2011/10/02] +\renewcommand*\fullref[1]{\hyperref[#1]{\autoref*{#1} \vpageref{#1}}} +% \end{macrocode} +% \end{macro}^^A \fullref +% Das Paket \pkg{microtype} wird für den optischen Randausgleich verwendet. Es +% sollte erst nach \pkg{hyperref} geladen werden. +% \begin{macrocode} +\AfterPackage*{hyperref}{\RequirePackage[babel]{microtype}[2013/05/23]} +% \end{macrocode} +% Wurde \pkg{hyperref} nicht geladen, dann soll auf \pkg{microtype} trotzdem +% nicht verzichtet werden. +% \begin{macrocode} +\TUD@UnwindPackage{hyperref}{\RequirePackage[babel]{microtype}[2013/05/23]} +% \end{macrocode} +% +% \iffalse +%</body> +%<*!doc> +%<*body> +%<*class> +% \fi +% +% \subsection{Deklarationsumgebungen für die Klasse \cls{tudscrmanual}} +% +% Die Umgebungen beiden \env{Declaration} und \env{Declaration*} sowie +% \env{Obsolete} und \env{Bundle} werden für die Beschreibung von Optionen, +% Umgebungen, Befehlen etc. verwendet, welche von \TUDScript dem Anwender zur +% Verfügung gestellt werden. +% +% \begin{macro}{\if@tud@declare} +% \begin{macro}{\if@openindex} +% \begin{macro}{\tud@declare@num} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Dies sin ein paar Hilfsmakros zur Steuerung des Markup sowie der Ausgabe von +% Deklarationen, Index und Änderungsliste, welche bei den nächsten Befehlen und +% Umgebungen genutzt werden. Mit \cs{if@tud@declare} wird festgelegt, ob die +% Befehle für das Markup in der Ausgabe als Deklaration oder anderweiteig +% erfolgt. Der Schalter \cs{if@openindex} wird zu Beginn einer Deklaration auf +% \val{true} gesetzt und vor dem Beenden auf \val{false}. Damit wird bestimmt, +% ob ein öffnender oder ein schließender Indexeintrag erzeugt werden soll. +% \begin{macrocode} +\newif\if@tud@declare +\newif\if@openindex +% \end{macrocode} +% Das Makro \cs{tud@declare@num} bestimmt innerhalb einer Deklaration, wie +% das Markup erfolgen soll. Die möglichen Werte sind bei der Beschreibung von +% \cs{Process@@MarkupDeclare} zu finden. +% \begin{macrocode} +\newcommand*\tud@declare@num{0} +% \end{macrocode} +% \end{macro}^^A \tud@declare@num +% \end{macro}^^A \if@openindex +% \end{macro}^^A \if@tud@declare +% \begin{environment}{Declaration} +% \begin{environment}{Obsolete} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\tud@declaration@list} +% \begin{macro}{\if@tud@obsolete} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Es werden einige Hilfsmakros für die Ausgabe einer Deklaration sowie der +% dazugehörigen Änderungsliste initialisiert. +% \begin{macrocode} +\newcommand*\tud@declaration@list{} +\let\tud@declaration@list\relax +% \end{macrocode} +% Die \env{Declaration}-Umgebung dient zur Deklaration von Optionen, Umgebungen, +% Befehlen, Parametern, Bezeichnern, Längen, Schriftelementen und Farben. Diese +% werden mit den entsprechenden Auszeichnungsbefehlen als obligatorisches +% Argument übergeben. Zuvor kann noch vorher im ersten optionalen Argument eine +% Beschreibung für die Änderungsliste in der Form \oarg{Verison!Beschreibung} +% angegeben werden. Danach kann im dritten Argument~-- das zweite optionale~-- +% die Voreinstellung für eine Option oder dergleichen angegeben werden. Das +% nächste optionale Argument erlaubt die Angabe einer bedingten Voreinstellung, +% also einer anderen Voreinstellung als der zuerst angegeben unter bestimmten +% Voraussetzungen. Diese wird in der Form \oarg{Bedingung:Voreinstellung} +% angegeben. Das letzte Argument ist ebenfalls optional, wird aber in der Form +% \marg{Zusatz} angegeben und enthält ggf. zusätzliche Informationen. +% +% Die Umgebung \env{Obsolete} hat eine ganz ähnliche Funktion, wird allerdings +% für die Deklaration veralteter Befehle, Umgebungen, Optionen etc. verwendet. +% Da sich beide Umgebungen stark ähneln, werden zum Start bzw. zum Abschluss +% die Makros \cs{tud@declare@start} bzw. \cs{tud@declare@end} aufgerufen. Zu +% Beginn wird nichts weiter ausgegeben sondern lediglich alle übergebenen +% Argumente in jeweiligen Listen gesammelt. Die eigentliche Ausgabe der +% Deklaration erfolgt mit dem Befehl \cs{printdeclarationlist} bezieungsweise +% \cs{printobsoletelist}. +% \begin{macrocode} +\NewDocumentEnvironment{Declaration}{omoog}{% + \listadd\tud@declaration@list{#2}% + \tud@declare@start[#1]{#2}[#3][#4]{#5}% +}{% + \tud@declare@end{#2}{\printdeclarationlist}% +} +% \end{macrocode} +% Für die Umgebung \env{Obsolete} sieht die Eingabe etwas anders aus. Das erste +% obligatorische Argument sollte eine Versionsnummer enthalten, ab wann die +% Deklaration veraltet ist. Das erste optionale Argument wird genutzt, wenn +% für eine weiterhin gültige Deklaration lediglich ein bestimmter Wert +% entfällt. Wird das erste Argument leer gelassen, erfolgt lediglich die +% Ausgabe der Deklaration ohne einen Eintrag in die Änderungsliste. Dies ist +% für Umgebungen und Befehle gedacht, bei denen lediglich ein oder mehrere +% Parameter geändert wurden bzw. entfallen. +% \begin{macrocode} +\newif\if@tud@obsolete +\NewDocumentEnvironment{Obsolete}{momoog}{% + \@tud@obsoletetrue% + \ifxblank{#1}{% +% \end{macrocode} +% Ohne Versionsnummer erfolgt die Ausgabe ohne Label. Für den Eintrag wird auch +% keine Änderungsnotiz erzeugt. +% \begin{macrocode} + \listadd\tud@declaration@list{% + \def\tud@declare@num{1}% + #3% + \def\tud@declare@num{0}% + }% + \tud@declare@start{#3}[#4][#5]{#6}% + }{% + \listadd\tud@declaration@list{#3}% +% \end{macrocode} +% Wurde ein optionales Argument angegeben, bezieht sich der Änderungseintrag +% auf ebendieses Argument, die eigentliche, obsolete Deklaration wird als +% Untereintrag genutzt. +% \begin{macrocode} + \IfValueTF{#2}{% + \Changed@At@CreateList[#2]{#1!#3}% + }{% + \Changed@At@CreateList[#3]{#1}% + }% + \IfValueTF{#6}{% + \tud@declare@start{#3}[#4][#5]{#6}% +% \end{macrocode} +% Ohne eine zusätzliche Angabe imletzten optionalen Argument wird standardmäßig +% der Entfall der Deklaration angegeben. Alternativ dazu kann im ersten +% Argument der Versionsangabe mit einem Dopppelpunkt von dieser getrennt eine +% neue bzw. aktuell gültige Deklaration als Querverweis angegeben werden. +% \begin{macrocode} + }{% + \toks@{\tud@declare@start{#3}[#4][#5]}% + \def\@tempa{\emph{entf\"allt}}% + \in@{:}{#1}% + \ifin@% + \def\@tempb##1:##2\@nil{% + \IfArgIsEmpty{##2}{}{% + \def\@tempa{\seeref{##2'page'}}% + }% + }% + \@tempb#1\@nil% + \fi% + \eaddto@hook\toks@{\expandafter{\@tempa}}% + \the\toks@% + }% + }% + \@tud@obsoletefalse% +}{% + \@tud@obsoletetrue% + \tud@declare@end{#3}{\printobsoletelist}% + \@tud@obsoletefalse% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@obsolete +% \end{macro}^^A \tud@declaration@list +% \end{environment}^^A Obsolete +% \end{environment}^^A Declaration +% \begin{macro}{\tud@preset@list} +% \begin{macro}{\if@tud@preset@list} +% \begin{macro}{\tud@additional@list} +% \begin{macro}{\if@tud@additional@list} +% Dies sind die temporären listen, die für alle Deklarationen verwendet werden. +% \begin{macrocode} +\newcommand*\tud@preset@list{} +\let\tud@preset@list\relax +\newif\if@tud@preset@list +\newcommand*\tud@additional@list{} +\let\tud@additional@list\relax +\newif\if@tud@additional@list +% \end{macrocode} +% \end{macro}^^A \if@tud@additional@list +% \end{macro}^^A \tud@additional@list +% \end{macro}^^A \if@tud@preset@list +% \end{macro}^^A \tud@preset@list +% \begin{macro}{\tud@declare@start} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\tud@declare@end} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Dies sind die Makros für die eigentliche Abarbeitung der Deklarationsbefehle +% zu Beginn und Ende der Umgebungen \env{Declaration} und \env{Obsolete}. +% \begin{macrocode} +\NewDocumentCommand\tud@declare@start{omr[]r[]m}{% +% \end{macrocode} +% Die optional angegebenen Änderungen werden mit \cs{Changed@At@CreateList} in +% der Liste \cs{tud@changedat@list} gesichert und später sowohl für die +% Randnotiz als auch die Änderungsliste verarbeitet. +% \begin{macrocode} + \Changed@At@CreateList[#2]{#1}% +% \end{macrocode} +% Hier noch die Listen für Voreinstellungen\dots +% \begin{macrocode} + \IfValueTF{#3}{% + \@tud@preset@listtrue% + \def\@tempa{Voreinstellung: \PValue{#3}}% + \IfValueT{#4}{% + \def\@tempb[##1:##2]{##1: \PValue{##2}}% + \eappto\@tempa{ | \expandonce{\@tempb[#4]}}% + }% + \listeadd\tud@preset@list{\expandonce\@tempa}% + }{% + \listadd\tud@preset@list{\relax}% + }% +% \end{macrocode} +% \dots sowie zusätliche Informationen. +% \begin{macrocode} + \IfValueTF{#5}{% + \@tud@additional@listtrue% + \listadd\tud@additional@list{(#5)}% + \in@{\Environment}{#2}% + \ifin@\listadd\tud@additional@list{\tabularnewline}\fi% + }{% + \listadd\tud@additional@list{\relax}% + \in@{\Environment}{#2}% + \ifin@% + \listadd\tud@additional@list{\relax}% + \listadd\tud@additional@list{\relax}% + \fi% + }% +} +% \end{macrocode} +% Am Ende der Umgebungen wird das übergebenen Hauptargument erneut ausgeführt, +% was zum Beenden der Indexeinträge für die jeweilige Deklaration führt +% (\cs{@openindexfalse}, siehe \cs{Process@Index}). Dafür werden die Makros für +% die Angabe obligatorischer und optionaler Parameter lokal umdefiniert. +% \begin{macrocode} +\newcommand*\tud@declare@end[2]{% + \ifx\tud@declaration@list\relax\else% + \ClassError{tudscrmanual}{\string#2\space is missing}{% + \string\tud@declaration@list\space is not empty. Did you\MessageBreak% + forget to print this list with\MessageBreak% + \string#2?% + }% + \fi% + \vskip-\lastskip% + \@tud@declaretrue\@openindexfalse#1\@tud@declarefalse% + \pagebreak[1]% +} +% \end{macrocode} +% \end{macro}^^A \tud@declare@end +% \end{macro}^^A \tud@declare@start +% \begin{environment}{Declaration*} +% \changes{v2.02}{2014/10/09}{neu}^^A +% \changes{v2.05}{2015/08/04}{Indexaufteilung/-markup für Klassen und Pakete}^^A +% Die Sternversion der Umgebung \env{Declaration*} ist für die vereinfachte +% Deklaration von Klassen, Paketen etc. gedacht, bei denen keine Ausgabe +% sondern lediglich Hyperlink, Indexeintrag und Änderungsnotiz erzeugt werden +% sollen. Hierbei werden die beiden Befehle \cs{tud@declare@special@start} und +% \cs{tud@declare@special@end} genutzt, wobei der Anker des erzeugten Labels +% nicht erhöht sondern auf der aktuellen Grundlinie erzeugt wird. +% \begin{macrocode} +\NewDocumentEnvironment{Declaration*}{om}{% + \tud@declare@special@start[#1]{#2}{2}% +}{% + \tud@declare@special@end{#2}% +} +% \end{macrocode} +% \end{environment}^^A Declaration* +% \begin{environment}{Bundle*} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Die Umgebung \env{Bundle*} wird verwendet, wenn ein zusätzliches Paket oder +% eine weitere Klasse in Ergänzung zu den Hauptklassen dokumentiert wird. +% Hierfür wird die Umgebung \env{Bundle} erst geöffnet, nachdem mit dem Makro +% \cs{tud@declare@special@start} das obligatorische Argument~-- sprich die +% Klasse oder das Paket~-- deklariert wird. Die Umgebung \env{Bundle*} sollte +% dabei direkt nach einer Gliederungsüberschrift genutzt werden, in welcher das +% zu deklarierende Element (Klasse, Paket etc.) genannt wird, da der Anker des +% erzeugten Labels weiter nach oben auf die Höhe der Überschirft verschoben +% wird. Zum Abschluss der Deklaration wird \cs{tud@declare@special@end} nach +% dem Schließen der Umgebung \env{Bundle} genutzt. +% \begin{macrocode} +\NewDocumentEnvironment{Bundle*}{om}{% + \tud@declare@special@start[#1]{#2}{3}% + \Bundle{#2}% +}{% + \endBundle% + \tud@declare@special@end{#2}% +} +% \end{macrocode} +% \end{environment}^^A Bundle* +% \begin{macro}{\tud@declare@special@start} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\tud@declare@special@end} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Die beiden dienen zur vereinfachten Deklaration. Es wird keine Ausgabe +% sondern lediglich Hyperlink, Indexeintrag und Änderungsnotiz erzeugt. Das +% optionale Argument dient einem Änderungseintrag, das erste obligaotrische +% gilt der eigentlichen Deklaration, das zweite zur Einstellung des Makros +% \cs{tud@declare@num}, mit welchem das Verhalten für das Erzeugen der Labels +% gesteuert wird. +% \begin{macrocode} +\NewDocumentCommand\tud@declare@special@start{omm}{% + \Changed@At@CreateList(#2){#1}% + \def\tud@declare@num{#3}% + \@tud@declaretrue\@openindextrue#2\@tud@declarefalse% + \def\tud@declare@num{0}% +} +\newcommand*\tud@declare@special@end[1]{% + \ifx\tud@changedat@list\relax\else% + \ClassError{tudscrmanual}{\string\printchangedatlist\space is missing}{% + \string\tud@changedat@list\space is not empty. Did you\MessageBreak% + forget to print this list with \string\printchangedatlist?% + }% + \fi% + \@tud@declaretrue\@openindexfalse#1\@tud@declarefalse% +} +% \end{macrocode} +% \end{macro}^^A \tud@declare@special@end +% \end{macro}^^A \tud@declare@special@start +% \begin{macro}{\printdeclarationlist} +% \begin{length}{\tud@lastskip} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\index} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\label} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Mit dem Befehl \cs{printdeclarationlist} erfolgt die eingentliche Ausgabe +% aller Deklarationen. Zweck ist es, mehrere \env{Declaration}-Umgebungen +% ineinander verschachteln zu können und eine Ausgabe aller auf einmal zu +% erzeugen. Die durch die ggf. nacheinander folgenden Deklarationen wurden in +% entsprechenden Listen gesammelt und werden hier jetzt formatiert ausgegben. +% +% Da die Verwendung der Befehle \cs{index} und \cs{label} nach Überschriften +% dazu führt, dass \cs{addvspace} nicht mehr richtig verendet werden kann, +% wird hier etwas gebastelt, damit das trotzdem funktioniert. Dabei wird +% einfach bei der verwendung der genannten Befehle der zuvor gesetzte vertikale +% Abstand in \cs{tud@lastskip} gesichert. +% \begin{macrocode} +\newskip\tud@lastskip +\pretocmd{\index}{\tud@lastskip=\lastskip}{}{\tud@patch@wrn{index}} +\pretocmd{\label}{\tud@lastskip=\lastskip}{}{\tud@patch@wrn{label}} +\NewDocumentCommand\printdeclarationlist{!s !d()}{% + \ifx\tud@declaration@list\relax\else% + \ifhmode% + \vskip\medskipamount% + \else% +% \end{macrocode} +% Im vertikalen modus wird dann einfach vom eigentlich gewünschten Abstand der +% durch \cs{label} bzw. \cs{index} erzwungene vertikale Freiraum abgezogen. +% Sollte dann noch ein positiver Wert bestehen, wird dieser einfach zusätzlich +% gesetzt. +% \begin{macrocode} + \@tempskipa=\glueexpr\medskipamount-\tud@lastskip\relax% + \ifdim\@tempskipa>\z@\relax% + \addpenalty{\@beginparpenalty}% + \addvspace{\@tempskipa}% + \fi% + \fi% +% \end{macrocode} +% Anschließend wird die Länge auf jeden Fall zurückgesetzt. +% \begin{macrocode} + \global\tud@lastskip=\z@% + \@afterindentfalse\@afterheading% + \@tud@declaretrue\@openindextrue% +% \end{macrocode} +% Die deklarierten Optionen, Umgebungen, Befehle etc. werden umrahmt. Dabei +% erfolgt die Ausgabe mithilfe einer Box, um die Größe des Deklarationsrahmens +% zu speichern und die Änderungsmarkierung am Seitenrand auf die richtige Höhe +% zu platzieren. Da innerhalb von Tabellen der Wert von \cs{baselineskip} auf +% \makeatletter\the\z@\makeatother~gesetzt wird, muss für einen richtig +% platzierten Link dieser in \cs{HyperRaiseLinkDefault} gesichert werden. +% \begin{macrocode} + \def\@tempa##1{\ignorespaces##1\tabularnewline}% + \edef\HyperRaiseLinkDefault{\the\baselineskip}% + \sbox\z@{% + \begin{tabular}{|l|}% + \hline% + \forlistloop\@tempa{\tud@declaration@list}% + \hline% + \end{tabular}% + }\usebox\z@% + \@tud@declarefalse% +% \end{macrocode} +% Danach werden ggf. die Voreinstellungen und Zusatzinformationen in etwas +% kleinerer Schrift gesetzt. +% \begin{macrocode} + \ifboolexpr{bool {@tud@preset@list} or bool {@tud@additional@list}}{% + \def\@tempa##1{\small\ignorespaces##1\tabularnewline}% + \hskip1.2em% + \if@tud@preset@list% + \begin{tabular}{@{}l@{}}% + \forlistloop\@tempa{\tud@preset@list}% + \end{tabular}% + \hspace{\tabcolsep}% + \fi% + \if@tud@additional@list% + \begin{tabular}{@{}l@{}}% + \forlistloop\@tempa{\tud@additional@list}% + \end{tabular}% + \fi% + }{}% +% \end{macrocode} +% Alle für die Deklaration verwendeten Listen werden nach ihrer Abarbeitung +% zurückgesetzt. +% \begin{macrocode} + \global\let\tud@declaration@list\relax% + \global\let\tud@preset@list\relax% + \global\let\tud@additional@list\relax% + \global\@tud@preset@listfalse% + \global\@tud@additional@listfalse% +% \end{macrocode} +% Die Einträge in der Änderungsliste sowie die dazugehörige Randnotiz werden +% innerhalb der Deklaration mit \cs{printchangedatlist} erzeugt. Das optionale +% Argument sorgt für die Verschiebung der Randnotiz auf die richtige Höhe, um +% den Höhenversatz zwischen Randnotiz und Deklarationsrahmen auszugleichen. +% \begin{macrocode} + \print@changedatlist{#1}{% + \dimexpr.5\ht\strutbox+.5\dp\strutbox-.5\ht0-.5\dp0\relax% + }% +% \end{macrocode} +% Zum Schluss wird das optionale Argument (in runden Klammern) neben der +% Deklarationsbox ausgegeben. +% \begin{macrocode} + \IfValueT{#2}{#2}% + \par\nobreak% + \vskip\medskipamount% + \@afterindentfalse\@afterheading% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \label +% \end{macro}^^A \index +% \end{length}^^A \tud@lastskip +% \end{macro}^^A \printdeclarationlist +% \begin{macro}{\printobsoletelist} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Damit werden Deklarationen der Umgebung \env{Obsolete} ausgegeben. +% \begin{macrocode} +\newcommand*\printobsoletelist{% + \@tud@obsoletetrue% + \printdeclarationlist*% + \@tud@obsoletefalse% +} +% \end{macrocode} +% \end{macro}^^A \printobsoletelist +% \begin{macro}{\printchangedatlist} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Damit werden Änderungsnotizen der Umgebungen \env{Declaration*}, \env{Bundle} +% und \env{Bundle*} ausgegeben. +% \begin{macrocode} +\NewDocumentCommand\printchangedatlist{!s !O{\z@}}{% + \print@changedatlist{#1}{#2}% +} +% \end{macrocode} +% \end{macro}^^A \printchangedatlista +% +% \iffalse +%</class> +% \fi +% +% \subsection{Markup von Klassen, Paketen, Optionen und weiteren Elementen} +% +% Es folgen die Definitionen für Befehle und Umgebungen für Klasse und Paket, +% welche sich überschneidenden und für beide benötigt werden. Allerdings sind +% diese für Klasse und Paket in ihrer Implementierung teilweise unterschiedlich. +% +% Als erstes werden für Klasse und Paket einige Hilfmakros definiert. +% +% \begin{macro}{\bsc} +% \changes{v2.02}{2014/07/22}{\cs{newrobustcmd} aus \pkg{etoolbox} anstatt +% \cs{DeclareRobustCommand}}^^A +% Eine einfacher zu verwendende Kurzform. +% \begin{macrocode} +\newrobustcmd*\bsc{\@backslashchar} +% \end{macrocode} +% \end{macro}^^A \bsc +% \begin{macro}{\suffix} +% \changes{v2.05}{2015/10/27}{neu}^^A +% Für alle möglichen, zusätzlichen Informationen bei Deklarationen, im Index +% oder der normalen in Ausgabe im Fließtext wird eine etwas kleinere Schrift +% verwendet. +% \begin{macrocode} +\newrobustcmd*\suffix[1]{\begingroup~\scriptsize(#1)\endgroup} +% \end{macrocode} +% \end{macro}^^A \suffix +% \begin{macro}{\NewExpandableDocumentCommand} +% \changes{v2.02}{2014/11/04}{neu}^^A +% \changes{v2.05i}{2017/03/12}{wird mittlerweile von \pkg{xparse} definiert}^^A +% Für Labels, Index- und Änderungs- sowie PDF-Outline-Einträge etc. müssen ganz +% bestimmte Markup-Befehle durch eine expandierbare Version ersetzt werden. Um +% dies möglichst einfach zu gestalten, wird \cs{NewExpandableDocumentCommand} +% definiert. +% \begin{macrocode} +\providecommand*\NewExpandableDocumentCommand[3]{% + \NewDocumentCommand#1{#2}{}% + \DeclareExpandableDocumentCommand#1{#2}{#3}% +} +% \end{macrocode} +% \end{macro}^^A \NewExpandableDocumentCommand +% +% \subsubsection{Definition der Markup-Befehle} +% +% \changes{v2.05}{2015/11/02}{Markup-Befehle komplett überarbeitet}^^A +% +% Im Folgenden werden allerhand Befehle mit Hilfe des Paketes \pkg{xparse} +% definiert, um bestimmte Begriffe, Klassen, Pakete, Optionen, Umgebungen, +% Befehle, Parameter, Bezeichner, Längen, Schriftelemente und Farben speziell +% auszuzeichnen. Diese Befehle lauten für Klasse und Paket aus Gründen der +% Konsistenz zwar gleich, unterschieden sich jedoch ein klein wenig in der +% Implementierung. +% +% Die Sternversion all dieser Befehlen tragen nichts in den Index ein. Für +% (fast) alle der folgenden Befehle gilt, dass diese mit zwei optionalen +% Argumenten am Ende genutzt werden können. Sollte ein Label existieren, wird +% automatisch ein Hyperlink erzeugt, welcher mit der optionalen Angabe von +% |'|\meta{Referenzvariante}|'| um einen textuellen Querverweis ergänzt werden +% kann. Mit \verb=|=\meta{Indexmarkup}\verb=|= kann die Erscheinung im Index +% angepasst werden. Bei einigen Befehlen kann zusätzlich zuvor im Markup mit +% dem optionalen Argument \parg{Bundleelement} die Zuweisung auf ein bestimmtes +% Paket oder eine Klasse aus dem \TUDScript-Bundle erfolgen. +% +% Die eigentliche Behandlung erfolgt mit dem Befehl \cs{Process@Markup}, +% welcher die tatsächliche Auszeichnung im Fließtext bzw. als Deklaration +% übernimmt. Das Auszeichnungsformat wird dafür zuvor mit \cs{Markup@SetFormat} +% festgelegt. Ein Eintrag in den Index wird mit \cs{Process@Index} realisiert. +% Für die Änderungsliste wird der Befehl \cs{Process@ChangedAt} genutzt, um die +% entsprechende Formatierung zu gewährleisten, wobei dies nur für die Klasse +% \cls{tudscrmanual} und nicht für das Paket \pkg{tudscrtutorial} gilt. +% +% \begin{macro}{\ProcessorKeyVal} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\tud@keyval@error} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Bei Optionen und Parametern können spezielle Werte einfach im Hauptargument +% durch |=| getrennt angegeben werden. Um diese auszuwerten, wird dieser Befehl +% definiert, welcher als Argumentprozessor verwendet wird. +% \begin{macrocode} +\newcommand*\ProcessorKeyVal[1]{% + \begingroup% + \in@{=}{#1}% +% \end{macrocode} +% Wird im Argument ein |=| gefunden, so wird alles Darauffolgende als Wert +% erkannt und dem eigentlichen Hauptargument bei der Ausgabe angehangen. Das +% Makro, welches diesen Argumentprozessor verwendet, erhält als Ausgabe also +% entweder \marg{Schlüssel} oder \marg{Schlüssel}|=|\meta{Wert}|=| falls +% \cs{ProcessorKeyVal} mit \marg{Schlüssel=Wert} verwendet wurde. +% \begin{macrocode} + \ifin@% + \def\@tempa##1=##2\@nil{\toks@{{##1}=##2=}}% + \else% + \def\@tempa##1\@nil{\toks@{{##1}}}% + \fi% + \@tempa#1\@nil% + \edef\tud@reserved{% + \noexpand\endgroup% + \def\noexpand\ProcessedArgument{\the\toks@}% + }% + \tud@reserved% +} +% \end{macrocode} +% Es gibt auch noch eine interne Variante für ein optioneles Werte-Argument. +% Dabei sollte vermieden werden, dass im Markup das Argument für einen Wert +% doppelt angegeben wird. In diesem Fall wird dieser Fehler ausgegeben. +% \begin{macrocode} +\newcommand*\tud@keyval@error{% +%<*class> + \ClassError{tudscrmanual}% +%</class> +%<*package> + \PackageError{tudscrtutorial}% +%</package> + {Wrong usage of optional argument for value}% + {There are two optional arguments for a value given!}% +} +% \end{macrocode} +% \end{macro}^^A \tud@keyval@error +% \end{macro}^^A \ProcessorKeyVal +% \begin{environment}{Bundle} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\tud@bdl@curr} +% \changes{v2.05}{2015/08/04}{neu}^^A +% \begin{macro}{\tud@bdl@dflt} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\tud@if@bdl} +% \changes{v2.05}{2015/08/04}{neu}^^A +% Die Umgebung \env{Bundle} kann nicht verschachtelt werden und prüft zuerst +% dementsprechend die Verwendung. Anschließend wird lediglich das Makro +% \cs{tud@bdl@curr} auf das übergebene Argument gesetzt, um innerhalb der +% Umgebung erstellte Label und Indexeinträge zu beeinflussen. +% \begin{macrocode} +\newenvironment{Bundle}[1]{% + \tud@if@bdl{% +%<*class> + \ClassError{tudscrmanual}% +%</class> +%<*package> + \PackageError{tudscrtutorial}% +%</package> + {Nested environment `Bundle'}{% + It is not possible to nest this environment, when\MessageBreak% + a cross-label was given before.% + }% + }{% + \gdef\tud@bdl@curr{#1}% + }% + \ignorespaces% +}{% + \global\let\tud@bdl@curr\tud@bdl@dflt% + \aftergroup\ignorespaces% +} +% \end{macrocode} +% Diese Makros werden für das Definieren eines Bundle-Elements und ggf. das +% Prüfen des selbigen benötigt. +% \ToDo{Suffixe wie Klasse, Paket etc. lokalisieren (locale)}[v2.??] +% \begin{macrocode} +\newcommand*\tud@bdl@curr{} +\newcommand*\tud@bdl@dflt{tudscr} +\let\tud@bdl@curr\tud@bdl@dflt +\newcommand*\tud@if@bdl[2]{\ifstr{\tud@bdl@curr}{\tud@bdl@dflt}{#2}{#1}} +% \end{macrocode} +% \end{macro}^^A \tud@if@bdl +% \end{macro}^^A \tud@bdl@dflt +% \end{macro}^^A \tud@bdl@curr +% \end{environment}^^A Bundle +% \begin{macro}{\Application} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\@Application} +% Die Auszeichnung und der Indexeintrag einer Anwendungssoftware. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Application{sm}{#2} +\NewDocumentCommand\Application{s m !d() !d<> !d||}{% + \Markup@SetFormat{\sbsfont}% + \IfValueTF{#4}{% + \Process@Markup{\Application{#2}}(#3)<#4>% + }{% + \Process@Markup{\Application{#2}}(#3)% + }% + \Process@Index{#1}{\Application{#2}}[Anwendungssoftware](#3)|#5|% +} +% \end{macrocode} +% \end{macro}^^A \@Application +% \end{macro}^^A \Application +% \begin{macro}{\Distribution} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\@Distribution} +% Die Auszeichnung und der Indexeintrag einer \LaTeX-Distribution. Das +% optionale Argument kann für das Anhängen einer Versionsnummer o.\,ä. im +% Fließtext genutzt werden. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Distribution{sm}{#2} +\NewDocumentCommand\Distribution{s m !o !d() !d||}{% + \Markup@SetFormat{\sbnfont}% + \IfValueTF{#3}{% + \Process@Markup{\Distribution{#2}}[~#3](#4)% + }{% + \Process@Markup{\Distribution{#2}}(#4)% + }% + \Process@Index{#1}{\Distribution{#2}}[Distribution](#4)|#5|% +} +% \end{macrocode} +% \end{macro}^^A \@Distribution +% \end{macro}^^A \Distribution +% \begin{macro}{\Engine} +% \changes{v2.05}{2015/11/04}{neu}^^A +% \begin{macro}{\@Engine} +% \changes{v2.05}{2015/11/04}{neu}^^A +% Die Auszeichnung und der Indexeintrag für ein bestimmtes Textsatzsystem. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Engine{sm}{#2} +\NewDocumentCommand\Engine{s m !d() !d||}{% + \Markup@SetFormat{\sbnfont}% + \Process@Markup{\Engine{\hologo{#2}}}(#3)% + \Process@Index{#1}{\Engine{#2}}[Textsatzsystem](#3)|#4|% +} +% \end{macrocode} +% \end{macro}^^A \@Engine +% \end{macro}^^A \Engine +% \begin{macro}{\Path} +% Pfade werden ohne zusätzliches Markup ausgegeben. +% \begin{macrocode} +\newrobustcmd*\Path[1]{\mbox{\texttt{#1}}} +% \end{macrocode} +% \end{macro}^^A \Path +% \begin{macro}{\File} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\@File} +% Die Auszeichnung und der Indexeintrag einer Datei. +% \begin{macrocode} +\NewExpandableDocumentCommand\@File{sm}{#2} +\NewDocumentCommand\File{s m !d() !d||}{% + \Markup@SetFormat{\sbnfont}% + \Process@Markup{\File{#2}}(#3)% + \Process@Index{#1}{\File{#2}}[Datei](#3)|#4|% +} +% \end{macrocode} +% \end{macro}^^A \@File +% \end{macro}^^A \File +% \begin{macro}{\Class} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\@Class} +% Die Auszeichnung und der Indexeintrag einer Klasse. Das optionale Argument +% zwischen Apostrophen kann für die Formatierung eines Querverweises im Text +% genutzt werden, das optionale Argument zwischen senkrechten Strichen dient +% der Formatierung des Indexeintrages. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Class{sm}{#2} +\NewDocumentCommand\Class{s m !d() !d'' !d||}{% +%<*class> + \if@tud@changedat% + \Process@ChangedAt{\Class{#2}}[Klasse]% + \else% +%</class> + \Markup@SetFormat{\sbnfont}% + \Process@Markup{\Class{#2}}(#3)'#4'% + \Process@Index{#1}{\Class{#2}}[Klasse](#3)|#5|% +%<*class> + \fi% +%</class> +} +% \end{macrocode} +% \end{macro}^^A \@Class +% \end{macro}^^A \Class +% \begin{macro}{\Package} +% \changes{v2.02}{2014/07/10}{Ausgabe für Änderungsliste hinzugefügt}^^A +% \begin{macro}{\@Package} +% Für die Auszeichnungen von Paketen gelten vorherigen Aussagen äquivalent. +% Für Pakete wird ergänzend ein Hyperlink auf CTAN erzeugt, wenn für dieses +% kein Label im Dokument besteht. Genaueres ist der Beschreibung und Definition +% von \cs{Process@Markup} zu entnehmen. Das optionale Argument in einfachen +% Guillemets dient zum Anpassen des CTAN-Links, welcher normalerweise aus +% obligatorischen Argument generiert wird. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Package{sm}{#2} +\NewDocumentCommand\Package{s m !d() !d<> !d'' !d||}{% +%<*class> + \if@tud@changedat% + \Process@ChangedAt{\Package{#2}}[Paket]% + \else% +%</class> + \Markup@SetFormat{\sbnfont}% + \IfValueTF{#4}{% + \Process@Markup{\Package{#2}}(#3)<#4>'#5'% + }{% + \Process@Markup{\Package{#2}}(#3)<#2>'#5'% + }% + \Process@Index{#1}{\Package{#2}}[Paket](#3)|#6|% +%<*class> + \fi% +%</class> +} +% \end{macrocode} +% \end{macro}^^A \@Package +% \end{macro}^^A \Package +% \begin{macro}{\Option} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\Option@Value} +% \changes{v2.05}{2015/11/02}{neu}^^A +% \begin{macro}{\@Option} +% \changes{v2.02}{2014/11/02}{neu}^^A +% Im Gegensatz zu den vorherigen Befehlen, kann im Hauptargument ein spezieller +% Wert für eine Option optional durch ein |=| getrennt angegeben werden. Durch +% den Argumentprozessor \cs{ProcessorKeyVal} wird dieses vom eigentlichen +% Schlüssel getrennt. Dabei wird der gegebene Schlüssel immer in der Form +% \marg{Schlüssel} ausgegeben. Sollte ein optionaler Wert gegeben worden sein, +% wird dieser in der Form |=|\meta{Wert}|=| einfach angehängt und als optionales +% Argument von \cs{Option@Value} weiter verarbeitet. Mit dem optionalen Argument +% in runden Klammern kann ggf. auf eine Option aus einem \TUDScript-Paket +% verwiesen werden. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Option{sm}{#2} +\NewDocumentCommand\Option{s >{\ProcessorKeyVal}m !d== !d() !d'' !d||}{% + \Option@Value{#1}#2=#3=(#4)'#5'|#6|% +} +% \end{macrocode} +% Für die interne Verwendung kann das optionale Argument für den Wert auch +% direkt mit |=|\meta{Wert}|=| angehangen werden. Um die gleichzeitige +% Verwendung beider Varianten zu unterdrücken, wird in diesem Fall ein Fehler +% erzeugt. +% \ToDo{% +% Eigentlich sollte der Wert hier formatiert werden. Wünschenswert wäre die +% Angabe von \val{Option=Wert} und \val{Option=<Spezialwert>}, damit das +% Gezerre mit der Spezialbehandlung von \cs{PSet} etc. wegfallen könnte, +% siehe \cs{tud@declare@start} +% }[v2.??]% +% \begin{macrocode} +\NewDocumentCommand\Option@Value{mmd==d==d()d''d||}{% + \IfValueT{#4}{\tud@keyval@error}% +%<*class> + \if@tud@changedat% + \Process@ChangedAt{\Option{#2}}=#3=[Option](#5)% + \else% +%</class> + \Markup@SetFormat{\ttfamily}% + \Process@Markup{\Option{#2}}=#3=(#5)'#6'% + \Process@Index{#1}{\Option{#2}}=#3=(#5)|#7|% +%<*class> + \fi% +%</class> +} +% \end{macrocode} +% \end{macro}^^A \@Option +% \end{macro}^^A \Option@Value +% \end{macro}^^A \Option +% \begin{macro}{\Environment} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\@Environment} +% \changes{v2.02}{2014/11/02}{neu}^^A +% Bei diesem Makro dient das optionale Argument für die Ausgabe der möglichen +% Umgebungsargumente bzw. -parameter \emph{bei der Deklaration}. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Environment{sm}{#2} +\NewDocumentCommand\Environment{s m !o !d() !d'' !d||}{% +%<*class> + \if@tud@changedat% + \Process@ChangedAt{\Environment{#2}}[Umgebung](#4)% + \else% +%</class> +% \end{macrocode} +% Außerdem wird für den Fall, dass der \cs{Environment}-Befehl innerhalb der +% Umgebung \env{Declaration} verwendet wird, eine spezielle Ausgabe erzeugt. +% Nur hier kommt das optionale Argument von \cs{Markup@SetFormat} nach dem +% Hauptargument zum Tragen. Die resultierende Ausgabe hat die Gesatlt: +% +% \begin{tabular}{l}% +% \cs{begin}\marg{Umgebung}\tabularnewline +% \dots\tabularnewline +% \cs{end}\marg{Umgebung}\tabularnewline +% \end{tabular}% +% \begin{macrocode} + \Markup@SetFormat{\ttfamily}(% + \ttfamily\bsc{}begin\textbraceleft#2\textbraceright\IfValueT{#3}{#3}% + \tabularnewline\ttfamily\dots% + \tabularnewline\ttfamily\bsc{}end\textbraceleft#2\textbraceright% + )% + \Process@Markup{\Environment{#2}}[#3](#4)'#5'% + \Process@Index{#1}{\Environment{#2}}[Umgebung](#4)|#6|% +%<*class> + \fi% +%</class> +} +% \end{macrocode} +% \end{macro}^^A \@Environment +% \end{macro}^^A \Environment +% \begin{macro}{\Macro} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\@Macro} +% \changes{v2.02}{2014/11/02}{neu}^^A +% Die Auszeichnung und der Indexeintrag eines Befehls. Das ordinäre optionale +% Argument ist für das Anhängen von Parametern o.\,ä. nach dem eigentlichen +% Makro zu verwenden. Das optionale Argument in runden Klammern dient dem +% Hyperlink zu einem Befehl aus einem anderen Paket oder einer anderen Klasse +% aus dem \TUDScript-Bundle. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Macro{sm}{#2} +\NewDocumentCommand\Macro{s m !o !d() !d'' !d||}{% +%<*class> + \if@tud@changedat% + \Process@ChangedAt{\Macro{#2}}[Befehl](#4)% + \else% +%</class> + \Markup@SetFormat[\bsc]{\ttfamily}% + \Process@Markup{\Macro{#2}}[#3](#4)'#5'% + \Process@Index{#1}{\Macro{#2}}(#4)|#6|% +%<*class> + \fi% +%</class> +} +% \end{macrocode} +% \end{macro}^^A \@Macro +% \end{macro}^^A \Macro +% \begin{macro}{\Length} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\@Length} +% Die Auszeichnung und der Indexeintrag einer \LaTeX-Länge. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Length{sm}{#2} +\NewDocumentCommand\Length{s m !d() !d'' !d||}{% +%<*class> + \if@tud@changedat% + \Process@ChangedAt{\Length{#2}}[L\"ange](#3)% + \else% +%</class> + \Markup@SetFormat[\bsc]{\ttfamily}[L\"ange]% + \Process@Markup{\Length{#2}}(#3)'#4'% + \Process@Index{#1}{\Length{#2}}[L\"ange](#3)|#5|% +%<*class> + \fi% +%</class> +} +% \end{macrocode} +% \end{macro}^^A \@Length +% \end{macro}^^A \Length +% \begin{macro}{\Counter} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% Die Auszeichnung und der Indexeintrag einer \LaTeX-Zählers. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Counter{sm}{#2} +\NewDocumentCommand\Counter{s m !d() !d'' !d||}{% +%<*class> + \if@tud@changedat% + \Process@ChangedAt{\Counter{#2}}[Z\"ahler](#3)% + \else% +%</class> + \Markup@SetFormat{\ttfamily}[Z\"ahler]% + \Process@Markup{\Counter{#2}}(#3)'#4'% + \Process@Index{#1}{\Counter{#2}}[Z\"ahler](#3)|#5|% +%<*class> + \fi% +%</class> +} +% \end{macrocode} +% \end{macro}^^A \Counter +% +% \iffalse +%<*class> +% \fi +% +% \minisec{Exklusive Auszeichnungen für die Klasse} +% Alle weiteren Befehle werden ausschließlich für die Klasse \cls{tudscrmanual} +% definiert. +% +% \begin{macro}{\Key} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\Key@Value} +% \changes{v2.05}{2015/11/02}{neu}^^A +% \begin{macro}{\@Key} +% Die Auszeichnung und der Indexeintrag eines Parameters für Umgebungen und +% Befehle. Das erste Argument ist die Umgebung oder der Befehl, wofür der +% Parameter gültig ist. Das zweite Argument ist der Parameter selbst. Die +% optionale Zuweisung eines Wertes kann äquivalent zu \cs{Option} mit dem +% Trennzeichen~|=| im Hauptargument erfolgen. +% \ToDo{% +% Eigentlich sollte der Wert hier formatiert werden. Die Angabe von +% \val{Parameter=Wert} und \val{Parameter=<Spezialwert>} wäre gut, damit +% das Gezerre mit der Spezialbehandlung von \cs{PSet} etc. wegfallen könnte, +% siehe \cs{tud@declare@start} +% }[v2.??]% +% \begin{macrocode} +\NewExpandableDocumentCommand\@Key{smm}{#2!#3} +\NewDocumentCommand\Key{s m >{\ProcessorKeyVal}m !d== !d() !d'' !d||}{% + \Key@Value{#1}{#2}#3=#4=(#5)'#6'|#7|% +} +\NewDocumentCommand\Key@Value{mmmd==d==d()d''d||}{% + \IfValueT{#5}{\tud@keyval@error}% + \if@tud@changedat% + \Process@ChangedAt{\Key{#2}{#3}}=#4=[Parameter](#6)% + \else% + \Markup@SetFormat{\ttfamily}[Parameter]% + \Process@Markup{\Key{#2}{#3}}=#4=(#6)'#7'% + \Process@Index{#1}{\Key{#2}{#3}}=#4=(#6)|#8|% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \@Key +% \end{macro}^^A \Key@Value +% \end{macro}^^A \Key +% \begin{macro}{\Term} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\@Term} +% Die Auszeichnung und der Indexeintrag eines sprachabhängigen Bezeichners. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Term{sm}{#2} +\NewDocumentCommand\Term{s m !d() !d'' !d||}{% + \if@tud@changedat% + \Process@ChangedAt{\Term{#2}}[Bezeichner](#3)% + \else% + \Markup@SetFormat[\bsc]{\ttfamily}[Bezeichner]% + \Process@Markup{\Term{#2}}(#3)'#4'% + \Process@Index{#1}{\Term{#2}}(#3)|#5|% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \@Term +% \end{macro}^^A \Term +% \begin{macro}{\PageStyle} +% \changes{v2.02}{2014/07/25}{neu}^^A +% \begin{macro}{\@PageStyle} +% Die Auszeichnung und der Indexeintrag eines Seitenstils. +% \begin{macrocode} +\NewExpandableDocumentCommand\@PageStyle{sm}{#2} +\NewDocumentCommand\PageStyle{s m !d() !d'' !d||}{% + \if@tud@changedat% + \Process@ChangedAt{\PageStyle{#2}}[Seitenstil](#3)% + \else% + \Markup@SetFormat{\ttfamily}[Seitenstil]% + \Process@Markup{\PageStyle{#2}}(#3)'#4'% + \Process@Index{#1}{\PageStyle{#2}}[Seitenstil](#3)|#5|% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \@PageStyle +% \end{macro}^^A \PageStyle +% \begin{macro}{\Font} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\@Font} +% Die Auszeichnung und der Indexeintrag eines Schriftelementes. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Font{sm}{#2} +\NewDocumentCommand\Font{s m !d() !d'' !d||}{% + \if@tud@changedat% + \Process@ChangedAt{\Font{#2}}[Schriftelement](#3)% + \else% + \Markup@SetFormat{\ttfamily}[Schriftelement]% + \Process@Markup{\Font{#2}}(#3)'#4'% + \Process@Index{#1}{\Font{#2}}[Schriftelement](#3)|#5|% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \@Font +% \end{macro}^^A \Font +% \begin{macro}{\Color} +% \changes{v2.02}{2014/10/08}{überarbeitet}^^A +% \begin{macro}{\@Color} +% Die Auszeichnung und der Indexeintrag einer Farbe des \CDs. Das optionale +% Argument kann sowohl bei der Deklaration als auch im Fließtext für das +% Anhängen eines Suffix verwendet werden. Alle mit \cs{Color} ausgezeichneten +% Farben referenzieren standardmäßig auf das Paket \pkg{tudscrcolor}. +% \begin{macrocode} +\NewExpandableDocumentCommand\@Color{sm}{#2} +\NewDocumentCommand\Color{s m !o !D(){\Package{tudscrcolor}} !d'' !d||}{% + \if@tud@changedat% + \Process@ChangedAt{\Color{#2}}[Farbe](#4)% + \else% + \Markup@SetFormat{\ttfamily}[Farbe](% + \begingroup\ttfamily{#2\IfValueT{#3}{~(#3)}}\endgroup% + )% + \Process@Markup{\Color{#2}}[#3](#4)'#5'% + \Process@Index{#1}{\Color{#2}}[Farbe](#4)|#6|% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \@Color +% \end{macro}^^A \Color +% +% \iffalse +%</class> +% \fi +% +% \subsubsection{Zuordnung der Markup-Befehle für Label und Index} +% +% \begin{macro}{\tud@attr@get} +% \changes{v2.05}{2015/11/03}{neu}^^A +% Der Befehl \cs{tud@attr@get} ordnet den einzelnen Markup-Befehlen ihren +% spezifischen Präfix für ein Label oder in der Sternversion den passenden +% Index zu. Im ersten obligatorischen Argument wird ein Makro angegeben, +% welches die Zuordnung enthalten soll, das zweite ist der Markup-Befehl selbst. +% \begin{macrocode} +\NewDocumentCommand\tud@attr@get{smm}{% + \begingroup% +% \end{macrocode} +% Das temporäre Makro \cs{@tempa} definiert zunächst alle Markup-Befehle in +% einer Gruppe neu und expandiert beim Aufruf jedes dieser lokal umdefinierten +% Markup-Befehle~-- abhängig vom Aufruf von \cs{tud@attr@get} mit oder ohne +% Stern~-- entweder zum Markup-Befehl passenden Index oder zum entsprechenden +% Labelpräfix in \cs{@tempb}. +% \begin{macrocode} + \def\@tempa##1##2##3{% + \def##1####1{% + \edef\@tempb{\IfBooleanTF{#1}{##2}{##3}}% + }% + }% + \@tempa\Application{\jobname}{app}% + \@tempa\Distribution{\jobname}{dst}% + \@tempa\Engine{\jobname}{eng}% + \@tempa\File{files}{fle}% + \@tempa\Class{files}{cls}% + \@tempa\Package{files}{pkg}% + \@tempa\Option{options}{opt}% + \@tempa\Environment{macros}{env}% + \@tempa\Macro{macros}{cmd}% + \@tempa\Length{misc}{len}% + \@tempa\Counter{misc}{cnt}% +% \end{macrocode} +% Da \cs{Key} mit zwei Hauptargumenten aufgerufen wird, ist nur die Expansion +% des ersten Argumentes in \cs{@tempb} notwendig. +% \begin{macrocode} +%<*class> + \def\Key##1##2{% + \edef\@tempb{\IfBooleanTF{#1}{macros}{key}}% + }% + \@tempa\Term{terms}{term}% + \@tempa\PageStyle{elements}{pgs}% + \@tempa\Font{elements}{font}% + \@tempa\Color{elements}{clr}% +%</class> +% \end{macrocode} +% Nachdem alle Markup-Befehle lokal redefiniert wurden, wird der nun angegebene +% Befehl ausgeführt, was zum eigentlichen Definieren von \cs{@tempb} führt. +% \begin{macrocode} + #3% +% \end{macrocode} +% Damit alle Änderungen der temporären Makros lokal bleiben, wird das Ergebnis +% nach der Gruppe in das erste obligatorische Argument expandiert. +% \begin{macrocode} + \edef\tud@reserved{% + \noexpand\endgroup% + \def\noexpand#2{\@tempb}% + }% + \tud@reserved% +} +% \end{macrocode} +% \end{macro}^^A \tud@attr@get +% +% \subsubsection{Markup von Variablen, Parametern etc.} +% +% \ToDo{% +% Verwendung der Befehle überprüfen, evtl. umbennenen. Wozu \cs{PValueName}?% +% Evtl. sollte \cs{PValue} innerhalb von \cs{PName} lokal geändert werden? +% Was passiert, wenn auch \cs{PName} von \cs{tud@doifPValue} akzeptiert? +% Zeile 542--546 in tudscr-hints, 294 in tudscr-packages +% }[v2.??]% +% \ToDo{% +% nach '=\cs{P(Value)?Name}' in *.tex suchen und ggf. +% überarbeiten; \cs{PValueName} umbenennen% +% }[v2.??]% +% \ToDo{% +% bei der Deklaration evtl. ein Hilfsmakro erstellen und den +% Default-Eintrag hinterlegen, um ggf. darauf zu prüfen% +% }[v2.??]% +% \ToDo{% +% neues Makro \cs{PLength} mit \cs{PName\{Längenwert\}} +% }[v2.??]% +% \begin{macro}{\PValue} +% \begin{macro}{\PName} +% \begin{macro}{\PValueName} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\PSet} +% \begin{macro}{\PBoolean} +% \begin{macro}{\PBName} +% \changes{v2.02}{2014/11/12}{neu}^^A +% \begin{macro}{\Parameter} +% \begin{macro}{\OParameter} +% \begin{macro}{\LParameter} +% \begin{macro}{\OLParameter} +% \begin{macro}{\PParameter} +% \begin{macro}{\POParameter} +% \changes{v2.03}{2015/01/25}{neu}^^A +% \begin{macro}{\textOR} +% Diese Befehle dienen zum Auszeichnen von obligatorischen und optionalen +% Parametern und Befehlen oder bestimmten Wertzuweisungen. +% \begin{macrocode} +\newrobustcmd*\PValue[1]{\mbox{\texttt{#1}}} +\newrobustcmd*\PName[1]{\PValue{\textsl{<#1>}}} +\newrobustcmd*\PValueName[1]{\PName{#1}} +\newrobustcmd*\PSet{\PName{Einstellung}} +\newrobustcmd*\PBoolean{\PName{Ein-Aus-Wert}} +\newrobustcmd*\PBName[1]{\PBoolean\textOR\PName{#1}} +\newrobustcmd*\Parameter[1]{% + \mbox{\texttt{\textbraceleft}\PName{#1}\texttt{\textbraceright}}% +} +\newrobustcmd*\OParameter[1]{\mbox{\texttt{[}\PName{#1}\texttt{]}}} +\newrobustcmd*\LParameter{\mbox{\texttt{[}\PName{Parameterliste}\texttt{]}}} +\newrobustcmd*\OLParameter[1]{% + \mbox{\texttt{[}\PName{#1}\textOR\PName{Parameterliste}\texttt{]}}% +} +\newrobustcmd*\PParameter[1]{\mbox{\texttt{\textbraceleft#1\textbraceright}}} +\newrobustcmd*\POParameter[1]{\mbox{\texttt{[#1]}}} +\newrobustcmd*\textOR{\PValue{\,\textbardbl\,}} +% \end{macrocode} +% \end{macro}^^A \textOR +% \end{macro}^^A \POParameter +% \end{macro}^^A \PParameter +% \end{macro}^^A \OLParameter +% \end{macro}^^A \LParameter +% \end{macro}^^A \OParameter +% \end{macro}^^A \Parameter +% \end{macro}^^A \PBName +% \end{macro}^^A \PBoolean +% \end{macro}^^A \PSet +% \end{macro}^^A \PValueName +% \end{macro}^^A \PName +% \end{macro}^^A \PValue +% \begin{macro}{\tud@doifPValue} +% \changes{v2.05}{2015/11/14}{neu}^^A +% Der Befehl wird von den Makros \cs{tud@lbl@get@curr} und \cs{tud@idx@get} +% genutzt, um bedingten Quelltext auszuführen, falls im ersten obligatorischen +% Argument entweder Parameter entweder direkt oder aber mit einem der beiden +% Parameter-Markup-Befehle \cs{PValue} oder \cs{PValueName} angegeben wurde. +% Alle anderen Auszeichnungsbefehle für Parameter sollen ingnoriert werden. +% \begin{macrocode} +\newcommand*\tud@doifPValue[3][]{% + \IfValueT{#2}{% + \begingroup% +% \end{macrocode} +% Zunächst wird der Inhalt fast aller ausgezeichneten Parameter unterdrückt. +% Lediglich das Argument der beiden Makros \cs{PValue} und \cs{PValueName} wird +% durchgereicht.Dies wird bei der Generierung von Labeln sowie der Erstellung +% für Einträge im Index und der Änderungsliste benötigt, um die Angabe von +% speziellen Werten bei Schlüsseln zu erhalten. +% \begin{macrocode} + \let\PValue\@firstofone% + \let\PName\@gobble% + \let\PValueName\@firstofone% + \let\PSet\@empty% + \let\PBoolean\@empty% + \let\PBName\@gobble% + \let\Parameter\@gobble% + \let\OParameter\@gobble% + \let\LParameter\@empty% + \let\OLParameter\@gobble% + \let\PParameter\@gobble% + \let\POParameter\@gobble% + \let\textOR\relax% + \let\emph\@firstofone% +% \end{macrocode} +% Im optionalen Argument können weitere Angaben gemacht werden, um zum Beispiel +% weitere lokale Redefinitionen vorzunehmen. +% \begin{macrocode} + #1% +% \end{macrocode} +% Falls tatsächlich ein passendes Argument angegeben wurde, wird der Quelltext +% des zweiten obligatorischen Argumentes ausgeführt. Es ist zu beachten, dass +% dieser \emph{expandiert} wird! +% \begin{macrocode} + \ifxblank{#2}{% + \let\tud@reserved\endgroup% + }{% + \protected@edef\tud@reserved{\noexpand\endgroup#3}% + }% + \tud@reserved% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@doifPValue +% \begin{macro}{\Markup@Gobble} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Dieser Befehl definiert alle Markup-Befehle in der Form um, dass diese nur +% noch das eigentliche Hauptargument unformatiert durchreichen. Dies wird für +% die Erstellung von Label und Indexeinträgen benötigt. Die Sternversion führt +% dies auch noch für die Auszeichnung von Parametern etc. durch. +% \begin{macrocode} +\NewDocumentCommand\Markup@Gobble{s}{% + \let\Application\@Application% + \let\Distribution\@Distribution% + \let\Engine\@Engine% + \let\File\@File% + \let\Class\@Class% + \let\Package\@Package% + \let\Option\@Option% + \let\Environment\@Environment% + \let\Macro\@Macro% + \let\Length\@Length% + \let\Counter\@Counter% +%<*class> + \let\Key\@Key% + \let\Term\@Term% + \let\PageStyle\@PageStyle% + \let\Font\@Font% + \let\Color\@Color% +%</class> + \IfBooleanF{#1}{% + \let\PValue\@firstofone% + \let\PName\@firstofone% + \let\PValueName\@firstofone% + \let\PSet\relax% + \let\PBoolean\relax% + \let\PBName\@firstofone% + \let\Parameter\@firstofone% + \let\OParameter\@firstofone% + \let\LParameter\relax% + \let\OLParameter\@firstofone% + \let\PParameter\@firstofone% + \let\POParameter\@firstofone% + \let\textOR\relax% + \let\hologoRobust\@firstofone% + \def\_{-}% + \protected\def~{~}% + }% +} +% \end{macrocode} +% Mit dem zuvor definierten Makro \cs{Markup@Gobble} wird gleich dafür Sorge +% getragen, dass die Auszeichnungsbefehle für PDF-Outline-Einträge korrekt +% funktionieren. +% \begin{macrocode} +\AfterPackage*{hyperref}{% + \expandafter\pdfstringdefDisableCommands\expandafter{\Markup@Gobble}% +} +% \end{macrocode} +% \end{macro}^^A \Markup@Gobble +% +% \subsubsection{Erstellung und Validierung von Labeln} +% +% \begin{macro}{\tud@lbl@tmp} +% \changes{v2.05}{2015/11/03}{neu}^^A +% \begin{macro}{\tud@lbl@fmt} +% \changes{v2.05}{2015/11/03}{neu}^^A +% In \cs{tud@lbl@tmp} werden nachfolgend die durch \cs{tud@lbl@get@curr} oder +% \cs{tud@attr@get} erzeugten (Sub-)Label gespeichert. Mit dem Hilfsmakro +% \cs{tud@lbl@fmt} wird innerhalb der beiden Befehle \cs{tud@lbl@@create} und +% \cs{tud@lbl@get@@curr} dafür gesorgt, dass geschützte Leerzeichen sowie +% eingabekodierungsabhängige Zeichen korrekt für ein Label umgesetzt werden. +% Auch durch \cs{NoCaseChange} in Überschriften geschützte Inhalte werden +% direkt übernommen. +% \begin{macrocode} +\newcommand*\tud@lbl@tmp{} +\newcommand*\tud@lbl@fmt{% + \def~{-}% + \let\IeC\@firstofone% + \def\"##1{##1e}% + \def\ss{ss}% + \def\dots{...}% + \let\NoCaseChange\@firstofone% +} +% \end{macrocode} +% \end{macro}^^A \tud@lbl@fmt +% \end{macro}^^A \tud@lbl@tmp +% \begin{macro}{\tud@lbl@get@curr} +% \changes{v2.05}{2015/11/03}{neu}^^A +% \begin{macro}{\tud@lbl@get@@curr} +% \changes{v2.05}{2015/11/03}{neu}^^A +% Für den Befehl \cs{tud@lbl@get@curr} wird das zweite obligatorische +% Argument (|#3|) für gewöhnlich in der Form +% |{\Bundle|\marg{Klasse/Paket}|:\Markup|\marg{Element}|}| angegeben. Dieses +% wird beim Einlesen direkt an die beiden Argumentprozessoren +% \cs{SplitArgument}|{2}{:}| gefolgt von \cs{tud@lbl@create} übergeben. Danach +% enthält das zweite obligatorische Argument ein Label der Form +% \meta{Bundlepräfix}|:|\meta{Labelpräfix}|:|\meta{Element}. Auch die Angabe +% eines Makros als zweites obligatorische Argument, welches das Label in der +% richtigen Formatierung enthält, ist möglich. +% \begin{macrocode} +\NewDocumentCommand\tud@lbl@get@curr{% + sm>{\tud@lbl@create}>{\SplitArgument{2}{:}}md==% +}{% +% \end{macrocode} +% Mit \cs{tud@lbl@get@@curr} wird das im zweiten obligatorischen Argument +% (|#3|) generierte Label in das im ersten obligatorischen Argument |#2| +% angegebenen Makro gespeichert und ggf. diesem das letzte optionale Argument +% für einen speziellen Wert zu einem Schlüssel angehangen. +% \begin{macrocode} + \tud@lbl@get@@curr#2{#3}=#4=% +% \end{macrocode} +% Die Sternversion von \cs{tud@lbl@get@curr} wird für das Definieren von Labeln +% bei Deklarationen etc. genutzt. Sollte diese verwendet worden sein, ist die +% Generierung beendet. +% \begin{macrocode} +%<*class> + \IfBooleanF{#1}{% +% \end{macrocode} +% Andernfalls wird geprüft, ob das erstellte Label überhaupt existiert. Sollte +% dies nicht der Fall sein wird ein passendes Label für den gegebenen Schlüssel +% ohne speziellen Wert gesucht. +% \begin{macrocode} + \@tempswafalse% + \tud@if@lbl@exists{#2}{% + \@tempswatrue% + }{% + \IfValueT{#4}{% + \tud@lbl@get@@curr\tud@reserved{#3}% + \tud@if@lbl@exists{\tud@reserved}{% + \let#2\tud@reserved% + \@tempswatrue% + }{}% + }% + }% +% \end{macrocode} +% Wurde auch danach noch kein passendes Label gefunden, gibt es u.\,U. eine +% letzte Möglichkeit, ein passendes Label zu finden. Wird in der Dokumentation +% gerade ein Paket oder eine sich von den Hauptklassen unterscheidende Klasse +% aus dem \TUDScript-Bundle erläutert (Umgebungen \env{Bundle}, \env{Bundle*}), +% so wird eventuell auf ein Element aus ebendiesen Hauptklassen referenziert. +% In diesem Fall wird \cs{tud@lbl@get@dflt} aufgerufen, um den Bundlepräfix +% für das Label entsprechend zu setzen. +% \begin{macrocode} + \if@tempswa\else% + \tud@if@bdl{\tud@lbl@get@dflt#2{#3}=#4=}{}% + \fi% + }% +%</class> +} +% \end{macrocode} +% Mit \cs{tud@lbl@get@@curr} wird das generierte Label in Makro gespeichert, +% welches beim Aufruf von \cs{tud@lbl@get@curr} angegebenen wurde. +% \begin{macrocode} +\NewDocumentCommand\tud@lbl@get@@curr{mmd==}{% + \def#1{#2}% +% \end{macrocode} +% Sollte optional mit \cs{PValue} bzw. \cs{PValueName} ein spezieller Wert für +% einen Schlüssel übergeben worden sein, wird dieser ggf. angehängt. +% \begin{macrocode} + \tud@doifPValue[\tud@lbl@fmt]{#3}{\noexpand\appto\noexpand#1{=#3}}% +} +% \end{macrocode} +% \end{macro}^^A \tud@lbl@get@@curr +% \end{macro}^^A \tud@lbl@get@curr +% \begin{macro}{\tud@lbl@get@dflt} +% \changes{v2.05}{2015/11/04}{neu}^^A +% \begin{macro}{\tud@lbl@get@@dflt} +% \changes{v2.05}{2015/11/04}{neu}^^A +% Diese beiden Makros werden genutzt, um mit \cs{tud@lbl@get@curr} innerhalb +% der Umgebungen \env{Bundle} und \env{Bundle*} für den Fall, dass ein +% gesuchtes Label für das aktuelle Bundle-Element nicht existiert, nach diesem +% Element in den existierenden Labels der Hauptklassen zu suchen. +% +% Dabei wird das bereits generierte Label durch \cs{tud@lbl@get@dflt} in +% seine drei Hauptbestandteile zur WEiterverarbeitung zerlegt. +% \begin{macrocode} +\NewDocumentCommand\tud@lbl@get@dflt{m>{\SplitArgument{2}{:}}mr==}{% + \tud@lbl@get@@dflt{#1}#2=#3=% +} +% \end{macrocode} +% Durch \cs{tud@lbl@get@@dflt} wird als erstes geprüft, ob der Bundlepräfix +% bereits dem Standardpräfix für die Hauptklassen entspricht. Nur wenn dies +% nicht der Fall ist, wird die Labelgenerierung abermals ausgeführt. +% \begin{macrocode} +\NewDocumentCommand\tud@lbl@get@@dflt{mmmmr==}{% + \edef\tud@reserved{\expandafter\detokenize\expandafter{\tud@bdl@dflt}}% + \ifstr{\tud@reserved}{#2}{}{% +% \end{macrocode} +% Dabei erfolgt der Aufruf logischerweise mit dem richtigen Bundlepräfix. +% \begin{macrocode} + \tud@lbl@get@curr#1{\tud@bdl@dflt:#3:#4}=#5=% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@lbl@get@@dflt +% \end{macro}^^A \tud@lbl@get@dflt +% \begin{macro}{\tud@if@lbl@exists} +% \changes{v2.05}{2015/11/05}{neu}^^A +% Mit dem Befehl \cs{tud@if@lbl@exists} wird eine Fallunterscheidung bezüglich +% der Existenz eines Labels in der Form +% \meta{Bundlepräfix}|:|\meta{Labelpräfix}|:|\meta{Element} durchgeführt. Das +% zu prüfende Label ist in gleicher Weise wie beim Makro \cs{tud@lbl@get@curr} +% anzugeben. Je nachdem, ob ein existierendes Label gefunden wird oder nicht, +% wird das zweite oder das dritte obligatorische Argument ausgeführt. +% \begin{macrocode} +%<*class> +\NewDocumentCommand\tud@if@lbl@exists{% + >{\tud@lbl@create}>{\SplitArgument{2}{:}}m% +}{% + \ifcsdef{r@#1}{% + \expandafter\@firstoftwo% + }{% + \expandafter\@secondoftwo% + }% +} +%</class> +% \end{macrocode} +% \end{macro}^^A \tud@if@lbl@exists +% \begin{macro}{\tud@lbl@create} +% \changes{v2.05}{2015/11/03}{neu}^^A +% \begin{macro}{\tud@lbl@@create} +% \changes{v2.05}{2015/11/03}{neu}^^A +% Das Makro \cs{tud@lbl@@create} ist ein Argumentprozessor, welcher als Eingabe +% genau drei Argumente für das Erstellen eines gültigen Labels erwartet. Er +% wird sowohl von \cs{tud@lbl@get@curr} als auch von \cs{tud@if@lbl@exists} +% verwendet. Vor der Nutzung von \cs{tud@lbl@create} muss das Argument zuvor +% bereits mit \cs{SplitArgument}|{2}{:}| aufgerufen worden sein. Diese +% Eigenheit macht die Definition von \cs{tud@lbl@create} notwendig, um das +% Ergebnis der zuvor vorgenommenen Argumentaufspaltung verarbeiten zu können, +% in dem dieses an \cs{tud@lbl@@create} durchgereicht wird. Eine Integration +% der Spaltung des Argumentes in \cs{tud@lbl@create} ist aufgrund des +% mehrmaligen rekursiven Aufrufs von \cs{tud@lbl@create} nicht möglich. +% +% Mit dem Argumentprozessor \cs{tud@lbl@create} wird es ermöglicht, an die +% beiden Befehle \cs{tud@lbl@get@curr} und \cs{tud@if@lbl@exists} sowohl ein +% einzelnes Makro, welches das Label bereits beinhaltet als auch einen +% Markup-Befehl ggf. mit einem Bundlepräfix zu übergeben. In beiden Fällen +% wird aus dem übergebenen Argument ein eindeutiges Label in der Form +% \meta{Bundlepräfix}|:|\meta{Labelpräfix}|:|\meta{Element} generiert und als +% resultierendes Argument an das aufrufenden Makro übergeben. +% \begin{macrocode} +\NewDocumentCommand\tud@lbl@create{m}{\tud@lbl@@create#1} +% \end{macrocode} +% Es gibt insgesamt vier verschiedene Varianten der Argumentenübergabe an den +% Argumentprozessor \cs{tud@lbl@@create}. +% \begin{description}\let\itshape\slshape +% \item[\cs{tud@lbl@@create}]\ignorespaces% +% |{\LabelMakro}{-NoValue-}{-NoValue-}|\strut\newline% +% Das Label ist bereits in \cs{LabelMakro} enthalten und soll expandiert +% werden. Dabei spielt es keine Rolle, ob die durch |:| getrennten +% Bestandteile innerhalb des Labels schon als einfacher String oder in der +% Markupform gegeben sind. +% \item[\cs{tud@lbl@@create}]\ignorespaces% +% |{-NoValue-}{\Markup|\marg{Element}|}{-NoValue-}|\strut\newline% +% Das Label soll für ein Markupelement generiert werden, wobei in jedem +% Fall der Inhalt aus \cs{tud@bdl@curr} als Bundlepräfix genutzt wird. +% \item[\cs{tud@lbl@@create}]\ignorespaces% +% |{\Class/\Package|\marg{\dots}|}|\ignorespaces% +% |{\Markup|\marg{Element}|}{-NoValue-}|\strut\newline% +% Das Label soll für ein Markupelement generiert werden. +% Dabei wurde explizit ein Paket oder eine Klasse aus dem Bundle angegeben +% oder implizit das Makro \cs{tud@bdl@curr} als Argument verwendet, +% welches innerhalb der Umgebungen \env{Bundle} und \env{Bundle*} auf +% das/die aktuell beschriebene Paket/Klasse gesetzt wurde. +% \item[\cs{tud@lbl@@create}]\ignorespaces% +% \marg{Bundlepräfix}\marg{Labelpräfix}\marg{Element}\strut\newline +% Das Label ist bereits vollständig bestimmt und die Argumente werden +% entweder als String oder als Markup übergeben. Auch Mischformen sind +% möglich. In diesem Fall wird es einfach wieder zusammengesetzt. Diese +% Variante tritt durch rekursiven Aufruf des Argumentprozessors auf. +% \end{description} +% \begin{macrocode} +\NewDocumentCommand\tud@lbl@@create{mmm}{% + \begingroup% +% \end{macrocode} +% Zu Beginn werden die Markup-Befehle auf ihre expandierbaren Varianten gesetzt +% und die zusätzlichen Redefinitionen für die Labelgenerierung aktiviert. +% \begin{macrocode} + \Markup@Gobble% + \tud@lbl@fmt% +% \end{macrocode} +% Sind alle drei Bestandteile bereits vorhanden, wird das Label einfach wieder +% zusammengesetzt. +% \begin{macrocode} + \IfValueTF{#3}{% + \edef\@tempa{#1:#2:#3}% + }{% +% \end{macrocode} +% Hier geschieht die eigentliche Erzeugung der Labels. Dabei wird mit +% \cs{tud@attr@get} der für den jeweiligen Markup-Befehl aus dem zweiten +% obligatorischen Argument spezifische Labelpräfix generiert. Abhängig davon, +% ob im ersten obligatorischen Argument ein spezieller Bundlepräfix angegeben +% wurde, wird dieser entweder verwendet oder aber implizit auf den Inhalt aus +% \cs{tud@bdl@dflt} zurückgegriffen. +% \begin{macrocode} + \IfValueTF{#2}{% + \tud@attr@get\@tempb{#2}% + \IfValueTF{#1}{% + \ifxblank{#1}{% + \edef\@tempa{\tud@bdl@dflt:\@tempb:#2}% + }{% + \edef\@tempa{#1:\@tempb:#2}% + }% + }{% + \edef\@tempa{\tud@bdl@curr:\@tempb:#2}% + }% + }{% +% \end{macrocode} +% Wurde lediglich ein Makro angegeben, wird dieses einfach expandiert. +% \begin{macrocode} + \edef\@tempa{#1}% + }% + }% +% \end{macrocode} +% Das Ergebnis der Labelgenrierung wurde für alle der behandelten Fälle in +% \cs{@tempa} geschrieben. Abschließnd wird \cs{ProcessedArgument} nach der +% Gruppe mit dessen Inhalt definiert. Dabei werden bei der Expansion die +% catcodes aller Zeichen in Tokens der Klasse \val{other} gewandelt, um diese +% später sicher vergleichen zu können. +% \begin{macrocode} + \edef\@tempc{% + \noexpand\endgroup% + \def\noexpand\ProcessedArgument{% + \expandafter\detokenize\expandafter{\@tempa}% + }% + }% + \@tempc% +} +% \end{macrocode} +% \end{macro}^^A \tud@lbl@@create +% \end{macro}^^A \tud@lbl@create +% +% \subsubsection{Abarbeitung der Markup-Befehle} +% +% Die Festlegung des individuellen Markups der Einzelnen Elemente erfolgt bei +% der Definition mit \cs{Markup@SetFormat}. Bei der Nutztung der Markup-Befehle +% im Fließtext wird zum einen das in \cs{Markup@Format} individuell definierte +% Markup umgesetzt und zum anderen wird dabei gleich automatisch ein Eintrag +% für das Element im Index erzeugt. +% +% \begin{macro}{\ifdisposition} +% \changes{v2.06}{2018/08/02}{neu}^^A +% \begin{macro}{\if@tud@disposition} +% \begin{macro}{\tud@sec@format} +% Für Markup oder andere Inhalte, die lediglich im Fließtext jedoch nicht in +% Überschriften ausgegeben werden, wird der Schalter \cs{if@tud@disposition} +% und der dazugehörige auswertende Befehl \cs{ifdisposition} definiert. Das +% Setzen des Schalters wird in \cs{tud@sec@format} gepatcht. +% \begin{macrocode} +\newif\if@tud@disposition +\newcommand*\ifdisposition{% + \if@tud@disposition% + \expandafter\@firstoftwo% + \else% + \expandafter\@secondoftwo% + \fi% +} +\pretocmd{\tud@sec@format}{% + \@tud@dispositiontrue% +}{}{\tud@patch@wrn{tud@sec@format}} +% \end{macrocode} +% \end{macro}^^A \tud@sec@format +% \end{macro}^^A \if@tud@disposition +% \end{macro}^^A \tud@if@disposition +% +% In der Klasse \cls{tudscrmanual} werden die Markup-Befehle zusätzlich auch +% als Argument der Umgebung \env{Declaration} genutzt. Für diese Verwendung +% kommt die Definiton von \cs{Markup@Declare} und ggf. \cs{Markup@Suffix} zum +% Einsatz. +% +% \begin{macro}{\Process@Markup} +% \changes{v2.02}{2014/10/08}{Markup für Index und Fließtext getrennt}^^A +% \changes{v2.02}{2014/10/09}{Anpassung für Umgebung \env{Declaration*}}^^A +% \changes{v2.05}{2015/11/05}{Neuimplementierung}^^A +% \begin{macro}{\Markup@Suppress} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\Markup@@Suppress} +% \changes{v2.05}{2015/11/05}{neu}^^A +% Der Befehl \cs{Process@Markup} ist das Herzstück der Auszeichnungen aller +% Elemente. Das obligatorische Argument ist das auszuzeichnende Element selbst, +% welches im weiteren Verlauf der Abarbeitung expandiert wird. Darauf folgen +% mehrere optionale Argumente. Mit |=|\meta{Wert}|=| kann ein Wert für einen +% Schlüssel angegeben werden, was aktuell von \cs{Option} und \cs{Key} genutzt +% wird. Darauf folgend kann in einem ordinären optionalen Argument ein Suffix +% für die Fließtextausgabe angegeben werden, was von \cs{Distribution} sowie +% \cs{Environment}, \cs{Macro} und \cs{Color} verwendet wird. +% +% Mit dem optionalen Argument in runden Klammern kann eine Klasse oder ein +% Paket aus dem \TUDScript-Bundle angegeben werden, auf welche sich das +% aktuelle auszuzeichnende Element bezieht und ggf. das Label und der +% Indexeintrag dementsprechend erzeugt werden sollen. Verwendet wird es mit: +% |(\Class|\marg{Klasse}|)| oder |(\Package|\marg{Paket}|)| +% +% Das optionale Argument in Guillemets wird von \cs{Package} benötigt, um ggf. +% die automatisch generierten Links auf CTAN anzupassen. Zuletzt kann mit +% |'|\meta{Referenzvariante}|'| der automatisch erzeugte Querverweis in +% verschiedenen Varianten formatiert werden. Der vollständige Funktionsaufruf: +% \newline\begingroup\scriptsize +% \cs{Process@Markup}\marg{Element}|=|\meta{Wert}|=|\ignorespaces% +% \oarg{Ausgabesuffix}\parg{Bundleelement}\ignorespaces% +% |<|\meta{CTAN-Paket}|>||'|\meta{Referenzvariante}|'|\ignorespaces% +% \endgroup +% +% In eingen Fällen ist es beim Aufruf eines Markup-Befehls nicht erwünscht, +% dass dieser auch tatsächlich ausgegeben wird. Für diesen Fall wird gleich zu +% Beginn der Befehl \cs{Markup@Suppress} definiert, der dies ermöglicht. +% \begin{macrocode} +\newcommand*\Markup@Suppress{\let\Process@Markup\Markup@@Suppress} +\NewDocumentCommand\Markup@@Suppress{md==od()d<>d''}{} +% \end{macrocode} +% Nun folgt die eigentliche Befehlsdefinition. +% \begin{macrocode} +\NewDocumentCommand\Process@Markup{md==od()d<>d''}{% +% \end{macrocode} +% Zu Beginn wird mit dem Schalter \cs{if@tud@declare} geprüft, ob die der +% Markup-Befehl in einer der Deklarationsumgebungen oder anderweitig genutzt +% wird. Für den ersten Fall erfolgt die Weiterverarbeitung der Argumente mit +% \cs{Process@@MarkupDeclare}, andernfalls kommt \cs{Process@@MarkupInline} zum +% Einsatz. Da beide Makros die gleiche Reihenfolge der Argumente verlangen, +% wird der jeweilige Befehlsaufruf über ein Token-Register realisiert, womit +% das Zusammensetzen der notwendigen Übergabewerte erleichtert wird. +% +% Die Fallunterscheidung betrifft des Weiteren die Erzeugung des Labels. Für +% eine Deklaration wird die Sternversion von \cs{tud@lbl@get@curr} verwendet, +% welche ein Label aus den gegebenen Argumenten zusammensetzt. Ist keine +% Deklaration aktiv, versucht \cs{tud@lbl@get@curr} ein gültiges, schon +% vorhandenes Label zu verwenden. Das generierte Label wird anschließend als +% erstes Argument für das weiterverabeitende Makro genutzt. +% \begin{macrocode} +%<*class> + \if@tud@declare% + \tud@toks@{\Process@@MarkupDeclare}% + \IfValueTF{#4}{% + \tud@lbl@get@curr*\tud@lbl@tmp{#4:#1}=#2=% + }{% + \tud@lbl@get@curr*\tud@lbl@tmp{\tud@bdl@curr:#1}=#2=% + }% + \else% +%</class> + \tud@toks@{\Process@@MarkupInline}% + \tud@lbl@get@curr\tud@lbl@tmp{#4:#1}=#2=% +%<*class> + \fi% +%</class> + \eaddto@hook\tud@toks@{\expandafter{\tud@lbl@tmp}}% +% \end{macrocode} +% Danach wird der Inhalt des im ersten Argument übergebenen Markup-Befehls in +% einer Gruppe ein temporäres Makro expandiert und als zweites Argument für die +% Weiterverarbeitung genutzt. +% \begin{macrocode} + \begingroup% + \Markup@Gobble*% + \protected@edef\tud@reserved{% + \noexpand\endgroup% + \def\noexpand\tud@reserved{#1}% + }% + \tud@reserved% + \eaddto@hook\tud@toks@{\expandafter{\tud@reserved}}% +% \end{macrocode} +% Es folgen gegebenenfalls die optionalen Argument |=|\meta{Wert}|=| sowie +% \oarg{Ausgabesuffix}~-- falls diese angegeben wurden. +% \begin{macrocode} + \IfValueT{#2}{\addto@hook\tud@toks@{=#2=}}% + \IfValueT{#3}{\addto@hook\tud@toks@{[#3]}}% +% \end{macrocode} +% Erfolgt gerade eine Deklaration, wird mit dem Schalter \cs{if@openindex} +% eigentlich unterschieden, ob ein öffnender oder ein schließender Indexeintrag +% erzeugt werden soll. Dieser wird mit \cs{Process@@Index} erstellt. Um den +% schließenden Indexeintrag zu erzeugen, ist die Ausführung des Hauptargumentes +% der Deklarationsumgebung am Ende dieser notwendig. Dabei soll allerdings das +% Markup nicht noch ein weiteres Mal ausgegeben werden. Deshalb wird der +% Schalter hier genutzt, um lediglich zu Beginn einer Deklaration das Markup +% auszuführen. Dabei Angaben für eine |'|\meta{Referenzvariante}|'| nicht +% erlaubt. +% \begin{macrocode} +%<*class> + \if@tud@declare% + \if@openindex% + \IfValueT{#6}{% + \ClassWarning{tudscrmanual}{% + It is not possible to use any cross-reference\MessageBreak% + shorthand like '#6' within the arguments of\MessageBreak% + the environment `Declaration'% + }% + }% +% \end{macrocode} +% Für ein eventuell notwendiges Debugging, wird \cs{Process@@MarkupDeclare} mit +% seinen Argumenten ggf. in das Log-File geschrieben. +% \begin{macrocode} + \tud@trace@markup{declare}{\the\tud@toks@}% + \else% + \tud@toks@{\relax}% + \fi% +% \end{macrocode} +% Findet der Auszeichnungsbefehl außerhalb einer Umgebung für Deklarationen +% Verwendung, werden die optionalen Argumente für einen CTAN-Link +% |<|\meta{CTAN-Paketname}|>| sowie die Formatierung des Querverweise +% |'|\meta{Referenzvariante}|'| hinzugefügt~-- falls vorhanden. Dies geschieht +% jedoch nur, wenn das Markup nicht innerhalb eines Index erfolgt, da hier +% URL-Hyperlinks und formatierte Querverweise unerwünscht sind. Mit der Angabe +% eines leeren Argumentes |<>| wird gar kein Hyperlink erstellt. +% \begin{macrocode} + \else% +%</class> + \if@tud@index\else% + \IfValueT{#5}{% + \ifxblank{#5}{}{\addto@hook\tud@toks@{<http://www.ctan.org/pkg/#5>}}% + }% + \IfValueT{#6}{\addto@hook\tud@toks@{'#6'}}% + \fi% +%<*class> +% \end{macrocode} +% Auch hier wird ggf. ein Debug-Eintrag ins Log-File geschrieben. +% \begin{macrocode} + \tud@trace@markup{output}{\the\tud@toks@}% + \fi% +% \end{macrocode} +% Ganz zum Schluss wird noch für beide Fälle geprüft, ob \parg{Bundleelement} +% angegeben wurde. Ist dies der Fall, wird zum einen das \meta{Bundleelement} +% zur Überprüfung ggf. in das Log-File geschrieben, zum anderen wird geprüft, +% ob für das \meta{Element} überhaupt ein Link definiert wurde, der verwendet +% werden soll. Ist dies nicht der Fall, wird eine Warnung ausgegeben. Dies ist +% möglich, da durch die automatische Labelgenerierung normalerweise alle nicht +% existierenden Labels mit \meta{Bundlepräfix} auf \cs{tud@bdl@dftl} verweisen +% müssten. Für die wenigen Fälle, in denen gezielt auf einen Querverweis +% verzichtet werden soll, kann ein leeres Argument \parg{} angegeben werden. +% \begin{macrocode} + \if@tud@index\else% + \IfValueT{#4}{% + \ifxblank{#4}{}{% + \tud@trace@bdl@add{#4}% + \ifstr{#6}{none}{}{% + \tud@if@lbl@exists{\tud@lbl@tmp}{}{% + \ClassWarning{tudscrmanual}{% + No existing label \tud@lbl@tmp\space for #4% + }% + }% + }% + }% + }% + \fi% +% \end{macrocode} +% Nun erfolgt mit \cs{Process@@MarkupDeclare} bzw. \cs{Process@@MarkupInline} +% die Ausführung der eigentlichen Auszeichnung. +% \begin{macrocode} +%</class> + \the\tud@toks@% +} +% \end{macrocode} +% \end{macro}^^A \Markup@@Suppress +% \end{macro}^^A \Markup@Suppress +% \end{macro}^^A \Process@Markup +% \begin{macro}{\Process@@MarkupDeclare} +% \changes{v2.05}{2015/11/05}{neu}^^A +% Mit \cs{Process@@MarkupDeclare} wird die formatierte Ausgabe der Deklaration +% realisiert. Wie diese genau gestaltet ist, wird durch \cs{tud@declare@num} +% bestimmt. Folgende Werte sind möglich: +% \begin{description} +% \item[\val{0}:] Ausgabe von Markup, Erzeugen eines Labels +% \item[\val{1}:] Ausgabe von Markup, kein Label +% \item[\val{2}:] keine Ausgabe, aber Erzeugen eines Labels +% \item[\val{3}:] keine Ausgabe, Erzeugen eines nach oben verschobenen Labels +% \end{description} +% Normalerweise kommt die erste Variante zum Einsatz. Die zweite Variante wird +% genutzt, wenn mit mit der Umgebung \env{Obsolete} zwar eine Ausgabe aber kein +% Label erstellt werden soll. Dies wird verwendet, um bei der Beschreibung +% veralteter Werte oder Parameter diese im Kontext ihrer Option oder Umgebung +% bzw. ihres Befehls anzugeben. +% +% Die dritte Version kommt bei Erklärungen mit der Umgebung \env{Declaration*} +% zum Einsatz, welche im Fließtext verwendet wird und kein Markup, wohl aber +% eine Label für das beschriebene Element erzeugt werden soll. Für die vierte +% Variante, welche die Umgebung \env{Bundle*} betrifft, gilt dies im Prinzip +% gleichermaßen. Allerdings wird diese Umgebung zu Beginn der Deklarationen +% eines Bundleelements direkt nach einer Überschrift verwendet. Hier soll der +% erzeugte Link direkt auf der Höhe der Überschrift platziert werden. +% +% Das erste Argument enthält das zu definierende Label, gefolgt vom Element, +% welches ausgezeichnet werden soll. Die tatsächliche Ausgabe erfolgt mit dem +% Makro \cs{Markup@Output}. An dieses werden die beiden optionalen Argumente +% |=|\meta{Wert}|=| und \oarg{Ausgabesuffix} direkt weitergereicht. +% +% Vor der eigentlichen Ausführung wird mit \cs{Markup@CheckFormat} geprüft, ob +% für das auszuzeichnende Element mit \cs{Markup@SetFormat} überhaupt eine +% Ausgabeformatierung defineirt wurde. Nach der Ausgabe wird diese Formatierung +% mit \cs{Markup@ClearFormat} zurückgesetzt. +% \begin{macrocode} +%<*class> +\NewDocumentCommand\Process@@MarkupDeclare{mmd==o}{% + \Markup@CheckFormat% + \ifcase\tud@declare@num\relax% + \tudhyperdef{#1}% + \Markup@Output{#2}=#3=[#4]% + \or% + \Markup@Output{#2}=#3=[#4]% + \or% + \tudhyperdef{#1}% + \or% + \tudhyperdef*{#1}% + \def\@tempa##1:##2:##3\@nil{\tudhyperdef*{##3:##2:##3}}% + \@tempa#1\@nil% + \fi% + \Markup@ClearFormat% +} +%</class> +% \end{macrocode} +% \end{macro}^^A \Process@@MarkupDeclare +% \begin{macro}{\Process@@MarkupInline} +% \changes{v2.05}{2015/11/05}{neu}^^A +% Mit \cs{Process@@MarkupInline} wird die formatierte Ausgabe außerhalb der +% Deklarationsumgebungen umgesetzt. Die ersten vier Argument entsprechen denen +% des Befehls \cs{Process@@MarkupDeclare} und werden bis auf das Label ebenso an +% \cs{Markup@Output} übergeben, nachdem mit dem Befehl \cs{Markup@CheckFormat} +% auf eine existierende Markup-Definition geprüft wurde. +% \ToDo{% +% Hyperlinks auf erläuterte Element innerhalb der Umgenung \env{Declaration} +% unterbinden? Könnte \cs{tud@declaration@list} genutzt werden?% +% }[v2.07]% +% \begin{macrocode} +\NewDocumentCommand\Process@@MarkupInline{mmd==od<>d''}{% + \Markup@CheckFormat% +% \end{macrocode} +% Um die aktuelle Definiton der temporären Makros nicht zu ändern, erfolgt die +% formatierte Ausgabe in einer Gruppe. Dabei wird in \cs{@tempc} die minimale +% Variante gesichert. +% \begin{macrocode} + \begingroup% + \def\@tempc{\Markup@Output{#2}=#3=[#4]}% +% \end{macrocode} +% Danach wird eine Fallunterscheidung anhand des im ersten Argument übergebenen +% Labels getroffen. Existiert dieses, soll das Element als Hyperlink ausgegeben +% werden. Die Definition dafür wird in \cs{@tempa} gespeichert. +% \begin{macrocode} +%<*class> + \tud@if@lbl@exists{#1}{% + \def\@tempa{\hyperref{}{\tud@manualname}{#1}{\@tempc}}% +% \end{macrocode} +% Anschließend wird \cs{@tempb} ggf. für den erweiterten Querverweis verwendet. +% Wurde ein Format für den Querverweis gesetzt, muss dieses validiert werden. +% Gültige Kürzel sind |'|\val{auto}|'|, |'|\val{page}|'| und |'|\val{full}|'|. +% Damit werden die erzeugten Querverweise um den Gliederungsabschnitt, die +% Seite oder beides ergänzt. Außerdem kann mit |'|\val{none}|'| der Hyperlink +% komplett unterbunden werden. Für den Befehl \cs{Package} kann mit zusätzlich +% |'|\val{url}|'| noch der CTAN-Link forciert werden, auch wenn eigentlich ein +% Label für das Paket existiert. +% \begin{macrocode} + \let\@tempb\relax% + \IfValueT{#6}{% + \def\@tempb{% +%<*class> + \ClassWarning{tudscrmanual}% +%</class> +%<*package> + \PackageWarning{tudscrtutorial}% +%</package> + {% + You've used the unknown cross-reference\MessageBreak% + shorthand '#6'. Only 'auto', 'page' and 'full'\MessageBreak% + as well as 'none' \IfValueT{#5}{or 'url' }are valid% + }% + }% + \ifstr{#6}{auto}{\def\@tempb{ in \autoref{#1}}}{% + \ifstr{#6}{page}{\def\@tempb{ \vpageref{#1}}}{% + \ifstr{#6}{ppage}{\def\@tempb{ \reftextfaraway{#1}}}{% + \ifstr{#6}{full}{\def\@tempb{ in \fullref{#1}}}{% + \ifstr{#6}{none}{\let\@tempa\@tempc\let\@tempb\relax}{}}}}}% + \IfValueT{#5}{% + \ifstr{#6}{url}{\def\@tempa{\href{#5}{\@tempc}}\let\@tempb\relax}{}% + }% + }% + }{% +%</class> +% \end{macrocode} +% Existiert kein Label, so wird einfach die minimale Markup-Variante verwendet. +% Für Pakete wird ein CTAN-Link erzeugt. +% \begin{macrocode} + \let\@tempa\@tempc% + \IfValueT{#5}{\def\@tempa{\href{#5}{\@tempc}}}% +% \end{macrocode} +% Ein Querverweis kann logischerweise nicht erstellt werden. Wurde dennoch im +% letzten optionalen Argument eine |'|\meta{Referenzvariante}|'| für den +% Querverweis angegeben, wird eine Warnung erzeugt. +% \begin{macrocode} + \let\@tempb\relax% + \IfValueT{#6}{% + \ifstr{#6}{none}{\let\@tempa\@tempc}{% +%<package> \ifstr{#6}{manual}{\def\@tempa{\tudhyperref{#1}{\@tempc}}}{% + \def\@tempb{% +%<*class> + \ClassWarning{tudscrmanual}% +%</class> +%<*package> + \PackageWarning{tudscrtutorial}% +%</package> + {% +%<*class> + Label #1\MessageBreak% + is missing, no cross-reference created% +%</class> +%<*package> + You've used the unknown cross-reference\MessageBreak% + shorthand '#6'. Only 'none' and 'manual'\MessageBreak% + are valid% +%</package> + }% + }% +%<package> }% + }% + }% +% \end{macrocode} +% Um im Zweifel nach allen fehlenden Labels im Log-File prüfen zu können, gibt +% es den passenden Debug-Befehl. +% \begin{macrocode} +%<*class> + \tud@trace@lbl@missing@add{#1}% + }% +%</class> +% \end{macrocode} +% Ganz zum Schluss erfolgt die Ausgabe als Hyperlink mit optional erweitertem +% Querverweis nicht, wenn gerade eine Überschrift gesetzt wird. +% \begin{macrocode} + \ifdisposition{\@tempc}{\@tempa\@tempb}% +% \end{macrocode} +% Zum Schluss wird die Formatierung mit \cs{Markup@ClearFormat} zurückgesetzt. +% \begin{macrocode} + \endgroup% + \Markup@ClearFormat% +} +% \end{macrocode} +% \end{macro}^^A \Process@@MarkupInline +% \begin{macro}{\Markup@Output} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\Markup@@Output} +% \changes{v2.05}{2015/11/05}{neu}^^A +% Der Befehl \cs{Markup@Output} wird für die formatierte Markup-Ausgabe von den +% beiden Makros \cs{Process@@MarkupDeclare} sowie \cs{Process@@MarkupInline} +% aufgerufen. Das erste Argument enthält dabei das auszuzeichnende Element. +% Dabei ist die Besonderheit des Makros \cs{Key}\marg{Makro}\marg{Parameter} zu +% beachten, dessen beiden Argumente hier in der Form \marg{Makro!Parameter} +% übergeben werden. Deshalb wird das erste Argument mit dem Argumentprozessor +% \cs{SplitArgument}|{1}{!}| getrennt und dann weiter verarbeitet. +% \begin{macrocode} +\NewDocumentCommand\Markup@Output{>{\SplitArgument{1}{!}}mr==r[]}{% + \Markup@@Output#1=#2=[#3]% +} +% \end{macrocode} +% Anschließend wird entweder \cs{Markup@Declare} oder \cs{Markup@Inline} +% aufgerufen~-- abermals abhängig vom Schalter \cs{if@tud@declare}. Auch hier +% wird für den Befehlsaufruf mit dem dazugehörigen Argument zur Vereinfachung +% ein Token-Register verwendet. +% \begin{macrocode} +\NewDocumentCommand\Markup@@Output{mmr==r[]}{% +%<*class> + \if@tud@declare% + \tud@toks@{\Markup@Declare}% + \else% +%</class> + \tud@toks@{\Markup@Inline}% +%<*class> + \fi% +%</class> +% \end{macrocode} +% Ist das aktuelle Element \cs{Key} wird nur das zweite Argument ausgegeben. +% Das erste wird lediglich für Label und Indexeintrag benötigt. +% \begin{macrocode} + \IfValueTF{#2}{% + \def\@tempa{#2}% + }{% + \def\@tempa{#1}% + }% +% \end{macrocode} +% Die beiden optionalen Argumente werden ggf. in der gleichen Formatierung +% ausgegeben. +% \begin{macrocode} + \IfValueT{#3}{\appto\@tempa{=#3}}% + \IfValueT{#4}{\appto\@tempa{#4}}% + \eaddto@hook\tud@toks@{\expandafter{\@tempa}}% + \the\tud@toks@% +} +% \end{macrocode} +% \end{macro}^^A \Markup@@Output +% \end{macro}^^A \Markup@Output +% \begin{macro}{\Markup@Inline} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\Markup@Declare} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\Markup@@Declare} +% \changes{v2.05}{2015/11/05}{neu}^^A +% Die Ausgabe selbst ist alles andere als spektakulär. Die zur Formatierung +% verwendeten Makros \cs{Markup@Format} und \cs{Markup@Suffix} werden durch +% \cs{Markup@SetFormat} für jedes Markup-Element individuell definiert. +% \begin{macrocode} +\newcommand*\Markup@Inline[1]{\mbox{\Markup@Format{#1}}} +%<*class> +\newcommand*\Markup@Declare{} +\newcommand*\Markup@@Declare[1]{\Markup@Format{#1}\Markup@Suffix} +%</class> +% \end{macrocode} +% \end{macro}^^A \Markup@@Declare +% \end{macro}^^A \Markup@Declare +% \end{macro}^^A \Markup@Inline +% \begin{macro}{\Markup@SetFormat} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\Markup@CheckFormat} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\Markup@ClearFormat} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\Markup@Format} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\Markup@Suffix} +% \changes{v2.05}{2015/11/05}{neu}^^A +% Der Befehl \cs{Markup@SetFormat} setzt das gewünschte Format für die jeweilge +% Ausgabe. Dieses wird im ersten Argument angegeben. Das ordinäre optionale +% Argument kann genutzt werden, wenn bei der Deklaration noch eine genauere +% Beschreibung oder Spezifizierung erscheinen soll, beispielsweise etwas wie +% \enquote{Umgebung} oder \enquote{Parameter}. Mit dem optionalen Argument in +% runden Klammern wird es möglich, die Definition von \cs{Markup@Declare}, die +% ohne eine Angabe der von \cs{Markup@@Declare} entspricht, zu ändern. Dies +% wird insbesondere von \cs{Environment} genutzt, um bei der Deklaration eine +% Tabelle zu erzeugen. +% \begin{macrocode} +\newcommand*\Markup@Format{} +\undef\Markup@Format +\newcommand*\Markup@Suffix{} +\NewDocumentCommand\Markup@SetFormat{omod()}{% +% \end{macrocode} +% Außerdem ist noch eine weitere Besonderheit zu beachten. Sollte gerade eine +% Überschrift gesetzt werden, wird das Hauptargument nicht formatiert sondern +% lediglich mit \cs{tud@sec@format} ausgegeben. +% \begin{macrocode} + \def\Markup@Format##1{% + \def\tud@res@a{#2}% + \tud@ifdin{\let\tud@res@a\tud@sec@format}{}% + \begingroup\tud@res@a{\IfValueT{#1}{#1}##1}\endgroup% + }% + \IfValueT{#3}{\def\Markup@Suffix{\suffix{#3}}}% +%<*class> + \IfValueT{#4}{\renewcommand*\Markup@Declare[1]{#4\Markup@Suffix}}% +%</class> +} +% \end{macrocode} +% Nach der formatierten Ausgabe wird \cs{Markup@ClearFormat} aufgerufen, um die +% aktuell definierte Formatierung zurückzusetzen und bei einem neuen Aufruf +% eines der Markup-Befehle mit \cs{Markup@CheckFormat} auf die Verwendung von +% \cs{Markup@SetFormat} prüfen zu können. +% \begin{macrocode} +\newcommand*\Markup@ClearFormat{% + \undef\Markup@Format% + \let\Markup@Declare\Markup@@Declare% + \let\Markup@Suffix\relax% +} +\Markup@ClearFormat +\newcommand*\Markup@CheckFormat{% + \ifundef\Markup@Format{% +%<*class> + \ClassError{tudscrmanual}% +%</class> +%<*package> + \PackageError{tudscrtutorial}% +%</package> + {\string\Markup@SetFormat\space unused}% + {It seems you have forgotten to use \string\Markup@SetFormat.}% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \Markup@Suffix +% \end{macro}^^A \Markup@Format +% \end{macro}^^A \Markup@ClearFormat +% \end{macro}^^A \Markup@SetFormat +% \end{macro}^^A \Markup@CheckFormat +% \begin{macro}{\tud@nonchangecase} +% \changes{v2.05}{2015/11/20}{neu}^^A +% \begin{macro}{\tud@x@textcase@uclcnotmath} +% Die \TUDScript-Hauptklassen definieren in Ergänzung zum Paket \pkg{textcase} +% den internen Befehl \cs{tud@x@textcase@uclcnotmath}, womit die Definition von +% Makros ermöglicht wird, welche von \cs{MakeTextUppercase} nicht beachtet +% werden sollen. Hierfür werden \emph{alle} Markup-Befehle der Liste zum +% Ignorieren hinzugefügt. Damit aber bei der eigentlichen Ausgabe alles in +% Majuskeln erscheint, wird für diesen Fall \cs{Markup@Format} genutzt. +% \begin{macrocode} +\ifundef{\tud@x@textcase@uclcnotmath}{}{% + \NewDocumentCommand\tud@nonchangecase{m}{% + \DeclareExpandableDocumentCommand#1{sm}{% + \IfBooleanT{##1}{\noexpand\@tud@indextrue}% + \NoCaseChange{#1{##2}}% + }% + } + \apptocmd{\tud@x@textcase@uclcnotmath}{% + \tud@nonchangecase\Application% + \tud@nonchangecase\Distribution% + \tud@nonchangecase\Engine% + \tud@nonchangecase\File% + \tud@nonchangecase\Class% + \tud@nonchangecase\Package% + \tud@nonchangecase\Option% + \tud@nonchangecase\Environment% + \tud@nonchangecase\Macro% + \tud@nonchangecase\Length% + \tud@nonchangecase\Counter% +%<*class> + \DeclareExpandableDocumentCommand\Key{smm}{% + \IfBooleanT{##1}{\noexpand\@tud@indextrue}% + \NoCaseChange{#1{##2}{##3}}% + }% + \tud@nonchangecase\Term% + \tud@nonchangecase\PageStyle% + \tud@nonchangecase\Font% + \tud@nonchangecase\Color% +%</class> + }{}{\tud@patch@wrn{tud@x@textcase@uclcnotmath}} +} +% \end{macrocode} +% \end{macro}^^A \tud@x@textcase@uclcnotmath +% \end{macro}^^A \tud@nonchangecase +% +% \subsection{Index} +% +% Hier erscheint alles, was für Erstellen und Ausgabe der einzelnen Indexe +% notwendig ist. Hierfür wird das Paket \pkg{imakeidx} in Verbindung mit +% \app{texindy} verwendet. Diese können sowohl mit dem Paket als auch mit der +% Klasse erzeugt werden. +% \begin{macrocode} +\PassOptionsToPackage{xindy,splitindex}{imakeidx} +\RequirePackage{imakeidx}[2013/07/11] +% \end{macrocode} +% Zuerst ein paar kleinere Einstellungen für das Layout\dots +% \begin{macrocode} +\indexsetup{% +%<*class> + level=\addsec,% +%</class> +%<*package> + level=\subsection*,% +%</package> + noclearpage,firstpagestyle=headings,headers={\indexname}{\indexname},% + othercode={\renewcommand*\subitem{\@idxitem\hspace*{15\p@}}}% +} +% \end{macrocode} +% \begin{environment}{theindex} +% \dots gefolgt von einem Patch für die Umgebung \env{theindex}, um unschöne +% Seitenumbrüche direkt nach Überschriften zu vermeiden. Diese treten auf, das +% das Paket \pkg{imakeidx} meiner Meinung nach die Überschriften zusammen mit +% der \env{multicols}-Umgebung falsch setzt. Der Patch sorgt dafür, dass die +% Überschriften (\cs{imki@indexlevel}|{|\cs{indexname}|}|) nicht +% vor der Umgebung sondern~-- wie für \pkg{multicol} auch dokumentiert~-- im +% optionalen Argument von \env{multicols} aufgerufen werden. +% \begin{macrocode} +\ifimki@original\else% + \CheckCommand\theindex{% + \imki@maybeaddtotoc + \imki@indexlevel{\indexname}\imki@indexheaders + \thispagestyle{\imki@firstpagestyle}% + \ifnum\imki@columns>\@ne + \columnsep \imki@columnsep + \ifx\imki@idxprologue\relax + \begin{multicols}{\imki@columns} + \else + \begin{multicols}{\imki@columns}[\imki@idxprologue] + \fi + \else + \imki@idxprologue + \fi + \global\let\imki@idxprologue\relax + \parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \columnseprule \ifKV@imki@columnseprule.4\p@\else\z@\fi + \raggedright + \let\item\@idxitem + \imki@othercode% + }% + \patchcmd{\theindex}{% + \imki@indexlevel{\indexname}\imki@indexheaders% + }{% + \imki@indexheaders% + }{}{\tud@patch@wrn{theindex}}% + \patchcmd{\theindex}{% + \ifnum\imki@columns>\@ne + \columnsep \imki@columnsep + \ifx\imki@idxprologue\relax + \begin{multicols}{\imki@columns} + \else + \begin{multicols}{\imki@columns}[\imki@idxprologue] + \fi + \else + \imki@idxprologue + \fi + }{% + \ifnum\imki@columns>\@ne\relax% + \columnsep \imki@columnsep% + \ifx\imki@idxprologue\relax% + \begin{multicols}{\imki@columns}[\imki@indexlevel{\indexname}]% + \else% + \begin{multicols}{\imki@columns}[% + \imki@indexlevel{\indexname}% + \imki@idxprologue% + ]% + \fi% + \else% + \imki@indexlevel{\indexname}\imki@idxprologue% + \fi% + }{}{\tud@patch@wrn{theindex}}% +\fi% +% \end{macrocode} +% \end{environment}^^A theindex +% \begin{macro}{\makexdyindex} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Um die einzelnen Indexe erstellen zu können, wird das Makro \cs{makexdyindex} +% definiert. Die Sternversion dieses Befehle erstellt dabei neben dem normalen +% Spezialindex einen weiteren, welcher explizit für Deklarationen genutzt wird. +% Dieser wird anschließen als erstes an \app{texindy} weitergereicht, um die +% richtige Formatierung der einzelnen Einträge gewährleisten zu können. Erst +% danach wird die Datei mit den normalen Einträgen verarbeitet. Siehe hierzu +% auch \cs{Process@@Index}. +% \begin{macrocode} +\NewDocumentCommand\makexdyindex{s o m !o}{% + \let\@tempb\@empty% +%<*class> + \IfBooleanT{#1}{% + \def\@tempc{\jobname-#4-declare.idx}% + \makeindex[name={#4-declare}]% + \IfFileExists{\@tempc}{% + \edef\@tempb{-o \jobname-#4.ind \@tempc}% + }{% + \ClassWarning{tudscrmanual}{File \@tempc\space not found}% + }% + }% +%</class> + \protected@edef\@tempa{% + title={#3},% + columnsep=\noexpand\f@size\noexpand\p@,% + \IfValueTF{#4}{% + name={#4},% + options={-M \@currname-ind.xdy -L german-din -t \jobname-#4.xlg \@tempb},% + }{% + options={-M \@currname-ind.xdy -L german-din -t \jobname.xlg},% + }% + \IfValueT{#2}{#2}% + }% + \expandafter\makeindex\expandafter[\@tempa]% +} +% \end{macrocode} +% \end{macro}^^A \makexdyindex +% Nun können mit \cs{makexdyindex} die einzelnen Indexe erstellt werden. +% \begin{macrocode} +\makexdyindex{Allgemeiner Index} +\makexdyindex*{Klassen- und Paketoptionen}[options] +\makexdyindex*{Befehle und Umgebungen mit zugeh\"origen Parametern}[macros] +%<*class> +\makexdyindex*{Sprachabh\"angige Bezeichner}[terms] +\makexdyindex*{Seitenstile, Schriftelemente und Farben}[elements] +%</class> +\makexdyindex{L\"angen und Z\"ahler}[misc] +\makexdyindex*{Klassen, Pakete und Dateien}[files] +%<*class> +\makexdyindex[columns=1]{\"Anderungsliste}[changelog] +%</class> +\undef\makexdyindex +% \end{macrocode} +% \begin{macro}{\if@tud@index} +% \changes{v2.05}{2015/11/05}{neu}^^A +% Dieser Schalter wird zwei unterschiedliche Aufgaben verwendet. Zum einen wird +% er bei der Ausgabe von Verzeichnissen auf \val{true} gesetzt, um das Setzen +% von Indexeinträgen durch Markup-Befehle in den Verzeichnissen selbst zu +% unterbinden. Weiterhin verhindert der aktivierte Schalter bei der Ausführung +% von \cs{Process@Markup} das Erstellen von erweiterten Querverweisen sowie das +% Setzen von CTAN-Links bei Paketen (\cs{Package}), was weder in Verzeichnissen +% noch im Index erwünscht ist, weshalb vom Makro \cs{@printindex} ebenfalls +% \cs{@tud@indextrue} gesetzt wird. +% \begin{macrocode} +\newif\if@tud@index +\addtoeachtocfile{\protect\@tud@indextrue} +% \end{macrocode} +% \end{macro}^^A \if@tud@index +% +% \subsubsection{Formatierung von Indexeinträgen} +% +% \begin{macro}{\tud@idx@get} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\tud@idx@key} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\tud@idx@fmt} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\tud@idx@val} +% \changes{v2.05}{2015/11/05}{neu}^^A +% \begin{macro}{\tud@idx@bdl} +% \changes{v2.05}{2015/11/05}{neu}^^A +% Mit dem Makro \cs{tud@idx@get} wird die Formatierung eines Indexeintrags für +% einen Markup-Befehl realisiert. Für das Sortieren der Indexeinträge kommt +% \app{texindy} zum Einsatz. Um die Indexeinträge wie gewünscht zu Formatieren, +% gibt es zwei Möglichkeit. +% +% Bei der ersten Variante würde der Indexeintrag einfach direkt mit den +% Markup-Befehlen erstellt und in der \app{texindy}-Stildatei wird für alle +% Auszeichnungsbefehle die passende |merge-rule| erstellt, um die korrekte +% Sortierung zu gewährleisten. Tatsächlich war in einer früheren Version genau +% das der Ansatz. Allerdings werden die manuell erstellten RegExp-Regeln durch +% \hrfn{http://sourceforge.net/p/xindy/bugs/22/}{\app{texindy} nicht korrekt} +% genutzt werden, weshalb der Ansatz verworfen wurde. +% +% Damit das Sortieren verlässlich funktioniert, werden die Einträge für den +% Index deshalb in der gewohnten Syntax von \app{makeindex} in der Form +% \meta{Schlüsselwort}|@|\meta{Markup} erstellt. Diese Syntax kann auch mit +% \app{texindy} genutzt werden. +% +% An \cs{tud@idx@get} werden vier obligatorische gefolgt von vier optionalen +% Argumenten übergeben. Die ersten beiden Argumente sind die Makros, in welche +% \meta{Schlüsselwort}~-- für gewöhnlich \cs{tud@idx@key}~-- sowie die +% Formatierung \meta{Markup}~-- normalerweise \cs{tud@idx@fmt}~-- expandiert +% werden. Mit dem Makro im dritten Argument wird es möglich, Untereinträge zu +% einem \meta{Schlüsselwort} für beispielsweise Parameter von Umgebungen oder +% Befehlen (\cs{Key}) sowie spezielle Schlüsselwerte von Optionen zu erzeugen. +% Dabei wird vor der Erstellung des Untereintrages der direkt zuvor generierte +% Indexhaupteintrag ins dritte Argument~-- normalerweise \cs{tud@idx@val}~-- +% gesichert. Das vierte und letzte obligatorische Argument enthält schließlich +% den eigentlichen Markup-Befehl, für welchen der Indexeintrag erzeugt werden +% soll. +% +% Daran schließen sich vier optionale Argumente an, mit denen die Formatierung +% des Indexeintrags differenziert werden kann. Das erste optionale Argument +% |=|\meta{Wert}|=| kann wie bereits gewohnt für das Hinzufügen eines +% Schlüsselwertes genutzt werden. Das zweite, ordinäre optionale Argument +% \oarg{Anmerkung} fügt dem Eintrag in den Index eine zusätzliche Anmerkung +% hinzu. Soll der Indexeintrag für ein spezifisches Paket oder eine Klasse aus +% dem \TUDScript-Bundle erstellt werden, wird das optionale Argument in runden +% Klammern \parg{\string\Class\marg{Klasse}/\string\Package\marg{Paket}} für +% einen Verweis auf das \parg{Bundleelement} verwendet, der in \cs{@idxbundle} +% gespeichert wird. Das Argument \verb=|=\meta{Indexmarkup}\verb=|= wird bei +% Deklarationen zur Unterdrückung von Untereinträgen verwendet. +% Der vollständige Funktionsaufruf lautet: +% \newline\begingroup\scriptsize +% \cs{tud@idx@get}\cs{tud@idx@key}\cs{tud@idx@fmt}\ignorespaces% +% \cs{tud@idx@val}\marg{Elem.}|=|\meta{Wert}|=|\oarg{Anm.}\ignorespaces% +% \parg{Bundleelem.}\verb=|=\meta{Indexmark.}\verb=|=\ignorespaces% +% \endgroup +% \begin{macrocode} +\newcommand*\tud@idx@key{} +\newcommand*\tud@idx@fmt{} +\newcommand*\tud@idx@val{} +\newcommand*\tud@idx@bdl{} +\NewDocumentCommand\tud@idx@get{smmmmr==r[]r()d||}{% +% \end{macrocode} +% Die Änderungen an allerhand temporären Makros sollen lokal bleibens. +% \begin{macrocode} + \begingroup% +% \end{macrocode} +% In einer weiteren Gruppe wird der Markup-Befehl des vierten obligatorischen +% Arguments ausgewertet. Es wird eine Fallunterschiedung durchgeführt, ob es +% sich dabei um einen Parameter (\cs{Key}) handelt oder nicht. Ist dies der +% Fall, wird für diesen Parameter der hier nachfolgend formatierte Indexeintrag +% als Untereintrag verwendet. Dafür wird zuvor ein Haupteintrag aus dem ersten +% Argument von \cs{Key} generiert und in das dritte obligatorische Argument +% gespeichert (\cs{tud@idx@val}). +% \begin{macrocode} + \begingroup% +%<*class> + \let#4\@empty% + \in@{\Key}{#5}% +% \end{macrocode} +% Um den Haupteintrag zu extrahieren, wird mit \cs{Markup@Suppress} die Ausgabe +% des Markups deaktiviert und das erste Argument von \cs{Key} ausgeführt. Dies +% führt über \cs{Process@Index} zum rekursiven Aufruf von \cs{tud@idx@get}. Als +% Ergebnis sind im zweiten und dritten Argument~-- sprich in \cs{tud@idx@key} +% und \cs{tud@idx@fmt}~-- \meta{Markup} und \meta{Schlüsselwort} für den +% Elterneintrag enthalten. Diese werden in das vierte Argument (\cs{idxentry}) +% gespeichert. +% \begin{macrocode} + \ifin@% + \Markup@Suppress% + \let\Key\@firstoftwo% + #5% +% \end{macrocode} +% Da der Inhalt des vierten Arguments am Ende der Gruppe expandiert wird, wird +% mit \cs{expandonce} dafür gesorgt, dass die Expansion nur einmalig erfolgt. +% Zu beachten ist außerdem, dass der Hauptindexeintrag bereits in der Form +% \meta{Schlüsselwort}|@|\meta{Markup}|!| zusammengefügt wird. Die Sternversion +% wird für die Änderungsnotizen verwendet. Für diese wird eine kleine Anmerkung +% im Haupteintrag ergänzt. +% \begin{macrocode} + \let\@tempa\@empty% + \IfBooleanT{#1}{\def\@tempa{: Parameter angepasst}}% + \def#4{% + \expandonce#2\expandonce\@tempa{}@% + \expandonce#3\expandonce\@tempa{}!% + }% + \fi% +%</class> +% \end{macrocode} +% Nachdem ein möglicher Haupteintrag für Parameter erzeugt wurde, folgt nun +% der formatierte Indexeintrag für das aktuelle Markup-Element. Um diesen zu +% erstellen, wird für \meta{Schlüsselwort} zunächst nur der Inhalt des +% Hauptargumentes benötigt. Dieser wird hier in das zweite Argument +% expandiert, der ggf. erzeugte Haupteintrag in das vierte. Für \cs{Key} ist +% hier nur noch das zweite Argument relevant. +% \begin{macrocode} + \Markup@Gobble% +%<class> \let\Key\@secondoftwo% + \edef\tud@reserved{% + \noexpand\endgroup% + \def\noexpand#2{#5}% +%<class> \def\noexpand#4{#4}% + }% + \tud@reserved% +% \end{macrocode} +% Die Auszeichnung für den Indexeintrag besteht in erster Linie aus dem +% Markup-Befehl selbst. Damit ein |@|"~Zeichen beispielsweise in einem +% Makronamen korrekt verarbeitet wird, wird dieses im Stil von \app{makeindex} +% mit |"| maskiert. +% \begin{macrocode} + \def#3{#5}% + \tud@replace#2{@}{"@}% + \tud@replace#3{@}{"@}% +% \end{macrocode} +% In \cs{@idxbundle} wird ggf. das Paket oder die Klasse gespeichert, für die +% der aktuelle Eintrag erzeugt werden soll. Eine explizite Angabe wird in jedem +% Fall genutzt,\dots +% \begin{macrocode} + \let\tud@idx@bdl\tud@bdl@dflt% + \IfValueTF{#8}{% + \def\tud@idx@bdl{#8}% + }{% +% \end{macrocode} +% \dots eine implizite nur, wenn auch tatsächlich das passende Label existiert, +% da sonst mit Sicherheit falsche Einträge im Index erscheinen würden. +% \begin{macrocode} +%<*class> + \tud@if@bdl{% + \tud@if@lbl@exists{\tud@bdl@curr:#5}{% + \edef\tud@idx@bdl{\expandonce\tud@bdl@curr}% +% \end{macrocode} +% Sollte der Eintrag selbst dem Suffix für Paket oder Klasse entsprechen, wird +% dieser ignoriert. +% \begin{macrocode} + \def\tud@reserved{#5}% + \ifx\tud@reserved\tud@idx@bdl% + \let\tud@idx@bdl\tud@bdl@dflt% + \fi% + }{}% + }{}% +%</class> + }% +% \end{macrocode} +% Nachfolgend wird für den zu erzeugenden Indexeintrag die Zugehörigkeit des +% aktuellen Elements zu einem Paket oder einer Klasse aus dem \TUDScript-Bundle +% durch das Anhängen des jeweiligen \TUDScript-Bundle-Elements signalisiert. +% Dabei werden für die Anpassung von Schlüssel und Formatierung des Eintrags +% die temporären Makros \cs{@tempa}~(Schlüssel) und \cs{@tempb}~(Formatierung) +% gespeichert. In \cs{@tempc} wird der Inhalt von \cs{@tempb} zwischenzeitlich +% zur späteren Verwendung gesichert. +% \begin{macrocode} + \let\@tempa\@empty% + \let\@tempb\@empty% + \let\@tempc\@empty% +% \end{macrocode} +% Der temporäre Schalter \cs{@tempswa} wird genutzt, um das Hinzufügen der +% Ergänzungen zu steuern. Diese sollen nur für Elemente, welche nicht zu den +% Hauptklassen gehören, erfolgen. +% \begin{macrocode} + \@tempswatrue% + \ifx\tud@idx@bdl\tud@bdl@dflt% + \@tempswafalse% +% \end{macrocode} +% Ebenso werden die Anmerkungen für \cs{Key}-Elemente unterdrückt, da diese +% sowieso als Untereintrag erzeugt werden. Einträge in der Änderungsliste +% werden ohnehin separat für jedes \TUDScript-Bundle-Element ausgegeben. In +% jedem Fall ist jedoch Formatierung beim Markup für das Erzeugen des richtigen +% Querverweises notwendig und wird in \cs{@tempb} und \cs{@tempc} abgelegt. +% \begin{macrocode} + \else% +%<class> \in@{\Key}{#5}\ifin@\@tempswafalse\fi% + \IfBooleanT{#1}{\@tempswafalse}% + \edef\@tempb{(\expandonce\tud@idx@bdl)}% + \fi% + \let\@tempc\@tempb% +% \end{macrocode} +% Der Indexeintrag kann zur besseren Kenntnisnahme außerdem standardmäßig mit +% einer Beschreibung versehen werden. +% \begin{macrocode} + \IfValueT{#7}{% + \appto\@tempa{ #7}% + \appto\@tempb{\suffix{#7}}% + }% +% \end{macrocode} +% Wird die Anmerkung gesetzt, ist für den Schlüssel nur der Inhalt des in +% \cs{@idxbundle} gesicherten Markup-Befehls relevant. Dieser wird in der +% folgenden Gruppe extrahiert und \cs{@tempa} angehangen. Für die Formatierung +% bleibt das Markup erhalten und wird \cs{tempb} hinzugefügt. +% \begin{macrocode} + \if@tempswa% + \begingroup% + \Markup@Gobble% + \edef\tud@reserved{% + \noexpand\endgroup% + \noexpand\appto\noexpand\@tempa{ \tud@idx@bdl}% + }% + \tud@reserved% + \eappto\@tempb{\suffix{\expandonce\tud@idx@bdl}}% + \fi% +% \end{macrocode} +% Sollte mit |=|\meta{Wert}|=| ein spezieller Schlüsselwert angegeben worden +% sein, wird für diesen normalerweise ein separater Untereintrag erstellt. Der +% Schalter \cs{@tempswa} wird genutzt, um das Erzeugen dieses Untereintrages im +% Zweifel zu unterdrücken und diesen stattdessen als normalen Eintrag zu +% setzen. Dies ist zum einen bei Deklarationen und zum anderen in der +% Änderungsliste notwendig. Außerdem kann dies auch mit der Angabe von +% \val{default} als Indexargument erzwungen werden. +% \begin{macrocode} + \@tempswafalse% + \IfBooleanT{#1}{\@tempswatrue}% + \IfValueT{#9}{\ifstr{#9}{declare}{\@tempswatrue}{}}% + \IfValueT{#9}{\ifstr{#9}{default}{\@tempswatrue}{}}% +% \end{macrocode} +% In diesem Fall werden die Ergänzungen für Schlüssel und Formatierung ggf. um +% die speziellen Schlüsselwerte für das Element ergänzt. +% \begin{macrocode} + \if@tempswa% + \protected@eappto#2{\expandonce\@tempa}% + \tud@doifPValue{#6}{\noexpand\appto\noexpand#2{=#6}}% + \protected@eappto#3{\IfValueT{#6}{=#6=}\expandonce\@tempb}% +% \end{macrocode} +% Andernfalls wird geprüft, ob ein verwertbarer Schlüsselwert angegeben wurde. +% \begin{macrocode} + \else% + \tud@doifPValue{#6}{\noexpand\@tempswatrue}% +% \end{macrocode} +% Ist dies der Fall, wird aus den bisherigen Eingaben der Haupteintrag und +% daran anschließend der dazugehörige Untereintrag erstellt\dots +% \begin{macrocode} + \if@tempswa% + \eappto#4{% + \expandonce#2\expandonce\@tempa{}@% + \expandonce#3\expandonce\@tempb{}!% + }% + \appto#2{=#6}% + \appto#3{=#6=}% + \protected@eappto#3{\expandonce\@tempc}% +% \end{macrocode} +% \dots andernfalls bleibt es bei einem normalem Eintrag in den Index. +% \begin{macrocode} + \else% + \protected@eappto#2{\expandonce\@tempa}% + \protected@eappto#3{\expandonce\@tempb}% + \fi% + \fi% +% \end{macrocode} +% Die Erzeugung eines formatierten Indexeintrages ist beendet, das Resultat +% wird nach der letzten Gruppe definiert. +% \begin{macrocode} + \let\emph\@firstofone% + \protected@edef\tud@reserved{% + \noexpand\endgroup% + \def\noexpand#2{#2}% + \def\noexpand#3{#3}% + \def\noexpand#4{#4}% + }% + \tud@reserved% +} +% \end{macrocode} +% \end{macro}^^A \tud@idx@bdl +% \end{macro}^^A \tud@idx@val +% \end{macro}^^A \tud@idx@fmt +% \end{macro}^^A \tud@idx@key +% \end{macro}^^A \tud@idx@get +% \begin{macro}{\cleversee} +% \changes{v2.05}{2015/11/02}{neu}^^A +% \begin{macro}{\cleverseealso} +% \changes{v2.05}{2015/11/02}{neu}^^A +% \begin{macro}{\tud@cleversee} +% \changes{v2.05}{2015/11/02}{neu}^^A +% \changes{v2.05k}{2017/03/20}{neu}^^A +% Diese Befehle dienen zum smarten Setzen von Hinweisen im Index. Existiert +% lediglich dieser Hinweis im Index, wird dieser mit dem Präfix \cs{seename} +% ausgegeben. Sind jedoch für einen Indexeintrag auch Seitenzahlen vorhanden, +% so werden diese zuerst ausgegeben, danach folgt der Querverweis mit dem +% Präfix \cs{seealsoname}. Der Befehl \cs{cleverseealso} verwendet letzteren +% Präfix in jedem Fall. +% \begin{macrocode} +\newrobustcmd*\cleversee{\tud@cleversee{\seename}} +\newrobustcmd*\cleverseealso{% +%<*class> + \ClassWarning{tudscrmanual}% +%</class> +%<*package> + \PackageWarning{tudscrtutorial}% +%</package> + {You should use `|see' instead of `|seealso'}% + \tud@cleversee{\alsoname}% +} +% \end{macrocode} +% Diese Makro übernimmt die eigentliche Arbeit. Es ist darauf angewiesen, dass +% die angegebene Seitenzahlen eines Indexeintrages erst \emph{nach} den +% Hinweisen ausgegeben und mit \cs{relax} abgeschlossen werden. Dies wird mit +% der später definierten Stildatei für \app{texindy} sichergestellt. So wird es +% möglich, dass das Makro \cs{tud@cleversee} auf alles ihm bis \cs{relax} +% nachfolgende parsen kann und abhängig davon die Ausgabe gestaltet. Das zweite +% obligatorische Argument beinhaltet dabei den Querverweis, das dritte Argument +% ist alles nachfolgende bis \cs{relax}. +% \begin{macrocode} +\newcommand*\tud@cleversee{} +\def\tud@cleversee#1#2#3\relax{% + \IfArgIsEmpty{#3}{% + \emph{#1}\space#2% + }{% +% \end{macrocode} +% Folgen im Index nach \cs{cleversee}\marg{Querverweis} noch weitere Einträge, +% so sind diese zu Beginn durch \texttt{,\textvisiblespace} getrennt. Diese +% zwei Zeichen werden mithilfe von \cs{@tempa} ignoriert. +% \begin{macrocode} + \begingroup% + \def\@tempa, ##1\@nil{##1,\space\emph{\alsoname}\space#2}% + \@tempa#3\@nil% + \endgroup% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@cleversee +% \end{macro}^^A \cleverseealso +% \end{macro}^^A \cleversee +% \begin{macro}{\seeref} +% \changes{v2.05}{2015/11/02}{neu}^^A +% \begin{macro}{\seeidx} +% Der Befehl \cs{seeref} kann anstelle von \cs{see} bzw. in der Sternversion +% statt \cs{alsosee} genutzt werden. Das Makro \cs{seeidx} verweist auf die +% Seite eines Indexes. +% \begin{macrocode} +%<*class> +\NewDocumentCommand\seeref{s m}{% + \emph{\IfBooleanTF{#1}{\alsoname}{\seename}}\space#2% +} +\newcommand*\seeidx[2]{\pageref{idx:#1}} +%</class> +% \end{macrocode} +% \end{macro}^^A \seeidx +% \end{macro}^^A \seeref +% +% \subsubsection{Erstellen von Indexeinträgen} +% +% \begin{macro}{\Process@Index} +% \changes{v2.05}{2015/11/15}{neu}^^A +% \begin{macro}{\Process@@Index} +% \changes{v2.05}{2015/11/15}{neu}^^A +% Mit \cs{Process@Index} wird geprüft, ob mit dem im zweiten obligatorischen +% Argument enthaltenen Markup-Befehl ein Indexeintrag erzeugt werden soll. +% Ein Indexeintrag kann mit der Sternversion eines Markup-Befehls explizit +% unterdrückt werden, wobei der boolesche Wert im ersten obligatorischen +% Argument an \cs{Process@Index} zu Prüfung übergeben wird. Außerdem wird für +% obsolete Deklarationen ebenso wie bei aktiviertem Schalter \cs{if@tud@index} +% kein Eintrag erstellt. In allen genannten Fällen passiert beim Aufruf von +% \cs{Process@Index} nichts, andernfalls wird \cs{Process@@Index} ausgeführt. +% +% Die auf die zwei obligatorischen Argumente folgenden optionalen sind in der +% Nomenklatur identisch zu den bisherigen Erläuterungen, der vollständige +% Funktionsaufruf lautet: +% \newline\begingroup\scriptsize +% \cs{Process@Index}\marg{Stern?}\marg{Element}\ignorespaces% +% |=|\meta{Wert}|=|\oarg{Anmerkung}\parg{Bundleelement}\ignorespaces% +% \verb=|=\meta{Indexmarkup}\verb=|=\ignorespaces% +% \endgroup +% \begin{macrocode} +\NewDocumentCommand\Process@Index{mmd==od()d||}{% + \ifboolexpr{% +%<class> bool {@tud@index} or bool {@tud@obsolete}% +%<package> bool {@tud@index}% + }{}{% + \IfBooleanTF{#1}{% + \IfValueT{#6}{% +%<*class> + \ClassWarning{tudscrmanual}% +%</class> +%<*package> + \PackageWarning{tudscrtutorial}% +%</package> + {% + You've used the starred version. No index entry\MessageBreak% + for #2 is created. The\MessageBreak% + optional argument |#6| will be ignored% + }% + }% + }{% + \Process@@Index{#2}=#3=[#4](#5)|#6|% + }% + }% +} +% \end{macrocode} +% Mit \cs{Process@@Index} erfolgt die eigentliche Erzeugung des Indexeintrages. +% \begin{macrocode} +\NewDocumentCommand\Process@@Index{mr==r[]r()r||}{% +% \end{macrocode} +% Dabei erledigt \cs{tud@idx@get} einen Großteil der Aufgabe. Mit besagtem +% Makro werden Schlüssel und Format für den gewünschten Indexeintrag erzeugt. +% Sollte optional ein spezieller |=|\meta{Wert}|=| für einen Schlüssel gegeben +% sein, so wird ggf. auch der passende Haupteintrag erstellt. +% \begin{macrocode} +%<*class> + \if@tud@declare% + \tud@idx@get\tud@idx@key\tud@idx@fmt\tud@idx@val{#1}=#2=[#3](#4)|declare|% + \else% +%</class> + \tud@idx@get\tud@idx@key\tud@idx@fmt\tud@idx@val{#1}=#2=[#3](#4)|#5|% +%<*class> + \fi% +%</class> +% \end{macrocode} +% Mit der Sternversion \cs{tud@attr@get*} wird der Zielindex für das im +% ersten Argument übergebene \marg{Element} ermittelt. +% \begin{macrocode} + \tud@attr@get*\tud@lbl@tmp{#1}% +% \end{macrocode} +% Markup-Befehle, welche in Deklarationen verwendet wurden, werden für eine +% höhere Priorisierung in einem speziellen Index angelegt, wobei hier die +% Formatierung dieses Eintrags fest vorgegeben ist. +% \begin{macrocode} +%<*class> + \if@tud@declare% + \if@openindex% + \IfValueT{#5}{% + \ClassWarning{tudscrmanual}{% + It is not possible to use any indexing format\MessageBreak% + like |#5| within the arguments of the\MessageBreak% + environments `Declaration' or `Declaration*'% + }% + }% +% \end{macrocode} +% Jetzt folgt~-- abhängig vom Schalter \cs{if@openindex}~-- der öffnende oder +% schließende Indexeintrag der Deklaration. Für den schließenden ist dabei eine +% Formatierung des Schlüssels nicht notwendig. +% \begin{macrocode} + \index[\tud@lbl@tmp-declare]{% + \tud@idx@val\tud@idx@key{}@\tud@idx@fmt|(declare% + }% + \else% + \index[\tud@lbl@tmp-declare]{\tud@idx@val\tud@idx@key|declare)}% + \fi% +% \end{macrocode} +% Für Markup-Befehle außerhalb von Deklarationsumgebungen wird ein einfacher +% Eintrag in den Index erzeugt, wobei auch im Fließtext über das Indexmarkup +% \verb=|=\val{declare}\verb=|= eine Quasi-Deklaration verwendet werden kann. +% Dies wird beispielsweise für \KOMAScript-Optionen genutzt, um diese in der +% gewünschten Formatierung im Index erscheinen zu lassen. +% \begin{macrocode} + \else% +%</class> + \IfValueT{#5}{% +%<*class> + \ifstr{#5}{declare}{% + \appto\tud@lbl@tmp{-declare}% + \appto\tud@idx@fmt{|declare}% + }{% + \appto\tud@idx@fmt{|#5}% + }% +%</class> +%<*package> + \appto\tud@idx@fmt{|#5}% +%</package> + }% + \index[\tud@lbl@tmp]{\tud@idx@val\tud@idx@key{}@\tud@idx@fmt}% +%<*class> + \fi% +%</class> +} +% \end{macrocode} +% \end{macro}^^A \Process@@Index +% \end{macro}^^A \Process@Index +% +% \iffalse +%<*class> +% \fi +% +% \begin{macro}{\CrossIndex} +% Der Befehl \cs{CrossIndex} dient zum Eintragen eines Schlagwortes, welches im +% ersten obligatorischen Argument angegeben wird, in den allgemeinen Index und +% verweist auf den im zweiten obligatorischen Argument, zum Schlagwort gehörigen +% Spezialindex. Das ordinäre optionale Argument kann verwendet werden, um ggf. +% den Eintrag in den allgemeinen Index, der normalerweise mit dem jeweiligen +% Schlagwort erfolgt, zu überschrieben. +% +% Wird die Sternversion von \cs{CrossIndex} genutzt, so wird der Querverweis +% als Eintrag in der obersten Ebene gesetzt, andernfalls wird ein Untereintrag +% gesetzt. Mit der normalen Variante können so zu einem Schlagwort weitere +% Verweise im allgemeinen Index erscheinen. Das zweite obligatorische Argument +% kann eine kommagetrennte Liste enthalten. +% \begin{macrocode} +\NewDocumentCommand\CrossIndex{s m o m}{% + \def\@tempa##1##2##3{% + \index{% + \IfBooleanTF{#1}{##3@##3}{##3!"|@}% + \,\textrightarrow\,% + \tudhyperref{idx:##2}{\IfValueTF{##1}{##1}{Index der ##3}}|seeidx{##2}% + }% + }% + \forcsvlist{\@tempa{#3}{#4}}{#2}% +} +% \end{macrocode} +% \end{macro}^^A \CrossIndex +% \begin{macro}{\SeeRef} +% \changes{v2.05}{2015/11/05}{neu}^^A +% Mit \cs{SeeRef} wird unter dem im ersten Argument gegebenen Schlagwort ein +% Indexuntereintrag erzeugt, der wiederum auf einen Indexeintrag des zweiten +% Argumentes verweist. Dabei kann im zweiten Argument ein normaler Begriff oder +% ein Markup-Befehl verwendet werden. Normalerweise wird für den Querverweis +% die Referenzklasse \verb=|see= verwendet, die Sternversion des Befehls +% hingegen nutzt \verb=|seeunverified=, um auf eine Prüfung des verwiesenen +% Eintrags zu verzichten. +% \begin{macrocode} +\NewDocumentCommand\SeeRef{s m m}{% + \sbox\z@{% + \let\tud@idx@fmt\relax% + #3% +% \end{macrocode} +% Wurde im zweiten Argument ein Markup-Befehl angegeben, so wurde durch das +% Erstellen der Box das dazugehörige Indexformat in \cs{tud@idx@fmt} für den +% Eintrag erstellt. Andernfalls wurde die Definiton von \cs{tud@idx@fmt} nicht +% geändert und das Argument wird nach der Box direkt in den Index eingetragen. +% \begin{macrocode} + \ifx\tud@idx@fmt\relax% + \gdef\tud@reserved{#3}% + \else% + \global\let\tud@reserved\tud@idx@fmt% + \fi% + }% + \IfBooleanTF{#1}{\def\tud@idx@fmt{seeunverified}}{\def\tud@idx@fmt{see}}% + \index{#2!#3|\tud@idx@fmt{\tud@reserved}}% +} +% \end{macrocode} +% \end{macro}^^A \SeeRef +% +% \iffalse +%</class> +% \fi +% +% \subsubsection{Indexausgabe} +% +% Dies sind alle Befehle, die zur Ausgabe der erzeugten Indexe benötigt werden. +% \begin{macro}{\PrintIndex} +% \changes{v2.02}{2014/08/20}{neu}^^A +% \begin{macro}{\tud@indexprologue} +% \changes{v2.02}{2014/08/20}{neu}^^A +% Mit \cs{PrintIndex} erfolgt die Ausgabe aller erstellten Indexe. Dabei wird +% für bestimmte Spezialindexe das Makro \cs{tud@indexprologue} neu gesetzt, um +% für diese vor der eigentlichen Ausgabe einige Anmerkungen machen zu können. +% Mit \cs{tud@indexprologue} kann der einleitende Teil für einen Index gesetzt +% werden. +% \begin{macrocode} +%<*class> +\newcommand*\tud@indexprologue{} +%</class> +\newcommand*\PrintIndex{% + \begingroup% + \providecommand*\lettergroup[1]{% + \par\textbf{\textsf{##1}}\par% + \nopagebreak% + }% +%<*class> + \renewcommand\tud@indexprologue{% + Die im Folgenden aufgelisteten Schlagworte sollen f\"ur den Umgang mit + \hologo{LaTeXe} im Allgemeinen sowie dem \TUDScript-Bundle im Speziellen + sowohl Antworten bei generellen Fragen liefern als auch L\"osungen f\"ur + typische Probleme bereitstellen. Falls ein gesuchter Begriff hier nicht + auftaucht oder trotz vorhandener Hinweise kein zufriedenstellendes + Ergebnis erzielt werden kann, sollte das \Forum* erster Anlaufpunkt sein, + um weitere Hilfe bei der Nutzung von \TUDScript zu erhalten.% + }% +%</class> +%<*package> + \begingroup% + \let\lettergroup\@gobble% + \let\indexspace\relax% +%</package> + \print@index% +%<*package> + \endgroup% +%</package> +%<*class> + \clearpage% + \renewcommand\tud@indexprologue{% + Dies ist der Index aller im Handbuch erl\"auterten sowie erw\"ahnten + Optionen, wobei bei den meisten auch Untereintr\"age mit Seitenangaben + f\"ur spezielle Wertzuweisungen existieren.% + }% +%</class> + \print@index[options]% +%<*class> + \renewcommand\tud@indexprologue{% + Dies ist die Auflistung aller im Handbuch erl\"auterten sowie erw\"ahnten + Befehle und Umgebungen. Bei einigen existieren auch Untereintr\"age f\"ur + Schl\"ussel-Wert-Parameter, welche im optionalen Argument der jeweiligen + Anweisung verwendet werden k\"onnen. In der dritten Unterebene sind + gegebenenfalls Seitenverweise f\"ur explizite Wertzuweisungen an diese + Parameter zu finden.% + }% +%</class> + \print@index[macros]% +%<*class> + \renewcommand\tud@indexprologue{% + Dies sind alle von \TUDScript definierten, sprachabh\"angigen Bezeichner. + Informationen zur Verwendung sowie den Anpassungsm\"oglichkeiten sind in + \autoref{sec:localization} zu finden.% + }% + \print@index[terms]% + \print@index[elements]% +%</class> +%<*package> + \begingroup% + \let\lettergroup\@gobble% + \let\indexspace\relax% +%</package> + \print@index[misc]% +%<*package> + \endgroup% +%</package> + \print@index[files]% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \tud@indexprologue +% \end{macro}^^A \PrintIndex +% \begin{macro}{\print@index} +% \changes{v2.02}{2014/07/25}{neu}^^A +% \begin{macro}{\tud@idx@skip} +% \changes{v2.02}{2014/09/02}{neu}^^A +% Mit \cs{@printindex} erfolgt die Ausgabe der einzelnen Indexe. Dabei wird in +% der Klasse \cls{tudscrmanual} zuvor für jeden Index ein referenzierbares +% Label erstellt und ggf. der Prolog gesetzt. +% +% Aufgrund der Verwendung der \env{multicols}-Umgebung durch das Paket +% \pkg{imakeidx} werden normalerweise ohne einen Prolog zu große vertikale +% Abstände gesetzt. Dies wird mit \cs{tud@idx@skip} behoben. +% \begin{macrocode} +\newcommand*\tud@idx@skip{% + \ifnum\imki@columns>\@ne\relax\vspace{-\multicolsep}\fi% +} +\newcommand*\print@index[1][]{% +% \end{macrocode} +% Falls ein Seitenumbruch notwendig ist, sollte dieser vor dem Index und nicht +% unmittelbar nach dem Beginn erfolgen. +% \begin{macrocode} + \pagebreak[3]% + \@tud@indextrue% +%<*class> +% \end{macrocode} +% Das zu erstellende Label wird in \cs{tud@reserved} gespeichert. Dabei wird +% die Sternversion von \cs{tudhyperdef} genutzt, um das Label auf die Höhe der +% Überschrift zu setzen. +% \begin{macrocode} + \ifblank{#1}{% + \def\tud@reserved{\tudhyperdef*{idx:main}}% + }{% + \def\tud@reserved{\tudhyperdef*{idx:#1}}% + }% +% \end{macrocode} +% Ohne Prolog wird der fehlerhafte vertikale Abstand behoben. +% \begin{macrocode} + \ifx\tud@indexprologue\@empty% + \indexprologue[\tud@idx@skip]{\tud@reserved}% +% \end{macrocode} +% Mit Prolog wird der fehlerhafte vertikale Abstand nach diesem korrigiert. +% \begin{macrocode} + \else% + \indexprologue{% + \tud@reserved% + \tud@indexprologue% + \tud@idx@skip% + }% + \fi% +%</class> +% \end{macrocode} +% Fur das Paket \pkg{tudscrtutorial} erfolgt eine einfache Ausgabe der Indexe. +% \begin{macrocode} +%<package> \indexprologue[\tud@idx@skip]{}% +% \end{macrocode} +% Die Ausgabe des gewünschten Index und des leeren des Prologs. +% \begin{macrocode} + \ifblank{#1}{\printindex}{\printindex[#1]}% + \ifnum\imki@columns>\@ne\relax\vspace{-\multicolsep}\fi% +%<class> \let\tud@indexprologue\@empty% +} +% \end{macrocode} +% \end{macro}^^A \tud@idx@skip +% \end{macro}^^A \print@index +% +% \iffalse +%<*class> +% \fi +% +% \subsection{Änderungsliste} +% +% Um dem Anwender einen schnellen Überblick zu Änderungen der aktuellen Version +% bereitstellen zu können, werden Befehle zur automatisierten Erzeugung einer +% solchen Liste definiert. Die Änderungsliste ist der Klasse \cls{tudscrmanual} +% vorbehalten. +% +% Änderungsnotizen lassen sich auf zwei unterschiedlichen Wegen generieren. +% Entweder über die Nutzung von \cs{ChangedAt} oder über das optionale Argument +% einer der Deklarationsumgebungen. Diese sind in der Form +% \meta{Versionsnummer}|:|\meta{Änderungsnotiz} anzugeben. Die alleinige Angabe +% der Versionsnummer ohne Änderungsnotiz ist ebenso möglich. +% +% Wird die Änderungsnotiz für ein bestimmtes Element wie eine Option oder ein +% Befehl erstellt, wie es bei den Deklarationsumgebungen implizit oder bei der +% Verwendung von \cs{ChangedAt} mit optionalem Argument geschieht, gibt es die +% zusätzliche Möglichkeit, einen Untereintrag zu erstellen. Dabei ist dieser +% nach Versionsnummer und vor Änderungsnotiz in folgender Form anzugeben: +% \meta{Versionsnummer}|!|\meta{Untereintrag}|:|\meta{Änderungsnotiz}. Der +% Untereintrag ist für die explizite Angabe eines Schlüssel-Wert-Paares gedacht. +% \begin{macro}{\if@tud@changedat} +% \begin{macro}{\Process@ChangedAt} +% \changes{v2.02}{2014/07/25}{erweitert}^^A +% \changes{v2.02}{2014/10/08}{Sternversion ergänzt}^^A +% Der Schalter \cs{if@tud@changedat} wird im weiteren Verlauf dazu verwendet, +% das Standardverhalten der einzelnen Markup-Befehle kurzeitig zu ändern und +% anstelle der Makros \cs{Process@Markup} und \cs{Process@Index} den Befehl +% \cs{Process@ChangedAt} auszuführen, mit welchem die Formatierung der Einträge +% der Änderungsliste erfolgt. +% \begin{macrocode} +\newif\if@tud@changedat +% \end{macrocode} +% Die Formatierung der Änderungseinträge erfolgt~-- wie auch für den Index~-- +% mit dem Makro \cs{tud@idx@get}, wobei die Sternversion für die Identifikation +% als Änderungseintrag fungiert. Aufgerufen wird \cs{Process@ChangedAt} während +% der Erstellung der Änderungseinträge mit \cs{Changed@At@CreateEntry}. Der +% Aufruf des Makros erfolgt dabei in gewohnter Form mit einem obligatorischen +% gefolgt von drei optionalen Argumenten: +% \newline\begingroup\scriptsize +% \cs{Process@ChangedAt}\marg{Element}|=|\meta{Wert}|=|\ignorespaces% +% \oarg{Ausgabesuffix}\parg{Bundleelement}\ignorespaces% +% \endgroup +% \begin{macrocode} +\NewDocumentCommand\Process@ChangedAt{md==od()}{% + \tud@idx@get*\tud@idx@key\tud@idx@fmt\tud@idx@val{#1}=#2=[#3](#4)% +} +% \end{macrocode} +% \end{macro}^^A \Process@ChangedAt +% \end{macro}^^A \if@tud@changedat +% \begin{macro}{\ChangedAt} +% \changes{v2.02}{2014/07/25}{erweitert}^^A +% \changes{v2.02}{2014/10/15}{Sternversion neu (keine Randnotiz)}^^A +% \changes{v2.06}{2018/09/03}{optionale Angabe des Bundles}^^A +% \begin{macro}{\@ChangedAt} +% \changes{v2.06}{2019/06/24}{neu}^^A +% \begin{length}{\changedatskip} +% \changes{v2.04}{2015/06/08}{neu}^^A +% Der Befehl \cs{ChangedAt} kann im Fließtext für das Erstellen einer freien +% Änderungsnotiz genutzt werden. Das obligatorische Argument sollt wie kurz +% zuvor beschrieben verwendet werden. +% +% Eine Änderungsnotiz wird für die angegebene Versionsnummer normalerweise im +% Abschnitt \enquote{Allgemein} aufgeführt. Soll jedoch eine Notiz explizit für +% eine Option, eine Umgebung, einen Befehlt etc. erstellt werden, kann dieses +% Element vor dem obligatorischen im optionalen Argument angegeben werden. Der +% Eintrag erfolgt dann im Abschnitt \enquote{Implementierung} für das gegebene +% Element. Im obligatorischen Argument können auch mehrere Änderungsnotizen +% gleichzeitig erzeugt werden. hierfür sind diese mit Semikolon voneinander zu +% trennen. Das Erzeugen der Liste erfolgt mit \cs{Changed@At@CreateList}. +% +% Normalerweise wird bei der Nutzung von \cs{ChangedAt} zusätzlich zum Eintrag +% in die Änderungsliste eine Randnotiz mit den angegebenen Versionsnummern +% erzeugt. Mit dem letzten optionalen Argument nach dem obligatorischen kann +% ein vertikaler Versatz dieser angegeben werden. Die Sternversion des Befehls +% unterdrückt die Ausgabe der Randnotiz. +% \begin{macrocode} +\newlength\changedatskip +\NewDocumentCommand\ChangedAt{s o d() m !O{\changedatskip}}{% + \IfValueTF{#2}{% + \Changed@At@CreateList[#2](#3){#4}% + }{% + \Changed@At@CreateList(#3){#4}% + }% +% \end{macrocode} +% Nach dem Erstellen der Liste wird diese abgearbeitet und ggf. die Randnotiz +% ausgegeben. +% \begin{macrocode} + \print@changedatlist{#1}{#5}% +} +% \end{macrocode} +% Die expandierbare Version des Befehls ist innerhalb von Überschriften nötig. +% \begin{macrocode} +\NewExpandableDocumentCommand\@ChangedAt{s o d() m}{} +\AfterPackage*{hyperref}{% + \pdfstringdefDisableCommands{% + \let\ChangedAt\@ChangedAt% + }% +} +\BeforeStartingTOC{\let\ChangedAt\@ChangedAt} +% \end{macrocode} +% \end{length}^^A \changedatskip +% \end{macro}^^A \@ChangedAt +% \end{macro}^^A \ChangedAt +% +% \subsubsection{Sukzessive Erstellung der Einträge für die Änderungsliste} +% +% Das Erstellen von Änderungsnotizen erfolgt in zwei Schritten. Diese werden +% zuerst mit dem Befehl \cs{Changed@At@CreateList} in einer standardisierten +% Form in der temporären Liste \cs{tud@changedat@list} gespeichert und später +% mit dem Makro \cs{Changed@At@CreateEntry} verarbeitet. Dieses Vorgehen liegt +% in den Umgebungen für Deklarationen begründet, welche verschachtelt werden +% können, jedoch einmalig mit \cs{printdeclarationlist} abgearbeitet werden. +% +% \begin{macro}{\tud@changedat@list} +% \changes{v2.02}{2014/07/25}{neu}^^A +% \begin{macro}{\forssvlist} +% \changes{v2.05}{2015/11/17}{neu}^^A +% Hier werden die Liste \cs{tud@changedat@list} sowie das Makro \cs{forssvlist} +% für die Aufspaltung der semikolongetrennten Änderungsnotizen definiert. +% \begin{macrocode} +\newcommand*\tud@changedat@list{} +\let\tud@changedat@list\relax +\DeclareListParser*{\forssvlist}{;} +% \end{macrocode} +% \end{macro}^^A \forssvlist +% \end{macro}^^A \tud@changedat@list +% \begin{macro}{\Changed@At@CreateList} +% \changes{v2.02}{2014/09/02}{neu}^^A +% \begin{macro}{\Changed@At@@CreateList} +% \changes{v2.02}{2014/10/09}{neu}^^A +% \begin{macro}{\Changed@At@@@CreateList} +% \begin{macro}{\Changed@At@@@@CreateList} +% Mit diesen Befehlen wird eine Liste im Format von \pkg{etoolbox} erzeugt, +% welche alle notwendigen Angaben für das Erzeugen der Änderungshistorie in +% Form eines Indexes mit \cs{Changed@At@CreateEntry} enthält. +% +% Der Befehl \cs{Changed@At@CreateList} kann vor dem obligatorischen Argument +% mit einem ordinären optionalen Argument verwendet werden, in welchem ein +% Makro, eine Umgebung, eine Option etc. angegeben wird. Ist dies der Fall, so +% wird der Eintrag in die Änderungsliste für dieses Element generiert, sonst +% wird eine allgemeiner Eintrag erzeugt. Das optionale Argument in runden +% Klammern wird lediglich verwendet, wenn für eine der beiden Spezialumgebungen +% \env{Declaration*} bzw. \env{Bundle*} eine Änderungsnotiz erstellt wird, um +% diese für das jeweilige \TUDScript-Bundle-Element in den entsprechenden +% Abschnitt der Änderungsliste einzutragen. Das Hauptargument verarbeitet +% schließlich eine semikolongetrennte Liste und reicht jeden Bestandteil +% zusammen mit den beiden optionalen Argumenten an \cs{Changed@At@@CreateList} +% weiter. +% \begin{macrocode} +\NewDocumentCommand\Changed@At@CreateList{od()m}{% + \IfValueT{#3}{\forssvlist{\Changed@At@@CreateList[#1](#2)}{#3}}% +} +% \end{macrocode} +% Mit \cs{Changed@At@@CreateList} wird lediglich die Versionsnummer von der +% eigentlichen Änderungsnotiz getrennt. +% \begin{macrocode} +\NewDocumentCommand\Changed@At@@CreateList{r[]r()>{\SplitArgument{1}{:}}m}{% + \Changed@At@@@CreateList[#1](#2)#3% +} +% \end{macrocode} +% Zuletzt wird durch \cs{Changed@At@@@CreateList} ein möglicher Untereintrag +% in ein separates Argument abgetrennt und \cs{Changed@At@@@@CreateList} mit +% allen Argumenten aufgerufen. +% \begin{macrocode} +\NewDocumentCommand\Changed@At@@@CreateList{r[]r()>{\SplitArgument{1}{!}}mm}{% + \Changed@At@@@@CreateList[#1](#2)#3{#4}% +} +% \end{macrocode} +% Der Befehl \cs{Changed@At@@@@CreateList} übernimmt nun die Erstellung des +% Eintrags in die Liste \cs{tud@changedat@list}. Wie bereits erwähnt, enthalten +% die beiden ersten Argumente ggf. Markup-Befehl und \TUDScript-Bundle-Element. +% Danach folgt die Versionsnummer der Änderungsnotiz, der mögliche Untereintrag +% für einen Markup-Befehl sowie die Änderungsnotiz selbst. +% +% Die oberste Gliederungsebene der Änderungshistorie ist die Versionsnummer. +% Unter dieser werden für jedes \TUDScript-Bundle-Element die Änderungsnotizen +% separat ausgegeben, wobei diese nochmal in einen allgemeinen Teil und einen +% zur Implementierung getrennt werden. +% +% Der im Folgenden erzeugte Eintrag für die Liste \cs{tud@changedat@list} wird +% in zwei unterschiedlichen Varianten generiert. In der Form +% \newline\begingroup\scriptsize +% \meta{Versionsnummer}|!Allgemein!|\meta{Änderungsnotiz}\ignorespaces% +% \endgroup\newline +% werden allgemeine Änderungsnotizen erstellt, für Einträge bezüglich der +% Implementierung wird die folgende Form genutzt: +% \newline\begingroup\scriptsize +% \meta{Versionsnummer}|!Implementierung!|\meta{Markup-Befehl}\ignorespaces% +% |!|\meta{Untereintrag}|!|\meta{Änderungsnotiz}\ignorespaces% +% \endgroup +% \begin{macrocode} +\NewDocumentCommand\Changed@At@@@@CreateList{r[]r()mmm}{% +% \end{macrocode} +% Die Aufteilung der Änderungsliste in die einzelnen \TUDScript-Bundle-Elemente +% erfolgt entweder anhand des explizit angegebenen optionalen Argumentes in +% runden Klammern oder aber implizit über den gegenwärtigen Inhalt des Makros +% \cs{tud@bdl@curr}. Dafür wird das Makro \cs{@tempa} so definiert, dass es +% das angegebene Argument in einer Box ausführt und das gesuchte Bundle-Element +% in \cs{@tempb} gespeichert ist. +% \begin{macrocode} + \def\@tempa##1{% + \sbox\z@{% + \let\tud@idx@fmt\relax% + \@tud@changedattrue% + ##1% + \@tud@changedatfalse% + \ifx\tud@idx@fmt\relax% + \gdef\@tempb{##1}% + \else% + \global\let\@tempb\tud@idx@fmt% + \fi% + }% + }% + \let\@tempb\@empty% + \IfValueTF{#2}{% + \@tempa{#2}% + }{% + \tud@if@bdl{\@tempa{\tud@bdl@curr}}{}% + }% +% \end{macrocode} +% Nachdem klar ist, für welches Bundle-Element ggf. der Änderungslisteneintrag +% erzeugt werden soll, wird nun bestimmt, ob dieser im allgemeinen Teil oder in +% den zur Implementierung erscheinen soll. Dies wird an der Existenz des ersten +% Argumentes entschieden. Ist es vorhanden, handelt es sich um einen Eintrag +% für den Implementierungsteil, welcher in \cs{tud@changedat@list} in der Form +% \newline\begingroup\scriptsize +% \meta{Versionsnummer}|!Implementierung!|\meta{Markup-Befehl}\ignorespaces% +% |!|\meta{Untereintrag}|!|\meta{Änderungsnotiz}\ignorespaces% +% \endgroup\newline +% gespeichert wird, wobei der Untereintrag auch leer bleiben kann. +% \begin{macrocode} + \IfValueTF{#1}{% + \toks@{#3!Implementierung }% +% \end{macrocode} +% Hier erfolgt ggf. der Eintrag des \TUDScript-Bundle-Elements, danach folgt +% der Markup-Befehl. +% \begin{macrocode} + \eaddto@hook\toks@{\@tempb}% + \addto@hook\toks@{!#1!}% +% \end{macrocode} +% Wurde ein Untereintrag angegeben, wird dieser hier gefolgt von der +% eigentlichen Änderungsnotiz eingefügt. Für obsolete Deklarationen für die +% Änderungsnotiz in jedem Fall ignoriert, da beim späteren Aufruf des Makros +% \cs{Changed@At@CreateEntry} eine Standardmeldung ausgegeben wird. +% \begin{macrocode} + \IfValueT{#4}{\addto@hook\toks@{#4}}% + \addto@hook\toks@{!}% + \if@tud@obsolete\else% + \IfValueT{#5}{\addto@hook\toks@{#5}}% + \fi% + }{% +% \end{macrocode} +% Handelt es sich um einen allgemeinen Änderungseintrag, wird dieser in der Form +% \newline\begingroup\scriptsize +% \meta{Versionsnummer}|!Allgemein!|\meta{Änderungsnotiz}\ignorespaces% +% \endgroup\newline +% in der Liste \cs{tud@changedat@list} gespeichert. Für den allgemeinen Teil +% wird mit der Angabe eines \TUDScript-Bundle-Elements etwas anders verfahren. +% Wurde dieses~-- wenn auch nur indirekt über eine der beiden Spezialumgebungen +% \env{Declaration*} bzw. \env{Bundle*}~-- angegeben, so wird der Eintrag in +% den allgemeinen Hauptteil als Untereintrag erzeugt. Erfolgte die Verwendung +% jedoch innerhalb einer \TUDScript-Bundle-Deklaration, so erscheint der +% Eintrag im allgemeinen Teil für das explizite Bundle-Element. +% \begin{macrocode} + \toks@{#3!Allgemein }% + \IfValueTF{#2}{% + \addto@hook\toks@{!}% + \eaddto@hook\toks@{\@tempb:\space}% + \IfValueTF{#5}{% + \addto@hook\toks@{#5}% + }{% + \addto@hook\toks@{\emph{neu}}% + }% + }{% + \eaddto@hook\toks@{\@tempb}% + \addto@hook\toks@{!}% + \addto@hook\toks@{#5}% + }% + \IfValueT{#4}{% + \ClassError{tudscrmanual}{Using !#4 isn't allowed for a change notice}{% + At least, it has to be implemented!% + }% + }% + }% + \listeadd\tud@changedat@list{\the\toks@}% +} +% \end{macrocode} +% \end{macro}^^A \Changed@At@@@@CreateList +% \end{macro}^^A \Changed@At@@@CreateList +% \end{macro}^^A \Changed@At@@CreateList +% \end{macro}^^A \Changed@At@CreateList +% +% \subsubsection{Erzeugen der Änderungseinträge} +% +% Mit den nachfolgenden Makros erfolgt das eigentliche Eintragen der +% Änderungseinträge aus der Liste \cs{tud@changedat@list} in den entsprechenden +% Index~\val{changelog}. +% +% \begin{macro}{\Changed@At@CreateEntry} +% \changes{v2.02}{2014/09/02}{neu}^^A +% \begin{macro}{\Changed@At@@CreateEntry} +% \changes{v2.02}{2014/09/02}{neu}^^A +% Der Befehl \cs{Changed@At@CreateEntry} wird durch \cs{@printchangedatlist} +% aufgerufen und teilt die gegebene Liste am Delimiter Ausrufezeichen |!| in +% fünf Argumente auf und reicht sie an \cs{Changed@At@@CreateEntry} weiter. +% Sind weniger als vier Ausrufezeichen vorhanden, so werden die ungenutzten +% Argumente mit dem~-- durch das Paket \pkg{xparse} definierten~-- leeren Wert +% \val{-NoValue-} an den Befehl \cs{Changed@At@@CreateEntry} übergeben. +% \begin{macrocode} +\NewDocumentCommand\Changed@At@CreateEntry{>{\SplitArgument{4}{!}}m}{% + \Changed@At@@CreateEntry#1% +} +% \end{macrocode} +% Mit \cs{Changed@At@@CreateEntry} wird der Eintrag in die Änderungshistorie +% erzeugt, falls denn überhaupt ein Eintrag generiert werden soll. Dies wird +% daran erkannt, ob das dritte Argument dew Wert \val{-NoValue-} entspricht +% oder eben nicht. Der zweite Fall tritt auf, wenn lediglich eine Randnotiz +% gesetzt werden soll. Die in \cs{tud@changedat@list} gespeicherten Einträge +% haben die Form +% \newline\begingroup\scriptsize +% \meta{Versionsnummer}|!Allgemein!|\meta{Änderungsnotiz}\ignorespaces% +% \endgroup\newline +% oder +% \newline\begingroup\scriptsize +% \meta{Versionsnummer}|!Implementierung!|\meta{Markup-Befehl}\ignorespaces% +% |!|\meta{Untereintrag}|!|\meta{Änderungsnotiz}\ignorespaces% +% \endgroup +% \begin{macrocode} +\newcommand*\Changed@At@@CreateEntry[5]{% + \IfValueT{#3}{% +% \end{macrocode} +% Bei der Deklaration von Optionen, Befehlen etc. werden diese automatisch in +% der Liste der Änderungen im Bereich \enquote{Implementierung} vor der +% gegebenen Erklärung selbst ausgegeben. Hierfür wird die Existenz des vierten +% Arguments geprüft. Ist dieses vorhanden\dots +% \begin{macrocode} + \IfValueTF{#4}{% +% \end{macrocode} +% \dots befindet sich im dritten Argument der Markup-Befehl für den Eintrag im +% Implementierungsteil. Mit dem zwischenzeitlichen Aktivieren des Schalters +% \cs{if@tud@changedat} wird beim nachfolgenden Aufruf des Markup-Befehls das +% Makro \cs{Process@ChangedAt} ausgeführt und dadurch auch \cs{tud@idx@get*} +% aufgerufen, wodurch in den Makros \cs{tud@idx@key}, \cs{tud@idx@fmt} und +% \cs{tud@idx@val} die passend formatierten Indexeinträge enthalten sind. +% \begin{macrocode} + \@tud@changedattrue% + #3% + \@tud@changedatfalse% +% \end{macrocode} +% Das vierte Argument erstellt in der Änderungsliste einen Untereintrag für den +% im dritten Argument gegebenen Markup-Befehl. Dies wird für Anmerkungen zu +% expliziten Schlüssel-Wert-Paaren bei Optionen oder Parametern genutzt. +% \begin{macrocode} + \ifxblank{#4}{}{% +% \end{macrocode} +% Hierfür wird die zuvor erhaltene Formatierung des Markup-Befehls des dritten +% Argumentes an den Haupteintrag \cs{tud@idx@val} mit der zusätzlichen +% Anmerkung \enquote{Werte angepasst} angehängt. +% \begin{macrocode} + \eappto\tud@idx@val{% + \expandonce\tud@idx@key: Werte angepasst@% + \expandonce\tud@idx@fmt: Werte angepasst!% + }% +% \end{macrocode} +% Anschließend werden die Formatierungsbefehle des vierten Arguments genutzt, +% wobei vom Befehl \cs{suffix} nur das Argument selbst benötigt wird. Um den +% Inhalt von \cs{tud@idx@val} zu schützen, erfolgt das ganze in einer Gruppe. +% \begin{macrocode} + \begingroup% + \@tud@changedattrue% + #4% + \@tud@changedatfalse% + \let\suffix\@gobble% + \protected@edef\tud@reserved{% + \noexpand\endgroup% + \def\noexpand\tud@idx@key{\tud@idx@key}% + \def\noexpand\tud@idx@fmt{\tud@idx@fmt}% + }% + \tud@reserved% + }% +% \end{macrocode} +% Nachdem die Formatierung der Haupt- und Untereinträge soweit zusammengebaut +% wurden, wird die eigentliche Änderungsnotiz des fünften Arguments angehangen. +% Dabei wird für den Fall, dass \emph{keine} Erklärung angegeben wurde, in der +% Änderungsliste vermerkt, ob es sich bei dem Markup-Befehl respektive dessen +% Untereintrag um eine \emph{neue} bzw. eine \emph{obsolete} Variante handelt. +% \begin{macrocode} + \ifxblank{#5}{% + \if@tud@obsolete% + \appto\tud@idx@fmt{: \emph{entf\"allt}}% + \else% + \appto\tud@idx@fmt{: \emph{neu}}% + \fi% +% \end{macrocode} +% Existiert ein Eintrag, wird dieser für Schlüssel und Format verwendet. +% \begin{macrocode} + }{% + \appto\tud@idx@key{: #5}% + \appto\tud@idx@fmt{: #5}% + }% +% \end{macrocode} +% Nachdem alles abgearbeitet wurde, wird der Indexeintrag erstellt. +% \begin{macrocode} + \index[changelog]{#1!#2!\tud@idx@val\tud@idx@key @\tud@idx@fmt}% +% \end{macrocode} +% Existiert das vierte Argument nicht, handelt es sich um einen allgemeinen +% Eintrag in der Änderungshistorie. Dieser wird direkt ausgeführt. +% \begin{macrocode} + }{% + \index[changelog]{#1!#2!#3}% + }% + }% +% \end{macrocode} +% Außerdem wird der Liste \cs{tud@templist} die aktuelle Version einmalig +% hinzugefügt, um alle Versionsangaben in einer Randnotiz ausgeben zu können. +% \begin{macrocode} + \ifinlist{#1}{\tud@templist}{}{\listadd\tud@templist{#1}}% +} +% \end{macrocode} +% \end{macro}^^A \Changed@At@@CreateEntry +% \end{macro}^^A \Changed@At@CreateEntry +% +% \subsubsection{Ausgabe der Änderungsliste} +% +% Ähnlich wie für den Index wird auch für die Änderungsliste bei der Ausgabe +% verfahren. +% +% \begin{macro}{\PrintChangelog} +% \begin{environment}{theindex} +% Mit \cs{PrintChangelog} erfolgt die Ausgabe der Änderungsliste. Dabei ist zu +% beachten, dass die Einträge im Index bis zur vierten Ebene erfolgen. +% \begin{macrocode} +\newcommand*\PrintChangelog{% + \begingroup% +% \end{macrocode} +% Die oberste Ebene enthält die Versionsnummer mit dem Präfix |v|. Diese Ebene +% soll nicht als Indexeintrag selber sondern vielmehr als Überschrift der Ebene +% \cs{subsection} genutzt werden. Dafür wird zum einen das durch das Paket +% \pkg{imakeidx} definierte Makro \cs{lettergroup} \emph{unschädlich} gemacht, +% zum anderen wird der Befehl \cs{item} so umdefiniert, dass dieser alles bis +% zum nächsten Zeilenumbruch als Argument einliest. Alle darunter liegenden +% \cs{item}-Befehle werden eine Ebene nach oben gehoben. +% \begin{macrocode} + \let\lettergroup\@gobble% + \apptocmd{\theindex}{% + \let\subsubsubitem\subsubitem% + \let\subsubitem\subitem% + \let\subitem\item% + \renewcommand*\item{% + \begingroup% + \escapechar=`\\% + \catcode\endlinechar=\active% + \csname\string\item\endcsname% + }% + \begingroup% + \escapechar=`\\% + \lccode`\~=\endlinechar% + \lowercase{% + \expandafter\endgroup% + \expandafter\def\csname\string\item\endcsname##1~% + }{% + \endgroup% + \let\@tempb\@firstofone% + \if@tud@cdoldfont@active\def\@tempb##1{\NoCaseChange{##1}}\fi% + \addsec[##1]{\TUDScript \@tempb{##1}}% + \tudhyperdef*{idx:changelog:##1}% + \def\@tempa{\indexname: \TUDScript \@tempb{##1}}% + \@mkboth{\@tempa}{\@tempa}% + }% + }{}{\tud@patch@wrn{theindex}}% +% \end{macrocode} +% Mit der so angepassten \env{theindex}-Umgebung erfolgt die Ausgabe der +% Änderungshistorie. +% \begin{macrocode} + \clearpage% + \def\imki@indexlevel{\addchap}% + \print@index[changelog]% + \endgroup% +} +% \end{macrocode} +% \end{environment}^^A theindex +% \end{macro}^^A \PrintChangelog +% \begin{macro}{\print@changedatlist} +% \changes{v2.02}{2014/10/09}{neu}^^A +% Die Einträge in der Liste der Änderungen \cs{tud@changedat@list} werden mit +% dem Makro \cs{Changed@At@CreateList} abgearbeitet, sortiert und erstellt. Das +% zweite obligatorische Argument von \cs{@printchangedatlist} steurrt den +% vertikalen Versatz der Randnotiz. Wird im ersten Argument das boolesche Flag +% zu \cs{BooleanTrue} gesetzt, wird die Randnotiz unterdrückt. +% \begin{macrocode} +\NewDocumentCommand\print@changedatlist{mm}{% + \ifx\tud@changedat@list\relax\else% + \let\tud@templist\relax% + \forlistloop\Changed@At@CreateEntry{\tud@changedat@list}% + \global\let\tud@changedat@list\relax% +% \end{macrocode} +% Nach der Verarbeitung der Einräge sind in \cs{tud@templist} alle angegebenen +% Versionsnummern genau einmal enthalten. Mit \cs{tud@list@sort} werden diese +% in die richtige Reihenfolge sortiert und anschließend als Randnotiz in einer +% Tabelle ausgegeben, falls nicht die Sternversion verwendet wurde. +% \begin{macrocode} + \IfBooleanF{#1}{% + \tud@list@sort\tud@templist% + \strut% + \marginnote{% + \def\@tempa####1{% + \ignorespaces% + \tudhyperref{idx:changelog:####1}{####1}% + \tabularnewline% + }% + \begin{tabular}{|l|}% + \hline% + \forlistloop\@tempa{\tud@templist}% + \hline% + \end{tabular}% + }[#2]% + \ignorespaces% + }% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \print@changedatlist +% +% \subsection{Erweiterte Listen für Erläuterungen im Handbuch} +% +% Es folgen einige Umgebungen, mit welchen bestimmte Aspekte oder Pakete im +% Handbuch erläutert werden. +% +% Das Paket \pkg{enumitem} erlaubt das Beeinflussen der Standardlisten und die +% Ableitung neuer Listen aus diesen. Mit \cs{setlist\{noitemsep\}} werden die +% zusätzlichen Zwischenräume innerhalb der Listen beseitigt. Weiterhin wird +% linksbündiger Flattersatz für die Standardlisten aktiviert. +% \begin{macrocode} +\RequirePackage{enumitem}[2011/09/28] +\setlist{before*={\endgraf\tud@RaggedRight},partopsep=0pt,noitemsep} +% \end{macrocode} +% \begin{macro}{\stditem} +% \begin{macro}{\tud@before@item} +% Mit den Möglichkeiten des Paketes \pkg{enumitem} werden folgend Listen für +% das Aufführen von möglichen Werten einer Option sowie der Beschreibung von +% nützlichen Paketen erstellt. Für beide Listen soll dabei die originale +% Definition von \cs{item} in \cs{stditem} gesichert und anschließend angepasst +% werden. Die Sicherung und Redefinition von \cs{item} erfolgt dabei über das +% Makro \cs{tud@before@item} über einen bereitgestellten \emph{hook} zu Beginn +% der jeweiligen Liste. +% \begin{macrocode} +\newcommand*\stditem{} +\newcommand*\tud@before@item[1]{% + \ifdefvoid{\stditem}{% + \let\stditem\item% + \letcs\item{tud@item@#1}% +% \end{macrocode} +% Damit die Änderungsnotizen in der passenden vertikalen Position erscheinen, +% wird die Länge \cs{changedatskip} entsprechend angepasst. +% \begin{macrocode} + \setlength\changedatskip{-\baselineskip}% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \tud@before@item +% \end{macro}^^A \stditem +% +% \subsubsection{Listen für gültige Werte von Optionen} +% +% \begin{environment}{values} +% \begin{environment}{@values} +% \begin{macro}{\tud@values} +% Die Liste \env{@values} dient zum Benennen der möglichen Werte für einen +% bestimmten Schlüssel. Im Handbuch kommt diese Liste vor allem bei Optionen +% aber ggf. auch bei bestimmten Befehls- und Optionsparametern zum Einsatz. +% Diese wird in der Umgebung \env{values} eingebettet, damit zum einen ein +% \emph{obligatorisches} Argument verwendet werden kann und zum anderen +% \emph{nach} diesem ein optionales für die Liste selbst verwendbar ist. Das +% obligatorische Argument wird in \cs{tud@values} gesichert und sollte die +% genauer zu beschreibende Option bzw. das Makro etc. enthalten. +% \begin{macrocode} +\newcommand*\tud@values{} +\NewDocumentEnvironment{values}{mo}{% + \def\tud@values{#1}% + \IfValueTF{#2}{\@values[#2]}{\@values}% +}{% + \end@values% +} +\newlist{@values}{description}{1} +\setlist[@values]{% + topsep=\smallskipamount,labelwidth=\linewidth,labelsep=0pt,% + font=\normalfont,parsep=\parskip,listparindent=\parindent,% + before=\tud@before@item{values}% +} +% \end{macrocode} +% \end{macro}^^A \tud@values +% \end{environment}^^A @values +% \end{environment}^^A values +% \begin{macro}{\tud@item@values} +% \begin{macro}{\forslashlist} +% Das Makro \cs{tud@item@values} ersetzt in der Umgebung \env{values} die +% originale Definiton von \cs{item}. Die Sternversion kann dabei verwendet +% werden, um die Einstellung für den Säumniswert hervorzuheben. Im ersten +% optionalen Argument können die möglichen Werte einer Option oder eines +% Parameters angegeben werden. Sind mehrere Werte gleichbedeutende Werte +% verwendbar, so sind diese durch |/| zu trennen. Dabei wird der als erstes +% angegebene Wert für den Untereintrag in den Index verwendet. Das zweite +% optionale Argument kann genutzt werden, falls beispielsweise für +% unterschiedliche Klassen sich der Säumniswert unterscheidet. Das letzte +% optionale Argument in runden Klammern fügt zum Schluss einen ergänzenden +% Eintrag hinzu. +% \begin{macrocode} +\DeclareListParser*{\forslashlist}{/} +\NewDocumentCommand\tud@item@values{sood()}{% +% \end{macrocode} +% Alle Auszeichnungen kommen nur zum Tragen, wenn ein optionales Argument für +% die Werte angegeben wurde. +% \begin{macrocode} + \IfValueTF{#2}{% +% \end{macrocode} +% Die durch Schrägstrich getrennte Liste im optionalen Argument wird mit +% \cs{forslashlist} durchlaufen. Der erste Eintrag wird für den Indexeintrag +% benötigt und in \cs{@tempc} gesichert, alle weiteren Einträge werden in +% \cs{@tempb} gespeichert und lediglich im Fließtext aufgelistet. +% \begin{macrocode} + \let\@tempc\@empty% + \def\tud@reserved##1{% + \if@tempswa% + \appto\@tempb{/##1}% + \else% + \@tempswatrue% + \let\@tempb\@empty% + \def\@tempc{##1}% + \fi% + }% + \@tempswafalse% + \forslashlist\tud@reserved{#2}% +% \end{macrocode} +% Jetzt beginnt die Formatierung der Ausgabe. Zuerst wird die zu beschreibende +% Option in \cs{@tempa} expandiert. Danach wird der erste Wert angehangen, +% wobei dieser für die Sternversion als Säumniswert mit \cs{emph} hervorgehoben +% wird. Zuletzt wird dafür Sorge getragen, dass auf den anschließend erzeugten +% Eintrag selbst kein Hyperlink erzeugt wird und dieser im passenden Index als +% fettmarkierter Eintrag erscheint. +% \begin{macrocode} + \edef\@tempa{\expandonce\tud@values}% + \protected@eappto\@tempa{% + =\IfBooleanTF{#1}{\noexpand\emph}{\@firstofone}{\@tempc}=% + }% + \appto\@tempa{'none'|!|}% +% \end{macrocode} +% Danach werden alle weiteren möglichen Werte angegeben, wobei auch diese im +% Zweifelsfall mit \cs{emph} hervorzuheben sind. +% \begin{macrocode} + \edef\@tempb{% + \IfBooleanTF{#1}{\noexpand\emph}{\@firstofone}{% + \noexpand\PValue{\@tempb}% + }% + }% +% \end{macrocode} +% Zuletzt erfolgt die Auszeichnung, ob es sich bei den gelisteten Werten um +% Säumniswerte handelt, gefolgt vom optionael Suffix. +% \begin{macrocode} + \IfBooleanTF{#1}{% + \appto\@tempb{\suffix{S\"aumniswert}}% + }{% + \IfValueT{#3}{\appto\@tempb{\suffix{S\"aumniswert f\"ur #3}}}% + }% + \IfValueT{#4}{\appto\@tempb{\suffix{#4}}}% +% \end{macrocode} +% Die in \cs{tud@values} gespeicherte, zu beschreibende Option bzw. Makro etc. +% und der erste im optionalen Argument angegebene Wert werden verwendet, um ein +% Label zu erstellen. +% \begin{macrocode} + \tud@lbl@get@curr*\tud@lbl@tmp{\tud@bdl@curr:\tud@values}=\@tempc=% +% \end{macrocode} +% Abschließend erfolgt wird die Ausgabe des generierten Eintrags mit dem +% originalen Makro \cs{stditem}. +% \begin{macrocode} + \stditem[\tudhyperdef{\tud@lbl@tmp}\@tempa\@tempb]% + }{% + \stditem% + }% +} +% \end{macrocode} +% \end{macro}^^A \forslashlist +% \end{macro}^^A \tud@item@values +% \begin{macro}{\itemtrue} +% \begin{macro}{\itemfalse} +% \begin{macro}{\tud@item@bool} +% Die folgenden beiden Befehle sind äquivalent zu \cs{tud@item@values} genutzt +% werden. Diese enthalten allerdings im optionalen Argument zumindest die +% Standardwerte für positive bzw. negative boolesche Schalter. Diese werden +% durch den Befehl \cs{item@bool} gesetzt. +% \begin{macrocode} +\NewDocumentCommand\itemtrue{!s !o !o !d()}{% + \item@bool{#1}{true/on/yes}[#2][#3](#4)% +} +\NewDocumentCommand\itemfalse{!s !o !o !d()}{% + \item@bool{#1}{false/off/no}[#2][#3](#4)% +} +% \end{macrocode} +% Der Befehl \cs{item@bool} setzt je nach angegebenen Argumenten über ein +% token-Register den auszuführenden \cs{item}-Befehl zusammen. +% \begin{macrocode} +\NewDocumentCommand\item@bool{mmr[]r[]r()}{% + \toks@{\item}% + \IfBooleanT{#1}{\addto@hook\toks@{*}}% +% \end{macrocode} +% Die optionalen Werte werden im Zweifel den booleschen Standardwerten +% angehängt und als einziges optionales Argument an \cs{item} übergeben. +% \begin{macrocode} + \protected@edef\@tempa{#2\IfValueT{#3}{/#3}}% + \eaddto@hook\toks@{\expandafter[\@tempa]}% + \IfValueT{#4}{\addto@hook\toks@{[#4]}}% + \IfValueT{#5}{\addto@hook\toks@{(#5)}}% + \the\toks@% +} +% \end{macrocode} +% \end{macro}^^A \itemfalse +% \end{macro}^^A \itemtrue +% \end{macro}^^A \tud@item@bool +% +% \subsubsection{Listen für die Beschreibung von Paketen} +% +% \begin{environment}{packages} +% \begin{macro}{\tud@item@packages} +% \changes{v2.02}{2014/10/09}{optionales Argument für CTAN-Link}^^A +% \changes{v2.04}{2015/03/12}{optionales Argument für weitere Pakete}^^A +% Ähnlich wie für die Auflistung von Werten eines Schlüssels wird auch mit der +% Charakterisierung von Paketen verfahren. Diese werden in der Auflistung +% speziell gekennzeichnet. +% \begin{macrocode} +\newlist{packages}{description}{2} +\setlist[packages]{% + topsep=\smallskipamount,labelwidth=\linewidth,labelsep=0pt,% + font=\normalfont,parsep=\parskip,listparindent=\parindent,% + before=\tud@before@item{packages}% +} +% \end{macrocode} +% Hiermit können ein oder mehrere Pakete erläutert werden. Des Weiteren werden +% Textanker definiert, auf die im Zweifelsfall in der Dokumentation verlinkt +% wird. +% \begin{macrocode} +\NewDocumentCommand\tud@item@packages{od<>d()}{% +% \end{macrocode} +% Die kommagetrennte Liste im optionalen Argument wird verwendet, um jedes +% einzelnen Paket aufzulisten und einen dazugehörigen Textanker zu erzeugen. +% Das optionale Argument in Guillemets kann genutzt werden, um \emph{alle} +% gelisteten Pakete auf den gleichen CTAN-Link zielen zu lassen. Dies ist +% beispielsweise für mehrere Pakete aus dem gleichen Bundle sinnvoll. +% \begin{macrocode} + \def\@tempa##1{% + \@tempc% + \tud@lbl@get@curr*\tud@lbl@tmp{\tud@bdl@curr:\Package{##1}}% + \tudhyperdef{\tud@lbl@tmp}% + \begingroup% + \Package{##1}<#2>'url'|!|% + \endgroup% + \def\@tempc{, }% + }% + \stditem[{% + \IfValueT{#1}{% + \let\@tempc\relax% + \forcsvlist\@tempa{#1}% +% \end{macrocode} +% Wird im dritten optionalen Argument in runden Klammern ein Paket angegeben, +% so wird ebenfalls ein Textanker erzeugt, allerdings auf einen Hyperlink zu +% CTAN verzichtet. +% \begin{macrocode} + \IfValueT{#3}{% + \tud@lbl@get@curr*\tud@lbl@tmp{\tud@bdl@curr:\Package{#3}}% + \quad(\tudhyperdef{\tud@lbl@tmp}\Package{#3}'none'|!|)% + }% + }% + }]% +} +% \end{macrocode} +% \end{macro}^^A \tud@item@packages +% \end{environment}^^A packages +% +% \subsection{Erläuterungen und weiterführende Ergänzungen im Handbuch} +% \subsubsection{Tabelle mit automatisch berechneter Mehrspaltenzellenbreite} +% +% \begin{environment}{tabularm} +% \begin{macro}{\tabularm@allcolumnpar} +% \begin{macro}{\tabularm@box} +% \begin{macro}{\tabularm@num} +% \begin{length}{\tabularm@wd} +% \begin{length}{\tempdim} +% \changes{v2.02}{2014/08/16}{neu}^^A +% Die Umgebung \env{tabularm} ist eine Erweiterung der \env{tabular}-Umgebung. +% In dieser wird die Breite der zu setzenden Tabelle mit Hilfe der Box +% \cs{tabularm@box} in \cs{tabularm@wd} gespeichert. Anschließend kann mit dem +% Befehl \cs{allcolumnpar} eine Zeile über alle Spalten der Tabelle ausgegeben +% werden. Dabei ist das zu übergebende Argument die Anzahl der zu erzeugenden, +% linksbündigen Spalten. +% \begin{macrocode} +\newlength\tempdim +\newsavebox\tabularm@box +\newlength\tabularm@wd +\newcommand*\tabularm@num{1} +\NewEnviron{tabularm}[1]{% + \begin{lrbox}{\tabularm@box}% + \let\allcolumnpar\@gobble% + \begin{tabular}{*{#1}l}\BODY\end{tabular}% + \end{lrbox}% + \setlength\tabularm@wd{\wd\tabularm@box}% + \def\tabularm@num{#1}% + \let\allcolumnpar\tabularm@allcolumnpar% + \begin{tabular}{*{#1}l}\BODY\end{tabular}% +} +\newcommand*\tabularm@allcolumnpar[1]{% + \multicolumn{\tabularm@num}{@{}p{\tabularm@wd}@{}}{#1}% +} +% \end{macrocode} +% \end{length}^^A \tempdim +% \end{length}^^A \tabularm@wd +% \end{macro}^^A \tabularm@box +% \end{macro}^^A \tabularm@num +% \end{macro}^^A \tabularm@allcolumnpar +% \end{environment}^^A tabularm +% +% \subsubsection{Tabelle für mehrsprachigen Bezeichner} +% +% Mit Hilfe von \pkg{tabularx} können Tabellen bestimmter Breite und +% automatisch berechneten Spaltenbreiten gesetzt werden. +% \begin{macrocode} +\RequirePackage{tabularx}[1999/01/07] +% \end{macrocode} +% \begin{macro}{\TermTable} +% \begin{macro}{\Term@Table} +% \begin{macro}{\Term@@Table} +% Für sprachabhängige Bezeichner wird zusätzlich der Befehl \cs{TermTable} +% definiert, dem eine kommaseparierte Liste übergeben werden kann. Anhand +% dieser Liste werden die enthalten Begriffe für die Sprachen Deutsch und +% English in einer Tabelle ausgegeben. Die Sternversion dieses Befehls nutzt +% dafür die \env{tabularx}-Umgebung. Für diese kann ein zweites Argument +% angegeben werden, welches die gewünschte Breite der Tabelle angibt. +% \begin{macrocode} +\NewDocumentCommand\TermTable{s m !g}{% + \let\tud@templist\relax% + \forcsvlist{\listadd\tud@templist}{#2}% + \ifhmode\par\fi% + \vskip\medskipamount% + \@afterindentfalse\@afterheading% + \IfBooleanTF{#1}{% + \IfValueTF{#3}{\setlength\@tempdima{#3}}{\setlength\@tempdima{\linewidth}}% + \setlength\@tempdimc{-.7\baselineskip}% + \begin{tabularx}{\@tempdima}{lXX}\Term@Table\end{tabularx}% + }{% + \setlength\@tempdimc{\z@}% + \begin{tabular}{lll}\Term@Table\end{tabular}% + }% + \par\addvspace{\medskipamount}% +} +\newcommand*\Term@Table{% + \toprule% + \textbf{Bezeichner} & \textbf{Deutsch} & \textbf{Englisch}\tabularnewline% + \midrule% + \forlistloop\Term@@Table{\tud@templist}% + \bottomrule% +} +\newcommand*\Term@@Table[1]{% + \Term{#1}'none' & % + \ifstr{\csuse{#1}}{}{\PName{leer}}{\csuse{#1}} & % + \selectlanguage{english}\vspace*{\@tempdimc}% + \ifstr{\csuse{#1}}{}{\PName{empty}}{\csuse{#1}}\tabularnewline% +} +% \end{macrocode} +% \end{macro}^^A \Term@@Table +% \end{macro}^^A \Term@Table +% \end{macro}^^A \TermTable +% +% \subsubsection{Umgebung für die Angabe eines Beispiels} +% +% \begin{environment}{Example} +% \begin{environment}{Example*} +% Diese Umgebung wird für die exemplarische Erläuterung von bestimmten Aspekten +% im Handbuch verwendet. Wenn dafür ein Quelltextauszug nötig ist, kann +% innerhalb dieser die \env{Code}-Umgebung genutzt werden. Die Sternversion +% unterdrückt dabei das Zurücksetzen des eigentlich entfernten vertikalen +% Abstandes. +% \begin{macrocode} +\newenvironment{Example}{\csuse{Example*}}{% + \csuse{endExample*}% + \addvspace{-\topsep}% +} +\newenvironment{Example*}{% + \labeling{{\usekomafont{disposition}{Beispiel:\nobreakspace}}}% + \item[{\usekomafont{disposition}{Beispiel:\nobreakspace}}]% +}{% + \endlabeling% +} +% \end{macrocode} +% \end{environment}^^A Example* +% \end{environment}^^A Example +% +% \iffalse +%</class> +% \fi +% +% \subsection{Lesen und Schreiben von Hilfsdateien} +% +% Für den Anwender werden im \TUDScript-Bundle einige Tutorials mit Hinweisen +% zur Nutzung von \LaTeXe{} bereitgestellt. Innerhalb dieser werden Auszüge von +% Quelltexten verwendet und erläutert. Zum einen soll die Möglichkeit +% geschaffen werden, diese gesammelt am Ende eines Tutorials für ein +% Copy"~\&"~Paste"~Beispiel zu verwenden. Andererseits soll auch das sofortige +% Ausführen des beschriebenen Quelltextauszuges direkt im Tutorial möglich +% sein. +% +% Dafür werden im Folgenden die Umgebungen \env{Preamble}, \env{Trunk} und +% \env{Hint} sowie daraus abgeleitet Varianten definiert, womit sich die Angabe +% und Erläuterung der Quelltexte im Tutorial logisch strukturieren lässt und +% dennoch die notwendige Ordnung dieser für das Copy"~\&"~Paste"~Beispiel +% aufrechterhalten werden kann. Hierfür zeichnen die beiden Umgebungen +% \env{Preamble} und \env{Trunk} und deren Derivate verantwortlich. Die +% Umgebung \env{Hint} steht für zusätzliche Erläuterungen bereit, welche jedoch +% nicht in das Copy"~\&"~Paste"~Beispiel übernommen werden. +% +% \begin{macro}{\tud@write@a} +% \changes{v2.02}{2014/10/22}{neu}^^A +% \begin{macro}{\tud@write@b} +% \changes{v2.02}{2014/11/02}{neu}^^A +% \begin{macro}{\tud@read} +% \changes{v2.02}{2014/08/19}{neu}^^A +% Für die Erstellung der Indexe wird zum Sortieren das Programm \app{texindy} +% genutzt. Für dieses wird eine eigene Stildatei verwendet, welche zur Laufzeit +% erzeugt wofür zuerst ein Ausgabestream reserviert wird. +% \begin{macrocode} +\newcommand*\tud@write@a{} +\newwrite\tud@write@a +% \end{macrocode} +% Für die Tutorials werden später zusätzlich noch ein weiterer Ausgabe- sowie +% ein Eingabestream benötigt, die hier gleich mit initialisiert werden. +% \begin{macrocode} +%<*package> +\newcommand*\tud@write@b{} +\newwrite\tud@write@b +\newcommand*\tud@read{} +\newread\tud@read +%</package> +% \end{macrocode} +% \end{macro}^^A \tud@read +% \end{macro}^^A \tud@write@b +% \end{macro}^^A \tud@write@a +% +% \subsection{Einbinden von Quelltextauszügen} +% +% Sowohl im Handbuch als auch in den Tutorials werden Quelltextauszüge für das +% bessere Verständnis des Anwenders angegeben. Um diese darzustellen wird das +% Paket \pkg{listings} verwendet. +% \begin{macrocode} +\RequirePackage{listings}[2014/03/04] +\lstdefinestyle{tudscr}{% + basicstyle=\ttfamily\ifdef{\setstretch}{\setstretch{1}}{},% + keywordstyle=,% + columns=fullflexible,keepspaces,% + aboveskip=\smallskipamount,% + belowskip=\smallskipamount,% + language=[LaTeX]TeX,% + texcl,% +} +% \end{macrocode} +% +% \iffalse +%<*class> +% \fi +% +% \begin{environment}{Code} +% \begin{macro}{\tud@currentHref} +% Folgend werden Befehle und Umgebungen für die Darstellung von Quelltexten im +% Handbuch definiert. Mit dieser Umgebung können kurze Quelltextbeispiele +% ausgegeben werden. Sicherlich sinnvoll ist, die \env{Code}-Umgebung innerhalb +% von \env{Example} oder \env{quoting} zu verwenden, um den Quelltext etwas +% abzuheben. +% \begin{macrocode} +\lstnewenvironment{Code}[1][]{\lstset{style=tudscr,#1}}{} +% \end{macrocode} +% Innerhalb der Umgebung \env{Code} wird \cs{@currentHref} unerwünschter Weise +% geändert. Um dies zu vermeiden, wird dieser Befehl gesichert und anschließend +% zurückgesetzt. +% \begin{macrocode} +\newcommand*\tud@currentHref{} +\BeforeBeginEnvironment{Code}{\global\let\tud@currentHref\@currentHref} +\AfterEndEnvironment{Code}{\global\let\@currentHref\tud@currentHref} +% \end{macrocode} +% \end{macro}^^A \tud@currentHref +% \end{environment}^^A Code +% +% \iffalse +%</class> +% \fi +% +% \subsection{Kompilieren von externen Dateien und Querverweise auf diese} +% +% Das Paket \pkg{filemod} wird genutzt, um externer Dateien nur zu kompilieren, +% wenn dies aufgrund einer Änderung auch notwendig ist. +% \begin{macrocode} +\RequirePackage{filemod}[2011/09/19] +% \end{macrocode} +% Um \cs{ShellEscape} sowohl für Windows als auch für unixoide Betriebssysteme +% nutzen zu können, wird das Paket \pkg{ifplatform} geladen. +% \begin{macrocode} +\RequirePackage{ifplatform}[2010/10/22] +% \end{macrocode} +% \begin{macro}{\tud@shellescape@wrn} +% \changes{v2.02}{2014/10/14}{neu}^^A +% Dieses Makro wird verwendet, wenn eine gesuchte Datei nicht gefunden wurde, +% weil das Dokument noch nicht mit dem Schalter \file{-{}-shell-escape} +% kompiliert wurde. +% \begin{macrocode} +\newcommand*\tud@shellescape@wrn[1]{% +%<*class> + \ClassWarning{tudscrmanual}% +%</class> +%<*package> + \PackageWarning{tudscrtutorial}% +%</package> + {% + File `#1' is missing!\MessageBreak% + You have to recompile this document with\MessageBreak% + activated shell escape option% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@shellescape@wrn +% \begin{macro}{\tud@latex@ext} +% \changes{v2.06}{2019/06/21}{neu}^^A +% Für das verschachtelte Aufrufen von \app{pdflatex} bzw. \app{lualatex}. +% \begin{macrocode} +\newcommand*\tud@latex@ext{} +\ifpdftex% + {\def\tud@latex@ext{pdflatex\space}}% + {\def\tud@latex@ext{lualatex\space}}% +% \end{macrocode} +% \end{macro}^^A \tud@latex@ext +% \begin{macro}{\Tutorial} +% \changes{v2.02}{2014/08/22}{neu}^^A +% \changes{v2.02}{2014/10/22}{Reimplementierung}^^A +% \begin{macro}{\hypertut} +% \changes{v2.02}{2014/09/02}{neu}^^A +% Die gegebenenfalls notwendige Kompilierung und die Referenzierung eines +% Tutorials aus dem Handbuch erfolgt mit \cs{Tutorial}. Außerdem erfolgt mit +% \cs{hypertut} ein verlinkter Eintrag in den Index. +% \begin{macrocode} +%<*class> +\newrobustcmd*\hypertut[2]{% + \hyperref{tutorials/#1.pdf}{#1}{tutorials:#1}{\File*{#1.pdf}#2}% +} +\NewDocumentCommand\Tutorial{s m !d||}{% + \ifnum\pdf@shellescape=\@ne\relax% +% \end{macrocode} +% Um mit den verschachtelten Aufrufen von \app{pdflatex} umgehen zu können, +% wird das ganze Prozedere in ein Skript ausgelagert. Somit können die Aufrufe +% von \app{pdflatex} für die Tutorials aus dem entsprechenden Ordner und mit +% den notwendigen Optionen erfolgen. +% \begin{macrocode} + \filemodCmp{tutorials/#2.pdf}{tutorials/#2.tex}{}{% + \let\@tempa\@empty% + \ifdef{\tudfinalflag}{\appto\@tempa{\def\noexpand\tudfinalflag{}}}{}% + \ifdef{\tudprintflag}{\appto\@tempa{\def\noexpand\tudprintflag{}}}{}% + \appto\@tempa{\noexpand\input{#2.tex}}% + \def\@tempb##1{% + \immediate\openout\tud@write@a=tutorials.sh\relax% + \immediate\write\tud@write@a{cd tutorials^^J##1}% + \immediate\closeout\tud@write@a% +% \end{macrocode} +% Hier erfolgt die Unterscheidung der Befehle für die unterschiedlichen OS. +% \begin{macrocode} + \ifwindows% + \ShellEscape{rename tutorials.sh tutorials.bat}% + \ShellEscape{tutorials.bat}% + \ShellEscape{del tutorials.bat}% + \else% + \ShellEscape{bash tutorials.sh}% + \ShellEscape{rm tutorials.sh}% + \fi% + }% + \@tempb{\tud@latex@ext -shell-escape "\@tempa"}% + \IfFileExists{tutorials/#2.bcf}{\@tempb{biber #2}}{}% + \@tempb{% + \tud@latex@ext "\@tempa"^^J% + \tud@latex@ext -shell-escape "\@tempa"^^J% + \tud@latex@ext -shell-escape "\@tempa"% + }% + }% + \fi% +% \end{macrocode} +% Hyperlink und Indexeintrag. +% \begin{macrocode} + \IfFileExists{tutorials/#2.pdf}{% + \hypertut{#2}{}% + }{% + \File*{#2.pdf}% + \tud@shellescape@wrn{tutorials/#2.pdf}% + }% + \IfBooleanF{#1}{% + \index[files]{\hypertut{#2}{\suffix{Tutorial}}\IfValueT{#3}{|#3}}% + }% +} +%</class> +% \end{macrocode} +% Der Befehl für die Querverweise innerhalb von Tutorials. +% \begin{macrocode} +%<*package> +\newcommand*\Tutorial[1]{\href{#1.pdf}{\textsbn{#1.pdf}}} +%</package> +% \end{macrocode} +% \end{macro}^^A \hypertut +% \end{macro}^^A \Tutorial +% \begin{macro}{\IncludeExample} +% \changes{v2.02}{2014/07/25}{Skalierung der eingefügten Seiten}^^A +% Mit diesem Befehl wird eine \LaTeX-Datei ggf. übersetzt und anschließend als +% PDF"~Datei wieder eingebunden. Zuvor wird der dazugehörige Quelltext mittels +% \cs{lstinputlisting} im Dokument ausgegeben. Dieser Befehl wird lediglich für +% die Klasse \cls{tudscrmanual} benötigt. +% \begin{macrocode} +%<*class> +\newcommand*\IncludeExample[1]{% + \lstinputlisting[style=tudscr]{examples/#1}% +% \end{macrocode} +% Die Beispiele werden nur erneut kompiliert, wenn sich diese geändert haben +% oder noch gar kein entsprechendes PDF"~Dokument existiert. +% \begin{macrocode} + \ifnum\pdf@shellescape=\@ne\relax% + \filemodCmp{examples/#1.pdf}{examples/#1.tex}{}{% + \ShellEscape{% + \tud@latex@ext -output-directory examples examples/#1.tex^^J% + \tud@latex@ext -output-directory examples examples/#1.tex% + }% + }% +% \end{macrocode} +% Sollte es eine spezielle Version eines beispiels für die Druckausgabe geben, +% wird auch dieses kompiliert. +% \begin{macrocode} + \filemodCmp{examples/#1_print.pdf}{examples/#1_print.tex}{}{% + \ShellEscape{% + \tud@latex@ext -output-directory examples examples/#1_print.tex^^J% + \tud@latex@ext -output-directory examples examples/#1_print.tex% + }% + }% + \fi% +% \end{macrocode} +% Ist die gesuchte Datei vorhanden, wird diese auch eingebunden. Andernfalls +% wird eine Warnung mit dem Hinweis auf die notwendige Verwendung von +% \app{pdflatex} mit dem Schalter \file{-{}-shell-escape} erzeugt. +% \begin{macrocode} + \def\@tempa{examples/#1.pdf}% + \ifdef{\tudprintflag}{% + \IfFileExists{examples/#1_print.pdf}{\def\@tempa{examples/#1_print.pdf}}{}% + }{}% + \IfFileExists{\@tempa}{% + \edef\@tempa{% + \noexpand\includepdf[% + pages=-,noautoscale,frame,keepaspectratio,pagecommand={},% + height=\noexpand\textheight,width=\noexpand\textwidth,offset=5mm 0mm% + ]{\@tempa}% + }% + \@tempa% + }{% + \tud@shellescape@wrn{\@tempa}% + }% +} +%</class> +% \end{macrocode} +% \end{macro}^^A \IncludeExample +% +% \iffalse +%<*package> +% \fi +% +% \begin{macro}{\tud@tut@temp} +% \changes{v2.05}{2016/05/01}{neu}^^A +% \begin{macro}{\tud@tut@readtostream} +% \changes{v2.02}{2014/12/16}{neu}^^A +% \begin{macro}{\tud@tut@append} +% \changes{v2.02}{2014/08/19}{neu}^^A +% Bei den Tutorials soll zum Schluss ein komplett kompilierbares Beispiel für +% Copy~\&~Paste gegeben werden. Um dieses zusammenzubauen, werden alle im +% Dokument innerhalb der Varianten der \env{Trunk}-Umgebungen gegebenen +% Codefragmente zusammengesetzt. Um die Quelltexte einlesen und verarbeiten zu +% können, werden zwei Eingabe- sowie ein Ausgabestream benötigt, welche bereits +% zuvor initialisiert wurden. +% +% Mit \cs{tud@tut@readtostream} wird der Inhalt der Datei im ersten Argument +% in den Ausgabestream des zweiten Argumentes geschrieben. Dies wird durch +% \cs{tud@tut@append} genutzt. +% \begin{macrocode} +\newcommand*\tud@tut@temp{} +\edef\tud@tut@temp{\@currname-temp} +\newcommand*\tud@tut@readtostream[2]{% + \begingroup% + \endlinechar=\m@ne\relax% + \openin\tud@read=#1% +% \end{macrocode} +% Der Schalter \cs{if@tempswa} wird verwendet, um unnötige Leerzeilen in der +% Ausgabedatei zu entfernen. Wurde eine nicht leere Zeile gefunden, wird diese +% auf jeden Fall geschrieben, indem \cs{@tempswatrue} gesetzt wird. Eine leere +% Zeile wird~-- bis auf den Sonderfall, dass es sich um die letzte Zeile in der +% Datei handelt~-- zunächst nicht weiter beachtet. Im Zweifelsfall wird diese +% (erste) Leerzeile geschrieben. +% \begin{macrocode} + \@tempswafalse% + \loop\unless\ifeof\tud@read% + \readline\tud@read to\tud@reserved% + \ifx\tud@reserved\@empty% + \ifeof\tud@read\@tempswafalse\fi% + \else% + \@tempswatrue% + \fi% +% \end{macrocode} +% Hier erfolgt das eigentliche Schreiben im selektierten Stream. +% \begin{macrocode} + \if@tempswa% + \immediate\write#2{\expandonce\tud@reserved}% + \fi% +% \end{macrocode} +% Im Nachgang wird überprüft, ob die aktuell geschriebene Zeile leer war. Ist +% dies der Fall, so wird \cs{@tempswafalse} gesetzt, um eine etwaig folgende +% Leerzeile nicht in die Ausgabedatei zu schrieben. +% \begin{macrocode} + \ifx\tud@reserved\@empty\@tempswafalse\fi% + \repeat% + \closein\tud@read% + \endgroup% +} +% \end{macrocode} +% Der innerhalb der Umgebungen \env{Preamble} und \env{Trunk}~-- sowie deren +% Derivaten~-- angegebene Inhalt wird beim Schließen dieser Umgebungen in die +% Hilfsdatei \cs{tud@tut@temp.tex} zwischengespeichert. Mit \cs{tud@tut@append} +% wird der Inhalt dieser Datei ausgelesen und den Hilfsdateien +% \cs{tud@tut@temp-preamble.tex} respektive \cs{tud@tut@temp-trunk.tex} +% angehangen und damit gesichert, um die jeweiligen Quelltextauszüge aus dem +% Tutorial für die Präambel sowie den Dokumentteil trennen beziehungsweise +% sortieren zu können. +% \begin{macrocode} +\newcommand*\tud@tut@append[1]{% + \ifstr{#1}{preamble}{% + \tud@tut@readtostream{\tud@tut@temp.tex}{\tud@write@a}% + }{% + \ifstr{#1}{trunk}{% + \tud@tut@readtostream{\tud@tut@temp.tex}{\tud@write@b}% + }{% + \tud@tut@readtostream{\tud@tut@temp.tex}{#1}% + }% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@tut@append +% \end{macro}^^A \tud@tut@readtostream +% \end{macro}^^A \tud@tut@temp +% \begin{macro}{\StartTutorial} +% \changes{v2.02}{2014/08/21}{neu}^^A +% \begin{macro}{\FinishTutorial} +% \changes{v2.02}{2014/08/21}{neu}^^A +% Mit \cs{StartTutorial} wird ein Hyperlink für den Querverweis aus dem +% Handbuch definiert. Außerdem wird gleich der Titel und~-- falls im optionalen +% Argument angegeben~-- eine Zusammenfassung gesetzt. Die Sternversion gibt +% nach der optionalen Beschreibung einen einleitenden Satz zur Dokumnentklasse +% und sinnvollen Paketen an. Diese sollten direkt nach \cs{StartTutorial} in +% der \env{Preamble}-Umgebung angegeben werden. +% \begin{macrocode} +\TUDoptions{headingsvskip=-10ex} +\newcommand\StartTutorial[1][]{% + \immediate\openout\tud@write@a=\tud@tut@temp-preamble.tex\relax% + \immediate\openout\tud@write@b=\tud@tut@temp-trunk.tex\relax% + \immediate\write\tud@write@b{^^J\string\begin{document}^^J}% + \Hy@raisedlink{\hyperdef{\jobname}{tutorials:\jobname}{}}% + \faculty{}% + \maketitle% + \ifblank{#1}{}{% + \noindent% + \begin{abstract}% + \noindent#1% + \end{abstract}% + \medskip% + }% + \noindent\ignorespaces% +} +% \end{macrocode} +% Der Befehl \cs{FinishTutorial} schleißt den noch offenen Ausgabestream und +% gibt den vorgestellten Quelltext vollständig aus. +% \begin{macrocode} +\newcommand\FinishTutorial[1][]{% + \immediate\write\tud@write@b{^^J\string\end{document}^^J}% + \immediate\closeout\tud@write@b% + \immediate\closeout\tud@write@a% + \immediate\openout\tud@write@a\jobname-example.tex\relax% + \tud@tut@readtostream{\tud@tut@temp-preamble.tex}{\tud@write@a}% + \tud@tut@readtostream{\tud@tut@temp-trunk.tex}{\tud@write@a}% + \immediate\closeout\tud@write@a% + \clearpage% + \addsec{Copy\nobreakspace\&\nobreakspace{}Paste}% + \thispagestyle{empty}% + \pagestyle{empty}% + Zum Ende des Dokumentes wird das vorgestellte Tutorial als \"ubersetzbarer + Quelltext ausgegeben, um dieses via Copy~\&~Paste verwenden und alle Punkte + nachvollziehen zu k\"onnen. Bitte beachten Sie, dass~-- abh\"angig vom + genutzten PDF-Betrachter~-- beim Kopieren die dargestellten Einz\"uge und + Abs\"atze m\"oglicherweise verloren gehen k\"onnen. Dies kann insbesondere + aufgrund fehlender Leerzeilen zu einem unvorteilhaften Ausgabeergebnis + f\"uhren. Alternativ finden Sie den folgenden \hologo{LaTeX}-Quelltext auch + im Pfad \Path{\PName{texmf}/source/latex/tudscr/doc/examples/} als Datei + \File{\jobname-example.tex}. \par #1% + % + \begin{quoting}[rightmargin=0pt]% + \lstinputlisting[style=tudscr]{\jobname-example.tex}% + \end{quoting}% + % +% \end{macrocode} +% Falls es möglich ist, werden nach dem Durchlauf alle nicht mehr benötigten +% Hilfsdateien gelöscht. +% \begin{macrocode} + \ifnum\pdf@shellescape=\@ne\relax% + \ifwindows% + \def\@tempa{del}% + \else% + \def\@tempa{rm}% + \fi% + \ShellEscape{\@tempa\space\tud@tut@temp*.*}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \FinishTutorial +% \end{macro}^^A \StartTutorial +% \begin{macro}{\CodePreamble} +% \changes{v2.02}{2014/08/20}{neu}^^A +% \begin{macro}{\Code@Preamble} +% \changes{v2.02}{2014/10/22}{neu}^^A +% \begin{macro}{\CodeHook} +% \changes{v2.02}{2014/10/11}{neu}^^A +% \begin{macro}{\Code@Hook} +% \changes{v2.02}{2014/10/11}{neu}^^A +% Bereitstellung von Hilfsmakros für die formatierte Ausgabe von Quelltexten. +% \begin{macrocode} +\newcommand\Code@Preamble{} +\let\Code@Preamble\relax +\newcommand\CodePreamble[1]{% + \long\gdef\Code@Preamble{% + \hskip.5\leftmargin\textit{Die resultierende Ausgabe:}\space#1% + }% +} +\newcommand*\Code@Hook{} +\let\Code@Hook\relax +\newcommand*\CodeHook[1]{\gdef\Code@Hook{#1}} +% \end{macrocode} +% \end{macro}^^A \Code@Hook +% \end{macro}^^A \CodeHook +% \end{macro}^^A \Code@Preamble +% \end{macro}^^A \CodePreamble +% \begin{macro}{\StandaloneFile} +% \changes{v2.02}{2014/08/19}{neu}^^A +% \begin{macro}{\StandaloneDate} +% \changes{v2.05}{2015/11/18}{neu}^^A +% Die Umgebungen \env{Trunk!} und \env{Hint!} erzeugen nach der Ausgabe des +% Quelltextes mit dem Makro \cs{tud@tut@pdf} eine PDF-Datei, welche mit +% \cs{IncludeStandalone} in das Tutorial eingebunden werden kann. +% \begin{macrocode} +\newcommand*\StandaloneFile{} +\let\StandaloneFile\relax +\newcommand*\StandaloneDate{} +% \end{macrocode} +% \end{macro}^^A \StandaloneDate +% \end{macro}^^A \StandaloneFile +% \begin{macro}{\tud@tut@pre} +% \changes{v2.02}{2014/08/19}{neu}^^A +% \begin{macro}{\tud@tut@post} +% \changes{v2.02}{2014/08/19}{neu}^^A +% Dies sind Hilfsmakros, welche zu Beginn und Ende der Quelltextumgebungen +% \env{Preamble}, \env{Trunk} und \env{Hint} für das Sichern der Inhalte in +% eine Hilfsdatei verantwortlich sind, wofür die \env{filecontents}-Umgebung +% genutzt wird. +% \begin{macrocode} +\newcommand*\tud@tut@pre{% + \csuse{filecontents*}{\tud@tut@temp.tex}% +} +\newcommand*\tud@tut@post{% + \csuse{endfilecontents*}% +} +% \end{macrocode} +% \end{macro}^^A \tud@tut@post +% \end{macro}^^A \tud@tut@pre +% Die nachfolgenden Umgebungen verwenden die beiden, gerade zuvor eingeführten +% Hilfsmakros \cs{tud@tut@pre} und \cs{tud@tut@post}, welche den gegebenen +% Inhalt in die temporäre Datei \file{\string\tud@tut@temp.tex} schreiben. Die +% im Dokument in den Umgebungen gesetzten Quelltextauszüge werden mit dem Makro +% \cs{tud@tut@append}~-- abhängig vom gegebenen Argument~-- zusätzlich für ein +% Copy"~\&"~Paste"~Beispiel in \file{\string\tud@tut@temp-preamble.tex} oder +% \file{\string\tud@tut@temp-trunk.tex} gepsiechert. Die damit gesammelten +% Inhalte werden am Ende mit \cs{FinishTutorial} ausgegeben. +% \begin{environment}{Preamble} +% \changes{v2.02}{2014/11/02}{neu}^^A +% \begin{environment}{Preamble*} +% \changes{v2.02}{2014/11/03}{neu}^^A +% \begin{environment}{Preamble+} +% \changes{v2.02}{2014/11/03}{neu}^^A +% Die Umgebung \env{Preamble} dient für die Ausgabe von Quelltextauszügenen, +% welche in einem \LaTeXe-Dokument in der Präambel verwendet werden müssen oder +% sollten. Die in ihr gesetzten Inhalte werden für das Copy"~\&"~Paste-Beispiel +% vor den Inhalten aus der Umgebung \env{Trunk} ausgegeben. Die Sternversion +% führt den Inhalt zusätzlich im Dokument aus. Die Pluszechen"=Version fügt dem +% Ausgabestream ihren Inhalt hinzu, ohne das dieser ausgegeben oder ausgeführt +% wird. +% \begin{macrocode} +\newenvironment{Preamble}{\tud@tut@pre}{% + \tud@tut@post% + \tud@tut@append{preamble}% + \gdef\@tempa{% + \tud@tut@lst% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +\newenvironment{Preamble*}{\tud@tut@pre}{% + \tud@tut@post% + \tud@tut@append{preamble}% + \gdef\@tempa{% + \tud@tut@lst% + \tud@tut@input% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +\newenvironment{Preamble+}{\tud@tut@pre}{% + \tud@tut@post% + \tud@tut@append{preamble}% + \gdef\@tempa{% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +% \end{macrocode} +% \end{environment}^^A Preamble+ +% \end{environment}^^A Preamble* +% \end{environment}^^A Preamble +% \begin{environment}{Trunk} +% \changes{v2.02}{2014/08/16}{neu}^^A +% \begin{environment}{Trunk*} +% \changes{v2.02}{2014/08/19}{neu}^^A +% \begin{environment}{Trunk+} +% \changes{v2.02}{2014/11/03}{neu}^^A +% \begin{environment}{Trunk!} +% \changes{v2.02}{2014/10/07}{neu}^^A +% Die Umgebung \env{Trunk} dient zur Ausgabe von exemplarischen Quelltexten, +% welche in einem \LaTeXe-Dokument innerhalb der \env{document}-Umgebung +% verwendet werden müssen oder sollten. Für das Copy"~\&"~Paste-Beispiel werden +% die gegebenen Inhalte nach den Inhalten aus der Umgebung \env{Preamble} +% ausgegeben. Die Sternversion der Umgebung führt ihren Inhalt zusätzlich im +% Dokument aus. Die Pluszeichen"=Version fügt dem Ausgabestream ihren Inhalt +% hinzu, ohne diesen auszugeben oder auszuführen. Die Ausrufezeichen"=Version +% fügt den Quelltext im Dokument ein und führt diesen zusätzlich in einer +% separaten Datei mit einem minimalen Dokumentkörper aus, um daraus eine +% PDF-Datei zu erzeugen, welche im Nachhinein mit \cs{IncludeStandalone} als +% Grafik eingebunden werden kann. Dies ist für Quelltextabschnitte gedacht, +% deren Ausgabe zu groß ist, um diese direkt anzuzeigen und dennoch dargestellt +% werden sollen. +% \begin{macrocode} +\newenvironment{Trunk}{\tud@tut@pre}{% + \tud@tut@post% + \tud@tut@append{trunk}% + \gdef\@tempa{% + \tud@tut@lst% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +\newenvironment{Trunk*}{\tud@tut@pre}{% + \tud@tut@post% + \tud@tut@append{trunk}% + \gdef\@tempa{% + \tud@tut@lst% + \tud@tut@input% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +\newenvironment{Trunk+}{\tud@tut@pre}{% + \tud@tut@post% + \tud@tut@append{trunk}% + \gdef\@tempa{% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +\newenvironment{Trunk!}[1]{% + \gdef\StandaloneFile{#1}% + \tud@tut@pre% +}{% + \tud@tut@post% + \tud@tut@append{trunk}% + \gdef\@tempa{% + \tud@tut@lst% + \tud@tut@pdf% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +% \end{macrocode} +% \end{environment}^^A Trunk! +% \end{environment}^^A Trunk+ +% \end{environment}^^A Trunk* +% \end{environment}^^A Trunk +% \begin{environment}{Hint} +% \changes{v2.02}{2014/09/16}{neu}^^A +% \begin{environment}{Hint*} +% \changes{v2.02}{2014/10/13}{neu}^^A +% \begin{environment}{Hint?} +% \changes{v2.02}{2014/12/09}{neu}^^A +% \begin{environment}{Hint!} +% \changes{v2.02}{2014/11/13}{neu}^^A +% Um Quelltextausschnitte zur weiterführenden Information anzugeben, wird die +% Umgebung \env{Hint} definiert. Der Inhalt wird ausgegben und~-- falls die +% Sternversion genutzt wurde~-- auch ausgeführt, allerdings nicht in das +% Copy"~\&"~Paste"~Beispiel übernommen. Ansonsten entsprechen alle Umgebungen +% in ihren Eigenschaften den äquivalenten \env{Trunk}-Umgebungen. Die Version +% mit Fragezeichen ist für Quelltextauszüge gedacht, die ungeprüft \emph{vor} +% dessen Ausgabe ausgeführt werden sollen. +% \begin{macrocode} +\newenvironment{Hint}{\tud@tut@pre}{% + \tud@tut@post% + \gdef\@tempa{% + \tud@tut@lst% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +\newenvironment{Hint*}{\tud@tut@pre}{% + \tud@tut@post% + \gdef\@tempa{% + \tud@tut@lst% + \tud@tut@input% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +\newenvironment{Hint?}{\tud@tut@pre}{% + \tud@tut@post% + \gdef\@tempa{% + \InputCode% + \tud@tut@lst% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +\newenvironment{Hint!}[1]{% + \gdef\StandaloneFile{#1}% + \tud@tut@pre% +}{% + \tud@tut@post% + \gdef\@tempa{% + \tud@tut@lst% + \tud@tut@pdf% + \global\let\Code@Preamble\relax% + }% + \aftergroup\@tempa% +} +% \end{macrocode} +% \end{environment}^^A Hint! +% \end{environment}^^A Hint? +% \end{environment}^^A Hint* +% \end{environment}^^A Hint +% \begin{macro}{\tud@tut@lst} +% \changes{v2.02}{2014/10/07}{neu}^^A +% Damit wird der Quelltext eingezogen ausgegeben. +% \begin{macrocode} +\newcommand*\tud@tut@lst{% + \begin{quoting}[rightmargin=0pt]% + \lstinputlisting[style=tudscr]{\tud@tut@temp.tex}% + \end{quoting}% +} +% \end{macrocode} +% \end{macro}^^A \tud@tut@lst +% \begin{macro}{\tud@tut@input} +% \changes{v2.02}{2014/10/13}{neu}^^A +% Für die Ausgabe des Quelltextergebnisses erfolgt ein linker Einzug. Außerdem +% werden unter anderem abhängig von der Verwendung eines erklärenden Textes die +% eingefügten vertikalen Abstände angepasst. +% \begin{macrocode} +\newcommand*\tud@tut@input{% +% \end{macrocode} +% Nach dem Ausführen des ersten Argumentes von \cs{@tempa} wird geprüft, ob +% dieses überhaupt eine sichtbare Ausgabe erzeugt hat. Nur für diesen Fall wird +% nach dieser vertikaler Leerraum eingefügt. Der Anfang entspricht prinzipiell +% dem Standardbefehl \cs{settoheight}, jedoch wird im Inneren zusätzlich eine +% \cs{vbox} verwendet, um damit auch mathematische Umgebungen testen zu können. +% Das Ganze findet innerhalb einer Gruppierung statt, um keine Änderungen zu +% erzeugen. +% \begin{macrocode} + \def\@tempa##1##2{% + ##1% + \begingroup% + ##2% + \setbox\@tempboxa\hbox{\vbox{##1}}% + \@tempdima=\ht\@tempboxa% + \setbox\@tempboxa\box\voidb@x% + \ifdim\@tempdima>\z@\relax% + \endgraf% + \vspace{\medskipamount}% + \noindent\ignorespaces% + \fi% + \endgroup% + }% +% \end{macrocode} +% Da aufgrund der Verwendung der \env{filecontents}-Umgebung ein optionales +% Argument für alle Abwandlungen der Quelltextumgebungen nicht möglich ist, +% wird \cs{CodePreamble} bereitgestellt, womit der Ausgabe ein erläuternder +% Text vorangestellt werden kann. +% \begin{macrocode} + \@tempa{\Code@Preamble}{}% + \setlength\@tempdimc{\leftskip}% + \setlength\leftskip{\leftmargin}% +% \end{macrocode} +% Durch die zweimalige Verwendung von \file{\string\tud@tut@temp.tex}~-- einmal +% direkt und einmal innerhalb einer Box~-- können darin verwendete Befehle wie +% \cs{newcommand} zu Fehler führen. Mit dem Makro \cs{CodeHook} lassen sich +% diese Konflikte durch eine lokale Redefinition ebensolcher Befehle auflösen +% (bspw. \cs{let}\cs{newcommand}\cs{renewcommand}). +% \begin{macrocode} + \@tempa{\input{\tud@tut@temp.tex}}{\Code@Hook}% + \global\let\Code@Hook\relax% + \setlength\leftskip{\@tempdimc}% + \noindent\ignorespaces% +} +% \end{macrocode} +% \end{macro}^^A \tud@tut@input +% \begin{macro}{\InputCode} +% \changes{v2.02}{2014/10/21}{neu}^^A +% Mit \cs{InputCode} kann der Inhalt der letzen \env{Trunk}-Umgebung +% direkt ausgeführt werden, ohne diesen zuvor mit \cs{tud@tut@input} zu prüfen +% und zu formatieren. +% \begin{macrocode} +\newcommand*\InputCode{\input{\tud@tut@temp.tex}} +% \end{macrocode} +% \end{macro}^^A \InputCode +% \begin{macro}{\tud@tut@pdf} +% \changes{v2.02}{2014/10/22}{neu}^^A +% Die Umgebungen \env{Trunk!} und \env{Hint!} verwenden nach der Ausgabe des +% Quelltextes diesen abermals, um daraus eine PDF-Datei zu erzeugen. Dafür wird +% eine temporäre \LaTeX-Datei mithilfe einer \env{filecontents}-Umgebung +% erzeugt. Diese bindet die mit \env{Trunk!} erzeugte Datei ein und wird +% anschließend via \cs{ShellEscape} kompiliert. Dabei sollte man sich nicht von +% der doppelten Verwendung von \cs{jobname} verwirren lassen. Der Dateiname der +% temporär erzeugten \LaTeX-Datei ist abhängig vom gesetzten Tutorial. Beim +% Aufruf dieser wird über die Optionen von \app{pdflatex} der verwendete +% \cs{jobname} angepasst (siehe \cs{tud@tut@pdf}). +% \begin{macrocode} +\IfFileExists{\tud@tut@temp-standalone.tex}{\@tempswafalse}{\@tempswatrue} +\if@tempswa% +\begin{filecontents*}{\tud@tut@temp-standalone.tex} +\documentclass[english,ngerman]{tudscrreprt} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrsupervisor} +\usepackage{isodate} +\usepackage{enumitem} +\setlist{noitemsep} +\begin{document} +\ifdefvoid{\StandaloneDate}{}{\date{\StandaloneDate}}% +\input{\jobname.tex}% +\end{document} +\end{filecontents*} +\fi +% \end{macrocode} +% Der Quelltext aus den Umgebungen \env{Trunk!} und \env{Hint!} wird~-- wie bei +% allen anderen \env{Trunk}-Derivaten~-- in \file{\string\tud@tut@temp.tex} +% gesichert. Beim Aufruf von \app{pdflatex} wird durch die Nutzung der Option +% \file{-jobname=\string\tud@tut@temp} die Definition von \cs{jobname} in der +% aufgerufenen Datei \file{\string\tud@tut@temp-standalone.tex} überschrieben +% und der Inhalt von \file{\string\tud@tut@temp.tex} wie gewünscht eingebunden +% und kompiliert. Damit die so erstellte PDF-Datei mit \cs{IncludeStandalone} +% im weiteren Verlauf in das Tutorial eingebunden werden kann, wird diese +% außerdem noch in \cs{\meta{Argument}-temp.pdf} umbenannt. Das Makro +% \cs{StandaloneDate} wird auf das Datum der Master-Datei gesetzt, damit das +% voreingestellte Datum der erzeugten Datei angepasst werden kann. +% \begin{macrocode} +\newcommand*\tud@tut@pdf{% + \ifnum\pdf@shellescape=\@ne\relax% + \filemodCmp{\jobname-standalone-\StandaloneFile.pdf}{\jobname.tex}{}{% + \begingroup% + \let\printdate\@firstofone% + \edef\@tempa{\expandonce\@date}% + \def\@tempb{\today}% + \ifx\@tempa\@tempb\relax% + \let\@tempb\@empty% + \else% + \edef\@tempb{\etex@unexpanded{\def\StandaloneDate}{\@date}}% + \fi% + \edef\@tempa{% + \tud@latex@ext -jobname=\tud@tut@temp\space% + "\noexpand\unexpanded{\expandonce\@tempb\noexpand\input}% + {\tud@tut@temp-standalone.tex}"% + }% + \ShellEscape{\@tempa^^J\@tempa^^J\@tempa}% + \ifwindows% + \def\@tempa{rename}% + \else% + \def\@tempa{mv}% + \fi% + \ShellEscape{% + \@tempa\space\tud@tut@temp.pdf\space% + \jobname-standalone-\StandaloneFile.pdf% + }% + \endgroup% + }% + \fi% + \global\let\StandaloneFile\relax% +} +% \end{macrocode} +% \end{macro}^^A \tud@tut@pdf +% \begin{macro}{\IncludeStandalone} +% \changes{v2.02}{2014/09/10}{neu}^^A +% Der Befehl \cs{IncludeStandalone} bindet die durch \env{Trunk!} generierten +% PDF-Dateien ein. Das angehängte optionale Argument dient zur Angabe der +% einzubindenden Seiten der PDF-Datei, wobei diese automatisch auf die passende +% Breite skaliert werden. +% \begin{macrocode} +\NewDocumentCommand\IncludeStandalone{o m !O{1}}{% + \IfFileExists{\jobname-standalone-#2.pdf}{% + \@tempcnta\z@% + \@for\@tempa:=#3\do{\advance\@tempcnta\@ne}% + \ifnum\@tempcnta>\z@\relax% + \setlength\@tempdima{\textwidth}% + \divide\@tempdima\@tempcnta% + \advance\@tempcnta\m@ne% + \multiply\@tempcnta 2% + \addtolength\@tempdima{-\@tempcnta\tabcolsep}% + \@for\@tempa:=#3\do{% + \advance\@tempcnta\m@ne% + \edef\@tempb{% + keepaspectratio,page=\@tempa,width=\the\@tempdima,% + \IfValueT{#1}{#1}% + }% + \fbox{% + \expandafter\includegraphics\expandafter[\@tempb]{% + \jobname-standalone-#2.pdf% + }% + }% + \ifnum\@tempcnta>\z@\relax\hfill\fi% + }% + \fi% + }{% + \tud@shellescape@wrn{\jobname-standalone-#2.pdf}% + }% +} +% \end{macrocode} +% \end{macro}^^A \IncludeStandalone +% +% \iffalse +%</package> +% \fi +% +% \subsection{Automatische Erstellung von \pkg{pstricks}-Grafiken} +% +% Falls innerhalb eines Tutorials das Paket \pkg{pstricks} verwendet wird, muss +% dafür Sorge getragen werden, dass die automatische Kompilierung reibungslos +% mit \pkg{auto-pst-pdf} funktioniert. +% \begin{macrocode} +%<*package> +\AfterPackage*{pstricks}{% + \ifnum\pdf@shellescape=\@ne\relax% + \filemodCmp{\jobname-pics.pdf}{\jobname.tex}{% + \PassOptionsToPackage{off}{auto-pst-pdf}% + }{}% + \else% + \PassOptionsToPackage{off}{auto-pst-pdf}% + \fi% + \RequirePackage{auto-pst-pdf}[2009/04/26]% +% \end{macrocode} +% Nach dem Paket \pkg{auto-pst-pdf} seine Arbeit verrichtet hat, werden alle +% etwaigen temporär erzeugten Dateien radikal gelöscht. +% \begin{macrocode} + \ifnum\pdf@shellescape=\@ne\relax% + \edef\@tempa{\app@exe{\app@rm "*\app@suffix*"}}% + \@tempa% + \fi% +} +%</package> +% \end{macrocode} +% +% \subsection{ToDo-Liste} +% +% Für Klasse und Paket besteht die Möglichkeit, Änderungsnotizen zu nutzen, +% wofür das Paket \pkg{todonotes} geladen wird. +% \begin{macrocode} +\PassOptionsToPackage{obeyFinal}{todonotes} +% \end{macrocode} +% Für den Druck wird die farbige Ausgabe der ToDo-Notizen deaktiviert. +% \begin{macrocode} +\ifdef{\tudprintflag}{% + \PassOptionsToPackage{color=white}{todonotes}% +}{% + \PassOptionsToPackage{colorinlistoftodos,color=HKS92!10}{todonotes}% +} +\RequirePackage{todonotes}[2012/07/25] +\AtEndPreamble{% + \ifdim\marginparwidth<2cm\relax% + \setlength\marginparwidth{2cm}% + \fi% +} +% \end{macrocode} +% +% \iffalse +%</body> +%<*option> +% \fi +% +% \begin{option}{ToDo} +% \changes{v2.02}{2014/07/10}{neu}^^A +% \changes{v2.05}{2015/10/27}{Nutzung von Positiv- und Negativ-Liste}^^A +% \begin{macro}{\if@tud@todo} +% \changes{v2.02}{2014/07/10}{neu}^^A +% \begin{macro}{\tud@todo@type@pos} +% \changes{v2.05}{2015/10/27}{neu}^^A +% \begin{macro}{\tud@todo@type@neg} +% \changes{v2.05}{2015/10/27}{neu}^^A +% Diese Option ist verantwortlich für den Schalter \cs{if@tud@todo}. Über +% diesen wird gesteuert, ob ToDo-Notizen ausgegeben werden sollen. +% \begin{macrocode} +\newif\if@tud@todo +\newcommand*\tud@todo@type@pos{} +\let\tud@todo@type@pos\relax +\newcommand*\tud@todo@type@neg{} +\let\tud@todo@type@neg\relax +\TUD@key{ToDo}[true]{% + \TUD@set@ifkey{ToDo}{@tud@todo}{#1}% +% \end{macrocode} +% Wird der Option ein boolescher Wert übergeben, sind sowohl die Positiv- als +% auch die Negativ-Liste hinfällig. +% \begin{macrocode} + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \let\tud@todo@type@pos\relax% + \let\tud@todo@type@neg\relax% + \else% +% \end{macrocode} +% Wird die Option nicht mit einem booleschen Wert verwendet, so kann über diese +% gezielt der Typ einer (nicht) auszugebenden ToDo-Notiz angegeben werden. So +% können bestimmte Typen von Notizen entweder ausschließlich ausgegeben oder +% aber unterdrückt werden, wobei für letztere Variante das Suffix \val{not} +% vor dem eigentlichen Typen verwendet werden muss. +% \begin{macrocode} + \def\@tempa not##1##2##3##4\@nil{% + \ifstr{##1##2##3}{not}{% + \IfArgIsEmpty{##4}{}{% + \listeadd\tud@todo@type@neg{##4}% + \@tud@todotrue% + \FamilyKeyStateProcessed% + }% + }{% + \IfArgIsEmpty{##1}{}{% + \listeadd\tud@todo@type@pos{##1##2##3##4}% + \@tud@todotrue% + \FamilyKeyStateProcessed% + }% + }% + }% + \edef\@tempb{not\trim@spaces{#1}}% + \expandafter\@tempa\@tempb\@empty\@empty\@empty\@nil% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@todo@type@neg +% \end{macro}^^A \tud@todo@type@pos +% \end{macro}^^A \if@tud@todo +% \end{option}^^A ToDo +% +% \iffalse +%</option> +%<*body> +% \fi +% +% \begin{macro}{\ToDo} +% \changes{v2.02}{2014/07/10}{Verwendung von \pkg{todonotes}}^^A +% \changes{v2.03}{2015/01/25}{Ausgabe auf bestimmten Typ beschränkbar}^^A +% \changes{v2.05}{2015/11/02}{Farbkodierung durch optionale Versionsnummer}^^A +% \changes{v2.06}{2018/08/02}{farbige Ausgabe abhängig von Versionsnummer}^^A +% \begin{macro}{\tud@todo@type@use} +% \changes{v2.06}{2018/08/02}{neu}^^A +% \begin{macro}{\ListOfToDo} +% \changes{v2.02}{2014/07/10}{neu}^^A +% Mit dem Befehl \cs{ToDo}\oarg{Option}\marg{ToDo-Notiz}\oarg{Versionsnummer} +% kann bei aktivierter Option \opt{ToDo} eine Notiz mit einer offenen Aufgabe +% erstellt werden. Das erste optionale Argument kann die Kategorisierungstypen +% \val{doc}, \val{imp} und \val{rls} beinhalten, welche für eine spezifische +% farbliche Kodierung sorgen, um die Aufgaben zu kategorisieren. +% \begin{macrocode} +\AfterPackage*{todonotes}{% + \newcommand*\tud@todo@type@use{}% +% \end{macrocode} +% Nun folgt die Definition des eigentlichen Befehls. Dabei wird zu Beginn +% \cs{@currentHref} gesichert und am Ende wiederhergestellt. +% \begin{macrocode} + \NewDocumentCommand\ToDo{s o m !o}{% + \ifbool{@tud@todo}{% + \global\let\tud@currentHref\@currentHref% + \begingroup% +% \end{macrocode} +% In \cs{tud@todo@type@use} werden alle im optionalen Argument angegeben Werte +% gesischer, welche entweder über die Liste \cs{tud@todo@type@pos} explizit +% angefordert oder nicht über die Liste \cs{tud@todo@type@neg} ausgeschlossen +% wurden. +% \begin{macrocode} + \let\tud@todo@type@use\@empty% +% \end{macrocode} +% Das optionale Argument enthält die gewüscnhten Kategorisierungstypen. +% \begin{macrocode} + \IfValueTF{#2}{% + \IfArgIsEmpty{#2}{}{% +% \end{macrocode} +% Die Ausgabe erfolgt entweder für alle ToDo-Notizen oder nur für die per +% Option festgelegten Typen. Dabei wird in einer Schleife geprüft, ob der in +% der aktuellen Notiz angegebene Kategorisierungstyp entweder in der Positv- +% oder aber in der Negativ-Liste enthalten ist. +% \begin{macrocode} + \let\tud@todo@type@use\relax% + \ifx\tud@todo@type@pos\relax% + \def\tud@res@a##1{% + \ifinlist{##1}{\tud@todo@type@use}{}{% + \ifinlist{##1}{\tud@todo@type@neg}{}{% + \listadd\tud@todo@type@use{##1}% + }% + }% + }% + \else% + \def\tud@res@a##1{% + \ifinlist{##1}{\tud@todo@type@use}{}{% + \ifinlist{##1}{\tud@todo@type@pos}{% + \listadd\tud@todo@type@use{##1}% + }{}% + }% + }% + \fi% + \forcsvlist\tud@res@a{#2}% + }% + }{}% +% \end{macrocode} +% Nur wenn mindestens ein aktiver Kategorisierungstyp gefunden wurde oder aber +% gar keine Angabe gemacht wurde, erfolgt die Ausgabe. +% \begin{macrocode} + \ifx\tud@todo@type@use\relax\else% +% \end{macrocode} +% In den temporären Makros werden die Einstellungen für die farbige Ausprägung +% von Randnotiz (\cs{tud@res@a}) und der Textbox im Fließtex(\cs{tud@res@b}) +% sowie das Label der Randnotiz (\cs{tud@res@c}) gespeichert. +% \begin{macrocode} + \let\tud@res@a\@empty% + \let\tud@res@b\@empty% + \let\tud@res@c\@empty% +% \end{macrocode} +% Der Kategorisierungstyp für Releases \val{rls} ist quasi vorkonfiguriert. +% Sind weitere Kategorisierungstypen angegeben, werden diese ignoriert. Der Typ +% für Implemtierung \val{imp} wird vorangig zur Dokumentation \val{doc} +% behandelt. +% \begin{macrocode} + \ifinlist{rls}{\tud@todo@type@use}{% + \def\tud@res@a{color=HKS44!30,}% + \def\tud@res@b{color=HKS44!30,}% + \edef\tud@res@c{v\TUDScriptVersionNumber}% + }{% + \ifinlist{imp}{\tud@todo@type@use}{% + \def\tud@res@a{color=HKS57!50,}% + }{% + \ifinlist{doc}{\tud@todo@type@use}{% + \def\tud@res@a{color=HKS41!30,}% + }{}% + }% +% \end{macrocode} +% Das angestellte optionale Argument erzeugt zusätzlich eine Notiz am Rand, in +% welcher vorzugsweise die angedachte Version eingetragen werden kann. Sollte +% dieser angegeben sein, wird auf eine gültige Versionsnummer geprüft. Dabei +% wird ein möglicherweise vorangestelltes |v| entfernt. +% \begin{macrocode} + \def\tud@res@c{ToDo}% + \IfValueT{#4}{% + \begingroup% +% \end{macrocode} +% Die angegebene Versionsnummer wird geprüft, ob bereits zu einer vergangenen +% Version gehört. In diesem Fall wird die ToDo-Notiz entsprechend als dringlich +% gekennzeichnet. Entspricht die angegebene Versionsnummer einer späteren +% Version, so wird ToDo-Notiz ebenfalls für diese gekennzeichnet. +% \begin{macrocode} + \tud@v@get\tud@res@a{#4}% + \def\tud@res@c##1.##2##3##4\@nil{##1##2##3}% + \edef\tud@res@b{\expandafter\tud@res@c\tud@res@a.000\@nil}% + \ifnumber{\tud@res@b}{% + \edef\tud@res@c{% + \expandafter\tud@res@c\TUDScriptVersionNumber.000\@nil% + }% + \ifnum\tud@res@b>\tud@res@c\relax% + \def\tud@res@b{color=HKS92!30,}% + \else% + \ifnum\tud@res@b<\tud@res@c\relax% + \def\tud@res@b{color=HKS07!50,}% + \else% + \def\tud@res@b{color=HKS41!30,}% + \fi% + \fi% + \def\tud@res@c{v\tud@res@a}% + }{% + \let\tud@res@b\@empty% + \def\tud@res@c{#4}% + }% + \edef\tud@res@c{% + \endgroup% + \def\noexpand\tud@res@b{\tud@res@b}% + \def\noexpand\tud@res@c{\tud@res@c}% + }% + \tud@res@c% + }% + }% +% \end{macrocode} +% Vor der Ausgabe wird ein kleiner vertikaler Abstand eingefügt. +% \begin{macrocode} + \ifhmode\par\fi% + \let\par\relax% + \vskip\medskipamount% + \noindent% +% \end{macrocode} +% Dann erfolgt die Ausgabe der eigentlichen ToDo-Notiz im Textbereich. Die +% Sternversion von \cs{ToDo} unterdrückt dabei die Aufnahme in die ToDo-Liste. +% \begin{macrocode} + \toks@\expandafter{\tud@res@b inline}% + \IfBooleanT{#1}{\addto@hook\toks@{,nolist}}% + \sbox\z@{% + \expandafter\todo\expandafter[\the\toks@]{\trim@spaces{#3}\strut}% + }\usebox\z@% +% \end{macrocode} +% Es folgt die dazugehörige Randnotiz. Damit diese nicht verrutscht, wird +% \cs{marginnote} anstelle von \cs{marginpar} verwendet. Wurde das angestellte +% optionale Argument verwendet, wird dieses für die Randnotiz genutzt. +% Andernfalls erscheint im Rand die Anmerkung \emph{ToDo}. +% \begin{macrocode} + \renewcommand*\marginpar[2][]{% + \marginnote[##1]{##2}[\dimexpr-\ht\z@+1.6ex+1.75pt\relax]% + }% + \toks@\expandafter{\tud@res@a noline,nolist}% + \settowidth\marginparwidth{\tud@res@c}% + \addtolength\marginparwidth{\dimexpr1.6ex+1pt\relax}% + \expandafter\todo\expandafter[\the\toks@]{\tud@res@c\strut}% + \aftergroup\par\aftergroup\noindent% +% \end{macrocode} +% Wurden im ersten optionalen Argument unbekannte Werte gefunden, werden diese +% mit einer Warnung gemeldet. +% \begin{macrocode} + \listremove{\tud@todo@type@use}{rls}% + \listremove{\tud@todo@type@use}{imp}% + \listremove{\tud@todo@type@use}{doc}% + \ifx\tud@todo@type@use\@empty\else% + \begingroup% + \let\tud@res@c\@empty% + \renewcommand*{\do}[1]{% + \appto\tud@res@c{,##1}% + }% + \dolistloop{\tud@todo@type@use}% + \edef\tud@res@c{% + \endgroup% + \edef\noexpand\tud@res@c{\expandafter\@gobble\tud@res@c}% + }% + \tud@res@c% + \ClassWarning{tudscrmanual}{% + Unknown key(s) `\string\ToDo[\tud@res@c]'% + }% + \fi% + \fi% + \endgroup% + \global\let\@currentHref\tud@currentHref% + }{}% + \ignorespaces% + }% +% \end{macrocode} +% Zum Schluss wird der Befehl \cs{ListOfToDo} definiert, der die Liste der noch +% zu erledigenden Punkte ausgibt. +% \begin{macrocode} + \newcommand*\ListOfToDo{\if@tud@todo\clearpage\listoftodos\fi}% +} +% \end{macrocode} +% Sollte das Paket \pkg{todonotes} nicht geladen werden, erfolgt ein Definition +% der beiden notwendigen Befehle als Dummy. +% \begin{macrocode} +\TUD@UnwindPackage{todonotes}{% + \NewDocumentCommand\ToDo{s o m !o}{}% + \newcommand*\ListOfToDo{}% +} +% \end{macrocode} +% \end{macro}^^A \ListOfToDo +% \end{macro}^^A \tud@todo@type@use +% \end{macro}^^A \ToDo +% +% \iffalse +%</body> +%</!doc> +% \fi +% +% \subsection{Verschiedenes für die Dokumentationsklassen und -pakete} +% +% Sowohl für die Klasse \cls{tudscrmanual} als auch \cls{tudscrdoc} werden ein +% paar Befehle zur komfortablen Verwendung im Fließtext definiert. Außerdem +% erfolgen mittels einiger Pakete verschiedene Formateinstellungen. +% +% \subsubsection{Ergänzend geladene Pakete} +% +% Sprachabhängiges Setzen von Anführungszeichen. Das Laden des Paketes darf +% erst nach \pkg{inputenc} oder \pkg{inputenx} erfolgen. +% \begin{macrocode} +%<*body|class&doc> +\RequirePackage{csquotes}[2011/10/22] +%</body|class&doc> +% \end{macrocode} +% +% \iffalse +%<*body> +% \fi +% +% Für den Fließtext werden Pfeile u.\,ä. durch \pkg{textcomp} bereitgestellt. +% \begin{macrocode} +\RequirePackage{textcomp}[2005/09/27] +% \end{macrocode} +% Vergrößerung des Durchschusses. +% \begin{macrocode} +\RequirePackage{setspace}[2011/12/19] +\setstretch{1.1} +% \end{macrocode} +% Verbesserte Zitate. +% \begin{macrocode} +\PassOptionsToPackage{vskip=\smallskipamount}{quoting} +\RequirePackage{quoting}[2014/01/28] +% \end{macrocode} +% Automatisierte Datumsformatierung. +% \begin{macrocode} +\RequirePackage{isodate}[2010/01/03] +% \end{macrocode} +% Verschiedenste Symbole aus dem \LaTeX-Universum. +% \begin{macrocode} +\RequirePackage{hologo}[2012/04/26] +% \end{macrocode} +% +% \iffalse +%<*class> +% \fi +% +% Mit dem Paket \pkg{ragged2e} wird~-- falls benötigt~-- die Silbentrennung im +% Flattersatz aktiviert. +% \begin{macrocode} +\RequirePackage{ragged2e}[2009/05/21] +% \end{macrocode} +% Die Fußnoten werden nicht mit jedem Kapitel zurückgesetzt\dots +% \begin{macrocode} +\@removefromreset{footnote}{chapter} +% \end{macrocode} +% \dots und im Flattersatz ausgegeben. +% \begin{macrocode} +\renewcommand*\raggedfootnote{\tud@RaggedRight}% +% \end{macrocode} +% Das Paket wird für die Erstellung von Tabellen verwendet. +% \begin{macrocode} +\RequirePackage{booktabs}[2005/04/14] +% \end{macrocode} +% Die Formatierung von Gleitobjekten. +% \begin{macrocode} +\RequirePackage{caption}[2015/09/17] +\RequirePackage{floatrow}[2008/08/02] +\DeclareCaptionSubType[alph]{figure} +\DeclareCaptionSubType[alph]{table} +\captionsetup{font=sf,labelfont=bf,labelsep=space} +\captionsetup{singlelinecheck=off,format=hang,justification=raggedright} +\captionsetup[subfloat]{labelformat=brace,list=off} +\KOMAoption{captions}{tableheading,figuresignature} +\floatsetup[table]{style=plaintop} +% \end{macrocode} +% Erstellen von Grafiken. +% \begin{macrocode} +\RequirePackage{tikz}[2013/12/13] +% \end{macrocode} +% Einbinden von ganzseitigen PDF"~Dokumenten als Beispiel im Handbuch. +% \begin{macrocode} +\RequirePackage{pdfpages}[2013/08/25] +% \end{macrocode} +% Typographisch saubere Einheiten. +% \begin{macrocode} +\RequirePackage{units}[1998/08/04] +% \end{macrocode} +% Das Paket \pkg{ellipsis} sorgt für korrekte Auslassungpunkte. +% \begin{macrocode} +\AtEndPreamble{% + \RequirePackage{ellipsis}[2004/9/28]% + \let\ellipsispunctuation\relax% +} +% \end{macrocode} +% +% \iffalse +%</class> +%</body> +%<*body|class&doc> +% \fi +% +% \subsubsection{Gezieltes Ersetzen von Inhalten in Strings} +% +% \begin{macro}{\tud@replace} +% \changes{v2.05}{2015/11/01}{neu}^^A +% Mit diesem Befehl kann in einem gegebenen Makro ein bestimmtes Zeichen durch +% ein anderes ersetzt werden. Dies wird verwendet, um für Indexbefehle oder +% Labels die möglicherweise enthaltenen |@|"~Zeichen zu ersetzen. +% \begin{macrocode} +\newcommand*\tud@replace[3]{% + \begingroup% +% \end{macrocode} +% Zunächst wird \cs{@tempa} als ein durch \cs{@nil} abgegrenztes Makro mit +% zwei Argumenten definiert, wobei diese durch das im zweiten Argument gegebene +% \meta{Zeichen} voneinander abgegrenzt werden. Mit diese beiden Argumente wird +% das Makro \cs{@tempb} aufgerufen. +% \begin{macrocode} + \toks@{\def\@tempa##1}% + \eaddto@hook\toks@{\detokenize{#2}}% + \addto@hook\toks@{##2\@nil{\@tempb{##1}{##2}}}% +% \end{macrocode} +% Der Inhalt von \cs{toks@} ist +% \cs{def}\cs{@tempa\#1\meta{Zeichen}\#2}\cs{@nil\{\cs{@tempb\{\#1\}\{\#2\}}\}} +% und definiert \cs{@tempa}. +% \begin{macrocode} + \the\toks@% +% \end{macrocode} +% Nun wird \cs{@tempb} definiert. Dieses Makro fügt dem Zielmakro das erste +% Argumente gefolgt von \meta{Ersatzzeichen} hinzu. Mit dem zweiten Argument +% wird anschließend \cs{@tempa\#\#2}\cs{@nil} so lange rekursiv aufgerufen, bis +% es wirklich leer ist, wodurch das zweite Argument \meta{Zeichen} sukzessive +% durch das dritte Argument \meta{Ersatzzeichen} ersetzt wird. +% \begin{macrocode} + \def\@tempb##1##2{% + \IfArgIsEmpty{##2}{% + \appto#1{##1}% + \let\@tempc\relax% + }{% + \appto#1{##1#3}% + \def\@tempc{\@tempa##2\@nil}% + }% + \@tempc% + }% +% \end{macrocode} +% Nachdem die beiden notwendigen Makros definiert wurden, erfolgt jetzt die +% eigentliche Ersetzung. Dafür wird der Inhalt des Zielmakros als Argument für +% \cs{@tempa} verwendet. Diesem wird das zu ersetzende Zeichen gefolgt von +% \cs{@nil} hinzugefügt, um das Argument abschließend zu begrenzen. +% \begin{macrocode} + \toks@{\@tempa}% + \edef\@tempc{\expandafter\detokenize\expandafter{#1}}% + \eaddto@hook\toks@{\@tempc}% + \eaddto@hook\toks@{\detokenize{#2}\@nil}% +% \end{macrocode} +% Der Inhalt von \cs{toks@} hat die Form \cs{@tempa\#1\meta{Zeichen}}\cs{@nil}, +% wobei der Inhalt von \meta{\#1} expandiert wird. +% \begin{macrocode} + \def#1{}% + \the\toks@% + \edef\tud@reserved{% + \noexpand\endgroup% + \def\noexpand#1{#1}% + }% + \tud@reserved% +} +% \end{macrocode} +% \end{macro}^^A \tud@replace +% +% \iffalse +%</body|class&doc> +%<*body> +% \fi +% +% +% \subsubsection{Zusätzliche Markup-Befehle} +% +% \begin{macro}{\Attention} +% \changes{v2.02}{2014/08/16}{neu}^^A +% \begin{macro}{\Forum} +% \begin{macro}{\CTAN} +% \changes{v2.05}{2015/11/22}{neu}^^A +% \begin{macro}{\GitHubRepo} +% \changes{v2.02}{2014/08/16}{neu}^^A +% \begin{macro}{\Download} +% \changes{v2.05g}{2016/11/08}{neu}^^A +% \begin{macro}{\notudscrartcl} +% \begin{macro}{\scrguide} +% \changes{v2.02}{2014/09/04}{neu}^^A +% \changes{v2.05}{2015/07/23}{Hyperlinktext über optionales Argument}^^A +% Für die Anwenderdokumentation werden weitere Auszeichnungsbefehle definiert. +% \begin{macrocode} +\newcommand*\Attention[2][\z@]{% + \marginnote{% + \setlength\fboxsep{0.25em}% + \fbox{Achtung!}% + }[#1]% + \emph{\trim@spaces{#2}}% +} +\NewDocumentCommand\Forum{!s !t'}{% + \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}% + \IfBooleanT{#2}{\toks@{\url}}% + \addto@hook\toks@{{http://latex.wcms-file3.tu-dresden.de/phpBB3/}}% + \IfBooleanF{#2}{\addto@hook\toks@{{TUD-\LaTeX-Forum}}}% + \the\toks@\xspace% +} +\NewDocumentCommand\CTAN{!s !o !g}{% + \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}% + \addto@hook\toks@{{http://www.ctan.org/\IfValueT{#2}{#2}}}% + \addto@hook\toks@{% + {\tud@english{Comprehensive TeX Archive Network (CTAN\IfValueT{#3}{~#3})}}% + }% + \the\toks@\xspace% +} +%<*class> +\NewDocumentCommand\GitHubRepo{!s !t' !O{releases}}{% + \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}% + \IfBooleanT{#2}{\toks@{\url}}% + \addto@hook\toks@{{https://github.com/tud-cd/tudscr/#3}}% + \IfBooleanF{#2}{% + \addto@hook\toks@{{\tud@english{GitHub-Repository~\Distribution*{tudscr}}}}% + }% + \the\toks@\xspace% +} +\newcommand*\Download[1]{% + https://github.com/tud-cd/tudscr/releases/download/#1% +} +\newcommand*\notudscrartcl{% + F\"ur die Klassen \Class{tudscrartcl} sowie \Class{tudscrposter} ist diese + Option nicht verf\"ugbar.% +} +%</class> +\NewDocumentCommand\scrguide{!s !O{\KOMAScript-Handbuch}}{% + \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}% + \addto@hook\toks@{% + {http://mirrors.ctan.org/macros/latex/contrib/koma-script/doc/scrguide.pdf}% + }% + \addto@hook\toks@{{#2}}% + \the\toks@\xspace% +} +% \end{macrocode} +% \end{macro}^^A \scrguide +% \end{macro}^^A \notudscrartcl +% \end{macro}^^A \Download +% \end{macro}^^A \GitHubRepo +% \end{macro}^^A \CTAN +% \end{macro}^^A \Forum +% \end{macro}^^A \Attention +% +% \iffalse +%</body> +%<*body|class&doc> +% \fi +% +% \begin{macro}{\CD} +% \begin{macro}{\CDs} +% \begin{macro}{\TUD} +% \begin{macro}{\TnUD} +% \begin{macro}{\TUDCD} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\TUDCDs} +% \changes{v2.05}{2015/11/01}{neu}^^A +% \begin{macro}{\DDC} +% Diese Befehle stellen regelmäßig in der Quelltextdokumentatuion und im +% Handbuch genutzte Textbausteine bereit. Dazu wird der Befehl \cs{xspace} aus +% dem \pkg{xspace}-Paket genutzt. +% \begin{macrocode} +\newcommand*\CD{\tud@english{Corporate Design}\xspace} +\newcommand*\CDs{\tud@english{Corporate Designs}\xspace} +\newcommand*\TUD{Technische Universit\"at Dresden\xspace} +\newcommand*\TnUD{Technischen Universit\"at Dresden\xspace} +\newcommand*\TUDCD{\CD der \TnUD} +\newcommand*\TUDCDs{\CDs der \TnUD} +\newrobustcmd*\DDC{% + \mbox{% + D\kern.05em R\kern.05em E\kern.05em S\kern.05em % + D\kern.05em E\kern.05em N\kern.1em-\kern.1em concept% + }\xspace% +} +\AfterPackage*{hyperref}{% + \pdfstringdefDisableCommands{% + \def\DDC{DRESDEN-concept}% + \def\TUDScript{TUD-Script}% + \def\KOMAScript{KOMA-Script}% + }% +} +% \end{macrocode} +% \end{macro}^^A \DDC +% \end{macro}^^A \TUDCDs +% \end{macro}^^A \TUDCD +% \end{macro}^^A \TnUD +% \end{macro}^^A \TUD +% \end{macro}^^A \CDs +% \end{macro}^^A \CD +% \begin{macro}{\OpenSans} +% \changes{v2.06}{2018/07/02}{neu}^^A +% \begin{macro}{\tud@cdfont@texteb} +% \changes{v2.06}{2018/08/31}{neu}^^A +% \begin{macro}{\Univers} +% \begin{macro}{\DIN} +% Für die Nennung der Schriften spezielle Markos bereitgestellt. +% \begin{macrocode} +\DeclareTextFontCommand\tud@cdfont@texteb{% + \fontfamily{\tud@cdfont@fam}\fontseries{\tud@cdfont@ebf}\selectfont% +} +\newrobustcmd*\OpenSans{% + \texorpdfstring{\tud@cdfont@texteb{Open~Sans}}{Open Sans}\xspace% +} +\newrobustcmd*\Univers{\texorpdfstring{\textcdbi{Univers}}{Univers}\xspace} +\newrobustcmd*\DIN{\texorpdfstring{\textcdxi{DIN~Bold}}{DIN Bold}\xspace} +% \end{macrocode} +% \end{macro}^^A \DIN +% \end{macro}^^A \Univers +% \end{macro}^^A \tud@cdfont@texteb +% \end{macro}^^A \OpenSans +% \begin{macro}{\@pnumwidth} +% \begin{macro}{\@tocrmarg} +% Für das Inhaltsverzeichnis werden die beiden Längen angepasst. +% \begin{macrocode} +\renewcommand*\@pnumwidth{2.1em}% +\renewcommand*\@tocrmarg{3.1em}% +% \end{macrocode} +% \end{macro}^^A \@tocrmarg +% \end{macro}^^A \@pnumwidth +% +% \iffalse +%</body|class&doc> +%<*body> +% \fi +% +% \begin{macro}{\textsbn} +% \changes{v2.02}{2014/08/16}{neu}^^A +% \begin{macro}{\sbnfont} +% \changes{v2.02}{2014/08/16}{neu}^^A +% \begin{macro}{\textsbs} +% \changes{v2.02}{2014/08/16}{neu}^^A +% \begin{macro}{\sbsfont} +% \changes{v2.02}{2014/08/16}{neu}^^A +% Für die Anwenderdokumentation werden weitere Auszeichnungsbefehle definiert. +% \begin{macrocode} +\newcommand*\textsbn{} +\newrobustcmd*\sbnfont{\sffamily\bfseries\upshape} +\DeclareTextFontCommand\textsbn{\sbnfont} +\newcommand*\textsbs{} +\newrobustcmd*\sbsfont{\sffamily\bfseries\slshape} +\DeclareTextFontCommand\textsbs{\sbsfont} +% \end{macrocode} +% \end{macro}^^A \sbsfont +% \end{macro}^^A \textsbs +% \end{macro}^^A \sbnfont +% \end{macro}^^A \textsbn +% +% \iffalse +%</body> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-mathswap.dtx b/macros/latex/contrib/tudscr/source/tudscr-mathswap.dtx new file mode 100644 index 0000000000..158befa025 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-mathswap.dtx @@ -0,0 +1,297 @@ +% \CheckSum{149} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-mathswap.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-mathswap.dtx}[2019/06/28 v2.06 TUD-Script\space% +% +% \iffalse +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{mathswap}[% +%<*package> +%!TUD@Version +%</package> +%<package> package +%<*dtx|package> +% \fi +% + (swap mathematical separators)% +] +% +% \iffalse +%</dtx|package> +%<*dtx> +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-mathswap.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.02}{2014/08/18}{\pkg{mathswap}: Schalter zum Aktivieren und +% Deaktivieren der Funktionalität}^^A +% +% \section{Das Paket \pkg{mathswap} -- Aktive Trennzeichen im Mathematikmodus} +% +% Die Verwendung von Dezimal- und Tausendertrennzeichen im mathematischen Satz +% sind regional sehr unterschiedlich. In den meisten englischsprachigen Ländern +% wird der Punkt als Dezimaltrennzeichen und das Komma zur Zifferngruppierung +% verwendet, im restlichen Europa wird dies genau entgegengesetzt praktiziert. +% Dieses Paket soll dazu dienen, beliebige formatierte Zahlen in ihrer Ausgabe +% anzupassen. Dafür werden die Zeichen Punkt (~.~) und Komma (~,~) als aktive +% Zeichen im Mathematikmodus definiert. +% +% Ähnliche Funktionalitäten werden bereits durch die Pakete \pkg{icomma} und +% \pkg{ziffer} bereitgestellt. Bei \pkg{icomma} muss jedoch beim +% Verfassen des Dokumentes durch den Autor beachtet werden, ob das verwendete +% Komma einem Dezimaltrennzeichen entspricht ($t=1,\!2$) oder aber einem +% normalen Komma im Mathematiksatz ($z=f(x,y)$), wo ein gewisser Abstand nach +% dem Komma durchaus gewünscht ist. Das Paket \pkg{ziffer} liefert dafür die +% gewünschte Funktionalität,\footnote{kein Leerraum nach Komma, wenn direkt +% danach eine Ziffer folgt} ist allerdings etwas unflexibel, was den Umgang mit +% den Trennzeichen anbelangt. Als Alternative zu diesem Paket kann außerdem +% \pkg{ionumbers} verwendet werden. +% +% Das Paket \pkg{mathswap} sorgt dafür, dass Trennzeichen direkt vor einer +% Ziffer erkannt und nach bestimmten Vorgaben ersetzt werden. Sollte sich +% jedoch zwischen Trennzeichen und Ziffer Leerraum befinden, wird dieser als +% solcher auch gesetzt. +% +% \ToDo{Vergleich mit \pkg{ionumbers}, ist \pkg{mathswap} notwendig?}[v2.??] +% \ToDo{Als eingenständiges Paket herauslösen}[v2.??] +% \ToDo{Allgem. Bezeichnungen englisches/deutsches Format?}[v2.??] +% \ToDo{Sprachabhängige Einstellungen in Paket und aus Klassen raus}[v2.??] +% \ToDo{Makro(s)/Key-Value zum Festlegen von Eingabe- und Ausgabeformat}[v2.??] +% \ToDo{Inhalte von \file{mathswap.tex} hier rein}[v2.??] +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*package> +% \fi +% +% \begin{macro}{\commaswap} +% \begin{macro}{\dotswap} +% \begin{macro}{\@commaswap} +% \begin{macro}{\@dotswap} +% Die beiden Befehle \cs{commaswap} und \cs{dotswap} sind die zentrale +% Benutzerschnittstelle des Paketes. Das Makro \cs{commaswap} definiert das +% Trennzeichen oder den Inhalt, wodurch ein Komma ersetzt werden soll, auf +% welches direkt danach eine Ziffer folgt. Normalerweise setzt \LaTeX{} +% nach einem Komma im mathematischen Satz zusätzlich einen horizontalen Abstand. +% Bei der Ersetzung durch \cs{commaswap} entfällt dieser. Die Voreinstellung +% für \cs{commaswap} ist deshalb auf ein Komma (,) gesetzt. +% +% Mit dem Makro \cs{dotswap} kann definiert werden, wodurch der Punkt im +% mathematischen Satz ersetzt werden soll, wenn auf diesen direkt anschließend +% eine Ziffer folgt. Da der Punkt im deutschsprachigem Raum zur Gruppierung von +% Ziffern genutzt wird, ist hierfür standardmäßig ein halbes geschütztes +% Leerzeichen definiert (\cs{,}). +% +% Die mit \cs{commaswap}\marg{Trennzeichen} und \cs{dotswap}\marg{Trennzeichen} +% definierten Trennzeichen werden in \cs{@commaswap} und \cs{@dotswap} +% gesichert. +% \begin{macrocode} +\newcommand*\@commaswap{,} +\newcommand*\commaswap[1]{\gdef\@commaswap{#1}\ignorespaces} +\newcommand*\@dotswap{\,} +\newcommand*\dotswap[1]{\gdef\@dotswap{#1}\ignorespaces} +% \end{macrocode} +% \end{macro}^^A \@dotswap +% \end{macro}^^A \@commaswap +% \end{macro}^^A \dotswap +% \end{macro}^^A \commaswap +% \begin{macro}{\ms@comma} +% \begin{macro}{\ms@commachar} +% \begin{macro}{\ms@dot} +% \begin{macro}{\ms@dotchar} +% In den Befehlen \cs{ms@commachar} und \cs{ms@dotchar} wird die originale +% Definition von Komma und Punkt im Mathematikmodus gesichert, welche weiterhin +% verwendet wird, falls nach diesen nicht direkt eine Ziffer folgt. Mit den +% Makros \cs{ms@comma} und \cs{ms@dot} werden die Definitionen von Komma und +% Punkt als normale Textzeichen für den mathematischen Satz bereitgehalten. +% Anschließend werden beide als aktive Zeichen für den Mathematikmodus gesetzt. +% \begin{macrocode} +\newcommand*\ms@commachar{} +\newcommand*\ms@dotchar{} +\AtBeginDocument{% + \DeclareMathSymbol{\ms@comma}{\mathord}{letters}{"3B}% + \mathchardef\ms@commachar\mathcode\expandafter`,% + \mathcode\expandafter`,="8000% + \DeclareMathSymbol{\ms@dot}{\mathord}{letters}{"3A}% + \mathchardef\ms@dotchar\mathcode\expandafter`.% + \mathcode\expandafter`.="8000% + \mathswapon% +} +% \end{macrocode} +% \end{macro}^^A \ms@dotchar +% \end{macro}^^A \ms@dot +% \end{macro}^^A \ms@commachar +% \end{macro}^^A \ms@comma +% \begin{macro}{\mathswapon} +% \changes{v2.02}{2014/08/18}{neu}^^A +% \begin{macro}{\mathswapoff} +% \changes{v2.02}{2014/08/18}{neu}^^A +% \begin{macro}{\ms@commaswap} +% \changes{v2.02}{2014/08/18}{neu}^^A +% \begin{macro}{\ms@dotswap} +% \changes{v2.02}{2014/08/18}{neu}^^A +% Mit den Befehlen \cs{mathswapon} und \cs{mathswapoff} kann die Funktionalität +% des Paketes innerhalb des Dokumentes aktiviert und deaktiviert werden. +% \begin{macrocode} +\newcommand*\ms@commaswap{} +\newcommand*\ms@dotswap{} +\newcommand*\mathswapon{% + \def\ms@commaswap{\@commaswap}% + \def\ms@dotswap{\@dotswap}% +} +\newcommand*\mathswapoff{% + \def\ms@commaswap{\ms@commachar}% + \def\ms@dotswap{\ms@dotchar}% +} +% \end{macrocode} +% \end{macro}^^A \ms@dotswap +% \end{macro}^^A \ms@commaswap +% \end{macro}^^A \mathswapoff +% \end{macro}^^A \mathswapon +% \begin{macro}{\ms@ifnum} +% \begin{macro}{\ms@@ifnum} +% Der Befehl \cs{ms@ifnum} reicht das erste Argument an \cs{ms@@ifnum} weiter, +% falls der Inhalt von \cs{ms@token} zu einer Ziffer expandiert. Andernfalls +% wird das zweite Argument ausgeführt. +% \begin{macrocode} +\newcommand*\ms@ifnum[2]{% + \ifx\ms@token0\ms@@ifnum{#1}\else% + \ifx\ms@token1\ms@@ifnum{#1}\else% + \ifx\ms@token2\ms@@ifnum{#1}\else% + \ifx\ms@token3\ms@@ifnum{#1}\else% + \ifx\ms@token4\ms@@ifnum{#1}\else% + \ifx\ms@token5\ms@@ifnum{#1}\else% + \ifx\ms@token6\ms@@ifnum{#1}\else% + \ifx\ms@token7\ms@@ifnum{#1}\else% + \ifx\ms@token8\ms@@ifnum{#1}\else% + \ifx\ms@token9\ms@@ifnum{#1}\else% + #2% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% +} +% \end{macrocode} +% Wurde eine nachfolgende Ziffer erkannt, so wird die Definition von Punkt und +% Komma auf die eines normalen Textzeichens gesetzt und anschließend die mit +% \cs{commaswap} bzw. \cs{dotswap} angegebene Ersetzung ausgegeben. +% \begin{macrocode} +\newcommand*\ms@@ifnum[1]{% + \begingroup% + \mathcode\expandafter`,=\the\ms@comma% + \mathcode\expandafter`.=\the\ms@dot% + #1% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \ms@@ifnum +% \end{macro}^^A \ms@ifnum +% \begin{macro}{\ms@token} +% \begin{macro}{\ms@smartcomma} +% \begin{macro}{\ms@smartdot} +% Mit \cs{futurelet} wird dem Makro \cs{ms@token} das nachfolgende Zeichen von +% Komma bzw. Punkt zugewiesen. Anschließend wird mittels \cs{ms@smartcomma} bzw. +% \cs{ms@smartdot} geprüft, ob es sich beim Inhalt von \cs{ms@token} um eine +% Ziffer handelt. Dazu wird der Befehl \cs{ms@ifnum} verwendet. Sollte dies der +% Fall sein, so wird ein Komma innerhalb einer Zahl durch \cs{@commaswap} und +% ein Punkt entsprechend mit \cs{@dotswap} ersetzt. Sollte direkt nach dem +% Trennzeichen keine Ziffer folgen, wird für Punkt und Komma die originale +% Definition aus \cs{ms@commachar} bzw. \cs{ms@dotchar} verwendet. +% \begin{macrocode} +\newcommand*\ms@token{} +\begingroup + \catcode`,=\active + \gdef,{\futurelet\ms@token\ms@smartcomma} + \catcode`.=\active + \gdef.{\futurelet\ms@token\ms@smartdot} +\endgroup +\newcommand*\ms@smartcomma{\ms@ifnum{\ms@commaswap}{\ms@commachar}} +\newcommand*\ms@smartdot{\ms@ifnum{\ms@dotswap}{\ms@dotchar}} +% \end{macrocode} +% \end{macro}^^A \ms@smartdot +% \end{macro}^^A \ms@smartcomma +% \end{macro}^^A \ms@token +% +% \iffalse +%</package> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-misc.dtx b/macros/latex/contrib/tudscr/source/tudscr-misc.dtx new file mode 100644 index 0000000000..72beb47c8a --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-misc.dtx @@ -0,0 +1,715 @@ +% \CheckSum{324} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-misc.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-misc.dtx}[2019/08/20 v2.06c TUD-Script\space% + (miscellaneous)% +] +% +% \iffalse +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-misc.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \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 +% +% \section{Verschiedenes für das \TUDScript-Bundle} +% +% Alles, wofür sich eine separate Datei nicht lohnt, landet hier. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \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@key{tudbookmarks}[true]{% + \TUD@set@ifkey{tudbookmarks}{@tud@bookmarks}{#1}% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@bookmarks +% \end{option}^^A tudbookmarks +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% \begin{macro}{\tudbookmark} +% \begin{macro}{\tud@x@hyperref@realfootnotes} +% Die Befehle zum Eintragen der Sprungmarken. Im Dokument kann \cs{tudbookmark} +% auch vom Anwender genutzt werden, um weitere Lesezeichen abhängig von der +% Option \opt{tudbookmarks} manuell 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@maketitle@inpage} +% \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% + \@tud@res@swafalse% + \if@tud@coverpage\@tud@res@swatrue\fi% + \if@titlepageiscoverpage\@tud@res@swatrue\fi% + \if@tud@res@swa% + \tudbookmark[% +%<book|report> 0% +%<article> 1% + ]{\coverpagename}{cover}% + \else% + \tudbookmark[% +%<book|report> 0% +%<article> 1% + ]{\titlepagename}{title}% + \fi% +}{}{\tud@patch@wrn{titlepage}} +%</book|report|article> +% \end{macrocode} +% Dies geschieht außerdem auch für die Titelköpfe. +% \begin{macrocode} +\pretocmd{\tud@maketitle@inpage}{% + \tud@x@bookmark@startatroot% + \tudbookmark[% +%<book|report> 0% +%<article|poster> 1% + ]{\titlename}{title}% +}{}{\tud@patch@wrn{tud@maketitle@inpage}} +\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@maketitle@inpage +% \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@cs@store{addtocontents}% + \def\@tempc{% + \unsettoc{toc}{totoc}% + \tud@cs@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 +% +% \iffalse +%</class&body> +%<*class&option> +% \fi +% +% \subsection{Fußnoten in Überschriften} +% +% Eigentlich sollte die Option \opt{footnotes}|=|\val{symbolheadings} es +% ermöglichen, Fußnoten mit Symbolen in Überschriften zu verwenden. Umgesetzt +% werden sollte dies mit dem Paket \pkg{footmisc}. Da dieses aber mit +% Inkompatibilitäten zu \pkg{hyperref} und \KOMAScript{} aufwartet, wird darauf +% leider verzichtet. +%^^A% \begin{option}{footnotes} +%^^A% \changes{v2.02}{2014/06/27}{neu}^^A +%^^A% \begin{macro}{\if@tud@symbolheadings} +%^^A% \changes{v2.02}{2014/06/27}{neu}^^A +%^^A% \begin{macro}{\tud@sec@note} +%^^A% \changes{v2.02}{2014/06/27}{neu}^^A +%^^A% \begin{counter}{symbolheadings} +%^^A% \changes{v2.02}{2014/06/27}{neu}^^A +%^^A% Die \KOMAScript-Option \opt{footnotes} wird um den Schlüssel +%^^A% \val{symbolheadings} erweitert, mit welchem eingestellt werden kann, ob +%^^A% in den Überschriften Symbole für die Fußnoten anstelle von Zahlen +%^^A% verwendet werden sollen. +%^^A% \begin{macrocode} +%^^A\newif\if@tud@symbolheadings +%^^A\TUD@key{footnotes}{% +%^^A \TUD@set@numkey{footnotes}{@tempa}{% +%^^A {nosymbolheadings}{0},{numberheadings}{0},% +%^^A {symbolheadings}{1}% +%^^A }{#1}% +%^^A \ifx\FamilyKeyState\FamilyKeyStateProcessed% +%^^A \ifcase\@tempa\relax% nosymbolheadings +%^^A \@tud@symbolheadingsfalse% +%^^A \or% symbolheadings +%^^A \@tud@symbolheadingstrue% +%^^A \fi% +%^^A \fi% +%^^A} +%^^A% \end{macrocode} +%^^A% Mit \cs{tud@sec@note} wird die Option \opt{footnotes=symbolheadings} +%^^A% umgesetzt. Hierfür wird das Paket \pkg{footmisc} benötigt. +%^^A% \begin{macrocode} +%^^A\newcommand*\tud@sec@note[1]{% +%^^A \ClassWarning{\TUD@Class@Name}{% +%^^A You have to load package `footmisc' with\MessageBreak% +%^^A option `stable' in order to use\MessageBreak% +%^^A footnotes with symbols in headings% +%^^A }% +%^^A} +%^^A\AfterPackage{footmisc}{% +%^^A \@ifpackagewith{footmisc}{stable}{% +%^^A \renewcommand*\tud@sec@note[1]{% +%^^A \begingroup% +%^^A \if@tud@symbolheadings% +%^^A \let\c@footnote\c@symbolheadings% +%^^A \def\thefootnote{\fnsymbol{symbolheadings}}% +%^^A \fi% +%^^A \footnote{#1}% +%^^A \endgroup% +%^^A }% +%^^A }{}% +%^^A} +%^^A% \end{macrocode} +%^^A% Bei aktivierter Option \opt{footnotes}|=|\val{symbolheadings} wird +%^^A% dieser Zähler für die Symboleauswahl von Fußnoten in Überschirften +%^^A% inkrementiert. +%^^A% \begin{macrocode} +%^^A\AtEndOfClass{% +%^^A%<book|report> \newcounter{symbolheadings}[chapter] +%^^A%<article|poster> \newcounter{symbolheadings} +%^^A} +%^^A% \end{macrocode} +%^^A% \end{counter}^^A symbolheadings +%^^A% \end{macro}^^A \tud@sec@note +%^^A% \end{macro}^^A \if@tud@symbolheadings +%^^A% \end{option}^^A footnotes +% +% \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. +% +% \begin{macro}{\tud@x@scr@checkoptions} +% \changes{v2.06}{2018/07/31}{neu}^^A +% \begin{macro}{\tud@x@scr@pt} +% \changes{v2.06}{2018/07/31}{neu}^^A +% Das Makro \cs{tud@x@scr@checkoptions} wird mit \cs{DeclareOption*} für alle +% Optionen aufgerufen, welche kein Mitglied der Familie~\val{TUD} sind. Damit +% kann auf nicht definierte Schlüssel reagiert werden. Anschließend werden diese +% an die zugrundeliegende \KOMAScript-Klasse weitergereicht. +% \begin{macrocode} +\newcommand*\tud@x@scr@checkoptions{% + \expandafter\tud@x@scr@pt\CurrentOption pt\@nil% + \PassOptionsToClass{\CurrentOption}{\TUD@Class@KOMA}% +} +% \end{macrocode} +% Wird die Schriftgröße im veralteten Format \val{\dots pt} übergeben, so wird +% der Schalter \cs{if@tud@x@scr@fontsize@set} auf \val{true} gesetzt. +% \begin{macrocode} +\newcommand*\tud@x@scr@pt{} +\def\tud@x@scr@pt #1pt#2\@nil{% + \ifstr{#2}{pt}{\ifnumber{#1}{\@tud@x@scr@fontsize@settrue}{}}{}% +} +% \end{macrocode} +% \end{macro}^^A \tud@x@scr@pt +% \end{macro}^^A \tud@x@scr@checkoptions +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% Wurde das Papierformat jedoch nicht die Schriftgröße geändert, wird eine +% Warnung erzeugt. +% \begin{macrocode} +\AtBeginDocument{% + \if@tud@x@scr@fontsize@set\else% + \@tud@res@swafalse% + \ifdim\tud@len@layoutwidth<208mm\relax\@tud@res@swatrue\fi% + \ifdim\tud@len@layoutwidth>212mm\relax\@tud@res@swatrue\fi% + \ifdim\tud@len@layoutheight<295mm\relax\@tud@res@swatrue\fi% + \ifdim\tud@len@layoutheight>299mm\relax\@tud@res@swatrue\fi% + \if@tud@res@swa% + \ClassWarningNoLine{\TUD@Class@Name}{% + You've set a layout 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% + \fi% +} +% \end{macrocode} +% +% \iffalse +%</class&body> +%<*class&!inherit|package&fonts> +%<*option> +% \fi +% +% \subsection{Sukkzessives Abarbeiten von Optionen 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. +% +% \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} +\newcommand*\tud@atdocument@hook{} +\let\tud@atdocument@hook\relax +\newcommand*\TUD@SpecialOptionAtDocument[1]{} +\AfterEndPreamble{% + \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 +%</option> +%<*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@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@cd@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@math@set +\newif\if@tud@font@skip@set +%<*class> +\newif\if@tud@x@scr@headings@reset +\newif\if@tud@cd@process +\newif\if@tud@cdgeometry@process +%</class> +\newcommand*\tud@atdocument@process{% + \if@tud@font@set% + \tud@font@set% + \global\@tud@font@setfalse% + \global\@tud@font@skip@setfalse% +%<class> \global\@tud@cd@processfalse% + \fi% + \if@tud@font@skip@set% + \tud@font@skip@set% + \global\@tud@font@skip@setfalse% + \fi% + \if@tud@math@set% + \tud@math@set% + \global\@tud@math@setfalse% + \fi% +%<*class> + \if@tud@x@scr@headings@reset% + \tud@x@scr@headings@reset% + \global\@tud@x@scr@headings@resetfalse% + \global\@tud@cd@processfalse% + \fi% + \if@tud@cd@process% + \tud@cd@process% + \global\@tud@cd@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@cd@process +% \end{macro}^^A \if@tud@x@scr@headings@reset +% \end{macro}^^A \if@tud@font@skip@set +% \end{macro}^^A \if@tud@math@set +% \end{macro}^^A \if@tud@font@set +% \end{macro}^^A \tud@atdocument@process +% +% \iffalse +%</body> +%</class&!inherit|package&fonts> +%<*execute> +%<*class&!inherit|package&fonts> +% \fi +% +% \subsection{Versionsabhängige Voreinstellungen} +% +% Voreinstellungen von neu eingeführten Optionen, welche die resultierende +% Ausgabe entscheidend verändern könnten, werden hier versionsabhängig gesetzt. +% Hierfür wird der Schlüssel \opt{tudscrver} des Mitglieds \val{.comp} vor +% allen anderen Schlüsseln ausgewertet. Danach kann mit \cs{tud@if@v@lower} auf +% die gewählte Kompatibilitäsversion getestet werden. +% \begin{macrocode} +\DeclareOption*{} +\FamilyProcessOptions[.comp]{TUD}\relax +% \end{macrocode} +% Ab der \TUDScript-Version~v2.05 werden einige vertikale Abstände abhängig von +% der Schriftgröße definiert. Sollte eine frühere Kompatibilitätseinstellung +% angegeben worden sein, wird dieses verhalten deaktiviert. +% \begin{macrocode} +\tud@if@v@lower{2.05}{% + \TUD@key@preset{relspacing}{false}% +}{% + \TUD@key@preset{relspacing}{true}% +} +% \end{macrocode} +% Ab \TUDScript-Version~v2.06 werden die verwendeten Schriften auf \OpenSans +% gesetzt, für die Komptibilität zu vorherigen Versionen auf \Univers und \DIN. +% \begin{macrocode} +\tud@if@v@lower{2.06}{% +%<!(class&poster)> \TUD@key@preset{cdoldfont}{true}% +%<class&poster> \TUD@key@preset{cdoldfont}{ultrabold}% + \TUD@key@preset{ttfont}{lmodern}% +%<class> \TUD@key@preset{headings}{light}% +}{% +%<!(class&poster)> \TUD@key@preset{cdfont}{true}% +%<class&poster> \TUD@key@preset{cdfont}{ultrabold}% + \TUD@key@preset{ttfont}{roboto}% +%<class> \TUD@key@preset{headings}{heavy}% +} +% \end{macrocode} +% +% \iffalse +%</class&!inherit|package&fonts> +% \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} +%<*package> +%<*fonts> +\DeclareOption*{\KOMAoptions{\CurrentOption}} +%</fonts> +%<*fixfonts> +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{tudscrfonts}} +%</fixfonts> +%<*comp> +\DeclareOption*{\TUDoptions{\CurrentOption}} +%</comp> +%</package> +%<*class> +%<*!inherit> +\DeclareOption*{\tud@x@scr@checkoptions} +%</!inherit> +%<*inherit> +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\TUD@Class@Parent}} +%</inherit> +%</class> +% \end{macrocode} +% Es werden die Standardoptionen ausgeführt. Für die Klasse \cls{tudscrposter} +% werden die Farben aktiviert. +% \begin{macrocode} +%<*package&tutorial> +\KOMAoptions{headings=small} +\TUDoptions{cdfoot=true} +%</package&tutorial> +\TUDExecuteOptions{% +%<*package> +%<*fixfonts> + headings=heavy% +%</fixfonts> +%<*tutorial> + ToDo=true% +%</tutorial> +%</package> +%<*class&!inherit> +%<*book|report|article> + cd=true,tudbookmarks=true% +%</book|report|article> +%<*poster> + cd=bicolor,tudbookmarks=false% +%</poster> +%</class&!inherit> +} +\TUDProcessOptions\relax +% \end{macrocode} +% Die korrespindierende \KOMAScript-Klasse bzw. \TUDScript-Elternklasse wird +% geladen. +% \begin{macrocode} +%<*class&!inherit> +\LoadClass{\TUD@Class@KOMA}[2018/03/30] +%</class&!inherit> +%<*class&inherit> +%<manual>\PassOptionsToClass{ttfont=roboto}{\TUD@Class@Parent} +\LoadClass{\TUD@Class@Parent} +%</class&inherit> +% \end{macrocode} +% +% \iffalse +%<*class&!inherit|package&fonts> +% \fi +% +% \subsection{Optionen ohne späte Wahlmöglichkeit} +% +% Einige Optionen können nur zum Zeitpunkt des Ladens einer Klasse oder eines +% Paketes respektive in der Präambel gesetzt werden. Diese müssen \emph{nach} +% \cs{TUDProcessOptions} mit \cs{TUD@key@toolate} redefiniert werden. +% +% \begin{macro}{\TUD@key@toolate} +% \changes{v2.06c}{2019/08/20}{neu}^^A +% Dieser Befehl definiert eine Fehlermeldung für Schlüssel respektive Optionen, +% die zu spät verwendet wurden, wobei er innerhalb der Makros \cs{AtEndOfClass}, +% \cs{AtEndOfClass}, \cs{AtEndPreamble} etc. genutzt werden sollte. Wird dieser +% noch im Kontext von Klasse oder Paket (\verb=\@currname.\@currext-h@@k=) +% verwendet, wird gemeldet, dass der Schlüssel allein beim Laden der Klasse +% respektive des Paketes genutzt werden darf. Andernfalls wird die zwingende +% Verwendung in der Präambel angemerkt. +% \begin{macrocode} +\newcommand*\TUD@key@toolate[1]{% + \csedef{tud@key@#1@error}{% +%<*class> + \noexpand\ClassError{\noexpand\TUD@Class@Name}% +%</class> +%<*package&fonts> + \noexpand\PackageError{tudscrfonts}% +%</package&fonts> + {Option `#1' too late}{% + Option `#1' can only be set\space% + \ifcsname \@currname.\@currext-h@@k\endcsname% + as optional \MessageBreak argument while loading\space% +%<*class> + class `\noexpand\TUD@Class@Name'% +%</class> +%<*package&fonts> + package `tudscrfonts'% +%</package&fonts> + \else% + in the preamble + \fi% + \MessageBreak but you have tried to set it up later.% + }% + }% + \TUD@key{#1}[]% + {% + \csuse{tud@key@#1@error} + \FamilyKeyStateProcessed% + }% +} +% \end{macrocode} +% \end{macro}^^A \TUD@key@toolate +% +% +% \iffalse +%</class&!inherit|package&fonts> +%</execute> +%<*body> +% \fi +% +% \subsection{Anpassungen für das Paket \pkg{textcase}} +% +% \begin{macro}{\@uclcnotmath} +% \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 +% Damit Fußnoten innerhalb von \cs{MakeTextUppercase} nicht in Majuskeln +% gesetzt werden, wird der interne Befehl \cs{@uclcnotmath} aus dem Paket +% \pkg{textcase} angepasst. +% \begin{macrocode} +\if@tud@cdoldfont@active + \RequirePackage{textcase}[2004/10/07] + \AfterPackage*{textcase}{% + \robustify\NoCaseChange% + \newcommand*\tud@x@textcase@uclcnotmath{% + \@nonchangecase\hologo% + \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}}% + }% +\fi +\TUD@deprecated@cs{NoCaseChange}{@firstofone} +% \end{macrocode} +% \end{macro}^^A \tud@x@textcase@uclcnotmath +% \end{macro}^^A \@uclcnotmath +% +% \iffalse +%</body> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-pagestyle.dtx b/macros/latex/contrib/tudscr/source/tudscr-pagestyle.dtx new file mode 100644 index 0000000000..e6cb0a94e4 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-pagestyle.dtx @@ -0,0 +1,2785 @@ +% \CheckSum{2044} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-pagestyle.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-pagestyle.dtx}[2019/08/20 v2.06c TUD-Script\space% + (pagestyle)% +] +% +% \iffalse +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-pagestyle.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \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}{Seitenstil für Poster}^^A +% +% \section{Der Seitenstil des \CDs} +% +% Es wird der Seitenstil des \CD der \TnUD mit Logo und dem charakteristischen +% Querbalken im Kopfbereich definiert. Hierfür kommt das \KOMAScript-Paket +% \pkg{scrlayer-scrpage} zum Einsatz. +% \ToDo{Abhängigkeiten Satzspiegel<>Seitenstil beseitigen}[v2.07] +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*class&body> +% \fi +% +% \subsection{Definition des Seitenstils mit dem Paket \pkg{scrlayer-scrpage}} +% +% Ein zentraler Bestandteil von \TUDScript ist der Seitenkopf des \CDs. Dieser +% wird ab der Version~v2.02 mit Hilfe des Paketes \pkg{scrlayer-scrpage} +% erzeugt. Dafür werden einzelnene Seitenstile erstellt, welche zum einen von +% verschiedenen Befehlen wie beispielsweise von\cs{maketitle} oder \cs{part} +% bzw. \cs{addpart} genutzt werden. Zum anderen kann der Anwender selbst diese +% entweder direkt über die Wahl des Seitenstils oder aber mit der +% \env{tudpage}-Umgebung nutzen. +% +% Ist die Klasse \cls{standalone} zusammen mit der Option \opt{crop} aktiv, +% werden die Seitenränder auf die Einstellungen dieser Klasse gesetzt und das +% Laden von \pkg{scrlayer-scrpage} verhindert. +% \begin{macrocode} +\if@tud@x@standalone@crop + \PreventPackageFromLoading{scrlayer-scrpage}% +\else + \AtEndPreamble{\RequirePackage{scrlayer-scrpage}[2013/12/14]}% +\fi +% \end{macrocode} +% Für das Erzeugen der Seitenstile wird das Paket \pkg{scrlayer-scrpage} +% genutzt. Mit diesem können verschiedene Ebenen erstellt werden, aus welchen +% anschließend der eigentliche Seitenstil zusammengesetzt wird. Dabei werden +% verschiedene, sogenannte Layers respektive Ebenen für die einzelnen Elemente +% auf einer Seite erstellt. +% \begin{macrocode} +\AfterPackage{scrlayer-scrpage}{% +% \end{macrocode} +% \begin{layerpagestyle}{tudheadings} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{layerpagestyle}{plain.tudheadings} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{layerpagestyle}{empty.tudheadings} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Es wird ein neuer Seitenstil kreiert, der das \CD der \TnUD mit der +% prägenden Kopfzeile umsetzt. Dabei soll dieser Kopf auch verwendbar sein, +% wenn nicht die vom \CD vorgeschriebenen Seitenränder sondern das Paket +% \pkg{typearea} genutzt wird. Dafür wird das Logo im Kopf so wie im \CD +% vorgesehen mit dem Logo der \TnUD in den Rand und dem Schriftzug bündig zum +% Textblock gesetzt. +% \begin{layer}{tudheadings.head.content} +% \changes{v2.04}{2015/05/31}{neu}^^A +% Dies sind das links aus dem Satzspiegel verschobene Logo der \TnUD und das +% Zweitlogo. Diese werden seit der Version~v2.04 nicht mehr in zwei getrennten +% sondern in einer gemeinsamen Ebene gesetzt. +% \begin{macrocode} + \DeclareNewLayer[% + background,headsep,% + addhoffset=\dimexpr\tud@len@logox-\tud@len@widemargin\relax,% + addwidth=\dimexpr-\tud@len@logox+\tud@len@widemargin\relax,% + voffset=\tud@len@logoy,% + addvoffset=\tud@len@layoutvoffset,% + contents={% +% \end{macrocode} +% Vor der Ausgabe der Logoboxen werden diese im Bedarfsfall neu gesetzt. +% \begin{macrocode} + \tud@mainlogo@set% + \tud@headlogo@option@set% + \tud@mainlogo@use\hfill\tud@headlogo@use% + },% + ]{tudheadings.head.content}% +% \end{macrocode} +% \end{layer}^^A tudheadings.head.content +% \begin{layer}{tudheadings.head.back} +% \changes{v2.03}{2015/02/14}{neu}^^A +% \begin{layer}{tudheadings.head.bar} +% \changes{v2.03}{2015/02/14}{neu}^^A +% \changes{v2.05}{2015/07/14}{Bugfix verschobener Balken}^^A +% Außerdem gibt es eine Variante ohne Querbalken-Outline. Stattdessen werden +% der Querbalken und der darüberliegende Kopf farbig abgesetzt. +% \begin{macrocode} + \DeclareNewLayer[% + background,% + width=\dimexpr\tud@len@layoutwidth+\tud@dim@bleedmargin*2\relax,% + addhoffset=\dimexpr\tud@len@layouthoffset-\tud@dim@bleedmargin\relax,% + height=\dimexpr\tud@len@topmargin+\tud@dim@bleedmargin\relax,% + addvoffset=\dimexpr\tud@len@layoutvoffset-\tud@dim@bleedmargin\relax,% + contents={% + \ifnum\tud@head@bar@num>\tw@\relax% cdhead=color + \color{HKS41}% + \rule{\layerwidth}{\layerheight}% + \fi% + },% + ]{tudheadings.head.back}% + \DeclareNewLayer[% + background,% + width=\dimexpr\tud@len@layoutwidth+\tud@dim@bleedmargin*2\relax,% + addhoffset=\dimexpr\tud@len@layouthoffset-\tud@dim@bleedmargin\relax,% + height=\tud@len@barheight,% + voffset=\tud@len@topmargin,% + addvoffset=\tud@len@layoutvoffset,% + contents={% + \ifnum\tud@head@bar@num>\@ne\relax% cdhead=barcolor/color + \color{HKS41!60}% + \setlength\@tempdima{\dimexpr\ht\strutbox-\tud@len@barheight\relax}% + \ifdim\@tempdima<\z@\relax\setlength\@tempdima{\z@}\fi% + \raisebox{\@tempdima}{\rule{\layerwidth}{\layerheight}}% + \fi% + },% + ]{tudheadings.head.bar}% +% \end{macrocode} +% \end{layer}^^A tudheadings.head.bar +% \end{layer}^^A tudheadings.head.back +% \begin{layer}{tudheadings.head.text} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Fakultät, Einrichtung, Institut und Lehrstuhl als Inhalt des Querbalkens. +% \begin{macrocode} + \DeclareNewLayer[% + background,headsep,% + voffset=\dimexpr\tud@len@topmargin+\tud@len@line\relax,% + addvoffset=\tud@len@layoutvoffset,% + contents={% + \tud@head@font@set% + \tud@head@text@set% + \tud@head@text@box% + },% + ]{tudheadings.head.text}% +% \end{macrocode} +% \end{layer}^^A tudheadings.head.text +% \begin{layer}{tudheadings.head.upline} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{layer}{tudheadings.head.lowline} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{layer}{tudheadings.head.uplinewide} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{layer}{tudheadings.head.lowlinewide} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Die Ebenen für obere und untere Linie des Querbalkens sowohl in der normalen +% Version, welche den Textbereich überspannt als auch in der Variante über die +% komplette Seitenbreite. Dabei muss für beide Varianten der entsprechenden +% horizontale Versatz beachtet werden. Dafür wird ggf. der Parameter \val{head} +% von \pkg{scrlayer-scrpage} verwendet. +% \begin{macrocode} + \DeclareNewLayer[% + background,headsep,% + voffset=\dimexpr\tud@len@topmargin-.5\tud@len@line\relax,% + addvoffset=\tud@len@layoutvoffset,% + contents={% + \ifnum\tud@head@bar@num<\tw@\relax% cdhead=nocolor/litecolor + \if@tud@head@widebar\else\tud@head@rule{\layerwidth}\fi% + \fi% + },% + ]{tudheadings.head.upline}% + \DeclareNewLayer[% + background,headsep,% + voffset=\dimexpr\tud@len@topmargin+\tud@len@barheight% + -.5\tud@len@line\relax,% + addvoffset=\tud@len@layoutvoffset,% + contents={% + \ifnum\tud@head@bar@num<\tw@\relax% cdhead=nocolor/litecolor + \if@tud@head@widebar\else\tud@head@rule{\layerwidth}\fi% + \fi% + },% + ]{tudheadings.head.lowline}% + \DeclareNewLayer[% + background,% + width=\dimexpr\tud@len@layoutwidth+\tud@dim@bleedmargin*2\relax,% + addhoffset=\dimexpr\tud@len@layouthoffset-\tud@dim@bleedmargin\relax,% + voffset=\dimexpr\tud@len@topmargin-.5\tud@len@line\relax,% + addvoffset=\tud@len@layoutvoffset,% + contents={% + \ifnum\tud@head@bar@num<\tw@\relax% cdhead=nocolor/litecolor + \if@tud@head@widebar\tud@head@rule{\layerwidth}\fi% + \fi% + },% + ]{tudheadings.head.uplinewide}% + \DeclareNewLayer[% + background,% + width=\dimexpr\tud@len@layoutwidth+\tud@dim@bleedmargin*2\relax,% + addhoffset=\dimexpr\tud@len@layouthoffset-\tud@dim@bleedmargin\relax,% + voffset=\dimexpr\tud@len@topmargin+\tud@len@barheight% + -.5\tud@len@line\relax,% + addvoffset=\tud@len@layoutvoffset,% + contents={% + \ifnum\tud@head@bar@num<\tw@\relax% cdhead=nocolor/litecolor + \if@tud@head@widebar\tud@head@rule{\layerwidth}\fi% + \fi% + },% + ]{tudheadings.head.lowlinewide}% +% \end{macrocode} +% \end{layer}^^A tudheadings.head.lowlinewide +% \end{layer}^^A tudheadings.head.uplinewide +% \end{layer}^^A tudheadings.head.lowline +% \end{layer}^^A tudheadings.head.upline +% \begin{layer}{tudheadings.head.date} +% \changes{v2.05}{2016/05/27}{neu}^^A +% Optionales Datum rechts oberhalb des Textbereiches. +% \begin{macrocode} + \DeclareNewLayer[% + foreground,headsep,% + addvoffset=.5\tud@len@headsep,% + height=\baselineskip,% + contents={\if@tud@head@date\hfill\tud@date@print\fi},% + ]{tudheadings.head.date}% +% \end{macrocode} +% \end{layer}^^A tudheadings.head.date +% \begin{layer}{tudheadings.foot.back} +% \changes{v2.03}{2015/02/15}{neu}^^A +% \begin{layer}{tudheadings.foot.logo} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \changes{v2.04}{2015/05/31}{neu}^^A +% \changes{v2.03}{2015/02/15}{überarbeitetet}^^A +% \begin{layer}{tudheadings.foot.content} +% \changes{v2.04}{2015/04/21}{neu}^^A +% \changes{v2.05}{2015/07/06}{Bugfix für Kompatibilitätsmodus}^^A +% Die folgenden Ebenen dienen für die Ausgabe des Fußbereiches. Dieser kann mit +% einem farbigen Hintergrund und zusätzlichen Logos (\cs{footlogo}) sowie frei +% wählbare Inhalte ein- oder zweispaltig mit \cs{footcontent} erstellt werden. +% Dabei werden die Ebenen in Abhängigkeit vom gewählten Kompatibilitätsmodus +% unterschiedlich definiert. Die erste Ebene bestimmt die Hintergrundgestaltung +% des Fußbereiches. +% \begin{macrocode} + \DeclareNewLayer[% + background,foot,% + width=\dimexpr\tud@len@layoutwidth+\tud@dim@bleedmargin*2\relax,% + hoffset=\dimexpr\tud@len@layouthoffset-\tud@dim@bleedmargin\relax,% + height=\dimexpr\tud@len@layoutheight-\layeryoffset% + +\tud@len@layoutvoffset+\tud@dim@bleedmargin\relax,% + addvoffset=-\dp\strutbox,% + contents={% + \if@tud@foot@colored% + \let\@tempc\relax% + \ifdefvoid{\tud@pagecolor}{% + \ifcase\tud@head@bar@num\relax\or% cdhead=litecolor + \def\@tempc{\color{HKS41!60}}% + \or% cdhead=barcolor + \def\@tempc{\color{HKS41!60}}% + \or% cdhead=color + \def\@tempc{\color{HKS41}}% + \fi% + }{% + \def\@tempc{\color{HKS41}}% + \ifstr{\tud@pagecolor}{HKS41}{\def\@tempc{\color{HKS41!60}}}{}% + }% + \ifx\@tempc\relax\else% + \@tempc\rule{\layerwidth}{\layerheight}% + \fi% + \fi% + },% + ]{tudheadings.foot.back}% +% \end{macrocode} +% Bis zur Version~v2.02 wurde für die Verwendung des \DDC-Logos der Satzspiegel +% geändert. Hier wird dem Rechnung getragen, indem der farbige Hintergrund im +% Zweifelsfall vergrößert wird. +% \begin{macrocode} + \tud@if@v@lower{2.03}{% + \ModifyLayer[% + addvoffset=-\tud@len@ddcdiff+\ht\strutbox,% + contents={% + \if@tud@foot@colored% + \let\@tempc\relax% + \ifdefvoid{\tud@pagecolor}{% + \ifcase\tud@head@bar@num\relax\or\or% cdhead=barcolor + \def\@tempc{\color{HKS41!60}}% + \or% cdhead=color + \def\@tempc{\color{HKS41}}% + \fi% + }{% + \def\@tempc{\color{HKS41}}% + \ifstr{\tud@pagecolor}{HKS41}{\def\@tempc{\color{HKS41!60}}}{}% + }% + \ifx\@tempc\relax\else% + \tud@ddc@check% + \ifcase\@tempb\relax% \tud@ddc@foot@num=false + \vbox to \layerheight{% + \vfil\@tempc% + \rule{\layerwidth}{% + \dimexpr\layerheight-\tud@len@ddcdiff+\ht\strutbox\relax% + }% + }% + \else% \tud@ddc@foot@num!=false + \@tempc\rule{\layerwidth}{\layerheight}% + \fi% + \fi% + \fi% + },% + ]{tudheadings.foot.back}% + }{}% +% \end{macrocode} +% Die zweite Ebene wird für die Ausgabe von Drittlogos und des \DDC-Logos sowie +% freien Inhalten im Seitenfuß erstellt. Ab Version~v2.03 wird der Satzspiegel +% so gewählt, dass das \DDC-Logo und andere Inhalten in den normalen Seitenfuß +% passen. +% \begin{macrocode} + \DeclareNewLayer[% + background,foot,% + height=\dimexpr\tud@len@layoutheight-\layeryoffset% + +\tud@len@layoutvoffset\relax,% + contents={% +% \end{macrocode} +% Falls die Höhe der Logos im Fuß nicht durch den Anwender festgelegt wurden, +% werden passende Standardwerte gesetzt. Außerdem wird die genutzte Höhe des +% Layers nicht vollständig genutzt, um bei einem farbigen Fußbereich einen +% gewissen Abstand vom Inhalt zur Kante zu erhalten. +% \begin{macrocode} + \TUD@deprecated@lengthcs[% + \global\@tud@footlogo@option@settrue% + ]{footlogoheight}% + \setlength\@tempdima{\dimexpr\layerheight-\dp\strutbox\relax}% +% \end{macrocode} +% Im Bedarfsfall werden die Boxen vor der Ausgabe durch die einzelnen +% \cs{\dots{}@use}-Befehle neu gesetzt. Danach erfolgt die Ausgabe, wobei die +% Boxen übereinander gelegt werden. +% \begin{macrocode} + \tud@footlogo@cmd@use{\@tempdima}{\layerwidth}% + \tud@footlogo@ddc@use{\@tempdima}{\layerwidth}% + \tud@footcontent@use{\@tempdima}{\layerwidth}% + },% + ]{tudheadings.foot.content}% +% \end{macrocode} +% Bis zur Version~v2.02 wurde für die Verwendung des \DDC-Logos der Satzspiegel +% geändert. Hier wird dem Rechnung getragen. +% \begin{macrocode} + \tud@if@v@lower{2.03}{% + \ModifyLayer[% + addvoffset=-\tud@len@ddcdiff+\ht\strutbox,% + contents={% + \TUD@deprecated@lengthcs[% + \global\@tud@footlogo@option@settrue% + ]{footlogoheight}% + \setlength\@tempdima{\dimexpr\layerheight-\dp\strutbox\relax}% + \tud@ddc@check% + \ifcase\@tempb\relax% \tud@ddc@foot@num=false + \addtolength\@tempdima{\dimexpr\ht\strutbox-\tud@len@ddcdiff\relax}% + \vskip\dimexpr\tud@len@ddcdiff-\ht\strutbox-\baselineskip\relax% + \fi% + \tud@footlogo@cmd@use{\@tempdima}{\layerwidth}% + \tud@footlogo@ddc@use{\@tempdima}{\layerwidth}% + \tud@footcontent@use{\@tempdima}{\layerwidth}% + },% + ]{tudheadings.foot.content}% + }{}% +% \end{macrocode} +% \end{layer}^^A tudheadings.foot.content +% \end{layer}^^A tudheadings.foot.logo +% \end{layer}^^A tudheadings.foot.back +% \begin{layer}{tudheadings.last} +% \changes{v2.04}{2015/04/02}{neu}^^A +% Die letzte Ebene dient nicht der Ausgabe eines bestimmten Inhaltes sondern +% wird für evtl. notwendige Aufräumarbeiten etc. bereitgehalten. +% \begin{macrocode} + \DeclareNewLayer[% + background,% +% \end{macrocode} +% Falls ein Kapitel ohne die Option \opt{chapterpage} gesetzt wird und dennoch +% die Gestalt des Kopfes des \pgs{tudheadings}-Seitenstils sich vom restlichen +% Dokument unterscheiden soll (\opt{cd} bzw. \opt{cdchapter}), so dient das +% Makro \cs{tud@head@bar@restore} zum Zurücksetzen auf das normale Verhalten. +% Siehe \cs{tud@chapter@app}. +% \begin{macrocode} +%<book|report> contents=\tud@head@bar@restore,% + ]{tudheadings.last}% +% \end{macrocode} +% \end{layer}^^A tudheadings.last +% Aus den zuvor erstellten Ebenen werden jetzt die eigentlichen Seitenstile +% zusammengesetzt. Als erstes wird der \pgs{headings}-Seitenstil definiert. +% Dieser verwendet den TUD-Kopf und die Fußzeilenebenen des Seitenstils +% \pgs{scrheadings}, welche zur Definition des Seitenstils verwendet werden. +% Beim Aktivieren des Seitenstils wird außerdem \cs{tud@ps@init} ausgeführt. +% Damit die Benutzerschnittstelle von \pkg{scrlayer-scrpage} für die Fußzeile +% weiterhin durch den Anwender verwendet werden kann, werden wie erwähnt die +% entsprechenden \pgs{scrheadings}-Ebenen verwendet. +% \begin{macrocode} + \DeclareNewPageStyleByLayers[% + onselect=\tud@ps@onselect,onbackground=\tud@ps@onbackground% + ]{tudheadings}{% + tudheadings.head.back,% + tudheadings.head.content,% + tudheadings.head.bar,% + tudheadings.head.text,% + tudheadings.head.upline,% + tudheadings.head.lowline,% + tudheadings.head.uplinewide,% + tudheadings.head.lowlinewide,% + tudheadings.head.date,% + tudheadings.foot.back,% + tudheadings.foot.content,% + tudheadings.last,% + scrheadings.foot.odd,% + scrheadings.foot.even,% + scrheadings.foot.oneside,% + scrheadings.foot.above.line,% + scrheadings.foot.below.line% + }% +% \end{macrocode} +% Zuletzt werden Aliasnamen für den Seitenstil definiert. +% \begin{macrocode} + \DeclareNewPageStyleAlias{tud}{tudheadings}% + \DeclareNewPageStyleAlias{tudscr}{tudheadings}% + \DeclareNewPageStyleAlias{tudscrheadings}{tudheadings}% +% \end{macrocode} +% Für den \pgs{plain}-Seitenstil wird ebenso verfahren. Hier werden für die +% Fußzeilenebenen des Seitenstils \pgs{plain.scrheadings} hinzugefügt. +% \begin{macrocode} + \DeclareNewPageStyleByLayers[% + onselect=\tud@ps@onselect,onbackground=\tud@ps@onbackground% + ]{plain.tudheadings}{% + tudheadings.head.back,% + tudheadings.head.content,% + tudheadings.head.bar,% + tudheadings.head.text,% + tudheadings.head.upline,% + tudheadings.head.lowline,% + tudheadings.head.uplinewide,% + tudheadings.head.lowlinewide,% + tudheadings.head.date,% + tudheadings.foot.back,% + tudheadings.foot.content,% + tudheadings.last,% + plain.scrheadings.foot.odd,% + plain.scrheadings.foot.even,% + plain.scrheadings.foot.oneside,% + plain.scrheadings.foot.above.line,% + plain.scrheadings.foot.below.line% + }% + \DeclareNewPageStyleAlias{plain.tudscrheadings}{plain.tudheadings}% + \DeclareNewPageStyleAlias{tudplain}{plain.tudheadings}% + \DeclareNewPageStyleAlias{tudscrplain}{plain.tudheadings}% + \DeclareNewPageStyleAlias{tudheadingsplain}{plain.tudheadings}% + \DeclareNewPageStyleAlias{tudscrheadingsplain}{plain.tudheadings}% +% \end{macrocode} +% Des Weiteren gibt es einen selbstständigen \enquote{leeren} Seitenstil, der +% lediglich aus dem Kopf besteht und einen lerren Seitenfuß hat. +% \begin{macrocode} + \DeclareNewPageStyleByLayers[% + onselect=\tud@ps@onselect,onbackground=\tud@ps@onbackground% + ]{empty.tudheadings}{% + tudheadings.head.back,% + tudheadings.head.content,% + tudheadings.head.bar,% + tudheadings.head.text,% + tudheadings.head.upline,% + tudheadings.head.lowline,% + tudheadings.head.uplinewide,% + tudheadings.head.lowlinewide,% + tudheadings.head.date,% + tudheadings.foot.back,% + tudheadings.foot.content,% + tudheadings.last% + }% + \DeclareNewPageStyleAlias{empty.tudscrheadings}{empty.tudheadings}% + \DeclareNewPageStyleAlias{tudempty}{empty.tudheadings}% + \DeclareNewPageStyleAlias{tudscrempty}{empty.tudheadings}% + \DeclareNewPageStyleAlias{tudheadingsempty}{empty.tudheadings}% + \DeclareNewPageStyleAlias{tudscrheadingsempty}{empty.tudheadings}% +% \end{macrocode} +% \begin{layer}{tudheadings.pagecolor} +% \changes{v2.03}{2015/01/09}{neu}^^A +% Um farbige Titel- Teil- und Kapitelseiten \emph{unabhängig} vom aktuell +% verwendeten Seitenstil erstellen zu können, wird die zusätzliche Ebene +% \val{tudheadings.pagecolor} definiert, die \emph{allen} Seitenstilen +% hinzugefügt wird. Dabei dient das Makros \cs{tud@pagecolor} zum Umschalten +% der Hintergrundfarben. +% \begin{macrocode} + \DeclareNewLayer[% + background,% + area=% + {\dimexpr\tud@len@layouthoffset-\tud@dim@bleedmargin\relax}% + {\dimexpr\tud@len@layoutvoffset-\tud@dim@bleedmargin\relax}% + {\dimexpr\tud@len@layoutwidth+\tud@dim@bleedmargin*2\relax}% + {\dimexpr\tud@len@layoutheight+\tud@dim@bleedmargin*2\relax}% + ,% + contents={% + \ifdefvoid{\tud@pagecolor}{}{% + \color{\tud@pagecolor}% + \rule{\layerwidth}{\layerheight}% + }% + },% + ]{tudheadings.pagecolor}% + \AddLayersToPageStyle{@everystyle@}{tudheadings.pagecolor}% +% \end{macrocode} +% \end{layer}^^A tudheadings.pagecolor +% Damit wurden alle Ebenen und die darauf aufbauenden Seitenstile deklariert. +% \end{layerpagestyle}^^A empty.tudheadings +% \end{layerpagestyle}^^A plain.tudheadings +% \end{layerpagestyle}^^A tudheadings +% Damit ist die Deklaration der Seitenstile mit \pkg{scrlayer-scrpage} beendet. +% \begin{macrocode} +} +% \end{macrocode} +% +% \subsubsection{Erweitertung der Seitenstilauswahl} +% +% Da sich die zuvor definierten Seitenstile von den Standardseitenstilen stark +% unterscheiden und auch einen separaten Satzspiegel benötigen, sind einige +% Makros zur Kontrollstrukturierung notwendig. +% +% \begin{macro}{\tud@if@tudheadings} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{macro}{\tud@ps@list} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Mit dem Befehl \cs{tud@if@tudheadings} kann geprüft werden, ob der im ersten +% Argument gegebene Seitenstil~-- was auch das Makro \cs{currentpagestyle} sein +% kann, welches durch das Paket \pkg{scrlayer-scrpage} definiert wird und den +% aktuellen Seitenstil beinhaltet~-- einem aus der Liste \cs{tud@ps@list} +% entspricht. Ist dies der Fall, wird das zweite Argument ausgeführt, +% anderfalls das dritte. In die Liste \cs{tud@ps@list} werden die drei zuvor +% definierten Seitenstile eingetragen. +% \begin{macrocode} +\newcommand*\tud@ps@list{} +\listadd\tud@ps@list{tudheadings} +\listadd\tud@ps@list{plain.tudheadings} +\listadd\tud@ps@list{empty.tudheadings} +\newcommand*\tud@if@tudheadings[3]{% + \xifinlist{\GetRealPageStyle{#1}}{\tud@ps@list}{#2}{#3}% +} +% \end{macrocode} +% \end{macro}^^A \tud@ps@list +% \end{macro}^^A \tud@if@tudheadings +% \begin{macro}{\thispagestyle} +% \changes{v2.03}{2015/01/20}{Auswahl eines Aliasseitenstils unterdrückt}^^A +% Wird der Befehl \cs{thispagestyle} verwendet, muss dafür Sorge getragen +% werden, dass kein Alias-Seitenstil expandiert wird. +% \begin{macrocode} +\patchcmd{\thispagestyle}{\gdef\@specialstyle{#1}}{% + \xdef\@specialstyle{\GetRealPageStyle{#1}}% +}{}{\tud@patch@wrn{thispagestyle}} +% \end{macrocode} +% \end{macro}^^A \thispagestyle +% \begin{macro}{\pagestyle} +% \changes{v2.04}{2015/06/18}{Aktivierung der Seitenstile \pgs{tudheadings} vor +% \pkg{scrlayer-scrpage} möglich}^^A +% \begin{macro}{\tud@pagestyle} +% \changes{v2.04}{2015/06/18}{neu} +% Für den Fall, dass das Paket \pkg{scrlayer-scrpage} nicht geladen wird und +% dennoch das Makro \cs{currentpagestyle} wie erwartet definiert ist, wird der +% originale Befehl etwas angepasst. +% \begin{macrocode} +\newcommand*\tud@pagestyle{} +\let\tud@pagestyle\pagestyle +\newcommand*\currentpagestyle{plain} +\pretocmd{\tud@pagestyle}{% + \tud@BeforeSelectAnyPageStyle{#1}% + \edef\currentpagestyle{#1}% +}{}{\tud@patch@wrn{pagestyle}} +% \end{macrocode} +% Damit die neuen Seitenstile auch vor dem Laden von \pkg{scrlayer-scrpage} +% bereits durch den Anwender ausgewählt werden können, wird \cs{pagestyle} +% temporär zurechtgebogen. Die Definition des Makros wird gesichert und direkt +% vor dem Laden des Paketes wiederhergestellt. Damit werden die Seitenstile +% erst aktiviert, nachdem diese auch tatsächlich erstellt wurden. +% \begin{macrocode} +\tud@cs@store{pagestyle} +\renewcommand*\pagestyle[1]{\AfterPackage!{scrlayer-scrpage}{\pagestyle{#1}}} +\BeforePackage{scrlayer-scrpage}{% + \tud@cs@restore{pagestyle}% + \undef\tud@pagestyle% + \undef\currentpagestyle% +} +% \end{macrocode} +% \end{macro}^^A \tud@pagestyle +% \end{macro}^^A \pagestyle +% Die Seitenstile und Satzspiegel korrelieren sehr stark, weshalb das Paket +% \pkg{scrlayer-scrpage} geladen sein muss und auch alle darauf aufbauenden +% Einstellungen abgeschlossen sein müssen, um die Satzspiegel zu definieren. +% \ToDo{Abhängigkeiten Satzspiegel<>Seitenstil beseitigen}[v2.07] +% \begin{macrocode} +\AfterPackage!{scrlayer-scrpage}{\AtEndPreamble{\tud@cdgeometry@init}} +% \end{macrocode} +% \begin{macro}{\ps@tudheadings} +% \begin{macro}{\ps@plain.tudheadings} +% \begin{macro}{\ps@empty.tudheadings} +% \begin{macro}{\currentpagestyle} +% \begin{macro}{\BeforeSelectAnyPageStyle} +% \begin{macro}{\GetRealPageStyle} +% Um die rudimentäre Verwendung der Klassen auch zu ermöglichen, wenn das Laden +% des Paketes \pkg{scrlayer-scrpage} verhindert wurde, werden für diesen Fall +% einige notwendige Makros definiert. +% \begin{macrocode} +\TUD@UnwindPackage{scrlayer-scrpage}{% + \ifcsundef{if@chapter}{% + \newif\if@chapter% + \ifcsundef{chapter}{\@chapterfalse}{\@chaptertrue}% + }{}% + \cslet{ps@tudheadings}{\ps@headings}% + \cslet{ps@plain.tudheadings}{\ps@plain}% + \cslet{ps@empty.tudheadings}{\ps@empty}% + \providecommand*\currentpagestyle{plain}% + \providecommand*\BeforeSelectAnyPageStyle[1]{}% + \providecommand*\GetRealPageStyle[1]{#1}% +% \end{macrocode} +% Außerdem wird die angepasste Definition von \cs{pagestyle} verwendet. +% \begin{macrocode} + \let\pagestyle\tud@pagestyle% + \undef\tud@pagestyle% +% \end{macrocode} +% Das Erstellen des Satzsiegels erfolgt normalerweise nach dem Paket. +% \begin{macrocode} + \tud@cdgeometry@init% +} +% \end{macrocode} +% \end{macro}^^A \GetRealPageStyle +% \end{macro}^^A \BeforeSelectAnyPageStyle +% \end{macro}^^A \currentpagestyle +% \end{macro}^^A \ps@empty.tudheadings +% \end{macro}^^A \ps@plain.tudheadings +% \end{macro}^^A \ps@tudheadings +% \begin{macro}{\tud@ps@onselect} +% \changes{v2.03}{2015/01/09}{neu}^^A +% Der Befehl wird bei der Initialisierung der Seitenstile aufgerufen. +% \begin{macrocode} +\newcommand*\tud@ps@onselect{% +% \end{macrocode} +% Normalerweise werden durch \pkg{scrlayer-scrpage} bei der Umschaltung auf +% einen mit dem Befehl \cs{newpairofpagestyles}\marg{Seitenstil} definierten +% Seitenstil, die Seitenstile \pgs{headings} und \pgs{plain} als Aliase für +% \pgs{\meta{Seitenstil}} und \pgs{plain.\meta{Seitenstil}} festgelegt. +% Allerdings definiert dieser Befehl zusätzliche Ebenen für Kopf- und Fußzeile, +% weshalb auf die Verwendung verzichtet wird. Das automatische Umschalten soll +% dennoch ermöglicht werden. +% \begin{macrocode} + \DeclarePageStyleAlias{plain}{plain.tudheadings}% + \DeclarePageStyleAlias{headings}{tudheadings}% + \def\sls@currentheadings{tudheadings}% + \def\sls@currentplain{plain.tudheadings}% +} +% \end{macrocode} +% \end{macro}^^A \tud@ps@onselect +% +% \subsubsection{Gestaltungsvarianten für Kopf- und Fußzeile} +% +% \begin{macro}{\tud@ps@onbackground} +% \changes{v2.03}{2015/02/14}{neu}^^A +% \changes{v2.04}{2015/04/21}{Kopf- und Fußeinstellungen abhängig von der Farbe +% des Seitenhintergrunds}^^A +% \begin{macro}{\tud@head@logocolor} +% \begin{macro}{\tud@head@fontcolor} +% \changes{v2.04}{2015/05/18}{neu}^^A +% \begin{macro}{\tud@foot@logocolor} +% \changes{v2.03}{2015/02/15}{neu}^^A +% \begin{macro}{\tud@foot@fontcolor} +% \changes{v2.04}{2015/04/21}{neu}^^A +% Das Makro \cs{tud@head@logocolor} enthält die Farbe des Kopfes. Die Gestalt +% des Querbalkens kann über die Option \opt{cdhead} geändert werden. Für Titel, +% Teil und Kapitel gibt es speziell dazugehörige Optionen, womit das Aussehen +% des Kopfes ggf. angepasst werden kann. Mit \cs{tud@foot@logocolor} kann +% die Farbe eines etwaigen \DDC-Logo gleichermaßen festgelegt werden, in +% \cs{tud@foot@fontcolor} wird ggf. die Schriftfarbe für den Fuß gespeichert. +% Um die Optionen innerhalb des Dokumentes ändern zu können, werden die +% Anpassungen bei jeder Ausgabe eines Seitenstiles mit \cs{tud@ps@onbackground} +% ausgeführt. +% \begin{macrocode} +\newcommand*\tud@head@logocolor{black} +\newcommand*\tud@head@fontcolor{} +\newcommand*\tud@foot@logocolor{black} +\newcommand*\tud@foot@fontcolor{} +\newcommand*\tud@ps@onbackground{% +% \end{macrocode} +% Zunächst die Einstellungen für Seiten ohne spezielle Hintergrundfarbe für den +% Kopf\dots +% \begin{macrocode} + \ifdefvoid{\tud@pagecolor}{% + \ifcase\tud@head@bar@num\relax% cdhead=nocolor + \renewcommand*\tud@head@logocolor{black}% + \renewcommand*\tud@head@fontcolor{}% + \or% cdhead=litecolor + \renewcommand*\tud@head@logocolor{HKS41}% + \renewcommand*\tud@head@fontcolor{HKS41}% + \or% cdhead=barcolor + \renewcommand*\tud@head@logocolor{HKS41}% + \renewcommand*\tud@head@fontcolor{white}% + \or% cdhead=color + \renewcommand*\tud@head@logocolor{white}% + \renewcommand*\tud@head@fontcolor{white}% + \fi% +% \end{macrocode} +% \dots und den Fuß. +% \begin{macrocode} + \ifcase\tud@head@bar@num\relax% cdhead=nocolor + \renewcommand*\tud@foot@logocolor{black}% + \renewcommand*\tud@foot@fontcolor{}% + \if@tud@foot@colored% + \ClassWarning{\TUD@Class@Name}{% + It isn't possible to use a colored foot together\MessageBreak% + with a non-colored head (`cdhead=nocolor')% + }% + \fi% + \else% cdhead=*color + \if@tud@foot@colored% + \renewcommand*\tud@foot@logocolor{white}% + \renewcommand*\tud@foot@fontcolor{white}% + \else% + \renewcommand*\tud@foot@logocolor{HKS41}% + \renewcommand*\tud@foot@fontcolor{HKS41}% + \fi% + \fi% + }{% +% \end{macrocode} +% Die Einstellungen für Seiten mit Hintergrundfarbe variieren davon. Zuerst die +% für farbige Titel- und Teileseiten\dots +% \begin{macrocode} + \tud@locked@bool@preset{@tud@head@widebar}{true}% + \ifstr{\tud@pagecolor}{HKS41}{% + \renewcommand*\tud@head@logocolor{white}% + \renewcommand*\tud@head@fontcolor{white}% + \renewcommand*\tud@foot@logocolor{white}% +% \end{macrocode} +% Die Farbe für die Schrift im Fuß wird für Poster immer weiß gesetzt, falls +% über die Option \opt{backcolor} für den Seitenhintergrund die primäre +% Hausfarbe genutzt wird. +% \begin{macrocode} +%<*book|report|article> + \if@tud@foot@colored% +%</book|report|article> + \renewcommand*\tud@foot@fontcolor{white}% +%<*book|report|article> + \else% + \renewcommand*\tud@foot@fontcolor{HKS41!30}% + \fi% +%</book|report|article> +% \end{macrocode} +% \dots sowie die für die farbigen Kapitelseiten. +% \begin{macrocode} + }{% + \renewcommand*\tud@head@logocolor{HKS41}% + \renewcommand*\tud@head@fontcolor{HKS41}% + \ifcase\tud@head@bar@num\relax\or\or\or% cdhead=color + \renewcommand*\tud@head@logocolor{white}% + \renewcommand*\tud@head@fontcolor{white}% + \fi% + \if@tud@foot@colored% + \renewcommand*\tud@foot@logocolor{white}% + \renewcommand*\tud@foot@fontcolor{white}% + \else% + \renewcommand*\tud@foot@logocolor{HKS41}% + \renewcommand*\tud@foot@fontcolor{HKS41}% + \fi% + }% + }% +% \end{macrocode} +% Abhängig von der eingestzten Schriftfarbe des Kopfes wird die Linienstärke +% des Querbalkens gesetzt, die Schriftfarbe des Fußes wird global geändert, +% damit Seitenzahl und Kolumnentitel gegebenenfalls angepasst werden. +% \begin{macrocode} + \let\tud@len@line\tud@len@thinline% + \ifstr{\tud@head@fontcolor}{white}{\let\tud@len@line\tud@len@heavyline}{}% + \global\let\tud@foot@fontcolor\tud@foot@fontcolor% +} +% \end{macrocode} +% \end{macro}^^A \tud@foot@fontcolor +% \end{macro}^^A \tud@foot@logocolor +% \end{macro}^^A \tud@head@fontcolor +% \end{macro}^^A \tud@head@logocolor +% \end{macro}^^A \tud@ps@onbackground +% +% \subsubsection{Inhalt des Querbalkens in der Kopfzeile} +% +% Mit dem Makro \cs{tud@head@font@set} wird die zu verwendende Schrift für den +% Querbalken definiert. Hier wird der zu verwendende Inhalt formatiert. +% +% \begin{macro}{\tud@head@text@line} +% \begin{macro}{\tud@head@text@list} +% \changes{v2.05}{2015/11/26}{neu}^^A +% \begin{macro}{\tud@head@text@delimiter} +% \begin{macro}{\tud@head@text@buffer} +% Diese Befehle sind Hilfsmakros, die bei der Erzeugung der Textzeile inner- und +% unterhalb des Querbalkens des TUD-Kopfes dienen. +% \begin{macrocode} +\newcommand*\tud@head@text@line{} +\newcommand*\tud@head@text@list{} +\newcommand*\tud@head@text@delimiter{} +\newcommand*\tud@head@text@buffer{} +% \end{macrocode} +% \end{macro}^^A \tud@head@text@buffer +% \end{macro}^^A \tud@head@text@delimiter +% \end{macro}^^A \tud@head@text@list +% \end{macro}^^A \tud@head@text@line +% \begin{macro}{\tud@head@text@add} +% \changes{v2.04}{2015/04/08}{Verwendung von \cs{protected@edef}}^^A +% \changes{v2.05}{2015/11/26}{Redesign}^^A +% Dieser Befehl dient zum Füllen einer Liste für die spätere Ausgabe der +% Kopfzeilenfelder. Es werden sequentiellalle potenziellen Felder hinzugefügt. +% Sollte das hinzuzufügende Feld dazu führen, dass der Text der Kopfzeile über +% den Seitenrand hinausragen würde, so wird eine weitere Zeile begonnen. Das +% Trennzeichen zwischen einzelnen Feldern muss gepuffert werden, da dieses nur +% gesetzt werden soll, wenn ein weiteres Feld nachfolgt. +% \begin{macrocode} +\newcommand*\tud@head@text@add[3][{, }]{% + \ifxblank{#3}{}{% + \edef\tud@head@text@delimiter{\expandonce\tud@head@text@buffer}% + \def\tud@head@text@buffer{#1}% + \edef\@tempa{% + \expandonce\tud@head@text@line% + \expandonce\tud@head@text@delimiter% + \etex@unexpanded{#2#3}% + }% +% \end{macrocode} +% Sollte das hinzuzufügende Feld die aktuelle Kopfzeile \cs{tud@head@text@line} +% über die Textbreite hinaus erweitern, wird der bisherige Inhalt in die Liste +% \cs{tud@head@text@list} gespeichert und eine neue mit dem aktuellen Inhalt +% begonnen. Andernfalls wird der aktuelle Inhalt dem bestehenden hinzugefügt. +% \begin{macrocode} + \settowidth\@tempdima{\@tempa}% + \ifdim\@tempdima>\textwidth\relax% + \listeadd\tud@head@text@list{\expandonce\tud@head@text@line}% + \protected@edef\tud@head@text@line{#2#3}% + \else% + \edef\tud@head@text@line{\expandonce\@tempa}% + \fi% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@head@text@add +% \begin{macro}{\tud@head@text@set} +% \changes{v2.05}{2015/11/28}{neu}^^A +% \begin{macro}{\tud@head@text@wrn} +% \begin{macro}{\if@tud@head@text@set} +% \changes{v2.05}{2015/11/28}{neu}^^A +% Für die Felder im Kopf wird bei einer Änderung dieser die Warnung bezüglich +% der zu großen Breite der Kopfinformationen, was bei kleinen Papierformaten +% geschehen kann, (re-)definiert. +% \begin{macrocode} +\newif\if@tud@head@text@set +\newcommand*\tud@head@text@wrn[1]{} +\newcommand*\tud@head@text@set{% + \if@tud@head@text@set% +% \end{macrocode} +% Der Inhalt der Kopfzeile wird durch die angegeben Fakultät etc. vorgegeben. +% Sollte der Platz in einer Zeile dafür nicht ausreichen, wird eine weitere +% Zeile begonnen. Ob diese benötigt wird, ist abhängig vom Inhalt und von der +% sich daraus ergebenden Breite der Textzeile. Das Erzeugen der einzelnen +% Textzeilen im Kopf, die in \cs{tud@head@text@list} gesichert werden, erfolgt +% mit \cs{tud@head@text@add}\oarg{Trennzeichen}\marg{Schrift}\marg{Feld}. Die +% dafür benötigten Hilfsmakros werden vor der Verwendung initialisiert. +% \begin{macrocode} + \let\tud@head@text@line\@empty% + \let\tud@head@text@list\@empty% + \let\tud@head@text@buffer\@empty% + \tud@head@text@add[\enskip]{\tud@head@font@bold}{\@faculty}% + \tud@head@text@add{\tud@head@font@light}{\@department}% + \tud@head@text@add{\tud@head@font@light}{\@institute}% + \tud@head@text@add{\tud@head@font@light}{\@chair}% +% \end{macrocode} +% Ganz zum Schluss wird der Rest aus \cs{tud@head@text@line} ebenso wie ggf. +% die zusätzliche Zeile in die Liste expandiert. +% \begin{macrocode} + \listeadd\tud@head@text@list{\expandonce\tud@head@text@line}% + \ifxblank{\@extraheadline}{}{% + \listadd\tud@head@text@list{\tud@head@font@light\@extraheadline}% + }% + \gdef\tud@head@text@wrn##1{% + \ClassWarning{\TUD@Class@Name}{% + The given entries for the headline\MessageBreak% + (faculty, institute etc.) are ##1\MessageBreak% + too wide for the textwidth% + }% + }% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@head@text@set +% \end{macro}^^A \tud@head@text@wrn +% \end{macro}^^A \tud@head@text@set +% \begin{macro}{\tud@head@text@box} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \changes{v2.03}{2015/01/09}{Zweite Zeile wird auch leer gesetzt.}^^A +% Dieser Befehl ist der Inhalt der Ebene für den Text der Kopfzeile. +% \begin{macrocode} +\newcommand*\tud@head@text@box{% +% \end{macrocode} +% Die Ausgabe der Textzeile(n) mit Fakultät etc. im Kopfbereiche erfolgt über +% das Makro \cs{tud@head@text@write}. Hierbei ist zu beachten, dass für die +% erste Zeile bei einem zweifarbigem Kopf eine andere Textfarbe als für die +% restlichen benötigt wird. Außerdem ist für diese aufgrund der Linien im +% Querbalken ein etwas größerer Abstand zur zweiten Zeile notwendig, weshalb +% die temporären Makros \cs{@tempb} und \cs{@tempc} einmalig genutzt werden. +% Die Farbe des Textes der ersten Zeile entspricht immer der des Kopfes. +% \begin{macrocode} + \def\@tempb{\tud@color{\tud@head@fontcolor}}% + \def\@tempc{\depth+\tud@len@heavyline}% +% \end{macrocode} +% Das Makro \cs{@tempa} wird zur Ababreitung der Liste \cs{tud@head@text@list} +% definiert. +% \begin{macrocode} + \def\@tempa##1{% + \settowidth\@tempdima{##1}% +% \end{macrocode} +% Sollte eine der Textzeilen zu lang sein, was insbesondere bei kleineren +% Papierformaten vorkommen kann, dann wird eine Warnung ausgegeben. +% \begin{macrocode} + \ifdim\@tempdima>\textwidth\relax% + \tud@head@text@wrn{\the\dimexpr\@tempdima-\textwidth\relax}% + \ifdim\dimexpr\@tempdima-\textwidth\relax>\hfuzz\relax% + \hfuzz=\dimexpr\@tempdima-\textwidth\relax% + \fi% + \fi% + \@tempb% + \tud@head@text@write[\@tempc]{##1}% + \def\@tempb{\newline}% + \def\@tempc{\z@}% +% \end{macrocode} +% Die weiteren Zeilen sind bei zweifarbigen Kopf normalerweise blau, nur für +% einen dunklen Seitenhintergrund weiß. +% \begin{macrocode} + \ifnum\tud@head@bar@num>\@ne\relax% cdhead=barcolor/color + \ifdefvoid{\tud@pagecolor}{\color{HKS41}}{% + \ifstr{\tud@pagecolor}{HKS41}{\color{white}}{\color{HKS41}}% + }% + \fi% + }% +% \end{macrocode} +% Dies ist nun die eigentliche Ausgabe, welche in einer vertikalen Box erfolgt. +% \begin{macrocode} + \vbox{% +% \end{macrocode} +% Das Paket \pkg{ragged2e} ändert im Zweifelsfall die Länge \cs{spaceskip}. Um +% den Kopf unbeeinflusst davon immer in der gleichen Gestalt erscheinen zu +% lassen, wird dies hier temporär unterdrückt. +% \begin{macrocode} + \let\@raggedtwoe@everyselectfont\relax% + \setlength\spaceskip{\z@}% + \selectfont% + \offinterlineskip% + \forlistloop\@tempa{\tud@head@text@list}% + }% + \global\let\tud@head@text@wrn\@gobble% +} +% \end{macrocode} +% \end{macro}^^A \tud@head@text@box +% \begin{macro}{\tud@head@text@write} +% \changes{v2.02}{2014/06/23}{Vertikaler Freiraum für Ober- und Unterlängen +% mit \cs{vphantom} eingefügt}^^A +% \changes{v2.02}{2014/12/04}{Zentrierung des Zeilentextes}^^A +% Befehl zur Ausgabe der ersten und evtl. zweiten Textzeile im TUD-Kopf +% \begin{macrocode} +\newcommand*\tud@head@text@write[2][\z@]{% + \raisebox{\dimexpr(\tud@len@barheight+2\tud@len@line-\totalheight)/2\relax}[% + \dimexpr\tud@len@barheight-\depth\relax% + ][\dimexpr#1\relax]{#2\vphantom{gjpqy\"A\"O\"U}}% +} +% \end{macrocode} +% \end{macro}^^A \tud@head@text@write +% \begin{macro}{\tud@head@rule} +% \changes{v2.02}{2014/06/23}{gewünschte Breite als Argument}^^A +% Der Querbalken des Kopfes läuft je nach Parameterwahl \cs{tud@head@bar@num} +% entweder nur über den Textbereich oder aber über die gesamte Seitenbreite. +% Der Befehl erzeugt eine horizontale Linie mit der übergebenen Breite und +% über \cs{tud@len@line} definierter Dicke. +% \begin{macrocode} +\newcommand*\tud@head@rule[1]{% + \tud@color{\tud@head@fontcolor}% + \rule[\ht\strutbox]{#1}{\tud@len@line}% +} +% \end{macrocode} +% \end{macro}^^A \tud@head@rule +% +% \subsubsection{Boxen für Layerinhalte} +% +% \begin{macro}{\tud@newlayerbox} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\tud@savelayerbox} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\tud@uselayerbox} +% \changes{v2.04}{2015/05/31}{neu}^^A +% Die Inhalte für Kopf und Fuß der \pgs{tudheadings}-Seitenstile~-- sprich das +% Logo der \TnUD, die \DDC-Logos, ein mögliches Zweilogo sowie die Logos und +% Inhalte im Fuß werden in Boxen gesetzt, um die Anzahl der benötigten Aufrufe +% von \cs{includegraphics} möglichst gering zu halten. +% \begin{macrocode} +\newcommand*\tud@newlayerbox[1]{% + \expandafter\newsavebox\csname tud@layer@#1\endcsname% +} +\newcommand*\tud@savelayerbox[1]{% + \global\expandafter\sbox\csname tud@layer@#1\endcsname% +} +\newcommand*\tud@uselayerbox[1]{% + \expandafter\usebox\csname tud@layer@#1\endcsname% +} +% \end{macrocode} +% \end{macro}^^A \tud@uselayerbox +% \end{macro}^^A \tud@savelayerbox +% \end{macro}^^A \tud@newlayerbox +% \begin{macro}{\tud@vlayerbox} +% \changes{v2.04}{2015/05/31}{neu}^^A +% Für die Ausgabe der Logos und Inhalte wird dieser Befehl definiert. Dieser +% setzt die im zweiten Argument angegebenen Inhalte in eine vertikale Box, +% deren gewünschte Höhe im ersten Argument angegeben wird. Für den Fall, dass +% die gewünschten Inhalte die maximale Höhe überschreiten, wird eine Warnung +% erzeugt. Der Inhalt dieser Warnung wird im dritten Argument angegeben. Damit +% soll dem Anwender geholfen werden, in diesem Fall die richtigen Maßnahmen zu +% ergreifen und nicht lediglich eine Meldung einer zu übervollen \cs{vbox} zu +% erhalten. +% \begin{macrocode} +\newcommand*\tud@vlayerbox[3]{% + \begingroup% + \setbox\z@\vbox{#2}% + \setlength\@tempdima{\dimexpr\ht\z@+\dp\z@-#1\relax}% + \ifdim\@tempdima>\z@\relax% + \ClassWarning{\TUD@Class@Name}{% + #3\MessageBreak% + The maximum height is exceeded by \the\@tempdima\MessageBreak% + }% + \fi% + \endgroup% + \vbox to #1{#2}% +} +% \end{macrocode} +% \end{macro}^^A \tud@vlayerbox +% +% \iffalse +%</class&body> +%<*class&option> +% \fi +% +% \subsection{Der Kopfbereich der Seitenstile} +% +% Es folgen Option und Befehle zur Gestaltung des Kopfbereichs mit Hauptlogo, +% Querbalken und ggf. Zweitlogo. +% +% \begin{option}{cdhead} +% \changes{v2.03}{2015/01/29}{neu}^^A +% \changes{v2.04}{2015/05/18}{Wert \val{barcolor} neu}^^A +% \begin{macro}{\tud@head@font@num} +% \changes{v2.03}{2015/02/04}{neu}^^A +% \begin{macro}{\if@tud@head@font@num@locked} +% \changes{v2.03}{2015/02/04}{neu}^^A +% \begin{macro}{\tud@head@bar@num} +% \changes{v2.03}{2015/02/04}{neu}^^A +% \begin{macro}{\if@tud@head@bar@num@locked} +% \changes{v2.04}{2015/04/01}{neu}^^A +% \begin{macro}{\if@tud@head@widebar} +% \changes{v2.03}{2015/02/14}{neu}^^A +% \begin{macro}{\if@tud@head@widebar@locked} +% \changes{v2.03}{2015/02/14}{neu}^^A +% \begin{macro}{\if@tud@head@font@set} +% \begin{macro}{\if@tud@head@date} +% \changes{v2.05}{2016/05/27}{neu}^^A +% Mit dieser Option wird die zentrale Benutzerschnittstelle für Einstellungen +% des typischen Querbalkens für den TUD-Kopf geschaffen. Durch sie können +% sowohl die verwendete Schrift als auch die Stärke für den Balkentext +% (Institut, Fakultät etc.) geändert werden. Zusätzlich ist die Laufweite des +% Querbalkens bzw. die Farbe einstellbar. +% \begin{macrocode} +\tud@locked@newnum{tud@head@font@num}{0} +\tud@locked@newnum{tud@head@bar@num}{0} +\tud@locked@newbool{@tud@head@widebar} +\newif\if@tud@head@font@set +\newif\if@tud@head@date +\TUD@key{cdhead}[true]{% + \TUD@set@numkey{cdhead}{@tempa}{% + \TUD@bool@numkey,% + {nocd}{0},{nocdfont}{0},{nocdfonts}{0},{notudfonts}{0},% + {cd}{1},{cdfont}{1},{cdfonts}{1},{tudfonts}{1},% + {light}{1},{lightfont}{1},{lite}{1},{litefont}{1},{noheavyfont}{1},% + {heavy}{2},{heavyfont}{2},{bold}{2},{boldfont}{2},% + {nocolor}{3},{nocolour}{3},{monochrome}{3},{monochromatic}{3},% + {colorlite}{4},{litecolor}{4},{colourlite}{4},{litecolour}{4},% + {colorlight}{4},{lightcolor}{4},{colourlight}{4},{lightcolour}{4},% + {pale}{4},{colorpale}{4},{palecolor}{4},{colourpale}{4},{palecolour}{4},% + {colorbar}{5},{barcolor}{5},{colourbar}{5},{barcolour}{5},% + {bicolor}{6},{bicolour}{6},{twocolor}{6},{twocolour}{6},% + {bichrome}{6},{bichromatic}{6},{dichrome}{6},{dichromatic}{6},% + {color}{6},{colour}{6},% + {full}{6},{colorfull}{6},{fullcolor}{6},{colourfull}{6},{fullcolour}{6},% + {textwidth}{7},{slim}{7},{slimhead}{7},{nowide}{7},{nowidehead}{7},% + {narrow}{7},{narrowhead}{7},{small}{7},{smallhead}{7},% + {paperwidth}{8},{wide}{8},{widehead}{8},% + {date}{9},{showdate}{9},{dateon}{9},{datetrue}{9},{dateyes}{9},% + {nodate}{10},{hidedate}{10},{dateoff}{10},{datefalse}{10},{dateno}{10}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false + \tud@locked@num@set{tud@head@font@num}{0}% + \or% true + \tud@locked@num@set{tud@head@font@num}{1}% + \or% heavy + \tud@locked@num@set{tud@head@font@num}{2}% + \or% nocolor + \tud@locked@num@set{tud@head@bar@num}{0}% + \or% litecolor + \tud@locked@num@set{tud@head@bar@num}{1}% + \or% barcolor + \tud@locked@num@set{tud@head@bar@num}{2}% + \or% color + \tud@locked@num@set{tud@head@bar@num}{3}% + \or% textwidth + \tud@locked@bool@set{@tud@head@widebar}{false}% + \or% paperwidth + \tud@locked@bool@set{@tud@head@widebar}{true}% + \or% date + \@tud@head@datetrue% + \or% nodate + \@tud@head@datefalse% + \fi% + \ifnum\@tempa<\thr@@\relax% + \global\@tud@head@font@settrue% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@head@date +% \end{macro}^^A \if@tud@head@font@set +% \end{macro}^^A \if@tud@head@widebar@locked +% \end{macro}^^A \if@tud@head@widebar +% \end{macro}^^A \if@tud@head@bar@num@locked +% \end{macro}^^A \tud@head@bar@num +% \end{macro}^^A \if@tud@head@font@num@locked +% \end{macro}^^A \tud@head@font@num +% \end{option}^^A cdhead +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% \begin{macro}{\tud@layer@main@black} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\tud@layer@main@HKS41} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\tud@layer@main@white} +% \changes{v2.04}{2015/05/31}{neu}^^A +% Diese drei Boxen werden für das Logo der \TnUD reserviert. Abhängig von der +% gewählten Option des Layouts und der Seitenfarbe wird eine der Logos in der +% notwendigen Farbe ausgewählt. +% \begin{macrocode} +\tud@newlayerbox{main@black} +\tud@newlayerbox{main@HKS41} +\tud@newlayerbox{main@white} +% \end{macrocode} +% \end{macro}^^A \tud@layer@main@white +% \end{macro}^^A \tud@layer@main@HKS41 +% \end{macro}^^A \tud@layer@main@black +% +% \subsubsection{Das Hauptlogo der \TnUD} +% +% \begin{macro}{\tud@mainlogo@set} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\if@tud@mainlogo@wrn} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{length}{\tud@len@mainlogoheight} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\tud@mainlogo@wrn} +% \changes{v2.02}{2014/06/23}{Umbenennen von \cs{tud@head@logo@wrn}}^^A +% Das Makro \cs{tud@mainlogo@set} setzt sowohl das Logo der \TnUD als auch~-- +% durch den Aufruf der entsprechenden Befehle zum Schluss~-- alle weiteren +% Logos und Inhalte im Kopf und Fuß. Dies geschieht nach jeder Änderung des +% Satzspiegels beim Ausführen der einzelnen Seitenstil-Layer. Dafür wird der +% Schalter \cs{if@tud@mainlogo@set} im Hook \cs{tud@AfterChangingArea} gesetzt. +% \begin{macrocode} +\newlength\tud@len@mainlogoheight +\newcommand*\tud@mainlogo@wrn[1]{} +\newif\if@tud@mainlogo@set +\newcommand*\tud@mainlogo@set{% + \if@tud@mainlogo@set% + \def\@tempa{\includegraphics[keepaspectratio,width=\tud@len@logowidth]}% + \tud@savelayerbox{main@black}{\@tempa{TUD-black}}% + \tud@savelayerbox{main@HKS41}{\@tempa{TUD-blue}}% + \tud@savelayerbox{main@white}{\@tempa{TUD-white}}% + \settoheight\tud@len@mainlogoheight{\tud@uselayerbox{main@black}}% + \global\tud@len@mainlogoheight=\tud@len@mainlogoheight% +% \end{macrocode} +% Es soll sichergestellt werden, dass das bei der Verwendung von \pkg{typearea} +% über den Satzspiegel in den Seitenrand hinausragende TUD-Logo nicht außerhalb +% des Druckrandes liegt. Dies kann beispielsweise bei kleinen Papierformaten, +% zweiseitigem Satz und/oder einem zu großen \opt{DIV}-Wertes passieren. Es +% wird in diesem Fall eine Warnung ausgegeben, damit das Problem durch den +% Anwender behoben werden kann. +% \begin{macrocode} + \gdef\tud@mainlogo@wrn##1{% + \ifdim##1<\ta@bcor\relax% + \ClassWarning{\TUD@Class@Name}{% + The selected page layout means that the\MessageBreak% + logo of TUD extends beyond the printing area. \MessageBreak% + The inner margin is smaller than BCOR\MessageBreak% + (`BCOR=\the\ta@bcor', inner margin is \the##1)\MessageBreak% + Maybe you should decrease the current value\MessageBreak% + of DIV (`DIV=\the\ta@div')% + }% + \global\let\tud@mainlogo@wrn\@gobble% + \fi% + }% +% \end{macrocode} +% Hier werden die beiden Makros aufgerufen, um die Inhalte von Kopf und Fuß in +% den Boxen in der richtigen Größe neu zu setzen. +% \begin{macrocode} + \tud@headlogo@set% + \@tud@footlogo@option@settrue% + \tud@footlogo@option@set% + \global\@tud@mainlogo@setfalse% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@mainlogo@wrn +% \end{length}^^A \tud@len@mainlogoheight +% \end{macro}^^A \if@tud@mainlogo@set +% \end{macro}^^A \tud@mainlogo@set +% \begin{macro}{\tud@mainlogo@use} +% \changes{v2.04}{2015/05/31}{neu}^^A +% Hiermit erfolgt die Ausgabe der gespeicherten Boxen für das Logo der \TnUD, +% wobei \cs{tud@head@logocolor} die Farbe festlegt. +% \begin{macrocode} +\newcommand*\tud@mainlogo@use{% + \tud@mainlogo@wrn{% + \dimexpr\oddsidemargin+1in+\tud@len@logox-\tud@len@widemargin\relax% + }% + \tud@uselayerbox{main@\tud@head@logocolor}% +} +% \end{macrocode} +% \end{macro}^^A \tud@mainlogo@use +% +% \subsubsection{Optionales Zweit- oder \DDC-Logo} +% +% \begin{macro}{\tud@layer@head@black} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\tud@layer@head@HKS41} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\tud@layer@head@white} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\tud@layer@head@option} +% \changes{v2.04}{2015/05/31}{neu}^^A +% Diese Boxen werden für das \DDC-Logo und das Zweitlogo im Kopf definiert. Der +% Box \cs{tud@layer@head@option} fäält dabei die Rolle zu, entweder ein~-- per +% Option gewähltes~-- \DDC-Logo oder aber das mit \cs{headlogo} angegebene +% Zweitlogo zusichern und auszugeben. Die anderen drei Boxen speichern das Logo +% von \DDC in den drei für die unterschiedlichen Layoutausprägung benötigten +% Varianten. +% \begin{macrocode} +\tud@newlayerbox{head@black} +\tud@newlayerbox{head@HKS41} +\tud@newlayerbox{head@white} +\tud@newlayerbox{head@option} +% \end{macrocode} +% \end{macro}^^A \tud@layer@head@option +% \end{macro}^^A \tud@layer@head@white +% \end{macro}^^A \tud@layer@head@HKS41 +% \end{macro}^^A \tud@layer@head@black +% \begin{macro}{\headlogo} +% \changes{v2.02}{2014/06/23}{Anpassung an automatische Wahl des \DDC-Logos}^^A +% \begin{macro}{\tud@headlogo@filename} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{macro}{\tud@headlogo@fileoptions} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{macro}{\tud@headlogo@wrn} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Diese Befehle dienen zum Einbinden eines möglichen Zweitlogos im Kopf bündig +% zum rechten Seitenrand. Mit \cs{headlogo}\oarg{Optionsliste}\marg{Dateiname} +% werden der Dateiname und das optionale Argument in \cs{tud@headlogo@filename} +% bzw. \cs{tud@headlogo@fileoptions} gespeichert, damit diese später bei der +% tatsächlichen Verwendung des Logos mit dem Makro \cs{tud@headlogo@set} an den +% Befehl \cs{includegraphics} weitergereicht werden können. +% \begin{macrocode} +\newcommand*\tud@headlogo@filename{} +\newcommand*\tud@headlogo@fileoptions{} +\newcommand*\tud@headlogo@wrn{} +\newcommand*\headlogo[2][]{% + \tud@comp@clearpage% + \renewcommand*\tud@headlogo@filename{#2}% + \renewcommand*\tud@headlogo@fileoptions{#1}% +% \end{macrocode} +% Nach dem Setzen des Zweitlogos müssen die Boxen mit den Logos von \DDC neu +% gesetzt werden. Weil dieses dabei vom Kopf in den Fuß oder umgekehrt wandern +% könnte, werden beide relevanten Makros ausgeführt. +% \begin{macrocode} + \global\@tud@headlogo@option@settrue% + \global\@tud@footlogo@option@settrue% + \gdef\tud@headlogo@wrn{% + \ClassWarning{\TUD@Class@Name}{% + Secondary logo `\string\headlogo{\tud@headlogo@filename}'\MessageBreak% + is overwritten with DDC logo. Maybe you should\MessageBreak% + use `ddcfoot' or better `ddc' instead of `ddchead'% + }% + \global\let\tud@headlogo@wrn\relax% + }% + \tud@comp@resetpagestyle% +} +% \end{macrocode} +% \end{macro}^^A \tud@headlogo@wrn +% \end{macro}^^A \tud@headlogo@fileoptions +% \end{macro}^^A \tud@headlogo@filename +% \end{macro}^^A \headlogo +% \begin{macro}{\tud@headlogo@set} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\tud@headlogo@option@set} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \changes{v2.05}{2015/07/27}{Bugfix für Dateien in Unterordnern}^^A +% Äquivalent zum Logo der \TnUD werden auch für das Logo von \DDC drei +% Farbvarianten erstellt. +% \begin{macrocode} +\newcommand*\tud@headlogo@set{% + \def\@tempa{% + \includegraphics[keepaspectratio,totalheight=\tud@len@mainlogoheight]% + }% + \tud@savelayerbox{head@black}{\@tempa{DDC-24}}% + \tud@savelayerbox{head@HKS41}{\@tempa{DDC-27}}% + \tud@savelayerbox{head@white}{\@tempa{DDC-30}}% + \tud@headlogo@option@set% +} +% \end{macrocode} +% Hiermit werden die \DDC-Optionen \opt{ddc} bzw. \opt{ddchead} abgearbeitet +% sowie ein ggf. gegebenes Zweitlogo gespeichert. Dies geschieht beim Aufruf +% des passenden Layers, falls der Schalter \cs{if@tud@headlogo@option@set} +% gesetzt wurde. +% \begin{macrocode} +\newcommand*\tud@headlogo@option@set{% + \if@tud@headlogo@option@set% + \def\@tempc##1##2{% + \tud@savelayerbox{head@option}{% + \includegraphics[% + keepaspectratio,totalheight=\tud@len@mainlogoheight,##2% + ]{##1}% + }% + }% + \tud@savelayerbox{head@option}{}% + \tud@ddc@check% + \ifcase\@tempa\relax% \tud@ddc@head@num=false + \ifdefvoid{\tud@headlogo@filename}{}{% + \protected@edef\tud@headlogo@filename{% + \expandafter\trim@spaces\expandafter{\tud@headlogo@filename}% + }% + \protected@edef\@tempb{% + \noexpand\@tempc{\tud@headlogo@filename}{\tud@headlogo@fileoptions}% + }% + \@tempb% + }% + \or\or% \tud@ddc@head@num=color + \@tempc{DDC-03}{}% + \or% \tud@ddc@head@num=colorblack + \@tempc{DDC-09}{}% + \or% \tud@ddc@head@num=gray + \@tempc{DDC-21}{}% + \or% \tud@ddc@head@num=black + \@tempc{DDC-24}{}% + \or% \tud@ddc@head@num=blue + \@tempc{DDC-27}{}% + \or% \tud@ddc@head@num=white + \@tempc{DDC-30}{}% + \fi% + \global\@tud@headlogo@option@setfalse% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@headlogo@option@set +% \end{macro}^^A \tud@headlogo@set +% \begin{macro}{\tud@headlogo@use} +% \changes{v2.04}{2015/05/31}{neu}^^A +% Die Ausgabe von \DDC- oder Zweitlogo im Kopf erfolgt mit diesem Makro. Dabei +% werden diese in einer Box vertikal zentriert. +% \begin{macrocode} +\newcommand*\tud@headlogo@use{% + \tud@vlayerbox{\tud@len@mainlogoheight}{% + \vss% + \hbox{% + \tud@ddc@check% + \ifnum\@tempa=\@ne\relax% \tud@ddc@head@num=true + \tud@uselayerbox{head@\tud@head@logocolor}% + \else% + \tud@uselayerbox{head@option}% + \fi% + }% + \vss% + }{% + The given `\string\headlogo{\tud@headlogo@filename}' is too large.% + }% + \ifdefvoid{\tud@headlogo@filename}{}{% + \tud@ddc@check% + \ifnum\@tempa>\z@\relax\tud@headlogo@wrn\fi% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@headlogo@use +% +% \iffalse +%</class&body> +%<*class&option> +% \fi +% +% \subsection{Der Fußbereich der Seitenstile} +% +% Es folgen Option und Befehle zur Gestaltung des Fußbereichs mit optionalem +% Inhalt im Fuß, Drittlogos und \DDC-Logo. +% +% \begin{option}{cdfoot} +% \changes{v2.03}{2015/02/02}{Bei Längenangabe wird \opt{extrabottommargin} +% indirekt genutzt}^^A +% \changes{v2.04}{2015/06/18}{bedingtes Setzen der Option \opt{automark}}^^A +% \begin{macro}{\if@tud@foot@colored} +% \changes{v2.03}{2015/02/15}{neu}^^A +% \begin{macro}{\if@tud@foot@colored@locked} +% \changes{v2.05}{2015/07/14}{neu}^^A +% \begin{macro}{\tud@ps@store} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{macro}{\tud@ps@@store} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{macro}{\tud@ps@restore} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{macro}{\tud@ps@@restore} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Dieser Seitenstil mit dem Kolumnentitel im Fuß wurde bereits für die alte +% \cls{tudbook}-Klasse bereitgestellt und soll auch hier optional angeboten +% werden. Zusätzlich kann mit dieser Option ggf. ein farbiger Hintergrund in +% der Fußzeile aktiviert werden. +% +% Einige Einstellungen sind abhängig vom Paket \pkg{scrlayer-scrpage}, welches +% unter Umständen nicht geladen wird. Mit \cs{TUD@AfterPackage@do} kann +% Quelltext nur dann ausgeführt werden, wenn ein Paket auch tatsächlich geladen +% wurde. Hierfür ist die Initialisierung mit \cs{TUD@AfterPackage@set} nötig. +% \begin{macrocode} +\TUD@AfterPackage@set{scrlayer-scrpage} +\tud@locked@newbool{@tud@foot@colored} +\TUD@key{cdfoot}[true]{% + \TUD@set@numkey{cdfoot}{@tempa}{% + \TUD@bool@numkey,% + {nocolor}{2},{nocolour}{2},{monochrome}{2},{monochromatic}{2},% + {bicolor}{3},{bicolour}{3},{twocolor}{3},{twocolour}{3},% + {bichrome}{3},{bichromatic}{3},{dichrome}{3},{dichromatic}{3},% + {color}{3},{colour}{3},% + {full}{3},{colorfull}{3},{fullcolor}{3},{colourfull}{3},{fullcolour}{3}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\@tempa\relax% false +% \end{macrocode} +% Die ursprünglichen Kopf- und Fußzeilen werden mit \cs{tud@ps@restore} +% wiederhergestellt. Dies wird allerdings frühestens nach dem Laden von +% \pkg{scrlayer-scrpage} durchgeführt. +% \begin{macrocode} + \TUD@AfterPackage@do{scrlayer-scrpage}{% + \tud@ps@restore{scrheadings}% + \tud@ps@restore{plain.scrheadings}% + \tud@komafont@unset{pageheadfoot}% + }% +% \end{macrocode} +% Die ursprünglichen Kopf- und Fußzeilen werden mit dem Makro \cs{tud@ps@store} +% gesichert, um gegebenenfalls zurückschalten zu können. Anschließend werden +% diese mit dem neuen Stil überschrieben. Dies wird allerdings frühestens nach +% dem Laden von \pkg{scrlayer-scrpage} durchgeführt. +% \begin{macrocode} + \or% true + \TUD@AfterPackage@do{scrlayer-scrpage}{% + \tud@ps@store{scrheadings}% + \tud@ps@store{plain.scrheadings}% + \tud@komafont@set{pageheadfoot}{\upshape}% + \clearpairofpagestyles% + \ofoot[\pagemark]{% + \if@twoside\ifodd\value{page}\else\pagemark\quad\fi\fi% + {\footnotesize\headmark}% + \if@twoside\ifodd\value{page}\quad\pagemark\fi\else\quad\pagemark\fi% + }% + \ifx\@mkdouble\@gobble\else\KOMAoptions{automark}\fi% + }% +% \end{macrocode} +% Hier kann die Hintergrundfarbe des Fußes aktiviert bzw. deaktiviert werden. +% \begin{macrocode} + \or% nocolor + \tud@locked@bool@set{@tud@foot@colored}{false}% + \or% color + \tud@locked@bool@set{@tud@foot@colored}{true}% + \fi% +% \end{macrocode} +% Außerdem kann mit der Option \opt{extrabottommargin} gesetzt werden. +% \begin{macrocode} + \else% + \tud@lowerstring\tud@res@a{#1}% + \ifdimen{\tud@res@a}{\TUDoptions{extrabottommargin=#1}}{}% + \fi% +} +% \end{macrocode} +% Die nächsten beiden Befehle dienen zum Sichern der Kopf- und Fußzeilen\dots +% \begin{macrocode} +\newcommand*\tud@ps@store[1]{% + \tud@ps@@store{#1}{odd}{left}{head}% + \tud@ps@@store{#1}{odd}{right}{head}% + \tud@ps@@store{#1}{odd}{middle}{head}% + \tud@ps@@store{#1}{even}{left}{head}% + \tud@ps@@store{#1}{even}{right}{head}% + \tud@ps@@store{#1}{even}{middle}{head}% + \tud@ps@@store{#1}{odd}{left}{foot}% + \tud@ps@@store{#1}{odd}{right}{foot}% + \tud@ps@@store{#1}{odd}{middle}{foot}% + \tud@ps@@store{#1}{even}{left}{foot}% + \tud@ps@@store{#1}{even}{right}{foot}% + \tud@ps@@store{#1}{even}{middle}{foot}% +} +% \end{macrocode} +% \dots, wobei hierfür auf die internen Befehle von \pkg{scrlayer-scrpage} +% zurückgegriffen werden muss. +% \begin{macrocode} +\newcommand*\tud@ps@@store[4]{% + \ifcsundef{@@tud@ps@#1@#2@#3@#4}{% + \csletcs{@@tud@ps@#1@#2@#3@#4}{sls@ps@#1@#2@#3@#4}% + }{}% +} +\newcommand*\tud@ps@restore[1]{% + \tud@ps@@restore{#1}{odd}{left}{head}% + \tud@ps@@restore{#1}{odd}{right}{head}% + \tud@ps@@restore{#1}{odd}{middle}{head}% + \tud@ps@@restore{#1}{even}{left}{head}% + \tud@ps@@restore{#1}{even}{right}{head}% + \tud@ps@@restore{#1}{even}{middle}{head}% + \tud@ps@@restore{#1}{odd}{left}{foot}% + \tud@ps@@restore{#1}{odd}{right}{foot}% + \tud@ps@@restore{#1}{odd}{middle}{foot}% + \tud@ps@@restore{#1}{even}{left}{foot}% + \tud@ps@@restore{#1}{even}{right}{foot}% + \tud@ps@@restore{#1}{even}{middle}{foot}% +} +\newcommand*\tud@ps@@restore[4]{% + \ifcsdef{@@tud@ps@#1@#2@#3@#4}{% + \csletcs{sls@ps@#1@#2@#3@#4}{@@tud@ps@#1@#2@#3@#4}% + \csundef{@@tud@ps@#1@#2@#3@#4}% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \tud@ps@@restore +% \end{macro}^^A \tud@ps@restore +% \end{macro}^^A \tud@ps@@store +% \end{macro}^^A \tud@ps@store +% \end{macro}^^A \if@tud@foot@colored@locked +% \end{macro}^^A \if@tud@foot@colored +% \end{option}^^A cdfoot +% +% \iffalse +%</class&option> +%<*class> +% \fi +% +% \subsubsection{Optionales \DDC-Logo oder Drittlogos} +% +% \begin{option}{footlogoheight} +% \changes{v2.05}{2016/06/16}{neu}^^A +% \begin{macro}{\tud@dim@footlogoheight} +% \changes{v2.04}{2015/06/01}{neu}^^A +% Für den Anwender besteht mit der Option \opt{footlogoheight} die Möglichkeit, +% die Höhe aller Logos im Fußbereich~-- also eventuell das \DDC-Logo sowie +% vom Anwender mit dem Befehl \cs{footlogo} angegebene Logos~-- zentral +% festzulegen. Dabei wird der gewünschte Wert in \cs{tud@dim@footlogoheight} +% abgelegt. +% \begin{macrocode} +%<*option> +\newcommand*\tud@dim@footlogoheight{} +\let\tud@dim@footlogoheight\relax +\TUD@key{footlogoheight}{% + \TUD@set@dimenkey{footlogoheight}{\tud@dim@footlogoheight}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifdim\dimexpr\tud@dim@footlogoheight\relax<\z@\relax% + \def\@tempa-##1\@nil{\def\tud@dim@footlogoheight{##1}}% + \@tempa#1\@nil% + \fi% + \global\@tud@footlogo@option@settrue% + \fi% +} +%</option> +% \end{macrocode} +% Da sich mit der Version~v2.03 die Standardhöhe des \DDC-Logos im Fußbereich +% geändert hat, wird dieser Wert abhängig von der Einstellung für die Option +% \opt{tudscrver} nach der Abarbeitung der Optionen am Ende der Klasse gesetzt. +% \begin{macrocode} +%<*body> +\AtEndOfClass{% + \ifdefvoid{\tud@dim@footlogoheight}{% + \tud@if@v@lower{2.03}{% + \def\tud@dim@footlogoheight{.6\tud@len@topmargin}% + }{% + \def\tud@dim@footlogoheight{\tud@len@mainlogoheight}% + }% + }{}% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \tud@dim@footlogoheight +% \end{option}^^A footlogoheight +% +% \iffalse +%</class> +%<*class&body> +% \fi +% +% \begin{macro}{\tud@layer@foot@black} +% \changes{v2.04}{2015/06/01}{neu}^^A +% \begin{macro}{\tud@layer@foot@HKS41} +% \changes{v2.04}{2015/06/01}{neu}^^A +% \begin{macro}{\tud@layer@foot@white} +% \changes{v2.04}{2015/06/01}{neu}^^A +% \begin{macro}{\tud@layer@foot@option} +% \changes{v2.04}{2015/06/01}{neu}^^A +% Im Fußbereich kann das \DDC-Logo rechtsbündig ausgegeben. Hierfür werden die +% entsprechenden Boxen für alle Farbvarianten definiert. Diese werden genutzt, +% wenn entweder die Option \opt{ddcfoot} oder aber \opt{ddc} in Verbindung mit +% einem Zweitlogo (\cs{headlogo}) genutzt wird. +% \begin{macrocode} +\tud@newlayerbox{foot@black} +\tud@newlayerbox{foot@HKS41} +\tud@newlayerbox{foot@white} +\tud@newlayerbox{foot@option} +% \end{macrocode} +% \end{macro}^^A \tud@layer@foot@option +% \end{macro}^^A \tud@layer@foot@white +% \end{macro}^^A \tud@layer@foot@HKS41 +% \end{macro}^^A \tud@layer@foot@black +% \begin{macro}{\tud@footlogo@ddc@set} +% \changes{v2.04}{2015/06/01}{neu}^^A +% \begin{macro}{\tud@footlogo@option@set} +% \changes{v2.04}{2015/06/01}{neu}^^A +% Auch im Fuß werden für das \DDC-Logo verschiedene Boxen für die Farbvarianten +% \val{black}, \val{HKS41} und \val{white} sowie eine für die gezielte Auswahl +% über die Optionen \opt{ddc} bzw. \opt{ddcfoot} erstellt. Dafür wird zunächst +% das Makro \cs{tud@footlogo@ddc@set} definiert. +% \begin{macrocode} +\newcommand*\tud@footlogo@ddc@set[2]{% + \tud@savelayerbox{foot@#1}{% + \includegraphics[keepaspectratio,totalheight=\tud@dim@footlogoheight]{#2}% + }% +} +% \end{macrocode} +% Hiermit werden die \DDC-Optionen \opt{ddc} bzw. \opt{ddcfoot} abgearbeitet. +% Dies geschieht, falls hierfür der Schalter \cs{if@tud@footlogo@option@set} +% gesetzt wurde, bei der Ausgabe des dazugehörigen Layers. +% \begin{macrocode} +\newcommand*\tud@footlogo@option@set{% + \if@tud@footlogo@option@set% + \tud@footlogo@ddc@set{black}{DDC-22}% + \tud@footlogo@ddc@set{HKS41}{DDC-25}% + \tud@footlogo@ddc@set{white}{DDC-28}% + \tud@ddc@check% + \ifcase\@tempb\relax\or\or% \tud@ddc@foot@num=color + \tud@footlogo@ddc@set{option}{DDC-01}% + \or% \tud@ddc@foot@num=colorblack + \tud@footlogo@ddc@set{option}{DDC-07}% + \or% \tud@ddc@foot@num=gray + \tud@footlogo@ddc@set{option}{DDC-19}% + \or% \tud@ddc@foot@num=black + \tud@footlogo@ddc@set{option}{DDC-22}% + \or% \tud@ddc@foot@num=blue + \tud@footlogo@ddc@set{option}{DDC-25}% + \or% \tud@ddc@foot@num=white + \tud@footlogo@ddc@set{option}{DDC-28}% + \fi% + \global\@tud@footlogo@option@setfalse% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@footlogo@option@set +% \end{macro}^^A \tud@footlogo@ddc@set +% \begin{macro}{\tud@footlogo@ddc@use} +% \changes{v2.04}{2015/06/01}{neu}^^A +% Die Ausgabe des \DDC-Logos im Fuß erfolgt mit diesem Makro. Dabei wird dieses +% in einer Box optisch~-- leicht nach oben verschoben~-- vertikal zentriert. +% \begin{macrocode} +\newcommand*\tud@footlogo@ddc@use[2]{% + \tud@ddc@check% + \ifcase\@tempb\relax\else% \tud@ddc@foot@num=!false + \tud@footlogo@option@set% + \setbox\z@\hbox{% + \tud@vlayerbox{#1}{% + \vss% + \hbox to #2{% + \hss% + \ifcase\@tempb\relax\or% \tud@ddc@foot@num=true + \tud@uselayerbox{foot@\tud@foot@logocolor}% + \else% + \tud@uselayerbox{foot@option}% + \fi% + }% + \vss\vss% + }{% + You should reduce `footlogoheight', because it is\MessageBreak% + too high (\the\dimexpr\tud@dim@footlogoheight\relax).% + \ifnum\tud@cdgeometry@num>\@ne% true/symmetric/twoside + \MessageBreak% + Alternatively you can enlarge the bottom margin\MessageBreak% + by using option `extrabottommargin'.% + \fi% + }% + }% +% \end{macrocode} +% Nach der Ausgabe wird ein begativer horizontaler Abstand in der Boxbreite +% eingefügt, damit nachfolgende Boxen überlagert werden können. +% \begin{macrocode} + \usebox\z@\hspace*{-\wd\z@}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@footlogo@ddc@use +% \begin{macro}{\tud@layer@foot@cmd} +% \changes{v2.04}{2015/06/01}{neu}^^A +% Für das Setzen von benutzerdefinierten Logos im Fußbereich wird diese Box +% verwendet. +% \begin{macrocode} +\tud@newlayerbox{foot@cmd} +% \end{macrocode} +% \end{macro}^^A \tud@layer@foot@cmd +% \begin{macro}{\footlogo} +% \changes{v2.03}{2015/01/27}{neu}^^A +% \begin{macro}{\tud@footlogo@filenames} +% \changes{v2.03}{2015/01/27}{neu}^^A +% \begin{macro}{\tud@footlogo@fileoptions} +% \changes{v2.03}{2015/01/27}{neu}^^A +% \begin{macro}{\footlogosep} +% \changes{v2.03}{2015/01/27}{neu}^^A +% \begin{macro}{\tud@footlogo@cmd@set} +% \changes{v2.04}{2015/06/01}{neu}^^A +% \begin{macro}{\tud@footlogo@cmd@@set} +% \changes{v2.03}{2015/01/27}{neu}^^A +% \changes{v2.03}{2015/02/02}{optionale Parameter für unterschiedliche Dateien +% individuell nutzbar}^^A +% \begin{macro}{\if@tud@footlogo@cmd@set} +% \changes{v2.04}{2015/06/01}{neu}^^A +% Mit dem Befehl \cs{footlogo} kann eine kommasparierte Liste für Logos im +% Fuß angegeben werden, die mit \cs{footlogosep} voneinander getrennt werden. +% \begin{macrocode} +\newcommand*\footlogosep{\hfill} +\newcommand*\tud@footlogo@filenames{} +\newcommand*\tud@footlogo@fileoptions{} +\newcommand*\footlogo[2][]{% + \tud@comp@clearpage% + \renewcommand*\tud@footlogo@filenames{#2}% + \renewcommand*\tud@footlogo@fileoptions{#1}% + \global\@tud@footlogo@cmd@settrue% + \tud@comp@resetpagestyle% +} +% \end{macrocode} +% Die mit \cs{footlogo} angegeben Logos und die dazugehörigen Einstellungen, +% welche entweder allgemein über das optionale Argument oder aber individuell +% durch \val{:} an den Dateinamen angehängt übergeben wurden, werden hier in +% der Box \cs{tud@layer@foot@cmd} gespeichert. +% \begin{macrocode} +\newif\if@tud@footlogo@cmd@set +\newcommand*\tud@footlogo@cmd@set[2]{% + \if@tud@footlogo@cmd@set% + \tud@savelayerbox{foot@cmd}{% + \hbox to #2{% +% \end{macrocode} +% Hier erfolgt die eigentliche Abarbeitung der mit \cs{footlogo} angegeben +% Liste der benutzerdefinierten Logos. In \cs{@tempa} wird nach dem ersten +% Durchlauf der Schleife der Inhalt von \cs{footlogosep} gespeichert und nach +% dem ersten Logo vor jedem weiteren eingefügt. Um versehentlich angegebene +% Leerzeichen zu entfernen, werden diese mit \cs{trim@spaces} entfernt. +% \begin{macrocode} + \let\@tempa\relax% + \@for\@tempb:=\tud@footlogo@filenames\do{% + \edef\@tempb{\expandafter\trim@spaces\expandafter{\@tempb}}% + \@tempa% + \ifx\@tempb\@empty\else% + \expandafter\tud@footlogo@cmd@@set\expandafter{\@tempb}{#1}% + \fi% + \let\@tempa\footlogosep% + }% + \hss% + }% + }% + \global\@tud@footlogo@cmd@setfalse% + \fi% +} +% \end{macrocode} +% Der Befehl \cs{tud@footlogo@cmd@set} wird genutzt, um die einzelnen Logos für +% den Fuß nacheinander in der Box \cs{tud@layer@foot@cmd} zu setzen. +% \begin{macrocode} +\newcommand*\tud@footlogo@cmd@@set[2]{% + \begingroup% +% \end{macrocode} +% Dabei soll es möglich sein, optionale Parameter an \cs{includegraphics} zu +% übergeben. Dies soll zum einen global für alle Dateien als auch individuell +% für einzelne Logos möglich sein. Zu diesem Zweck wird die Schnittstelle für +% den Anwender so gestaltet, dass individuelle Parameter mit einem Doppelpunkt +% direkt an den Dateinamen angehangen werden können. +% \begin{macrocode} + \let\@tempa\@empty% + \let\@tempb\@empty% + \@tempswatrue% + \def\do##1{% + \if@tempswa% + \def\@tempa{##1}% + \@tempswafalse% + \else% + \l@addto@macro\@tempb{,##1}% + \fi% + }% + \let\@tempc\relax% + \DeclareListParser{\@tempc}{:}% + \@tempc{#1}% +% \end{macrocode} +% In jedem Fall werden die Grundeinstellungen als erstes ausgeführt. +% \begin{macrocode} + \preto\tud@footlogo@fileoptions{% + keepaspectratio,totalheight=\tud@dim@footlogoheight,% + }% +% \end{macrocode} +% Wurden tatsächlich inidviduelle Parameter übergeben, so werden diese als +% letztes ausgeführt, um vorige Einstellungen überschreiben zu können. +% \begin{macrocode} + \eappto\tud@footlogo@fileoptions{\expandonce\@tempb}% + \protected@edef\@tempc{% + \noexpand\includegraphics[\expandonce\tud@footlogo@fileoptions]{\@tempa}% + }% +% \end{macrocode} +% Die Logos werden~-- wie auch das \DDC-Logo im Fuß~-- individuell optisch +% vertikal zentriert. +% \begin{macrocode} + \tud@vlayerbox{#2}{\vss\hbox{\@tempc}\vss\vss}{% + The given `\string\footlogo{\@tempa}' is too large.% + }% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@footlogo@cmd@set +% \end{macro}^^A \tud@footlogo@cmd@@set +% \end{macro}^^A \tud@footlogo@cmd@set +% \end{macro}^^A \footlogosep +% \end{macro}^^A \tud@footlogo@fileoptions +% \end{macro}^^A \tud@footlogo@filenames +% \end{macro}^^A \footlogo +% \begin{macro}{\tud@footlogo@cmd@use} +% \changes{v2.04}{2015/06/01}{neu}^^A +% Der Befehl \cs{tud@footlogo@cmd@use} wird genutzt, um die einzelnen Logos für +% den Fuß innerhalb der Ebene \val{tudheadings.foot.content} auszugeben. +% \begin{macrocode} +\newcommand*\tud@footlogo@cmd@use[2]{% + \tud@footlogo@option@set% + \tud@footlogo@cmd@set{#1}{#2}% + \setbox\z@\hbox{\tud@uselayerbox{foot@cmd}}% + \usebox\z@\hspace*{-\wd\z@}% +} +% \end{macrocode} +% \end{macro}^^A \tud@footlogo@cmd@use +% +% \subsubsection{Optionaler Inhalt im Fußbereich} +% +% \begin{macro}{\footcontent} +% \changes{v2.04}{2015/04/21}{neu}^^A +% \begin{KOMAfont}{tudheadings} +% \changes{v2.04}{2015/04/21}{neu}^^A +% \begin{macro}{\tud@footcontent@do} +% \changes{v2.04}{2015/04/21}{neu}^^A +% \begin{macro}{\tud@footcontent@@do} +% \changes{v2.04}{2015/04/21}{neu}^^A +% \changes{v2.05}{2016/04/17}{Stern im Argument erhält aktuellen Inhalt}^^A +% \begin{macro}{\tud@footcontent@usefont} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@footcontent@fontsize} +% \changes{v2.06}{2018/08/01}{neu}^^A +% \begin{macro}{\tud@footcontent@fontface} +% \changes{v2.04}{2015/06/01}{neu}^^A +% \changes{v2.05}{2015/07/21}{Bugfix für die Schriftgröße und den Durchschuss +% bei einer entsprechenden Anpassung der Schriftart \val{tudheadings}}^^A +% \begin{macro}{\tud@footcontent@left} +% \changes{v2.04}{2015/06/01}{neu}^^A +% \begin{macro}{\tud@footcontent@right} +% \changes{v2.04}{2015/06/01}{neu}^^A +% Mit dem Befehl \cs{footcontent} kann der Inhalt für den Fußbereich der +% Seiten im Stil \pgs{tudheadings} festgelegt werden. Dieser wird mit passenden +% Schrifteinstellungen entweder einspaltig oder zweispaltig gesetzt. Die +% Sternversion des Befehls nimmt keinerlei Einstellungen für die Schrift vor. +% \begin{macrocode} +\newkomafont{tudheadings}{\tud@color{\tud@foot@fontcolor}} +% \end{macrocode} +% Dieser Befehl wird zur Formatierung der Schrift im Fußbereich definiert. +% \begin{macrocode} +\newcommand*\tud@footcontent@usefont[1]{% + \usekomafont{tudheadings}{% + \tud@footcontent@fontsize% + \tud@footcontent@fontface% + \selectfont% + #1% + }% +} +% \end{macrocode} +% Die mit \cs{footcontent} angegebenen Einstellungen und Inhalte werden in +% diesen Makros gesichert, weshalb diese vorher alloziert werden. Anschließend +% erfolgt die Definition des Befehls. +% \begin{macrocode} +\newcommand*\tud@footcontent@fontsize{} +\newcommand*\tud@footcontent@fontface{} +\newcommand*\tud@footcontent@left{} +\newcommand*\tud@footcontent@right{\@nil} +% \end{macrocode} +% Die Sternversion ändert die Schriftgröße vom Inhalt nicht. Die Normalversion +% nutzt die Schriftgröße der Kopfzeile mit einem passenden Durchschuss. +% \begin{macrocode} +\newcommand*\footcontent{% + \kernel@ifstar{% + \renewcommand*\tud@footcontent@fontsize{}% + \tud@footcontent@do% + }{% + \renewcommand*\tud@footcontent@fontsize{% + \setlength\@tempdima{\tud@head@fontsize\p@}% + \fontsize{\@tempdima}{1.25\@tempdima}% + }% + \tud@footcontent@do% + }% +} +% \end{macrocode} +% Normalerweise wird der Inhalt vollständig über die verfügbare Seitenfußbreite +% gesetzt. Wird das optionale Argument \emph{nach} dem obligatorischen genutzt, +% so erfolgt die Ausgabe zweispaltig. Das optionale Argument kann für +% zusätzliche Formatierungsbefehle genutzt werden. +% \begin{macrocode} +\newcommand*\tud@footcontent@do[2][]{% + \kernel@ifnextchar[%] + {\tud@footcontent@@do{#1}{#2}}% + {\tud@footcontent@@do{#1}{#2}[\@nil]}% +} +\newcommand*\tud@footcontent@@do{} +\def\tud@footcontent@@do#1#2[#3]{% +% \end{macrocode} +% Wurde im optionalen Argument für zusätzliche Schrifteinstellungen ein Stern +% verwendet, bleibt die bisherige Definition bestehen. +% \begin{macrocode} + \if\detokenize{*#1}\relax\else% + \renewcommand*\tud@footcontent@fontface{#1}% + \fi% +% \end{macrocode} +% Wurde in einem der Argumente für den linken und/oder rechten Inhalt ein Stern +% verwendet, bleibt die bisherige Definition bestehen. +% \begin{macrocode} + \if\detokenize{*#2}\relax\else% + \renewcommand*\tud@footcontent@left{#2}% + \fi% + \if\detokenize{*#3}\relax\else% + \renewcommand*\tud@footcontent@right{#3}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@footcontent@right +% \end{macro}^^A \tud@footcontent@left +% \end{macro}^^A \tud@footcontent@fontface +% \end{macro}^^A \tud@footcontent@fontsize +% \end{macro}^^A \tud@footcontent@usefont +% \end{macro}^^A \tud@footcontent@@do +% \end{macro}^^A \tud@footcontent@do +% \end{KOMAfont}^^A tudheadings +% \end{macro}^^A \footcontent +% +% \iffalse +%<*class&poster> +% \fi +% +% \begin{macro}{\tud@footcontent@@left} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \changes{v2.05}{2016/04/17}{Überschrift optional}^^A +% \begin{macro}{\tud@footcontent@@right} +% \changes{v2.05}{2015/07/06}{neu}^^A +% \changes{v2.05}{2016/04/17}{Überschrift optional}^^A +% \begin{macro}{\tud@newline@poster} +% Mit diesen beiden Hilfsmakros werden die linke und die rechte Spalte des +% Standard-Seitenfußes eines Posters festgelegt. In der linken Spalte werden +% dabei Fakultät, Einrichtung, Institut und Lehrstuhl sowie der Professor +% ausgegeben, wobei die Angaben über das optionale Argument der entsprechenden +% Feldbefehle, die in den Klassen normalerweise nur für den Seitenkopf genutzt +% werden, variiert werden können. +% \begin{macrocode} +\newcommand*\tud@newline@poster{} +\newcommand*\tud@footcontent@@left[1]{% + \ifxblank{#1}{}{{\tud@head@font@@bold#1\newline}}% + Technische Universit\"at Dresden% + \tud@foot@line@write{faculty}% + \tud@foot@line@write{department}% + \tud@foot@line@write{institute}% + \tud@foot@line@write{chair}% + \tud@foot@line@write{professor}% +} +% \end{macrocode} +% In der rechten Spalte werden der Autor oder die Autoren (\cs{author}) und +% die Kontaktperson(en) (\cs{contactperson}) ausgegeben. Zu jeder Person können +% individuelle Angaben bzgl. Büro, Telefonnummer und E"~Mail-Adresse gemacht +% werden. +% \begin{macrocode} +\newcommand*\tud@footcontent@@right[2]{% + \def\tud@newline@poster{% + \ifx\@authormore\@empty\else\newline\@authormore\fi% + \ifx\@course\@empty% + \ifx\@discipline\@empty\else\newline\@discipline\fi% + \else% + \newline\@course% + \ifx\@discipline\@empty\else% + \nobreakspace(\@discipline)% + \fi% + \fi% + \ifx\@office\@empty\else\newline\@office\fi% + \ifx\@telephone\@empty\else\newline\@telephone\fi% + \ifx\@telefax\@empty\else\newline\@telefax\fi% + \ifx\@emailaddress\@empty\else\newline\@emailaddress\fi% + }% +% \end{macrocode} +% Wurde kein Autor angegeben, wird in diesem Fall die normalerweise erzeugte +% Warnung bei der Verwendung des Feldes \cs{@author} unterdrückt. +% \begin{macrocode} + \ifpatchable{\@author}{\@latex@warning@no@line}{% + \let\@tempa\@empty% + }{% + \let\@tempa\@author% + }% + \ifx\@tempa\@empty\else% + \ifxblank{#1}{}{{\tud@head@font@@bold#1\newline}}% +% \end{macrocode} +% Das Makro zum Aufteilen der Autorenangaben wird für die hier benötigte Form +% definiert. Die Ausgabe aller nicht \emph{lokal} angegebenen Felder wird +% unterdrückt, indem das Makro \cs{tud@multiple@fields@preset} im zweiten +% Argument mit einem \val{*} aufgerufen wird. +% \begin{macrocode} + \renewcommand*\tud@split@author@do[2]{% + \tud@multiple@fields@store{@author}{##1}% + \tud@multiple@fields@preset{@author}{*}{##1}% + \ignorespaces##1\tud@newline@poster% + \tud@multiple@fields@restore{@author}% + \tud@multiple@@@split{##2}{\newline}% + }% + \noindent\tud@multiple@split{@author}% + \tud@multiple@fields@restore{@author}% +% \end{macrocode} +% Wurde gültige Felder außerhalb von \cs{@author} global angegeben, so werden +% diese \emph{nach} allen Autoren ausgegeben. +% \begin{macrocode} + \tud@newline@poster% +% \end{macrocode} +% Werden Autor und Kontaktperson ausgegeben, ist eine Leerzeile einzufügen. +% \begin{macrocode} + \ifx\@contactperson\@empty\else\newline\fi% + \fi% +% \end{macrocode} +% Die Ausgabe der Kontaktperson(en) erfolgt analog zu der Autorenausgabe. +% \begin{macrocode} + \def\tud@newline@poster{% + \ifx\@office\@empty\else\newline\@office\fi% + \ifx\@telephone\@empty\else\newline\@telephone\fi% + \ifx\@telefax\@empty\else\newline\@telefax\fi% + \ifx\@emailaddress\@empty\else\newline\@emailaddress\fi% + }% + \ifx\@contactperson\@empty\else% + \ifxblank{#2}{}{{\tud@head@font@@bold#2\newline}}% + \renewcommand*\tud@split@contactperson@do[2]{% + \tud@multiple@fields@store{@contactperson}{##1}% + \tud@multiple@fields@preset{@contactperson}{*}{##1}% + \ignorespaces##1\tud@newline@poster% + \tud@multiple@fields@restore{@contactperson}% + \tud@multiple@@@split{##2}{\newline}% + }% + \noindent\tud@multiple@split{@contactperson}% + \tud@multiple@fields@restore{@contactperson}% + \tud@newline@poster% + \fi% +% \end{macrocode} +% Zu guter letzt noch eine mögliche Homepage. +% \begin{macrocode} + \ifx\@webpage\@empty\else\newline\@webpage\fi% +} +\footcontent{% + \tud@footcontent@@left{\contactname}% +}[% + \tud@footcontent@@right{\authorname}{\contactpersonname}% +] +% \end{macrocode} +% \end{macro}^^A \tud@newline@poster +% \end{macro}^^A \tud@footcontent@@right +% \end{macro}^^A \tud@footcontent@@left +% +% \iffalse +%</class&poster> +% \fi +% +% \begin{macro}{\tud@footcontent@use} +% \changes{v2.04}{2015/06/01}{neu}^^A +% Mit \cs{tud@footcontent@use} erfolgt die Ausgabe der mit \cs{footcontent} +% definierten Inhalte. Dabei wird darauf geachtet, ob ein \DDC-Logo im Fuß +% verwendet wird. Die Ausgabe erfolgt jedoch nur, falls tatsächlich etwas +% definiert wurde. Andernfalls wird lediglich eine leere Box der geforderten +% Breite ausgegeben. Dies ist notwendig, da nachgelagerte Funktionen diese Box +% fester Breite erwarten. +% \begin{macrocode} +\newcommand*\tud@footcontent@use[2]{% + \@tempswafalse% + \ifx\tud@footcontent@left\@empty\relax% + \def\@tempa{\@nil}% + \ifx\@tempa\tud@footcontent@right\relax\else% + \ifx\tud@footcontent@right\@empty\relax\else% + \@tempswatrue% + \fi% + \fi% + \else% + \@tempswatrue% + \fi% + \if@tempswa% + \tud@ddc@check% + \ifcase\@tempb\relax% + \setlength\@tempdimc{\z@}% + \else% + \settowidth\@tempdimc{\tud@uselayerbox{foot@black}}% + \addtolength\@tempdimc{\columnsep}% + \fi% +% \end{macrocode} +% Äquivalent zu den Logos wird auch der durch den Anwender frei definierbare +% Inhalt des Fußes in einer vertikalen Box gesetzt. Mit \cs{@tempdimc} wird im +% Bedarfsfall der Freiraum für das \DDC-Logo bereitgestellt. +% \begin{macrocode} + \tud@vlayerbox{#1}{% + \linespread{1}% + \vss% + \hbox to #2{% + \tud@footcontent@usefont{% +% \end{macrocode} +% Wurde das optionale Argument nach dem obligatorischen nicht genutzt, so wird +% der Inhalt über die komplette Breite des Textbereiches ausgegeben. +% \begin{macrocode} + \def\@tempa{\@nil}% + \ifx\@tempa\tud@footcontent@right\relax% + \vtop{% + \hsize=\dimexpr#2-\@tempdimc\relax% + \strut\ignorespaces\tud@footcontent@left\strut% + }% +% \end{macrocode} +% Im zweispaltigen modus werden zwei vertikale Boxen erzeugt, zwischen denen +% der Abstand \cs{columnsep} eingefügt wird. +% \begin{macrocode} + \else% + \vtop{% + \hsize=\dimexpr(#2-\columnsep)/2\relax% + \strut\ignorespaces\tud@footcontent@left\strut% + }% + \hspace{\columnsep}% + \vtop{% + \hsize=\dimexpr(#2-\columnsep)/2-\@tempdimc\relax% + \strut\ignorespaces\tud@footcontent@right\strut% + }% + \fi% + \hss% + }% + }% + \vss\vss% +% \end{macrocode} +% Sollte der Inhalt für den Fußbereich zu groß sein, wird eine Warnung erzeugt. +% \begin{macrocode} + }{% + The content for the footer (`\string\footcontent')\MessageBreak% + is too high. You should either reduce the content\MessageBreak% + or lower the fontsize via the optional argument.% + \ifnum\tud@cdgeometry@num>\@ne% true/symmetric/twoside + \MessageBreak% + Alternatively you can enlarge the bottom margin\MessageBreak% + by using option `extrabottommargin'.% + \fi% + }% + \else% + \hbox to #2{}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@footcontent@use +% +% \iffalse +%</class&body> +% \fi +% +% \subsection{Optionen für das \DDC-Logo} +% +% \begin{macro}{\tud@comp@clearpage} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\tud@comp@resetpagestyle} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\if@tud@ddc@internal} +% \changes{v2.02}{2014/07/08}{neu}^^A +% Bis zur Version~v2.02 wurden unterschiedliche Satzsiegel für den Seitenfuß +% mit und ohne \DDC-Logo verwendet. Damit dieser im Zweifelsfall umgestellt +% werden kann, wurde vor dem Ausführen der entsprechenden Optionen ein +% Seitenumbruch erzwungen und nach dem Verarbeiten der Optionen der aktuelle +% Seitenstil erneut aufgerufen. Die beiden folgenden Makros werden für dieses +% Unterfangen definiert, jedoch bei der Abarbeitung der Optionen nur noch im +% Kompatibilitätmodus ausgeführt. Der Schalter \cs{if@tud@ddc@internal} wird +% intern von den Optionen \opt{ddc}, \opt{ddchead} und \opt{ddcfoot} verwendet, +% um rekursive Aufrufe der Optionen zu verhindern. +% \begin{macrocode} +%<*class&option> +\newif\if@tud@ddc@internal +\newcommand*\tud@comp@clearpage{}% +\newcommand*\tud@comp@resetpagestyle{}% +%</class&option> +%<*class&body> +\tud@if@v@lower{2.04}{% + \renewcommand*\tud@comp@clearpage{% + \if@tud@ddc@internal\else% + \tud@if@tudheadings{\currentpagestyle}{\clearpage}{}% + \fi% + }% + \renewcommand*\tud@comp@resetpagestyle{% + \if@tud@ddc@internal\else% + \tud@if@tudheadings{\currentpagestyle}{% + \expandafter\pagestyle\expandafter{\currentpagestyle}% + }{}% + \fi% + }% +}{}% +%</class&body> +% \end{macrocode} +% \end{macro}^^A \if@tud@ddc@internal +% \end{macro}^^A \tud@comp@clearpage +% \end{macro}^^A \tud@comp@resetpagestyle +% +% \iffalse +%<*class&option> +% \fi +% +% \begin{option}{ddc} +% \changes{v2.02}{2014/06/23}{automatische Logowahl}^^A +% \begin{option}{ddchead} +% \changes{v2.02}{2014/06/23}{Logo von \DDC entweder in Kopf oder Fuß}^^A +% \begin{option}{ddcfoot} +% \changes{v2.02}{2014/06/23}{Logo von \DDC entweder in Kopf oder Fuß}^^A +% Diese Optionen dienen zur Auswahl des \DDC-Logos auf Seiten mit dem Stil +% \pgs{tudheadings}. Die Option \opt{ddchead} setzt das Logo dabei immer in den +% Kopf, wobei ein mit \cs{headlogo} definiertes Zweitlogo gegebenenfalls +% überschrieben wird. Die Option \opt{ddcfoot} setzt das Logo immer in den Fuß. +% Mit der Option \opt{ddc} wird das Logo nur in den Kopf gesetzt, wenn kein +% Zweitlogo angegeben ist. Ist dies jedoch der Fall, wird das Logo stattdessen +% im Fuß ausgegeben. +% \begin{macro}{\tud@ddc@switch} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Das Makro definiert die gültigen Werte für die \DDC-Optionen \opt{ddc}, +% \opt{ddchead} sowie \opt{ddcfoot}. +% \begin{macrocode} +\newcommand*\tud@ddc@switch{} +\edef\tud@ddc@switch{% + \TUD@bool@numkey,% + {color}{2},{colour}{2},{cdcolor}{2},{cdcolour}{2},% + {colorblack}{3},{colourblack}{3},{cdcolorblack}{3},{cdcolourblack}{3},% + {gray}{4},{grey}{4},{hks92}{4},{cdgray}{4},{cdgrey}{4},% + {black}{5},{cdblack}{5},% + {blue}{6},{hks41}{6},{cdblue}{6},{cddarkblue}{6},% + {white}{7},{cdwhite}{7}% +} +% \end{macrocode} +% \end{macro}^^A \tud@ddc@switch +% \begin{macro}{\tud@ddc@auto@num} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{macro}{\if@tud@ddc@auto} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{macro}{\if@tud@headlogo@option@set} +% \changes{v2.04}{2015/05/31}{neu}^^A +% \begin{macro}{\if@tud@footlogo@option@set} +% \changes{v2.04}{2015/06/01}{neu}^^A +% Die Option \opt{ddc}. +% \begin{macrocode} +\newif\if@tud@headlogo@option@set +\newif\if@tud@footlogo@option@set +\newif\if@tud@ddc@auto +\newcommand*\tud@ddc@auto@num{0} +\TUD@key{ddc}[true]{% +% \end{macrocode} +% Im Kompatibiltätsmodus wird ein Seitenumbruch erzwungen. Anschließend wird +% die Option abgearbeitet. +% \begin{macrocode} + \tud@comp@clearpage% + \TUD@set@numkey{ddc}{tud@ddc@auto@num}{\tud@ddc@switch}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% +% \end{macrocode} +% Wurde die Option \opt{ddc} intern durch \opt{ddchead} oder \opt{ddcfoot} +% aufgerufen, wird die automatische Auswahl des \DDC-Logos deaktiviert. +% \begin{macrocode} + \if@tud@ddc@internal% + \@tud@ddc@autofalse% + \else% +% \end{macrocode} +% Andernfalls wird die automatische Auswahl aktiviert und die beiden Optionen +% \opt{ddchead} sowie \opt{ddcfoot} intern zurückgesetzt. +% \begin{macrocode} + \@tud@ddc@autotrue% + \@tud@ddc@internaltrue% + \TUDoptions{ddchead=false}% + \TUDoptions{ddcfoot=false}% + \@tud@ddc@internalfalse% + \fi% +% \end{macrocode} +% Sowohl die \DDC-Logos als auch ein mögliches Zweilogo (\cs{headlogo}) werden +% in den entsprechenden Layern durch Boxen ausgegeben. Die beiden Schalter +% führen zum Erneuern der dazugehörigen Logoboxen. Siehe die Beschreibung der +% Makros \cs{tud@headlogo@option@set} sowie \cs{tud@footlogo@option@set}. +% \begin{macrocode} + \global\@tud@headlogo@option@settrue% + \global\@tud@footlogo@option@settrue% + \fi% +% \end{macrocode} +% Abschließend wird im Kompatibilitätsmodus der aktuelle Seitenstil aufgerufen, +% um bei einem geänderten Fuß den notwendigen Satzspiegel zu laden. +% \begin{macrocode} + \tud@comp@resetpagestyle% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@footlogo@option@set +% \end{macro}^^A \if@tud@headlogo@option@set +% \end{macro}^^A \if@tud@ddc@auto +% \end{macro}^^A \tud@ddc@auto@num +% \begin{macro}{\tud@ddc@head@num} +% \changes{v2.03}{2015/01/22}{Seitenstilauswahl bei Deaktivierung verbessert}^^A +% Die Option \opt{ddchead} dient zum zwingenden Setzen des \DDC-Logos im Kopf +% der Seiten im Stil von \pgs{tudheadings}. +% \begin{macrocode} +\newcommand*\tud@ddc@head@num{0} +\TUD@key{ddchead}[true]{% +% \end{macrocode} +% Der Seitenumbruch im Kompatibilitätsmodus. +% \begin{macrocode} + \tud@comp@clearpage% + \TUD@set@numkey{ddchead}{tud@ddc@head@num}{\tud@ddc@switch}{#1}% +% \end{macrocode} +% Beim internen Aufruf soll lediglich der Wert des Schlüssels geändert werden. +% Wurde die Option durch den Anwender genutzt, werden die korrespondierenden +% Optionen zurückgesetzt. Der Aufruf der Option \opt{ddc} führt zum erneuten +% setzen der Logoboxen. +% \begin{macrocode} + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tud@ddc@internal\else% + \@tud@ddc@internaltrue% + \TUDoptions{ddcfoot=false}% + \TUDoptions{ddc=false}% + \@tud@ddc@internalfalse% + \fi% + \fi% +% \end{macrocode} +% Das Setzen des Seitenstils im Kompatibilitätsmodus. +% \begin{macrocode} + \tud@comp@resetpagestyle% +} +% \end{macrocode} +% \end{macro}^^A \tud@ddc@head@num +% \begin{macro}{\tud@ddc@foot@num} +% \changes{v2.03}{2015/01/22}{Seitenstilauswahl bei Deaktivierung verbessert}^^A +% Die Option \opt{ddcfoot} dient zum zwingenden Setzen des \DDC-Logos im Fuß +% der Seiten im Stil von \pgs{tudheadings}. Das Vorgehen beim Umschalten des +% Schlüssels ist äquivalent zur Option \opt{ddchead} +% \begin{macrocode} +\newcommand*\tud@ddc@foot@num{0} +\TUD@key{ddcfoot}[true]{% +% \end{macrocode} +% Der Seitenumbruch im Kompatibilitätsmodus. +% \begin{macrocode} + \tud@comp@clearpage% + \TUD@set@numkey{ddcfoot}{tud@ddc@foot@num}{\tud@ddc@switch}{#1}% +% \end{macrocode} +% Beim internen Aufruf soll lediglich der Wert des Schlüssels geändert werden. +% Wurde die Option durch den Anwender genutzt, werden die korrespondierenden +% Optionen zurückgesetzt. Der Aufruf der Option \opt{ddc} führt zum erneuten +% setzen der Logoboxen. +% \begin{macrocode} + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tud@ddc@internal\else% + \@tud@ddc@internaltrue% + \TUDoptions{ddchead=false}% + \TUDoptions{ddc=false}% + \@tud@ddc@internalfalse% + \fi% + \fi% +% \end{macrocode} +% Das Setzen des Seitenstils im Kompatibilitätsmodus. +% \begin{macrocode} + \tud@comp@resetpagestyle% +} +% \end{macrocode} +% \end{macro}^^A \tud@ddc@foot@num +% \end{option}^^A ddcfoot +% \end{option}^^A ddchead +% \end{option}^^A ddc +% +% \iffalse +%</class&option> +%<*class&body> +% \fi +% +% \begin{macro}{\tud@ddc@check} +% \changes{v2.02}{2014/06/23}{neu}^^A +% Dieses Hilfsmakro wird aufgerufen, wenn geprüft wird, welche Einstellungen +% für Kopf und Fuß des Seitenstiles \pgs{tudheadings} zum Tragen kommen sollen. +% Über den Schalter \cs{if@tud@ddc@auto} wird festgelegt, ob die Auswahl des +% \DDC-Logos automatisch erfolgen soll~-- Option \opt{ddc} wurde verwendet. +% Ist dies der Fall, wird das Logo standardmäßig im Kopf gesetzt. Ist jedoch +% durch den Befehl \cs{headlogo} ein Zweitlogo angegeben worde, wird dieses in +% der Fußzeile ausgegeben. Die Verwendung einer der Optionen \opt{ddchead} bzw. +% \opt{ddcfoot} forciert die Ausgabe des \DDC-Logos an der gewünschten Stelle. +% Die jeweils gültige Auswahl für Kopf bzw. Fuß wird in den Makros \cs{@tempa} +% bzw. \cs{@tempb} geschrieben und kann anschließend ausgewertet werden. +% \begin{macrocode} +\newcommand*\tud@ddc@check{% + \let\@tempa\tud@ddc@head@num% + \let\@tempb\tud@ddc@foot@num% + \if@tud@ddc@auto% + \ifdefvoid{\tud@headlogo@filename}{% + \let\@tempa\tud@ddc@auto@num% + \let\@tempb\z@% + }{% + \let\@tempa\z@% + \let\@tempb\tud@ddc@auto@num% + }% + \fi% +% \end{macrocode} +% Für die Satzspiegelvergrößerung wird beim Vorhandensein eines oder mehrerer +% Logos im Fuß die Variable \cs{@tempb} auf einen negativen Wert gesetzt, um +% auch ohne die Ausgabe eines \DDC-Logos den Fußbereich zu vergrößern. +% \begin{macrocode} + \tud@if@v@lower{2.03}{% + \ifnum\@tempb=\z@\relax% + \ifdefvoid{\tud@footlogo@filenames}{}{\let\@tempb\m@ne}% + \fi% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \tud@ddc@check +% +% \subsection{Umgebungsparameter für die neuen Seitenstile} +% +% \begin{macro}{\if@tud@parameter@ps@font@set} +% \changes{v2.05m}{2017/05/30}{neu}^^A +% Der Schalter wird verwendet, um das explizite Setzen der Schrifteinstellungen +% über die Seitenstilparameter zu detektieren. +% \begin{macrocode} +\newif\if@tud@parameter@ps@font@set +% \end{macrocode} +% \end{macro}^^A \if@tud@parameter@ps@font@set +% \begin{macro}{\TUD@parameter@ps@def} +% Im Folgenden werden die einzelnen Parameter für die \env{tudpage}-Umgebung +% definiert. Die Parameter für Kopf- und Fußzeile werden nicht nur für die +% \env{tudpage}-Umgebung sondern auch noch für Titel und Umschlagseite +% verwendet, weshalb deren Definitionen zur einfacheren Wiederverwendung in das +% Makro \cs{TUD@parameter@ps@def} ausgelagert werden. +% \begin{macrocode} +\newcommand*\TUD@parameter@ps@def[1]{% +% \end{macrocode} +% \begin{parameter}{cdfont} +% Die Option \opt{cdfont} bestimmt, ob die Schriften des \CDs oder aber die +% standardmäßigen Serifenlosen für die Auszeichnugen in der Kopfzeile und +% Serifen im Inhalt verwendet werden. +% \begin{macrocode} + \TUD@parameter@def{cdfont}[true]{% + \TUDoption{cdfont}{#1}% + \@tud@parameter@ps@font@settrue% + }% +% \end{macrocode} +% \end{parameter}^^A cdfont +% \begin{parameter}{cdhead} +% \changes{v2.03}{2015/01/28}{\val{barfont} und \val{widehead} überlagert}^^A +% Mit dem Parameter \val{cdhead} kann die Verwendung der Schriften des \CDs +% aktiviert werden, wenn diese im Fließtext nicht zum Einsatz kommen. Die +% Breite des Querbalkens kann über diesen Parameter ebenfalls geändert werden. +% \begin{macrocode} + \TUD@parameter@def{cdhead}[true]{\TUDoption{cdhead}{#1}}% +% \end{macrocode} +% \end{parameter}^^A cdhead +% \begin{parameter}{cdfoot} +% \changes{v2.03}{2015/01/30}{neu}^^A +% Über \val{cdfoot} kann gg. die Hintergrundfarbe sowie die Standardfußzeile +% des \CDs aktiviert werden. +% \begin{macrocode} + \TUD@parameter@def{cdfoot}[true]{\TUDoption{cdfoot}{#1}}% +% \end{macrocode} +% \end{parameter}^^A cdfoot +% \begin{parameter}{headlogo} +% \changes{v2.03}{2015/01/28}{neu}^^A +% \begin{parameter}{footlogo} +% \changes{v2.03}{2015/01/28}{neu}^^A +% Das Zweit- und die Drittlogos können ebenfalls lokal geändert werden. +% \begin{macrocode} + \TUD@parameter@def{headlogo}{\headlogo{#1}}% + \TUD@parameter@def{footlogo}{\footlogo{#1}}% +% \end{macrocode} +% \end{parameter}^^A footlogo +% \end{parameter}^^A headlogo +% \begin{parameter}{ddc} +% \changes{v2.02}{2014/08/16}{neu}^^A +% \begin{parameter}{ddchead} +% \begin{parameter}{ddcfoot} +% Mit diesen Parametern kann das \DDC-Logo im Kopf bzw. Fuß eingeblendet werden. +% \begin{macrocode} + \TUD@parameter@def{ddc}[true]{\TUDoption{ddc}{#1}}% + \TUD@parameter@def{ddchead}[true]{\TUDoption{ddchead}{#1}}% + \TUD@parameter@def{ddcfoot}[true]{\TUDoption{ddcfoot}{#1}}% +% \end{macrocode} +% \end{parameter}^^A ddcfoot +% \end{parameter}^^A ddchead +% \end{parameter}^^A ddc +% \begin{parameter}{cdfonts} +% \begin{parameter}{tudfonts} +% \begin{parameter}{barfont} +% \begin{parameter}{widehead} +% \begin{parameter}{tudfoot} +% \begin{parameter}{logo} +% Für die Kompatibilität werden auch veraltete Parameter bereitgestellt. +% \begin{macrocode} + \TUD@parameter@def{cdfonts}[true]{% + \TUDoption{cdfonts}{#1}% + \@tud@parameter@ps@font@settrue% + }% + \TUD@parameter@def{tudfonts}[true]{% + \TUDoption{tudfonts}{#1}% + \@tud@parameter@ps@font@settrue% + }% + \TUD@parameter@def{barfont}[true]{\TUDoption{barfont}{#1}}% + \TUD@parameter@def{widehead}[true]{\TUDoption{widehead}{#1}}% + \TUD@parameter@def{tudfoot}[true]{\TUDoption{tudfoot}{#1}}% + \TUD@parameter@let{logo}{headlogo}% +% \end{macrocode} +% \end{parameter}^^A logo +% \end{parameter}^^A tudfoot +% \end{parameter}^^A widehead +% \end{parameter}^^A barfont +% \end{parameter}^^A tudfonts +% \end{parameter}^^A cdfonts +% Damit sind alle notwendigen Parameter für die Kopf- und Fußzeile der Seiten +% im Stil \pgs{tudheadings} definiert. +% \begin{macrocode} +} +% \end{macrocode} +% \end{macro}^^A \TUD@parameter@ps@def +% +% \iffalse +%<*book|report|article> +% \fi +% +% \begin{environment}{tudpage} +% \changes{v2.02}{2014/06/23}{an Paket \pkg{scrlayer-scrpage} angepasst}^^A +% \begin{parameter}{language} +% \begin{parameter}{columns} +% \begin{parameter}{pagestyle} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \changes{v2.03}{2015/01/28}{\cs{tud@if@tudheadings} verwendet}^^A +% \begin{macro}{\tud@envir@ps} +% \begin{macro}{\tud@envir@selectps} +% \changes{v2.02}{2014/07/19}{neu}^^A +% \begin{macro}{\tud@currentpagestyle@set} +% \changes{v2.02}{2014/07/18}{neu}^^A +% \begin{macro}{\tud@currentpagestyle@reset} +% \changes{v2.02}{2014/07/18}{neu}^^A +% \changes{v2.03}{2015/01/09}{Bugfix}^^A +% \begin{macro}{\tud@currentpagestyle@value} +% Durch den hohen TUD-Kopf muss bei der Verwendung dessens das Seitenlayout +% temporär umgeschaltet werden, um die Höhe des Satzspiegels zu verringern. +% Dies geschieht innerhalb dieser Umgebung reversibel mit \cs{pagestyle}. +% Dabei wird mit \cs{loadgeometry} ein Seitenumbruch erzwungen und der +% benötigte Satzspiegel geladen. +% +% Die Befehle \cs{tud@currentpagestyle@set} und \cs{tud@currentpagestyle@reset} +% sind für die Sicherung und Wiederherstellung des vor der Umgebung geladenen +% Seitenstils verantwortlich. +% +% Zu Beginn der Umgebung werden die weiter unten beschriebenen Optionen für +% diese Umgebung mit \cs{TUD@parameter@set} ausgeführt. Nach dem Beenden der +% Umgebung wird nache einem weiteren Seitenumbruch das Standardseitenlayout +% wiederhergestellt. Die gewünschte Sprache der Umgebung kann als einzelner +% Wert ohne Schlüssel angegben werden. +% \begin{macrocode} +\newcommand*\tud@envir@ps{tudheadings} +\newcommand*\tud@envir@selectps{% + \expandafter\pagestyle\expandafter{\tud@envir@ps}% + \ifstr{\GetRealPageStyle{\tud@envir@ps}}{empty}{% + \renewcommand*\titlepagestyle{empty}% +%<*book|report> + \renewcommand*\partpagestyle{empty}% + \renewcommand*\chapterpagestyle{empty}% +%</book|report> + \renewcommand*\indexpagestyle{empty}% + }{}% + \ifstr{\GetRealPageStyle{\tud@envir@ps}}{empty.tudheadings}{% + \renewcommand*\titlepagestyle{empty.tudheadings}% +%<*book|report> + \renewcommand*\partpagestyle{empty.tudheadings}% + \renewcommand*\chapterpagestyle{empty.tudheadings}% +%</book|report> + \renewcommand*\indexpagestyle{empty.tudheadings}% + }{}% +} +\newcommand*\tud@currentpagestyle@value{} +\newcommand*\tud@currentpagestyle@set{% + \ifdefvoid{\tud@currentpagestyle@value}{% + \xdef\tud@currentpagestyle@value{\currentpagestyle}% + }{}% +} +\newcommand*\tud@currentpagestyle@reset{% + \ifdefvoid{\tud@currentpagestyle@value}{}{% + \expandafter\pagestyle\expandafter{\tud@currentpagestyle@value}% + \let\tud@currentpagestyle@value\relax% + }% +} +\NewEnviron{tudpage}[1][]{% +% \end{macrocode} +% Um beim Umschalten des Seitenstils den aktuellen selbst zu behalten, wird +% dieser im Hilfsmakro \cs{tud@currentpagestyle@value} gespeichert. +% \begin{macrocode} + \tud@currentpagestyle@set% + \clearpage% + \def\tud@envir@ps{tudheadings}% + \TUD@parameter@set{tudpage}{#1}% + \tud@envir@selectps% +% \end{macrocode} +% Falls das \pkg{multicol}-Paket geladen ist und eine Spaltenanzahl angegeben +% ist, wird die entsprechende Umgebung gesartet, mit \cs{BODY} der Inhalt der +% \env{tudpage}-Umgebung ausgegeben und anschließend gegebenenfalls die +% \env{multicols}-Umgebung beendet. +% \begin{macrocode} + \tud@x@multicol@check% + \ifnum\tud@x@multicol@num>\@ne\relax% + \begin{multicols}{\tud@x@multicol@num}% + \fi% + \BODY% + \ifnum\tud@x@multicol@num>\@ne\relax% + \end{multicols}% + \fi% +% \end{macrocode} +% Am Ende der Umgebung wird der vorhergehende Seitenstil zurückgesetzt und der +% dazugehörige Satzspiegel geladen. Dazu wird die Ausführung das Hilfsmakro +% \cs{@tempa} auf das Beenden der Umgebung mit \cs{aftergroup} verzögert. +% \begin{macrocode} +}[% + \aftergroup\tud@currentpagestyle@reset% + \clearpage% +] +% \end{macrocode} +% Mit \cs{TUD@parameter@family}\marg{Family}\marg{\dots} wird die Familie der +% Parameter festgelegt und anschließend die Definitionen getätigt. +% \begin{macrocode} +\TUD@parameter@family{tudpage}{% +% \end{macrocode} +% Mit dem Parameter \prm{language} kann die in der Umgebung verwendete Sprache +% umgeschaltet werden. Die Sprache kann auch ohne den entsprechenden Schlüssel +% direkt als Parameter angegeben werden. +% \begin{macrocode} + \TUD@parameter@def{language}{\selectlanguage{#1}}% +% \end{macrocode} +% Mit \prm{columns} kann die Anzahl der Spalten für die Umgebung angegeben +% werden. Für mehr als zwei Spalten muss das Paket \pkg{multicol} geladen +% werden. Die Spaltenanzahl kann auch ohne den entsprechenden Schlüssel direkt +% Parameter angegeben werden. +% \begin{macrocode} + \TUD@parameter@def{columns}{\renewcommand*\tud@x@multicol@num{#1}}% +% \end{macrocode} +% Mit dem Parameter \prm{pagestyle} kann der verwendete Seitenstil eingestellt +% werden, wobei einer der \pgs{tudheadings}-Seitenstile verwendet wird. +% \begin{macrocode} + \TUD@parameter@def{pagestyle}{% + \tud@if@tudheadings{#1}{\renewcommand*\tud@envir@ps{#1}}{% + \ifstr{#1}{empty}{\renewcommand*\tud@envir@ps{empty.tudheadings}}{% + \ifstr{#1}{plain}{\renewcommand*\tud@envir@ps{plain.tudheadings}}{% + \ifstr{#1}{headings}{\renewcommand*\tud@envir@ps{tudheadings}}{% + \TUD@parameter@error{pagestyle}{% + headings, plain, empty or any tudheadings page style type% + }% + }}}% + }% + }% +% \end{macrocode} +% Hier werden die Parameter für Kopf- und Fußzeile tatsächlich definiert. +% \begin{macrocode} + \TUD@parameter@ps@def{#1}% +% \end{macrocode} +% Für den Fall, dass ein Wert nicht in der Schlüssel"=Wert"=Notation gegeben +% wird, erfolgt eine Sonderbehandlung durch \cs{TUD@parameter@handler@default}, +% bei dererst auf eine Zahl geprüft wird und anschießend versucht wird, das +% Argument als Sprache zu setzen. Nach der Definition aller Parameter wird der +% Befehl \cs{TUD@parameter@family} und damit auch die aktuelle Parameterfamilie +% beendet. +% \begin{macrocode} + \TUD@parameter@handler@default{}% +} +% \end{macrocode} +% \end{macro}^^A \tud@currentpagestyle@value +% \end{macro}^^A \tud@currentpagestyle@reset +% \end{macro}^^A \tud@currentpagestyle@set +% \end{macro}^^A \tud@envir@selectps +% \end{macro}^^A \tud@envir@ps +% \end{parameter}^^A pagestyle +% \end{parameter}^^A columns +% \end{parameter}^^A language +% \end{environment}^^A tudpage +% +% \iffalse +%</book|report|article> +% \fi +% +% Mit der Nutzung von \pkg{scrlayer-scrpage} ist die parallele Verwendung des +% Paketes \pkg{fancyhdr} nicht möglich. +% \begin{macrocode} +\PreventPackageFromLoading[% + \ClassWarning{\TUD@Class@Name}{% + The package `fancyhdr' must not be used with a\MessageBreak% + TUD-Script class. You should make use of the\MessageBreak% + capabilities of package `scrlayer-scrpage' instead% + }% +]{fancyhdr} +% \end{macrocode} +% +% \iffalse +%</class&body> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-supervisor.dtx b/macros/latex/contrib/tudscr/source/tudscr-supervisor.dtx new file mode 100644 index 0000000000..7e73840d5c --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-supervisor.dtx @@ -0,0 +1,603 @@ +% \CheckSum{600} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-supervisor.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-supervisor.dtx}[2019/08/20 v2.06c TUD-Script\space% +% +% \iffalse +%</dtx> +%<package>\ProvidesPackage{tudscrsupervisor}[% +%<*package> +%!TUD@Version +%</package> +%<package> package +%<*dtx|package> +% \fi + (commands for supervisors)% +] +% \iffalse +%</dtx|package> +%<*dtx> +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-supervisor.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \section{% +% Das Paket \pkg{tudscrsupervisor} -- Betreuung wissenschaftlicher Arbeiten% +% } +% +% Diese Paket stellt für die \TUDScript-Klassen mehrere Umgebungen und Befehle +% zur Erstellung der Aufgabenstellung einer Abschlussarbeit sowie eines +% Gutachtens und eines Aushangs bereit. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*package> +% \fi +% +% \begin{macro}{\tud@multiple@fields@output} +% \changes{v2.05}{2016/03/09}{neu}^^A +% \begin{macro}{\tud@multiple@fields@style} +% \changes{v2.05}{2016/05/26}{neu}^^A +% Diesen beiden Makros dienen dazu, unterschiedliche Varianten für die Ausgabe +% innerhalb der nachfolgenden Umgebungen generieren zu können. Momentan werden +% diese nur innerhalb der \env{task}-Umgebung verwendet. +% \begin{macrocode} +\newcommand*\tud@multiple@fields@output{} +\newcommand*\tud@multiple@fields@style{table} +% \end{macrocode} +% \end{macro}^^A \tud@multiple@fields@style +% \end{macro}^^A \tud@multiple@fields@output +% \begin{macro}{\student} +% Der Befehl \cs{student} kann als Alias für \cs{author} genutzt werden. +% \begin{macrocode} +\newcommand*\student{\author} +% \end{macrocode} +% \end{macro}^^A \student +% \begin{macro}{\tud@authortable@set} +% \changes{v2.01b}{2014/06/04}{Probleme mit Paket \pkg{calc} behoben}^^A +% \begin{length}{\tud@len@authortable} +% Der Befehl \cs{tud@authortable@set} dient bei Aufgabenstellung und Gutachten +% zur Ausgabe einer Tabelle mit Informationen zum Autor beziehungsweise zu den +% Autoren.\footnote{Matrikelnummer, Jahrgang, Studiengang etc.} +% \begin{macrocode} +\newlength\tud@len@authortable +\newcommand*\tud@authortable@set{% + \begingroup% + \let\thanks\@gobble% + \let\footnote\@gobble% +% \end{macrocode} +% Zu Beginn wird eine Tabelle mit den Bezeichnern aller genutzten Feldern +% ausgegeben. Danach folgen alle Autoren. Damit ein einheitliches Layout +% entsteht und auch die Tabellen am Ende der Umgebung in der ersten Spalte die +% gleiche Breite haben wie im oberen Teil, ist die Bestimmung einer festen +% Spaltenbreite notwendig, die so breit wie der längste Bezeichner ist. +% Dafür muss festgestellt werden, welche optionalen Felder denn nun überhaupt +% genutzt werden. Dafür wird \cs{tud@multiple@fields@preset} mit \cs{null} als +% Argument aufgerufen, um alle potenziellen Felder erkennen zu können. +% \begin{macrocode} + \tud@multiple@split{@author}% + \tud@multiple@fields@preset{@author}{\null}{}% + \setlength\tud@len@authortable{2em}% +% \end{macrocode} +% Anschließend werden die Bezeichner sowohl der obligatorischen als auch der +% genutzten, optionalen Felder in \cs{@tempa} gespeichert. Mit der Liste wird +% der längste Bezeichner bestimmt und dessen Länge in \cs{tud@len@authortable} +% gespeichert. +% \begin{macrocode} + \def\@tempb##1{% + \expandafter\ifx\csname @##1\endcsname\@empty\else% + \expandafter\appto\expandafter\@tempa\expandafter{% + \expandafter,\csname ##1name\endcsname% + }% + \fi% + }% + \def\@tempa{% + \namesname,\titlename,\issuedatetext,\duedatetext,\supervisorname% + }% + \tud@ifin@and{\@supervisor}{\appto\@tempa{,\supervisorothername}}{}% + \@tempb{referee}% + \tud@ifin@and{\@referee}{\appto\@tempa{,\refereeothername}}{}% + \@tempb{matriculationnumber}% + \@tempb{matriculationyear}% + \@tempb{course}% + \@tempb{discipline}% + \@for\@tempb:=\@tempa\do{% + \settowidth\@tempdima{\@tempb\tud@title@delimiter}% + \ifdim\@tempdima>\tud@len@authortable\relax% + \setlength\tud@len@authortable{\@tempdima}% + \fi% + }% + \global\tud@len@authortable=\tud@len@authortable% +% \end{macrocode} +% Die Tabelle mit den benötigten Bezeichnern. Damit diese bis an den Seiterand +% ohne Warnungen gesetzt werden können, wird die Auszeichnung von Absatzenden +% aufgehoben. +% \begin{macrocode} + \begingroup% + \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative% + \begin{tabular}{@{}p{\tud@len@authortable}}% + \ifx\@course\@empty\else% + \coursename\tud@title@delimiter\tabularnewline% + \fi% + \ifx\@discipline\@empty\else% + \disciplinename\tud@title@delimiter\tabularnewline% + \fi% + \namesname\tud@title@delimiter\tabularnewline% + \ifx\@matriculationnumber\@empty\else% + \matriculationnumbername\tud@title@delimiter\tabularnewline% + \fi% + \ifx\@matriculationyear\@empty\else% + \matriculationyearname\tud@title@delimiter\tabularnewline% + \fi% + \end{tabular}% +% \end{macrocode} +% Der Befehl \cs{tud@split@author@do} wird innerhalb der \TUDScript-Klassen zur +% formatierten Ausgabe mehrerer Autoren auf der Titelseite verwendet, welche +% durch \cs{author}\marg{Autor(en)} angegeben und mit \cs{and} getrennt wurden. +% Er wird hier auf die Ausgabe der Autoren mit den jeweils zusätzlich gegebenen +% Informationen in einer Tabelle angepasst. +% \begin{macrocode} + \renewcommand*\tud@split@author@do[2]{% +% \end{macrocode} +% Weil alle Autoren in einer Tabelle gesetzt werden wird geprüft, welche Felder +% individuell via \cs{author} angegeben wurden. Damit die Tabellen die gleiche +% Höhe haben, auch wenn für einen Autor ein Feld ausgelassen wurde, werden alle +% insgesamt angegebenen Felder mit via \cs{tud@multiple@fields@preset} mit +% \cs{null} initialisiert. Anschließend werden die für den aktuellen Autor +% angegebenen Felder gesetzt. +% \begin{macrocode} + \tud@multiple@fields@store{@author}{##1}% + \tud@multiple@fields@preset{@author}{\null}{##1}% +% \end{macrocode} +% Nach viel Geplänkel kommt nun die eigentliche Tabelle mit ggf. zusätzlichen +% Informationen zum Autor. +% \begin{macrocode} + \begin{tabular}{l@{}}% + \ifx\@course\@empty\else\@course\tabularnewline\fi% + \ifx\@discipline\@empty\else\@discipline\tabularnewline\fi% + \textsf{\textbf{\ignorespaces##1}}\tabularnewline% + \ifx\@matriculationnumber\@empty\else% + \@matriculationnumber\tabularnewline% + \fi% + \ifx\@matriculationyear\@empty\else% + \@matriculationyear\tabularnewline% + \fi% + \end{tabular}% +% \end{macrocode} +% Sollte ein weiterer Autor folgen, wird \cs{tabcolsep} zusätzlich eingefügt, +% um den Standardabstand bei Tabellen zu sichern, da die Tabelle vorher ohne +% rechten \enquote{Rand} gesetzt wurde, um die letzte Tabelle ggf. genau bis +% zum rechten Rand setzen zu können. +% \begin{macrocode} + \tud@multiple@fields@restore{@author}% + \tud@multiple@@@split{##2}{\enskip\hspace{\tabcolsep}}% + }% +% \end{macrocode} +% Hier erfolgt die eigentliche Ausgabe. +% \begin{macrocode} + \tud@multiple@split{@author}% +% \end{macrocode} +% Nach den Autoren wird der Titel über die komplette Textbreite ausgegeben. +% Danach wird der Inhalt der Aufgabenstellung gesetzt. +% \begin{macrocode} + \vskip\smallskipamount% + \begin{tabular}{@{}p{\tud@len@authortable}% + p{\dimexpr\textwidth-\tud@len@authortable-2\tabcolsep\relax}@{}}% + \titlename\tud@title@delimiter & \tud@RaggedRight\textsf{\textbf{\@@title}}% + \end{tabular}% + \par% + \endgroup% + \ifdim\parskip>\z@\else\vskip\topsep\fi% + \endgroup% + \noindent\ignorespaces% +} +% \end{macrocode} +% \end{length}^^A \tud@len@authortable +% \end{macro}^^A \tud@authortable@set +% +% \subsection{Aufgabenstellung} +% +% \begin{environment}{task} +% \changes{v2.03}{2015/01/05}{Bugfix für initialen Seitenstil}^^A +% \changes{v2.03}{2015/01/05}{Bugfix für Seitenstil im zweiseitigen Satz}^^A +% \begin{parameter}{headline} +% \begin{parameter}{heading} +% \begin{parameter}{line} +% \begin{parameter}{style} +% Die Umgebung für die Aufgabenstellung nutzt die \env{tudpage}-Umgebung. Sie +% wird auf einer neuen (rechten) Seite gesetzt. Es wird zu Beginn eine Tabelle +% mit Informationen zum Autor gesetzt. Zum Abschluss werden Betreuer, +% Hochschullehrer und ggf. Vorsitzender des Prüfungsausschusses ausgegeben. +% \begin{macrocode} +\newenvironment{task}[1][]{% +% \end{macrocode} +% Die \env{tudpage}-Umgebung wird geöffnet. Mit dem Parameter \opt{headline} +% kann die standardmäßige Überschrift überschrieben werden. +% \begin{macrocode} + \cleardoubleoddpage% + \let\@headline\@empty% + \TUD@parameter@family{tudpage}{% + \TUD@parameter@def{headline}{\def\@headline{##1}}% + \TUD@parameter@let{heading}{headline}% + \TUD@parameter@let{line}{headline}% + \TUD@parameter@def{style}{\def\tud@multiple@fields@style{##1}}% + \TUD@parameter@handler@default{headline}% + }% + \tudpage[pagestyle=empty,#1]% +% \end{macrocode} +% Zu Beginn wird als erstes die Überschrift und~-- die entsprechende Option +% vorausgesetzt~-- im PDF einen Lesezeichen- oder auch Outline-Eintrag gesetzt. +% \begin{macrocode} + \tudbookmark{\taskname}{task}% + \subsection*{% + \ifx\@headline\@empty% + \taskname\space% + \ifx\tasktext\@empty\else\ifx\@@thesis\@empty\else% + \ignorespaces\tasktext\space\@@thesis% + \fi\fi% + \else\@headline\fi% + }% + \tud@authortable@set% +}{% +% \end{macrocode} +% Da auch Gutachter und Betreuer durch den Befehl \cs{and} getrennt werden, +% wird dieser für die korrekte Ausgabe umdefiniert. Anschließend folgt die +% Ausgabe in einer Tabelle, die Spalte der Bezeichner entspricht der aus dem +% oberen Teil. +% \begin{macrocode} + \def\tud@multiple@fields@output##1{% + \ifstr{\tud@multiple@fields@style}{table}{% + \def\and{% + \tabularnewline% + \ifstr{\csuse{##1othername}}{}{}{% + \csuse{##1othername}\tud@title@delimiter% + }% + & \def\and{\tabularnewline &}% + }% + }{% + \def\and{\unskip,\space\ignorespaces}% + }% + \csuse{@##1}% + }% + \removelastskip% + \ifdim\parskip>\z@\vskip\parskip\else\vskip\topsep\fi\medskip% + \begingroup% + \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative% + \begin{tabular}{@{}p{\tud@len@authortable}l@{}}% + \ifx\@referee\@empty\else% + \refereename\tud@title@delimiter & % + \tud@multiple@fields@output{referee}\tabularnewline[\smallskipamount]% + \fi% + \supervisorname\tud@title@delimiter & % + \tud@multiple@fields@output{supervisor}\tabularnewline[\smallskipamount]% + \issuedatetext\tud@title@delimiter & \@issuedate\tabularnewline% + \duedatetext\tud@title@delimiter & \@duedate\tabularnewline% + \end{tabular}% +% \end{macrocode} +% Darunter wird etwas Platz für die Unterschriften von betreuendem Professor +% und ggf. Prüfungsausschussvorsitzenden gehalten. Auch diese beiden werden +% in einer Tabelle ausgegeben. Die \env{tudpage}-Umgebung wird beendet, und +% eine neue (rechte) Seite geöffnet. +% \begin{macrocode} + \vskip\tud@len@signatureskip\noindent% + \ifx\@chairman\@empty\else% + \begin{tabular}{@{}l@{}}% + \@chairman\tabularnewline% + \chairmanname\tabularnewline% + \end{tabular}% + \hfill% + \fi% + \ifx\@professor\@empty\else% + \begin{tabular}{@{}l@{}}% + \@professor\tabularnewline% + \professorname\tabularnewline% + \end{tabular}% + \fi% + \par% + \endgroup% + \endtudpage% + \aftergroup\cleardoublepage% +} +% \end{macrocode} +% \end{parameter}^^A style +% \end{parameter}^^A line +% \end{parameter}^^A heading +% \end{parameter}^^A headline +% \end{environment}^^A task +% \begin{macro}{\taskform} +% Dies soll die Standardform einer Aufgabenstellung sein. Im ersten Argument +% werden kurz die Ziele motiviert und erläutert, im zweiten Argument werden im +% besten Fall die Schwerpunkte in einer \env{itemize}-Umgebung aufgeschlüsselt. +% \begin{macrocode} +\newcommand\taskform[3][]{% + \begin{task}[#1]% + \ifblank{#2}{}{\minisec{\objectivesname}\smallskip#2}% + \ifblank{#3}{}{% + \minisec{\focusname}\smallskip% + \begin{itemize}\tud@RaggedRight% + #3% + \end{itemize}% + }% + \end{task}% +} +% \end{macrocode} +% \end{macro}^^A \taskform +% +% \subsection{Gutachten} +% +% \begin{environment}{evaluation} +% \changes{v2.03}{2015/01/05}{Bugfix für Seitenstil im zweiseitigen Satz}^^A +% \begin{parameter}{headline} +% \begin{parameter}{heading} +% \begin{parameter}{line} +% \begin{parameter}{grade} +% Die Umgebung für das Gutachten nutzt ebenfalls die \env{tudpage}-Umgebung. Sie +% wird auf einer neuen (rechten) Seite gesetzt. Es wird zu Beginn eine Tabelle +% mit Informationen zum Autor gesetzt. Zum Abschluss werden Ort, Datum und +% Gutachter ausgegeben. +% \begin{macrocode} +\newenvironment{evaluation}[1][]{% +% \end{macrocode} +% Die \env{tudpage}-Umgebung wird geöffnet. Mit dem Parameter \opt{headline} +% kann die standardmäßige Überschrift überschrieben werden. Zu Beginn wird als +% erstes die Überschrift und~-- die entsprechende Option vorausgesetzt~-- im +% PDF einen Lesezeichen- oder auch Outline-Eintrag gesetzt. +% \begin{macrocode} + \cleardoubleoddpage% + \let\@headline\@empty% + \TUD@parameter@family{tudpage}{% + \TUD@parameter@def{headline}{\def\@headline{##1}}% + \TUD@parameter@let{heading}{headline}% + \TUD@parameter@let{line}{headline}% + \TUD@parameter@def{grade}{\def\@grade{##1}}% + \TUD@parameter@handler@default{headline}% + }% + \tudpage[pagestyle=empty,#1]% + \tudbookmark{\evaluationname}{evaluation}% + \subsection*{% + \ifx\@headline\@empty% + \evaluationname\space% + \ifx\evaluationtext\@empty\else\ifx\@@thesis\@empty\else% + \ignorespaces\evaluationtext\space\@@thesis% + \fi\fi% + \else\@headline\fi% + }% + \tud@authortable@set% +}{% +% \end{macrocode} +% Die gegebenen Note sowie Ort und Datum werden am Ende ggf. ausgegeben. +% \begin{macrocode} + \removelastskip% + \ifdim\parskip>\z@\vskip\parskip\else\vskip\topsep\fi% + \setlength\@tempskipa{\smallskipamount}% + \ifx\@grade\@empty\else% + \vskip\@tempskipa\noindent% + \gradetext% + \setlength\@tempskipa{\bigskipamount}% + \fi% + \ifx\@date\@empty\else% + \vskip\@tempskipa\noindent% + \ifx\@place\@empty\else\@place,\nobreakspace\fi\@date% + \fi% + \vskip\tud@len@signatureskip\noindent% +% \end{macrocode} +% Der Befehl \cs{and} wird für einen möglichen Zweitgutachter angepasst. Das +% Hilfsmakro \cs{@tempa} dient zur Übernahme des richtigen Bezeichners für +% Erst- bzw. Zweitgutachter. Sollten mit \cs{referee} keine Gutachter angegeben +% sein, so werden die angegeben Betreuer verwendet. +% \begin{macrocode} + \ifx\@referee\@empty\let\@referee\@supervisor\fi% + \let\@tempa\refereename% + \def\and{% + \tabularnewline% + \@tempa% + \endtabular% + \hfill% + \tabular{@{}l@{}}% + \global\let\@tempa\refereeothername% + }% + \begin{tabular}{@{}l@{}}% + \@referee% + \tabularnewline% + \@tempa% + \end{tabular}% + \hfill\null% + \endtudpage% + \aftergroup\cleardoublepage% +} +% \end{macrocode} +% \end{parameter}^^A grade +% \end{parameter}^^A line +% \end{parameter}^^A heading +% \end{parameter}^^A headline +% \end{environment}^^A evaluation +% \begin{macro}{\evaluationform} +% Dies soll die Standardform eines Gutachtens sein. Im ersten Argument wird +% kurz die Aufgabenstellung zusammengefasst, im zweiten Argument wird der +% Inhalt und die Struktur der Arbeit kurz beschrieben. Im dritten Argument +% erfolgt die Bewertung, das letzte Argument beinhaltet die Note. +% \begin{macrocode} +\newcommand\evaluationform[5][]{% + \begin{evaluation}[#1]% + \ifblank{#2}{}{\minisec{\taskname}\smallskip#2}% + \ifblank{#3}{}{\minisec{\contentname}\smallskip#3}% + \ifblank{#4}{}{\minisec{\assessmentname}\smallskip#4}% + \ifblank{#5}{}{\def\@grade{#5}}% + \end{evaluation}% +} +% \end{macrocode} +% \end{macro}^^A \evaluationform +% +% \subsection{Aushang} +% +% \begin{environment}{notice} +% \begin{parameter}{headline} +% \begin{parameter}{heading} +% \begin{parameter}{line} +% \changes{v2.03}{2015/01/05}{Bugfix für Seitenstil im zweiseitigen Satz}^^A +% Die Umgebung für Aushänge nutzt ebenfalls die \env{tudpage}-Umgebung. Sie wird +% auf einer neuen (rechten) Seite gesetzt. Die Überschrift wird in der +% Voreinstellung auf den sprachabhängigen Bezeichner \cs{noticename} gesetzt, +% welcher allerdings mit dem Parameter \opt{headline} überschrieben werden kann. +% \begin{macrocode} +\newenvironment{notice}[1][]{% + \cleardoubleoddpage% + \def\@headline{\noticename}% + \TUD@parameter@family{tudpage}{% + \TUD@parameter@def{headline}{\def\@headline{##1}}% + \TUD@parameter@let{heading}{headline}% + \TUD@parameter@let{line}{headline}% + \TUD@parameter@handler@default{headline}% + }% +% \end{macrocode} +% Es wird zu Beginn das angegebene Datum oben auf der rechten Seite ausgegeben. +% Anschließend wird die Überschrift und der gegebene Titel gesetzt. +% \begin{macrocode} + \tudpage[pagestyle=empty,cdhead=date,#1]% + \tudbookmark{\noticename}{notice}% + \ifx\@headline\@empty\else% + \section*{\@headline}% + \fi% +}{% +% \end{macrocode} +% Wenn keine Kontaktperson direkt angegeben wurden, werden die Informationen der +% angegeben Betreuer verwendet. Wenn eine Personenangabe gefunden wurde, werden +% die Kontaktdaten ausgegeben. +% \begin{macrocode} + \ifx\@contactperson\@empty\let\@contactperson\@supervisor\fi% + \ifx\@contactperson\@empty\else% + \removelastskip% + \ifdim\parskip>\z@\vskip\parskip\else\vskip\topsep\fi% + \renewcommand*\tud@split@contactperson@do[2]{% + \tud@multiple@fields@store{@contactperson}{##1}% + \tud@multiple@fields@preset{@contactperson}{}{##1}% + \begin{tabular}[t]{@{}l@{}}% + \ignorespaces##1\tabularnewline% + \ifx\@office\@empty\else\@office\tabularnewline\fi% + \ifx\@telephone\@empty\else\@telephone\tabularnewline\fi% + \ifx\@telefax\@empty\else\@telefax\tabularnewline\fi% + \ifx\@emailaddress\@empty\else\@emailaddress\tabularnewline\fi% + \end{tabular}% + \tud@multiple@fields@restore{@contactperson}% + \tud@multiple@@@split{##2}{\hfill}% + }% + \subsection*{\contactpersonname}% + \noindent\tud@multiple@split{@contactperson}\hfill\null% + \fi% + \endtudpage% + \aftergroup\cleardoublepage% +} +% \end{macrocode} +% \end{parameter}^^A line +% \end{parameter}^^A heading +% \end{parameter}^^A headline +% \end{environment}^^A notice +% \begin{macro}{\noticeform} +% Dies soll die Standardform eines Aushangs für eine Abschlussarbeit sein. Im +% ersten Argument wird kurz der Inhalt zusammengefasst, im zweiten Argument +% werden die Arbeitsschwerpunkte beschrieben. +% \begin{macrocode} +\newcommand\noticeform[3][]{% + \begin{notice}[#1]% + \ifblank{#2}{}{% + \ifx\@@title\@empty\else% + \minisec{\expandonce{\@@title}}\medskip% + \fi% + #2% + }% + \ifblank{#3}{}{% + \minisec{\focusname}\smallskip% + \begin{itemize}\tud@RaggedRight% + #3% + \end{itemize}% + }% + \end{notice}% +} +% \end{macrocode} +% \end{macro}^^A \noticeform +% +% \iffalse +%</package> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-texindy.dtx b/macros/latex/contrib/tudscr/source/tudscr-texindy.dtx new file mode 100644 index 0000000000..a666c74ef5 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-texindy.dtx @@ -0,0 +1,605 @@ +% \CheckSum{491} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\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} +%</dtx> +% \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 +%</doc> +% \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 +%<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-\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% +%</doc> +% \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% +%</doc> + (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% + )% +%</doc> + }% +% \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 }% +%</!doc> +% \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)% + }% +%</!doc&class> +% \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% +%</doc> +% \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% +%<!doc> \space:open "\string\,\string\dotfill\string\,"% +%<doc> \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> +%<*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> +%<*!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 +%</class> +% \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 +%</!doc> +% \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} +%<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 +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-title.dtx b/macros/latex/contrib/tudscr/source/tudscr-title.dtx new file mode 100644 index 0000000000..b6ec69ff30 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-title.dtx @@ -0,0 +1,1604 @@ +% \CheckSum{1406} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-title.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-title.dtx}[2019/08/20 v2.06c TUD-Script\space% + (title)% +] +% +% \iffalse +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-title.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.02}{2014/06/23}{Paket \pkg{titlepage} nicht weiter unterstützt}^^A +% \changes{v2.05}{2015/07/13}{Titel für Poster}^^A +% +% \section{Titelei für die \TUDScript-Klassen} +% +% Zusätzlich zu den \KOMAScript-Varianten werde für die \TUDScript-Klassen +% spezielle, im \TUDCD gehaltene Ausführungen von Titelseite und Titelkopf +% bereitgestellt. Zusätzlich gibt es auch eine Umschlagsseite (Cover), welche +% in beiden Gestaltungsvarianten genutzt werden kann. +% +% Für Titelseite und Titelkopf werden durch \TUDScript eine monochrome Version, +% eine Version mit leichtem Farbeinsatz und eine durchweg farbige Version im +% \TUDCD bereitgestellt. Dabei wird auch das Aussehen und die Position des +% Titels analog zu den Überschriften auf Teile- und Kapitelseiten festgelegt. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*class&body> +% \fi +% +% \subsection{Optionen und Schriftelemente für die Titelei} +% +% \iffalse +%</class&body> +%<*class&option> +%<*book|report|article> +% \fi +% +% \begin{option}{subjectthesis} +% \begin{macro}{\if@tud@subjectthesis} +% Die alte \cls{tudbook}-Klasse hat den Typ der Arbeit in der Betreffzeile des +% Titels gesetzt. Um dieses Verhalten nachbilden zu können, wird diese Option +% zur Verfügung gestellt. +% \begin{macrocode} +\newif\if@tud@subjectthesis +\TUD@key{subjectthesis}[true]{% + \TUD@set@ifkey{subjectthesis}{@tud@subjectthesis}{#1}% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@subjectthesis +% \end{option}^^A subjectthesis +% \begin{option}{titlesignature} +% \changes{v2.06}{2018/08/21}{neu}^^A +% \begin{macro}{\if@tud@titlesignature} +% \changes{v2.06}{2018/08/21}{neu}^^A +% Von einigen Fakultäten wird eine Unterschrift der Autoren auf der Titelseite +% verlangt. Diese Option dient zum Aktivieren dieser Unterschriftenzeile am +% Ende der Titelseite. +% \begin{macrocode} +\newif\if@tud@titlesignature +\TUD@key{titlesignature}[true]{% + \TUD@set@ifkey{titlesignature}{@tud@titlesignature}{#1}% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@titlesignature +% \end{option}^^A titlesignature +% +% \iffalse +%</book|report|article> +%<*poster> +% \fi +% +% \begin{option}{titlepage} +% \begin{macro}{\tud@titlepage@deactivate} +% Für Poster gibt es keine separate Titelseite sondern nur einen Titelkopf. +% Falls die falsche Einstellung gewählt ist, wird diese deaktiviert und eine +% Warnung ausgegeben. +% \begin{macrocode} +\DefineFamilyMember{KOMA} +\DefineFamilyKey{KOMA}{titlepage}[true]{% + \TUD@set@numkey{titlepage}{@tempa}{\TUD@bool@numkey,{firstiscover}{2}}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \AtEndOfFamilyOptions{\tud@titlepage@deactivate}% + \fi% +} +\newcommand*\tud@titlepage@deactivate{% + \if@titlepage% + \KOMAoptions{titlepage=false}% + \ClassWarning{\TUD@Class@Name}{% + The class `\TUD@Class@Name' can't be used with\MessageBreak% + activated titlepage option. It will be enforced to\MessageBreak% + `titlepage=false'% + }% + \renewcommand*\tud@titlepage@deactivate{% + \if@titlepage\KOMAoptions{titlepage=false}\fi% + }% + \fi% +} +\AtBeginDocument{\tud@titlepage@deactivate} +% \end{macrocode} +% \end{macro}^^A \tud@titlepage@deactivate +% \end{option}^^A titlepage +% +% \iffalse +%</poster> +%</class&option> +%<*class&body> +% \fi +% +% \begin{KOMAfont}{thesis} +% \begin{KOMAfont}{titlepage} +% \changes{v2.01}{2014/04/24}{Explizite Wahl der genutzten Schriftstärke}^^A +% \changes{v2.02}{2014/08/29}{Anpassungen für \pkg{fontspec}}^^A +% Diese Font-Elemente werden auf der Titelseite verwendet. \opt{thesis}, um den +% Typ der Arbeit und ggf. den zu erlangenden akademischen Grad zu setzen. +% Allerdings kommt Letzteres nur zum Tragen, wenn die Option \opt{subjectthesis} +% deaktiviert ist. Es wird die gleiche Schrift wie für den Titel verwendet, +% allerdings etwas kleiner. \opt{titlepage} für alle Zusatzinformationen wie +% Autor, Datum etc. +% \begin{macrocode} +%<*book|report|article> +\newkomafont{thesis}{% + \usekomafont{title}% + \tud@thesis@fontsize% +} +%</book|report|article> +\newkomafont{titlepage}{% + \raggedtitle% + \sffamily% + \mdseries% + \usesizeofkomafont{subsection}% + \tud@color{\tud@title@fontcolor}% +} +% \end{macrocode} +% \end{KOMAfont}^^A titlepage +% \end{KOMAfont}^^A thesis +% +% \subsection{Titelseite und Titelkopf} +% \subsubsection{Parameter für Titelseite und Titelkopf} +% +% \begin{macro}{\thanks} +% \begin{macro}{\footnotemark} +% Die Befehle \cs{thanks} und \cs{footnotemark} werden mit \cs{robustify} +% behandelt, um die Makros vor dem Expandieren zu schützen. Dies ist z.\,B. für +% \cs{tud@multiple@split} aber auch für weitere Felder auf dem Titel nötig. +% \begin{macrocode} +\robustify{\thanks} +\robustify{\footnotemark} +% \end{macrocode} +% \end{macro}^^A \footnotemark +% \end{macro}^^A \thanks +% \begin{macro}{\tud@maketitle} +% \changes{v2.01a}{2014/06/03}{Fehler bei Nutzung von \cs{subtitle} behoben}^^A +% \changes{v2.02}{2014/06/23}{\val{firstiscover} wird als Wert für die Option +% \opt{titlepage} unterstützt}^^A +% \changes{v2.02}{2014/07/19}{Im zweispaltigen Satz wird für den Titelkopf +% \cs{tud@title@twocolumn} verwendet}^^A +% \changes{v2.02}{2014/09/05}{Titelseite mit \cs{tud@maketitle@page}}^^A +% \changes{v2.06}{2018/08/16}{Unterstützung von \cs{frontispiece}}^^A +% \changes{v2.06}{2018/08/21}{\cs{emailaddress} für Autorangaben}^^A +% \changes{v2.06}{2018/08/21}{Unterschriftenfeld für Autoren}^^A +% \begin{macro}{\tud@title@pagenumber} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{parameter}{cdtitle} +% \changes{v2.03}{2015/01/12}{neu}^^A +% \begin{parameter}{cd} +% \changes{v2.03}{2015/01/12}{neu}^^A +% \begin{parameter}{pagenumber} +% \changes{v2.02}{2014/09/05}{neu}^^A +% Bei der entsprechend gewählten Layoutoption, wird eine neue Titelseite im \CD +% gesetzt. Damit auf das Standardverhalten von \KOMAScript{} zurückgestellt +% werden kann, wird der ursprüngliche \cs{maketitle}-Befehl bei der Abarbeitung +% der Layoutoptionen gesichert (siehe \cs{tud@cd@process}) und kann ggf. +% wiederhergestellt bzw. mit \cs{tud@cs@use} verwendet werden. Ist das Layout +% des \CDs gefordert wird entweder mit \cs{tud@maketitle@page} eine Titelseite +% gesetzt~-- wobei sich diese in ihrer Struktur am originalen \cs{maketitle} +% orientiert~-- oder das Titelkopflayout wird angepasst. +% \begin{macrocode} +\newcommand*\tud@title@pagenumber{} +\let\tud@title@pagenumber\relax +\newcommand*\tud@maketitle[1][]{% + \begingroup% + \cleardoublepage% +% \end{macrocode} +% Das optionale Argument wird für das Setzen der Parameter verwendet. +% \begin{macrocode} + \TUD@parameter@set{title}{#1}% +% \end{macrocode} +% Ist das \CD für den Titel deaktiviert, wird mit \cs{tud@cs@use} der originale +% \KOMAScript-Befehl \cs{maketitle} aufgerufen. Wird die erste Seite als Cover +% gesetzt, werden mit \cs{tud@cover@fixmargins} ggf. die Ränder an das gegebene +% Layout von \pkg{geometry} angepasst. +% \begin{macrocode} + \ifcase\tud@cd@title@num\relax% false + \if@titlepageiscoverpage% + \tud@cover@fixmargins% + \fi% + \ifx\tud@title@pagenumber\relax% + \tud@cs@use{maketitle}% + \else% + \tud@cs@use{maketitle}[\tud@title@pagenumber]% + \fi% + \tud@if@tudheadings{\currentpagestyle}{% + \ifstr{\titlepagestyle}{empty}{\thispagestyle{empty.tudheadings}}{}% + }{}% +% \end{macrocode} +% Für die \TUDScript-Klassen gibt es für doe Titleseite sowie den Titelkopf +% separate Befehle. Sollte keine explizite Auswahl der Schriften erfolgt sein, +% so werden die \CD-Schriften aktiviert. +% \begin{macrocode} + \else% !false + \if@tud@parameter@ps@font@set\else% + \if@tud@cdfont@active\else% + \if@tud@cdfont@heavy% + \TUDoptions{cdfont=heavy}% + \else% + \TUDoptions{cdfont=true}% + \fi% + \fi% + \fi% +%<*book|report|article> + \if@titlepage% + \tud@maketitle@page% + \else% +%</book|report|article> + \tud@maketitle@inpage% +%<*book|report|article> + \fi% +%</book|report|article> + \fi% + \endgroup% + \setcounter{footnote}{0}% + \global\let\and\relax% +} +% \end{macrocode} +% Die einzelnen Parameter dienen zur Einstellung der Titelseite und entsprechen +% in ihrem Verhalten den gleichnamigen Klassenoptionen. +% \begin{macrocode} +\TUD@parameter@family{title}{% +%<*book|report|article> + \TUD@parameter@def{titlepage}[true]{\KOMAoption{titlepage}{#1}}% + \TUD@parameter@def{titlesignature}[true]{\TUDoption{titlesignature}{#1}}% +%</book|report|article> + \TUD@parameter@def{pagenumber}{\def\tud@title@pagenumber{#1}}% + \TUD@parameter@def{cdtitle}[true]{\TUDoption{cdtitle}{#1}}% + \TUD@parameter@let{cd}{cdtitle}% + \TUD@parameter@def{cdgeometry}[true]{\TUDoption{cdgeometry}{#1}}% +% \end{macrocode} +% Mit \cs{TUD@parameter@ps@def} werden alle verfügbaren Parameter für +% die Kopf- und Fußzeilen definiert. +% \begin{macrocode} + \TUD@parameter@ps@def{#1}% +% \end{macrocode} +% Für den Fall, dass ein Wert nicht in der Schlüssel"=Wert"=Notation angegeben +% wurde, wird versucht, das gegebene Argument als Seitenzahl zu verwenden. +% \begin{macrocode} + \TUD@parameter@handler@value{pagenumber}% +} +% \end{macrocode} +% \end{parameter}^^A pagenumber +% \end{parameter}^^A cd +% \end{parameter}^^A cdtitle +% \end{macro}^^A \tud@title@pagenumber +% \end{macro}^^A \tud@maketitle +% \begin{macro}{\maketitle} +% \begin{environment}{titlepage} +% Der originale Befehl wird gesichert und danach überschrieben. +% \begin{macrocode} +\tud@cs@store{maketitle} +\let\maketitle\tud@maketitle +% \end{macrocode} +% Abschließend wird dafür Sorge getragen, dass bei einem aktivierten Seitenstil +% aus der \pgs{tudheadings}-Reihe der Titel ebenfalls in diesem gesetzt wird, +% auch wenn das Layout des \CDs selber nicht aktiv ist. +% \begin{macrocode} +\patchcmd{\titlepage}{\thispagestyle{empty}}{% + \tud@if@tudheadings{\currentpagestyle}{% + \thispagestyle{empty.tudheadings}% + }{% + \thispagestyle{empty}% + }% +}{}{\tud@patch@wrn{titlepage}} +% \end{macrocode} +% \end{environment}^^A titlepage +% \end{macro}^^A \maketitle +% +% \iffalse +%<*book|report|article> +% \fi +% +% \subsubsection{Die Definition der Titelseite} +% +% \begin{macro}{\tud@maketitle@page} +% \changes{v2.02}{2014/09/05}{neu}^^A +% \begin{macro}{\tud@titleback} +% Bei der entsprechend gewählten Layoutoption, wird eine neue Titelseite im \CD +% gesetzt. Damit auf das Standardverhalten von \KOMAScript{} zurückgestellt +% werden kann, wird der standardmäßige \cs{maketitle}-Befehl nur wenn notwendig +% überschrieben (siehe \cs{tud@cd@process}) und kann ggf. wiederhergestellt +% werden. Der Befehl selbst orientiert sich dabei in seiner Struktur an dem +% originalen \cs{maketitle}. Für die ggf. farbige Ausgabe der Titelrückseite +% wird das Hilfmakro \cs{tud@titleback} definiert. Eine Seitenzahl für den +% Titel kann mit \cs{tud@title@pagenumber} angegeben werden. +% \begin{macrocode} +\newcommand*\tud@titleback{} +\newcommand*\tud@maketitle@page{% +% \end{macrocode} +% Es wird durch die \KOMAScript-Option \opt{titlepage} unterschieden, ob eine +% Titelseite oder aber ein Titelkopf gesetzt werden soll. In Abhängigkeit davon +% werden Farben für die Schriften und den Seitenhintergrund festgelegt. Hierfür +% wird die entsprechende Layoutoption ausgewertet und entsprechend dieser die +% Werte belegt. +% \begin{macrocode} + \renewcommand*\tud@title@fontcolor{}% + \ifcase\tud@cd@title@num\relax\or\or% litecolor + \renewcommand*\tud@title@fontcolor{HKS41}% + \or% barcolor + \renewcommand*\tud@title@fontcolor{HKS41}% + \or% bicolor + \renewcommand*\tud@title@fontcolor{HKS41}% + \or% color + \renewcommand*\tud@title@fontcolor{HKS41!30}% + \or% full + \renewcommand*\tud@title@fontcolor{HKS41!30}% + \fi% +% \end{macrocode} +% Die Titelseite mit unterschiedlich Varianten der farbigen Ausprägung. +% \begin{macrocode} + \begin{titlepage}% + \tud@cd@specialpage@set{title}% +% \end{macrocode} +% Dieser Teil entspricht der Standarddefinition. Für das Setzen des Covers ist +% ein Großteil der Einstellungen irrelevant und wird übersrpungen. +% \begin{macrocode} + \ifx\tud@title@pagenumber\relax\else% + \setcounter{page}{\tud@title@pagenumber}% + \fi% +% \end{macrocode} +% Dieser Teil entspricht der Standarddefinition. Für das Setzen des Covers ist +% ein Großteil der Einstellungen irrelevant und wird übersrpungen. +% \begin{macrocode} + \if@tud@coverpage\else% + \addtokomafont{footnote}{\sffamily}% + \let\footnotesize\small% + \let\footnoterule\relax% + \let\footnote\thanks% + \renewcommand*\thefootnote{\@fnsymbol\c@footnote}% + \let\@oldmakefnmark\@makefnmark% + \renewcommand*\@makefnmark{\rlap\@oldmakefnmark}% +% \end{macrocode} +% Das Paket \pkg{hyperref} definiert im Normalfall die Fußnoten so um, dass es +% anklickbare Links erzeugt. Damit dies auf der Titelseite zu ungewollten +% Effekten führt, werden die Hyperlinks hier deaktiviert. Leider macht dies +% \pkg{hyperref} direkt beim Laden. Da die \TUDScript-Klassen aber nun mal zwei +% unterschiedliche Titel bereitstellen und die Möglichkeit bestehen soll, dass +% Layout per später Optionswahl noch zu ändern, muss der interne Code aus +% \pkg{hyperref} hier noch einmal für den TUD-Titel aufgerufen werden. +% \begin{macrocode} + \tud@x@hyperref@realfootnotes% +% \end{macrocode} +% Die Option für eine Umschlagseite \opt{titlepage}|=|\val{firstiscover} wird +% im Gegensatz zu den \KOMAScript-Klassen nur für einen optionalen Schmutztitel +% \cs{extratitle} und nicht für die eigentliche Titelseite unterstützt. Für +% dieses Unterfangen ist bei \TUDScript der Befehl \cs{makecover} mit den +% dazugehörigen Parametern zu nutzen. +% \begin{macrocode} + \ifx\@extratitle\@empty% + \if@titlepageiscoverpage% + \ClassWarning{\TUD@Class@Name}{% + Using option `titlepage=firstiscover' is only\MessageBreak% + possible with an extra title. Alternatively you can\MessageBreak% + create a cover with `\string\makecover'% + }% + \@titlepageiscoverpagefalse% + \fi% + \ifx\@frontispiece\@empty\else% + \if@twoside\null\fi% + \fi% + \else% +% \end{macrocode} +% Der Teil ist aus den \KOMAScript-Klassen übernommen, damit werden die +% Seitenränder für ein Cover festgelegt. +% \begin{macrocode} + \if@titlepageiscoverpage% + \edef\titlepage@restore{% + \noexpand\endgroup% + \noexpand\global\noexpand\@colht\the\@colht% + \noexpand\global\noexpand\@colroom\the\@colroom% + \noexpand\global\vsize\the\vsize% + \noexpand\global\noexpand\@titlepageiscoverpagefalse% + \noexpand\let\noexpand\titlepage@restore\noexpand\relax% + }% + \begingroup% + \tud@cover@setmargins% + \else% + \let\titlepage@restore\relax% + \fi% + \noindent\@extratitle% + \fi% + \next@tpage% + \ifx\@frontispiece\@empty\else% + \noindent\@frontispiece% + \fi% + \next@tdpage% + \fi% +% \end{macrocode} +% Das ganze Layout wird vertikal so verschoben, dass der Titel auf der gleichen +% Höhe steht wie die Überschriften auf Teil- und Kapitelseiten. +% \begin{macrocode} + \tud@cd@headstartvskip% + \TUD@deprecated@lengthcs{pageheadingsvskip}% + \vspace*{\tud@dim@pageheadingsvskip}% + \tud@cd@vphantom% + \setparsizes{\z@}{\z@}{\z@\@plus1fil}\par@updaterelative% +% \end{macrocode} +% Damit die Farbeinstellungen der Schriften lokal begrenzt bleiben, wird dieser +% Teil des Titels in einer Gruppe gesetzt. +% \begin{macrocode} + {\usekomafont{titlepage}{% +% \end{macrocode} +% Zunächst der Kopf des Titels. +% \begin{macrocode} + \tud@maketitle@head% +% \end{macrocode} +% Nachdem bereits \cs{@titlehead} und \cs{@subject} gesetzt worden, folgen nun +% die weiteren Felder wie vom \CD~-- mehr oder weniger~-- vorgegeben auf der +% Titelseite in unterschiedlichen Größen und Schriftstärken. +% \begin{macrocode} + {\usekomafont{title}{\tud@title@format{\@title}\par}}% +% \end{macrocode} +% Der Untertitel wird ggf. in der gleichen Schrift gesetzt wie der Titel, +% allerdings etwas kleiner. +% \begin{macrocode} + \ifx\@subtitle\@empty\else% + {\usekomafont{partnumber}{\nobreak\tud@sec@strut}}% + {\usekomafont{subtitle}{\tud@title@format{\@subtitle}\par}}% + \fi% + \vskip 2\bigskipamount% +% \end{macrocode} +% Ausgabe eines Autors oder mehrerer Autoren ggf. mit Zusatzinformationen. +% \begin{macrocode} + \let\tud@split@author@do\tud@split@author@title% + \tud@multiple@split{@author}\par% + \vskip 2ex\@plus1ex\@minus1ex% +% \end{macrocode} +% Die Titelseite unterscheidet sich ein wenig, abhängig davon ob eine eine +% Abschlussarbeit gesetzt wird oder nicht. Falls dies nicht der Fall ist, dann +% wird das angegebene bzw. das heutige Datum und ggf. die Ergänzung ausgegeben. +% \begin{macrocode} + \ifx\@thesis\@empty% + \if@tud@coverpage\else% + \ifx\@date\@empty\else% + \vskip 2ex\@plus.1fill% + {\usekomafont{date}{\tud@date@print\par}}% + \fi% + \fi% + \vskip 2ex\@plus.25fill% +% \end{macrocode} +% Ist eine Abschlussarbeit angegeben, so wird zusätzlich unterschieden, ob +% diese bereits~-- gesteuert durch die Option \opt{subjectthesis}~-- in der +% Betreffzeile angegeben wurde oder aber separat und in deutlicherer Form auf +% dem Titelblatt ausgegeben werden soll. Sowohl Arbeitstyp als auf akademischer +% Grad werden dabei im Verhältnis 1:2 zwischen allen weiteren Angaben auf dem +% Titel vertikal ausgerichtet. +% \begin{macrocode} + \else% + \vskip 2ex\@plus.25fill% + \if@tud@subjectthesis\else% + {\usekomafont{thesis}{\tud@title@format{\@thesis}\par}}% + \vskip 2ex\@plus1ex\@minus1ex% + \fi% +% \end{macrocode} +% Ebenfalls wird in Abhängigkeit von der Option \opt{subjectthesis} der +% angestrebte akademische Grad ausgegeben. +% \begin{macrocode} + \if@tud@coverpage\else% + \ifx\@graduation\@empty\else% + \def\@tempc{% + \@graduation% + \ifx\@graduationabbreviation\@empty\else% + \nobreakspace\@graduationabbreviation% + \fi% + }% + {\usekomafont{titlepage}{\graduationtext\par}}% + \vskip 2.5ex\@plus1ex\@minus1ex% + {\usekomafont{thesis}{\tud@title@format{\@tempc}\par}}% + \vskip 3ex\@plus1ex\@minus1ex% + \fi% + \fi% + \vskip 2ex\@plus.5fill% + \fi% +% \end{macrocode} +% \ToDo{Befehl zum Angeben optionaler Inhalte, bspw. ein Bild}[v2.07] +% Wenn Betreuer angegeben wurden, dann werden diese auf dem Titel ausgeben. Um +% diese Titelseite auch für Dissertationen verwenden zu können, ist ein Feld +% für Gutachter vorgesehen. Außerdem wird für Promotionsschriften ein Feld für +% Fachreferenten bereitgehalten. Das Format der Ausgabe ist dabei identisch. +% Darauf folgend wird der betreuende Hochschullehrer ausgegeben. +% \begin{macrocode} + \if@tud@coverpage\else% + \tud@title@names{referee}% + \tud@title@names{advisor}% + \tud@title@names{supervisor}% + \tud@title@names{professor}% +% \end{macrocode} +% Bei einer Abschlussarbeit gehört normalerweise auch ein Abgabedatum auf den +% Titel. Sollte keines angegeben sein, so erscheint eine Warnung. Es wird an +% Stelle dessen das angegebene Enddatum oder aber das heutige Datum verwendet. +% Durch das Paket \pkg{tudscrsupervisor} wird zusätzlich das Feld \cs{@duedate} +% definiert, welches hier ggf. für auf ein nutzbares Datum geprüft wird. +% \begin{macrocode} + \ifx\@thesis\@empty\else% + \tud@date@check% + \ifx\@date\@empty\else% + \vskip 2ex\@plus1ex\@minus1ex% + \ifxblank{\datetext}{}{\datetext\tud@title@delimiter}% + {\usekomafont{date}{\tud@date@print\par}}% +% \end{macrocode} +% Zusätzlich kann noch ein Datum der mündlichen Verteidigung angegeben werden. +% \begin{macrocode} + \ifx\@defensedate\@empty\else% + \ifxblank{\defensedatetext}{}{% + \defensedatetext\tud@title@delimiter% + }% + {\usekomafont{date}{\@defensedate\par}}% + \fi% + \fi% + \fi% +% \end{macrocode} +% Hier erfolgt die Ausgabe der Unterschriftenzeile, falls gewünscht. Ist nur +% ein Autor angegeben, wird die Box für die Unterschrift rechtsbündig erzeugt. +% \begin{macrocode} + \if@tud@titlesignature% + \let\tud@split@@author@do\tud@split@author@signature% + \vskip\tud@len@signatureskip\noindent% + \tud@ifin@and{\@@author}{}{\hfill}% + \tud@multiple@split{@@author}% + \fi% + \fi% +% \end{macrocode} +% Zu guter Letzt kann das Standard-Verlagsfeld befüllt werden. +% \begin{macrocode} + \ifx\@publishers\@empty\else% + \vskip 2ex\@plus.25fill% + {\usekomafont{publishers}{\@publishers\par}}% + \vskip\z@\@plus.25fill% + \fi% + }}% +% \end{macrocode} +% Die Rückseite des Titels wird~-- wie bei \KOMAScript~-- bloß bei zweiseitigem +% Satz ausgegeben. Für diese Klassen wird aufgrund der möglicherweise farbigen +% Rückseite das Hilfsmakro \cs{tud@titleback} benötigt. +% \begin{macrocode} + \let\tud@titleback\relax% + \if@twoside% + \@tempswatrue% + \ifx\@uppertitleback\@empty\ifx\@lowertitleback\@empty% + \@tempswafalse% + \fi\fi% + \if@tempswa% + \gdef\tud@titleback{% + \next@tpage% + \begin{minipage}[t]{\textwidth}% + \@uppertitleback% + \end{minipage}\par% + \vfill% + \begin{minipage}[b]{\textwidth}% + \@lowertitleback% + \end{minipage}\par% + \@thanks\let\@thanks\@empty% + }% + \fi% + \fi% +% \end{macrocode} +% Es werden Schriftart, die Schriftstärke, sowie die Farbe der Seite und des +% Kopfes und die Linienstärke des Querbalkens und die \DDC-Logos aus den +% Einstellungen übernommen. +% \begin{macrocode} + \def\@tempa{% + \renewcommand*\tud@pagecolor{}% + \ifcase\tud@cd@title@num\relax\or% true + \tud@locked@num@preset{tud@head@bar@num}{0}% + \or% litecolor + \tud@locked@num@set{tud@head@bar@num}{1}% + \or% barcolor + \tud@locked@num@set{tud@head@bar@num}{2}% + \or% bicolor + \tud@locked@num@set{tud@head@bar@num}{3}% + \or% color + \renewcommand*\tud@pagecolor{HKS41}% + \tud@locked@num@set{tud@head@bar@num}{1}% + \or% full + \renewcommand*\tud@pagecolor{HKS41}% + \tud@locked@num@set{tud@head@bar@num}{3}% + \fi% + \tud@color{\tud@title@fontcolor}% + \thispagestyle{empty.tudheadings}% +% \end{macrocode} +% Im Kompatibilitätsmodus für die Version~v2.02 wird im Zweifelsfall die Seite +% für den Fuß mit \DDC-Logo vergrößert. +% \begin{macrocode} + \tud@if@v@lower{2.03}{\tud@ddc@enlargepage}{}% + }% +% \end{macrocode} +% Bei der Ausgabe des Covers werden lediglich die Farb- und Schriftdefinitionen +% benötigt, die Seite kann danach beendet werden. +% \begin{macrocode} + \if@tud@coverpage% + \begingroup% + \@tempa% + \cleardoubleemptypage% + \endgroup% + \else% +% \end{macrocode} +% Beim Titel selbst muss noch ausgewertet werden, wie die Rückseite zu +% gestalten ist. Sollte als Klassenoption das strikte Beginnen aller Teile +% oder Kapitel auf einer rechten Seite aktiviert sein (\opt{open}|=|\val{right}) +% und zusätzlich bei farbigem \CD auch die Rückseiten farbig geleert werden, so +% erfolgt dies auch für die Titelseite. Die Klasse \cls{tudscrartcl} setzt +% lediglich die Titelseite farbig, die Rückseite niemals. +% \begin{macrocode} +%<*book|report> + \tud@cleardoublespecialpage[\tud@titleback]{% +%</book|report> +%<*article> + \begingroup% +%</article> + \@tempa% + \begingroup% + \let\thispagestyle\@gobble% + \next@tpage% + \endgroup% +%<*article> + \endgroup% + \tud@titleback% +%</article> +%<*book|report> + }% +%</book|report> +% \end{macrocode} +% Die Danksagung ist identisch zu \KOMAScript. +% \begin{macrocode} + \ifx\@dedication\@empty\else% + \next@tdpage\null\vfill% + {\centering\usekomafont{dedication}{\@dedication\par}}% + \vskip\z@\@plus3fill% + \@thanks\let\@thanks\@empty% + \cleardoubleemptypage% + \fi% + \fi% + \end{titlepage}% +} +% \end{macrocode} +% \end{macro}^^A \tud@titleback +% \end{macro}^^A \tud@maketitle@page +% +% \iffalse +%</book|report|article> +% \fi +% +% \subsubsection{Die Definition des Titelkopfes} +% +% \begin{macro}{\tud@maketitle@inpage} +% \changes{v2.05}{2015/07/13}{neu}^^A +% \begin{macro}{\tud@maketitle@@inpage} +% \changes{v2.05}{2015/07/13}{neu}^^A +% Das sind die internen Makros für einen Titelkopf (\opt{titlepage}|=|\val{no}), +% welche sich stark an den orginalen \KOMAScript-Befehlen orientieren. +% \begin{macrocode} +\newcommand*\tud@maketitle@inpage{% + \renewcommand*\tud@title@fontcolor{}% + \ifcase\tud@cd@title@num\relax\or\else% *color + \ifstr{\tud@pagecolor}{HKS41}{}{\renewcommand*\tud@title@fontcolor{HKS41}}% + \fi% + \par% + \ifx\tud@title@pagenumber\relax\else% + \ifnum\tud@title@pagenumber=\@ne\relax\else% + \ClassWarning{\TUD@Class@Name}{% + Optional argument of \string\maketitle\space ignored\MessageBreak% + at notitlepage-mode% + }% + \fi% + \fi% +% \end{macrocode} +% Dieser Teil ist mehr oder weniger funktional identisch zu \KOMAScript. +% \begin{macrocode} + \begingroup% + \let\titlepage@restore\relax% + \renewcommand*\thefootnote{\@fnsymbol\c@footnote}% + \let\@oldmakefnmark\@makefnmark% + \renewcommand*\@makefnmark{\rlap\@oldmakefnmark}% + \next@tdpage% +% \end{macrocode} +% Hier wird überprüft, ob das Dokument zweispaltig gesetzt wird und zusätzlich +% das Paket \pkg{multicol} geladen wurde. Ist letzteres nicht der Fall, wird +% der Titel einspaltig ausgegeben und anschließend der im Zweispaltensatz +% begonnen. +% \begin{macrocode} + \def\tud@res@a##1{##1}% + \if@twocolumn\ifnum\col@number>\@ne\relax% + \def\tud@res@a##1{\twocolumn[{##1}]}% + \fi\fi% + \ifx\@extratitle\@empty% + \ifx\@frontispiece\@empty\else% + \if@twoside\null\fi% + \fi + \else% + \tud@res@a{\@makeextratitle}% + \fi% + \next@tpage% + \ifx\@frontispiece\@empty\else% + \tud@res@a{\@makefrontispiece}% + \fi% + \next@tdpage% + \tud@res@a{\tud@maketitle@@inpage}% + \ifx\titlepagestyle\@empty\else\thispagestyle{\titlepagestyle}\fi% + \@thanks% + \endgroup% +} +% \end{macrocode} +% Hier erfolgt die Ausgabe des Titelkopfes. +% \begin{macrocode} +\newcommand*\tud@maketitle@@inpage{% + \global\@topnum=\z@% + \tud@cd@headstartvskip% +%<*book|report|article> + \TUD@deprecated@lengthcs{headingsvskip}% + \vspace*{\tud@dim@headingsvskip}% + \tud@cd@vphantom% +%</book|report|article> + \setparsizes{\z@}{\z@}{\z@\@plus1fil}\par@updaterelative% +% \end{macrocode} +% Damit die Farbeinstellungen der Schriften lokal begrenzt bleiben, wird dieser +% Teil des Titels in einer Gruppe gesetzt. Außerdem werden +% wie auch für die Titelseite die Hyperlinks der Fußnoten deaktiviert. +% \begin{macrocode} + {\usekomafont{titlepage}{% + \tud@x@hyperref@realfootnotes% +% \end{macrocode} +% Bei einem Titelkopf ist nur die Variante möglich, dass eine Abschlussarbeit +% in der Betreffzeile angegeben wird. +% \begin{macrocode} +%<*book|report|article> + \TUDoptions{subjectthesis=true}% +%</book|report|article> +% \end{macrocode} +% Ähnlich wie bei der Titelseite wird auch beim Titelkopf die Inhalte von +% \cs{@titlehead} und \cs{@subject} so nach oben verschoben, dass der Titel +% selbst auf der gewünschten Höhe landet. +% \begin{macrocode} + \tud@maketitle@head% +% \end{macrocode} +% Der eigentliche Titel nach dem Titelkopf. +% \begin{macrocode} + {\usekomafont{title}{\tud@title@format{\@title}\par}}% + \ifx\@subtitle\@empty\else% + \vskip 1ex\@plus.5ex\@minus.5ex% + {\usekomafont{subtitle}{\tud@title@format{\@subtitle}\par}}% + \fi% + \vskip 2ex\@plus1ex\@minus1ex% +% \end{macrocode} +% Ausgabe eines Autors oder mehrerer Autoren ggf. mit Zusatzinformationen. +% \begin{macrocode} +%<*book|report|article> + \vskip 2\bigskipamount% + \let\tud@split@author@do\tud@split@author@title% + \tud@multiple@split{@author}\par% +% \end{macrocode} +% Ausgabe von Datum, Verlag und Danksagung wie im Original. +% \begin{macrocode} + \ifx\@date\@empty\else% + \vskip 2ex\@plus1ex\@minus1ex% + {\usekomafont{date}{\tud@date@print\par}}% + \fi% + \ifx\@publishers\@empty\else% + \vskip 2ex\@plus1ex\@minus1ex% + {\usekomafont{publishers}{\@publishers\par}}% + \fi% + \ifx\@dedication\@empty\else% + \vskip 2ex\@plus1ex\@minus1ex% + {\centering\usekomafont{dedication}{\@dedication\par}}% + \fi% +% \end{macrocode} +% Falls Felder genutzt wurden, die nur auf der Titelseite, nicht aber im +% Titelkopf ausgegeben werden, dann wird eine Warnung ausgegeben. +% \begin{macrocode} + \ifx\@graduation\@empty\else\tud@title@wrn{graduation}\fi% + \ifx\@referee\@empty\else\tud@title@wrn{referee}\fi% + \ifx\@advisor\@empty\else\tud@title@wrn{advisor}\fi% + \ifx\@supervisor\@empty\else\tud@title@wrn{supervisor}\fi% + \ifx\@professor\@empty\else\tud@title@wrn{professor}\fi% +% \end{macrocode} +% Am Ende wird noch etwas vertikaler Abstand eingefügt. +% \begin{macrocode} + \vskip 2\bigskipamount% +%</book|report|article> + \ifnum\col@number>\@ne\relax% + \ifdefvoid{\multicolsep}{}{% + \ifisskip{\multicolsep}{\vspace{-\multicolsep}}{}% + }% + \fi% +% \end{macrocode} +% Wird das \DDC-Logo im Kompatibilitätsmodus für die Version~v2.02 gesetzt, +% muss dafür am unteren Rand entsprechend Platz gelassen werden. +% \begin{macrocode} + \tud@if@v@lower{2.03}{\tud@ddc@enlargepage[\titlepagestyle]}{}% + }}% +} +% \end{macrocode} +% \end{macro}^^A \tud@maketitle@@inpage +% \end{macro}^^A \tud@maketitle@inpage +% \begin{macro}{\tud@maketitle@head} +% \changes{v2.06}{2018/08/17}{neu}^^A +% Mit diesem Makro wird dafür gesorgt, dass Titelkopf und Typisierung so +% postioniert werden, dass der Titel selbst vertikal nicht verschoben wird. +% Hierfür wird von allem, was über der Überschrift positioniert werden soll, +% die Höhe bestimmt werden, um einen entsprechenden Offset einfügen zu können. +% Dafür wird eine temporäre Standardbox verwendet. In diesen wird der Inhalt +% für die beiden Felder \cs{@titlehead} bzw. \cs{@subject} abgelegt und die +% sich daraus kumulierende Höhe in \cs{@tempdima} gespeichert. Vor dem Setzen +% der Felder kann nun der notwendige vertikale Freiraum vor dem eigentlichen +% Titel für \cs{@titlehead} und \cs{@subject} abgezogen werden. Anschließend +% wird die Box ausgegeben und der Aufbau der Titelseite kann beginnen. +% \begin{macrocode} +\newcommand*\tud@maketitle@head{% + \setbox\z@\vbox{% + \ifx\@titlehead\@empty\else% + {\usekomafont{titlehead}{% + \begin{minipage}[t]{\textwidth}% + \@titlehead\tud@sec@strut% + \end{minipage}% + }}% + \fi% +%<*book|report|article> + \tud@thesis@tosubject% +%</book|report|article> + \ifx\@subject\@empty\else% + \par\medskip% + {\usekomafont{subject}{% + \@subject\tud@sec@strut% + }}% + \fi% + }% +% \end{macrocode} +% Der ermittelte Offset muss~-- warum auch immer~-- um \val{1pt} vergrößert +% werden. Zusätzlich wird ein mittlerer Abstand zwischen Kopf und Titel gesetzt. +% \begin{macrocode} + \setlength\@tempdima{\dimexpr\ht\z@+\dp\z@\relax}% + \ifdim\@tempdima>\z@\relax% +%<*book|report|article> + \vskip\dimexpr-\@tempdima-\p@-\medskipamount\relax% +%</book|report|article> + \usebox\z@\par\medskip% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@maketitle@inpage +% +% \subsubsection{Hilfsmakros für die Ausgabe} +% +% \begin{macro}{\tud@title@format} +% Für das Formatieren einzelner Felder auf dem Titel mit \cs{tud@sec@format} +% wird dieser Befehl definiert. Bei der Verwendung des Befehls \cs{thanks} auf +% der Titelseite soll sichergestellt werden, dass der Inhalt selbst nicht in +% Majuskeln gesetzt wird. +% \begin{macrocode} +\newcommand*\tud@title@format[1]{% + \begingroup% + \let\\\newline% +% \end{macrocode} +% Der Befehl \cs{thanks} wird so umdefiniert, dass der Inhalt in ein temporäres +% Makro gespeichert wird. Danach wird durch das Setzen einer temporären Box der +% Befehl \cs{thanks} ausgeführt und der Inhalt gesichert. Für die Ausführung von +% \cs{tud@sec@format} wird das Argument von \cs{thanks} ignoriert. Nachdem das +% gewünschte Feld in Majuskeln gesetzt wurde, wird die gespeicherte Fußnote +% ausgegeben. +% \begin{macrocode} + \let\tud@thanks\relax% + \def\thanks##1{\gdef\tud@thanks{##1}}% + \let\footnote\thanks% + \sbox\z@{#1}% + \let\thanks\@gobble% + \let\footnote\@gobble% + \tud@sec@format{#1}% + \edef\tud@res@a{% + \endgroup% + \ifx\tud@thanks\relax\else% + \noexpand\thanks{\expandonce\tud@thanks}% + \fi% + }% + \tud@res@a% +} +% \end{macrocode} +% \end{macro}^^A \tud@title@format +% +% \iffalse +%<*book|report|article> +% \fi +% +% \begin{macro}{\tud@thesis@tosubject} +% Bei der Verwendung der Option \opt{subjectthesis} wird zum einen geprüft, ob +% das Feld \cs{@thesis} gesetzt ist und zum anderen, ob das Feld \cs{@subject} +% auch leer ist. +% \begin{macrocode} +\newcommand*\tud@thesis@tosubject{% + \if@tud@subjectthesis\ifx\@thesis\@empty\else% + \ifx\@subject\@empty\else% + \ClassWarning{\TUD@Class@Name}{% + The option `subjectthesis' was activated, so\MessageBreak% + the field `subject' will be overwritten with the\MessageBreak% + given thesis% + }% + \fi% + \let\@subject\@thesis% + \fi\fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@thesis@tosubject +% \begin{macro}{\tud@title@names} +% Dieser Befehl dient zur getrennten Ausgabe von mehreren, mit dem Makro +% \cs{and} separierten Einträgen in den Feldern \cs{@supervisor}, \cs{@referee} +% und \cs{@advisor}. +% \begin{macrocode} +\newcommand*\tud@title@names[1]{% + \letcs\@tempa{@#1}% + \ifx\@tempa\@empty\else% + \def\and{% + \ifcsvoid{#1othername}{\par}{% + \vskip 1ex\@plus.5ex\@minus.5ex% + {\usekomafont{titlepage}{\csuse{#1othername}\par}}% + }% + \let\and\par% + }% + \vskip 1ex\@plus.5ex\@minus.5ex% + {\usekomafont{titlepage}{\csuse{#1name}\par}}% + {\usekomafont{author}{\csuse{@#1}\par}}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \tud@title@names +% \begin{macro}{\titledelimiter} +% \begin{macro}{\tud@title@delimiter} +% Dieses Makro wird für das Trennzeichen auf der Titelseite genutzt. +% \begin{macrocode} +\newcommand*\tud@title@delimiter{:\nobreakspace} +\newcommand*\titledelimiter[1]{\gdef\tud@title@delimiter{#1}} +% \end{macrocode} +% \end{macro}^^A \tud@title@delimiter +% \end{macro}^^A \titledelimiter +% \begin{macro}{\tud@split@author@title} +% \changes{v2.04}{2015/05/12}{neu}^^A +% \begin{macro}{\tud@newline@title} +% Das Makro \cs{tud@split@author@title} dient der formatierten Ausgabe aller +% Informationen für mehrere Autoren auf der Titelseite. +% \begin{macrocode} +\newcommand*\tud@newline@title{} +\newcommand*\tud@split@author@title[2]{% +% \end{macrocode} +% Zu Beginn werden alle Felder, welche innerhalb von \cs{@author} angegeben +% sind, gesichert. +% \begin{macrocode} + \tud@multiple@fields@store{@author}{#1}% +% \end{macrocode} +% Um die Abstände definiert zu setzen, wird \cs{tud@newline@title} verwendet. +% Sobald auch nur eine zusätzliche Information ausgegeben werden soll, wird ein +% etwas kleiner Abstand eingefügt. Anschließend wird jede Information einfach +% in einer neuen Zeile ausgegeben. +% \begin{macrocode} + \renewcommand*\tud@newline@title{% + \vskip .5ex\strut% + \def\tud@newline@title{\newline\strut}% + }% +% \end{macrocode} +% Die Felder \cs{@author} und ggf. \cs{@authormore} werden sowohl auf der +% Titelseite als auch im Titelkopf jedoch nicht auf der Umschlagseite +% ausgegeben. Gleiches gilt für E"~Mail-Adressen. +% \begin{macrocode} + {\usekomafont{author}{\ignorespaces#1\strut\unskip}}% + \if@tud@coverpage\else% + \ifx\@authormore\@empty\else% + \tud@newline@title% + \@authormore% + \fi% + \ifx\@emailaddress\@empty\else% + \tud@newline@title% + \@emailaddress% + \fi% +% \end{macrocode} +% Nur auf der Titelseite erfolgt die Ausgabe von Geburtsdatum, Geburtsort, +% Matrikelnummer und Immatrikulationsjahr. Sollte ein Titelkopf verwendet +% werden, so wird für jedes gesetzte Feld eine Warnung ausgegeben. +% \begin{macrocode} + \ifx\@dateofbirth\@empty\else% + \if@titlepage% + \tud@newline@title% + \ifxblank{\dateofbirthtext}{}{\dateofbirthtext\tud@title@delimiter}% + \@dateofbirth% + \ifx\@placeofbirth\@empty\else% + \nobreakspace\placeofbirthtext\nobreakspace\@placeofbirth% + \fi% + \else% + \tud@title@wrn{dateofbirth}% + \fi% + \fi% + \def\@tempc##1{% + \ifstr{\csuse{@##1}}{}{}{% + \if@titlepage% + \tud@newline@title% + \ifstr{\csuse{##1name}}{}{}{\csuse{##1name}\tud@title@delimiter}% + \csuse{@##1}% + \else% + \tud@title@wrn{##1}% + \fi% + }% + }% + \@tempc{course}% + \@tempc{discipline}% + \@tempc{matriculationnumber}% + \@tempc{matriculationyear}% + \fi% +% \end{macrocode} +% Zunächst werden die zuvor bestehenden Feldinhalte wiederhergestellt. Danach +% wird durch den Aufruf von \cs{tud@multiple@@@split} wird das übergebene +% \meta{Feld} sukzessive abgearbeitet. +% \begin{macrocode} + \tud@multiple@fields@restore{@author}% + \tud@multiple@@@split{#2}{\vskip 1.5ex}% +} +% \end{macrocode} +% \end{macro}^^A \tud@newline@title +% \end{macro}^^A \tud@split@author@title +% \begin{macro}{\tud@title@wrn} +% Bei der Nutzung eines Titelkopfes wird bloß eine reduzierte Menge an +% Informationen ausgegeben. Darauf wird der Anwender ggf. hingewiesen. +% \begin{macrocode} +\newcommand*\tud@title@wrn[1]{% + \ClassWarning{\TUD@Class@Name}{% + `\@backslashchar#1' has to be used with\MessageBreak% + activated titlepage option% + }% +} +% \end{macrocode} +% \end{macro}^^A \tud@title@wrn +% \begin{macro}{\tud@split@author@signature} +% \changes{v2.06}{2018/08/21}{neu}^^A +% Das Makro \cs{tud@split@author@signature} dient zum Erstellen von Feldern für +% Unterschriften der Autoren am Ende der Titelseite. +% \begin{macrocode} +\newcommand*\tud@split@author@signature[2]{% +% \end{macrocode} +% Zu Beginn werden alle Felder, welche innerhalb von \cs{@author} angegeben +% sind, gesichert. +% \begin{macrocode} + \tud@multiple@fields@store{@author}{#1}% +% \end{macrocode} +% Für jeden Autor wird in einer Box ein Unterschriftenfeld mit fester Breite +% erzeugt. Innerhalb der Box wird erst eine Linie und darunter der Name des +% Autors zentriert ausgegeben. +% \begin{macrocode} + \vbox{% + \hsize=.3\textwidth% + \centering% + \rule{.3\textwidth}{.05pt}\newline% + \ignorespaces#1\strut\unskip% + }% +% \end{macrocode} +% Zunächst werden die zuvor bestehenden Feldinhalte wiederhergestellt. Danach +% wird durch den Aufruf von \cs{tud@multiple@@@split} wird das übergebene +% \meta{Feld} sukzessive abgearbeitet. +% \begin{macrocode} + \tud@multiple@fields@restore{@author}% + \tud@multiple@@@split{#2}{\hfill}% +} +% \end{macrocode} +% \end{macro}^^A \tud@split@author@signature +% +% \iffalse +%</book|report|article> +% \fi +% +% \subsection{Einspaltige Titelei in zweispaltigen Dokumenten} +% +% \begin{macro}{\maketitleonecolumn} +% \changes{v2.02}{2014/08/16}{einspaltiger Text obligatorisch}^^A +% \begin{macro}{\tud@title@twocolumn} +% \changes{v2.03}{2015/01/13}{Bugfix für falsche Position des Titels}^^A +% \begin{macro}{\tud@title@box} +% Der Befehl \cs{maketitleonecolumn}\oarg{Parameter}\oarg{Inhalt} kann bei +% zweispaltigem Satz dazu genutzt werden, einen einspaltigen Titel zu bekommen. +% Beim der Verwendung einer Titelseite wird lediglich der Titel sowie +% anschließend ggf. \meta{Inhalt} einspaltig ausgegeben. Beim Satz eines +% Titelkopfes wird der Befehl \cs{tud@title@twocolumn} zur Ausgabe genutzt. +% \hrfn{http://www.komascript.de/node/1699}{Danke an Markus Kohm für die Hilfe}. +% \begin{macrocode} +\newcommand\maketitleonecolumn[2][]{% +% \end{macrocode} +% Hier erfolgt die Unterscheidung der Ausgabe, abhängig von der Option +% \opt{titlepage}. +% \begin{macrocode} + \if@twocolumn% +%<*book|report|article> + \if@titlepage% + \tud@maketitle[#1]% + \onecolumn{#2}\twocolumn% + \else% +%</book|report|article> + \tud@title@twocolumn{\tud@maketitle[#1]{#2}}% +%<*book|report|article> + \fi% +%</book|report|article> + \else% + \ClassError{\TUD@Class@Name}{% + `\string\maketitleonecolumn' can only be used in twocolumn mode% + }{}% + \fi% +} +% \end{macrocode} +% Es folgt die Verarbeitung des Inhaltes des Titelkopfes, welcher einspaltig +% gesetzt werden soll. Damit sich dieser auch über mehrere Seiten erstrecken +% kann, wird mit einer Box gearbeitet. +% \begin{macrocode} +\newsavebox\tud@title@box +\newcommand\tud@title@twocolumn[1]{% +% \end{macrocode} +% Zunächst wird auf einseitigen Satz umgeschaltet. Der zu schreibende Inhalt +% wird in einer Box gespeichert. Während des Zusammenbaus der Box sind keine +% expliziten \cs{newpage}- oder \cs{clearpage}-Befehle erlaubt. +% \begin{macrocode} + \onecolumn% + \begingroup% + \let\clearpage\relax% + \let\newpage\relax% +% \end{macrocode} +% Sollte der Inhalt der Box größer als die verfügbare Texthöhe des Satzspiegels +% sein, muss aufgrund der verwendeten Box ein zusätzlicher vertikaler Abstand +% von |.9\baselineskip| zur korrekten Postionierung der Überschrift eingefügt +% werden. +% \begin{macrocode} + \global\setbox\tud@title@box\vbox{% + \vspace*{.9\baselineskip}#1\bigskip% + }% + \endgroup% +% \end{macrocode} +% Als erstes muss geprüft werden, ob der Inhalt größer als der Textbereich ist. +% Vor der Version~v2.03 gab es für das \DDC-Logo einen abweichenden Satzspiegel +% der ggf. beachtet werden muss. +% \begin{macrocode} + \setlength\@tempdima{\textheight}% + \tud@if@v@lower{2.03}{% + \tud@ddc@check% + \ifcase\@tempb\relax\else% \tud@ddc@foot@num!=false + \setlength\@tempdima{\dimexpr\textheight-\tud@len@ddcdiff\relax}% + \@tempswatrue% + \fi% + }{}% +% \end{macrocode} +% Jetzt werden der Inhalt stückweise so lange auf einzelnen Seiten ausgeben, +% bis der immer kleiner werdende Rest in der Box auf eine Seite passt. +% \begin{macrocode} + \ifdim\ht\tud@title@box>\@tempdima\relax% + \@whiledim\ht\tud@title@box>\@tempdima\do{% + \splittopskip\topskip% + \splitmaxdepth\maxdepth% + \vsplit\tud@title@box to \@tempdima% + \clearpage% + \setlength\@tempdima{\textheight}% + \tud@if@v@lower{2.03}{\@tempswafalse}{}% + }% +% \end{macrocode} +% Passt der einspaltige Teil auf eine Seite, ist eine vertikale Korrektur von +% |.9\baselineskip| nicht notwendig. In diesem Fall wird die Box vor der +% Ausgabe einfach neu und ohne diese Länge gesetzt. +% \begin{macrocode} + \else% + \setbox\tud@title@box\vbox{#1\bigskip}% + \fi% +% \end{macrocode} +% Der Rest wir einfach als optionales Argument von \cs{twocolumn} ausgegeben. +% \begin{macrocode} + \twocolumn[\unvbox\tud@title@box]% +% \end{macrocode} +% In der Version~v2.02 wird eine Warnung ausgegeben, damit der Anwender den +% Satzspiegel manuell anpassen kann. Die Verwendung von \pkg{afterpage} liefert +% leider nicht in allen Fällen das gewollte Ergebnis, weshalb darauf verzichtet +% wird. +% \begin{macrocode} + \tud@if@v@lower{2.03}{% + \if@tempswa% + \ClassWarning{\TUD@Class@Name}{% + You are using a two-column title along with\MessageBreak% + the DDC-logo. Unfortunately in this case, the\MessageBreak% + type area has to be adjusted manually. Please\MessageBreak% + use `\string\enlargethispage{-\the\tud@len@ddcdiff}'\MessageBreak% + in both columns after the title% + }% + \fi% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \tud@title@box +% \end{macro}^^A \tud@title@twocolumn +% \end{macro}^^A \maketitleonecolumn +% +% +% \iffalse +%<*book|report|article> +% \fi +% +% \subsection{Umschlagseite (Cover)} +% +% Zusätzlich zur eigentlichen Titelseite kann für Druckerzeugnisse eine +% separate Umschlagseite erzeugt werden. Um die Gestaltung dieser anzupassen, +% wurden Einstellungsmöglichkeiten vorgesehen, die insbesondere den verwendeten +% Satzspiegel betreffen. +% +% \begin{macro}{\makecover} +% \changes{v2.02}{2014/06/23}{Warnung für die Option \opt{titlepage} mit dem +% Wert \val{firstiscover}}^^A +% \changes{v2.02}{2014/08/08}{ohne \CD verwendbar}^^A +% \changes{v2.02}{2014/08/12}{Satzspiegel mit \cs{coverpage\dots{}margin} +% änderbar, falls CD-Layout deaktiviert}^^A +% \changes{v2.03}{2015/01/09}{Anpassungen für neue Satzspiegelerzeugung}^^A +% \begin{parameter}{cdcover} +% \changes{v2.03}{2015/01/12}{neu}^^A +% \begin{parameter}{cd} +% \changes{v2.03}{2015/01/12}{neu}^^A +% \begin{parameter}{pagenumber} +% \begin{parameter}{cdgeometry} +% \changes{v2.02}{2014/06/23}{neu}^^A +% \begin{macro}{\if@tud@cdgeometry@cover} +% \begin{macro}{\if@tud@cdgeometry@cover@locked} +% \begin{macro}{\if@tud@coverpage} +% Der Befehl \cs{makecover} ist für eine Umschlagseite bei einem gebundenen +% Werk zu verwenden. +% \begin{macrocode} +\newif\if@tud@coverpage +\newcommand*\makecover[1][]{% +% \end{macrocode} +% Ist die Option \opt{titlepage}|=|\val{firstiscover} aktiv, wird eine Warnung +% erzeugt. +% \begin{macrocode} + \if@titlepageiscoverpage% + \ClassWarning{\TUD@Class@Name}{% + Using both option `titlepage=firstiscover' and\MessageBreak% + `\string\makecover' together isn't supported. The\MessageBreak% + option `titlepage=firstiscover' will be ignored. If you\MessageBreak% + want to create an individual cover, you have to use\MessageBreak% + `\string\extratitle' instead of `\string\makecover'. \MessageBreak% + See also the documentation of KOMA-Script% + }% + \@titlepageiscoverpagefalse% + \fi% +% \end{macrocode} +% Die Erscheinung des Covers lässt sich durch wenige Optionen etwas anpassen. +% Standardmäßig ist das Cover farblos, die farbige Darstellung wird durch die +% Klassenoption \opt{cdcover} gewählt. Außerdem wird normalerwe ein Layout +% erzeugt, welches sich genau an die Vorgaben des \CDs hält und außerdem die +% Binderandkorrektur \emph{nicht} beachtet. Optional kann das Cover im +% Satzspiegel erstellt werden. Zuletzt ist die Verwendung der Schriften des +% \CDs deaktivierbar. +% \begin{macrocode} + \clearpage% + \begingroup% + \let\thanks\@gobble% + \let\footnote\@gobble% + \TUD@parameter@set{cover}{#1}% + \let\tud@cd@title@num\tud@cd@cover@num% + \tud@cd@process% +% \end{macrocode} +% Je nachdem, ob das \CD verwendet wird, wird der Satzspiegel standardmäßig +% umgestellt oder eben nicht. Der Schalter \cs{if@tud@coverpage} wird innerhalb +% des Befehles \cs{tud@maketitle} genutzt, um die Unterscheidung zu machen, ob +% es sich bei der aktuellen Ausgabe um das Cover im \CD oder eine beliebige +% Titelseite handelt. +% \begin{macrocode} + \ifcase\tud@cd@cover@num\relax% false + \tud@locked@bool@preset{@tud@cdgeometry@cover}{false}% + \@tud@coverpagefalse% + \else% !false + \tud@locked@bool@preset{@tud@cdgeometry@cover}{true}% + \@tud@coverpagetrue% + \fi% +% \end{macrocode} +% Weil bereits die Titelseite normalerweise die Seitenzahl eins bekommt, kann es +% bei der Verwendung des Paketes \pkg{hyperref} zu einer Warnung aufgrund der +% doppelt verwendeten Seitenzahl kommen. Um dies zu verhindern, werden die +% Seitenanker für das Cover deaktiviert. +% \begin{macrocode} + \ifundef{\hypersetup}{}{\hypersetup{pageanchor=false}}% +% \end{macrocode} +% Ein Cover wird immer als komplette Seite und nie als Kopf gesetzt. Außerdem +% werden ein mit \cs{extatitle} gegebener Schmutztitel ebenso ignoriert, wie +% die dazugehörige Rückseite, Danksagung oder Einträge für die Titelrückseite. +% \begin{macrocode} + \@titlepagetrue% + \let\@extratitle\@empty% + \let\@frontispiece\@empty% + \let\@uppertitleback\@empty% + \let\@lowertitleback\@empty% + \let\@dedication\@empty% +% \end{macrocode} +% Wird der Parameter \opt{cdgeometry} aktiviert, werden die Seitenränder wie +% durch das \CD vorgegeben eingestellt. Andernfalls entsprechen diese den +% Einstellungen des Satzspiegels und können mit \cs{coverpage\dots margin} +% durch den Anwender angepasst werden. +% \begin{macrocode} + \if@tud@cdgeometry@cover% +% \end{macrocode} +% Bei der Höhe des oberen Seitenrandes muss unterschieden werden, ob der +% Satzspiegel im \CD oder aber im Buchblock erscheinen soll. +% \begin{macrocode} + \if@tud@coverpage% + \def\coverpagetopmargin{% + \dimexpr\tud@len@topmargin+\tud@len@barheight% + +\tud@len@headsep\relax% + }% + \else% + \tud@if@v@lower{2.03}{% + \def\coverpagetopmargin{.5\tud@len@both}% + }{% + \def\coverpagetopmargin{\tud@len@slimmargin}% + }% + \fi% + \tud@if@v@lower{2.03}{% + \def\coverpagebottommargin{.5\tud@len@both}% + }{% + \def\coverpagebottommargin{\tud@len@widemargin}% + }% + \def\coverpageleftmargin{\tud@len@widemargin}% + \def\coverpagerightmargin{\tud@len@slimmargin}% + \fi% + \if@tud@coverpage% +% \end{macrocode} +% Der Satzspiegel wird hierfür äquivalent zu den \KOMAScript-Klassen gesetzt, +% wenn die Option \opt{titlepage}|=|\val{firstiscover} aktiviert ist. +% \begin{macrocode} + \edef\titlepage@restore{% + \noexpand\endgroup% + \noexpand\global\noexpand\@colht\the\@colht% + \noexpand\global\noexpand\@colroom\the\@colroom% + \noexpand\global\vsize\the\vsize% + \noexpand\global\noexpand\@titlepageiscoverpagefalse% + \noexpand\let\noexpand\titlepage@restore\noexpand\relax% + }% +% \end{macrocode} +% Linker und rechter Rand sowie die Textbreite werden identisch erzeugt. Für +% das Layout im \CD wurden die Seitenränder (\cs{coverpage\dots margin}) zuvor +% angepasst. +% \begin{macrocode} + \begingroup% + \tud@cover@setmargins% + \tud@len@areavskip=\z@% +% \end{macrocode} +% Die Ausgabe des Covers und ggf. das Wiederherstellen des Satzspiegels. +% \begin{macrocode} + \tud@maketitle% + \clearpage% + \titlepage@restore% +% \end{macrocode} +% Für den Fall, dass eine Umschlagseite gesetzt werden soll, die nicht im \CD +% erscheint, wird einfach das originale \cs{maketitle} aufgerufen und die +% Option \opt{titlepage}|=|\val{firstiscover} verwendet, um die Seitenränder +% anpassen zu können. +% \begin{macrocode} + \else% + \@titlepageiscoverpagetrue% + \tud@cover@fixmargins% + \ifx\tud@title@pagenumber\relax% + \tud@cs@use{maketitle}% + \else% + \tud@cs@use{maketitle}[\tud@title@pagenumber]% + \fi% + \fi% + \endgroup% +} +% \end{macrocode} +% Die einzelnen Parameter dienen zur Einstellung der Umschlagseite und +% entsprechen~-- \prm{cdgeometry} ausgenommen~-- in ihrem Verhalten den +% gleichnamigen Klassenoptionen. Der genannte Parameter kann eigentlich nur mit +% booleschen Werten verwenet werden. Für einen benutzerdefinierten Satzspiegel +% der Umschlagseite müssen die \KOMAScript-Makros \cs{coverpage\dots{}margin} +% angepasst werden. +% \begin{macrocode} +\tud@locked@newbool{@tud@cdgeometry@cover} +\TUD@parameter@family{cover}{% + \TUD@parameter@def{pagenumber}{\def\tud@title@pagenumber{#1}}% + \TUD@parameter@def{cdcover}[true]{\TUDoption{cdcover}{#1}}% + \TUD@parameter@let{cd}{cdcover}% + \TUD@parameter@def{cdgeometry}[true]{% + \TUDoption{cdgeometry}{#1}% + \ifnum\tud@cdgeometry@num>\@ne\relax% true/symmetric/twoside + \tud@locked@bool@set{@tud@cdgeometry@cover}{true}% + \else% + \tud@locked@bool@set{@tud@cdgeometry@cover}{false}% + \fi% + }% +% \end{macrocode} +% Mit \cs{TUD@parameter@ps@def} werden alle verfügbaren Parameter für +% die Kopf- und Fußzeilen definiert. +% \begin{macrocode} + \TUD@parameter@ps@def{#1}% +% \end{macrocode} +% Für den Fall, dass ein Wert nicht in der Schlüssel"=Wert"=Notation angegeben +% wurde, wird versucht, das gegebene Argument entweder als booleschen Ausdruck +% für das Seitenlayout oder als Seitenzahl zu interpretieren. +% \begin{macrocode} + \TUD@parameter@handler@value{pagenumber}% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@coverpage +% \end{macro}^^A \if@tud@cdgeometry@cover@locked +% \end{macro}^^A \if@tud@cdgeometry@cover +% \end{parameter}^^A cdgeometry +% \end{parameter}^^A pagenumber +% \end{parameter}^^A cd +% \end{parameter}^^A cdcover +% \end{macro}^^A \makecover +% \begin{macro}{\coverpagetopmargin} +% \begin{macro}{\coverpagebottommargin} +% Bei der Verwendung eines eigenen Satzspiegels kann der obere Seitenrand über +% das Makro \cs{coverpagetopmargin} geändert werden. Die \KOMAScript-Befehle +% werden so angepasst, dass die Ränder für eine Cover im des \CDs korrekt +% voreingestellt sind. Das Vermeiden einer unerwünschten Überdeckung des Kopfes +% oder ein zu kleiner Fußbereich muss durch den Anwender korrigiert werden. +% \begin{macrocode} +\renewcommand*{\coverpagetopmargin}{% + \if@tud@coverpage% + \dimexpr\tud@len@topmargin+\tud@len@barheight+\tud@len@headsep\relax% + \else% + \dimexpr\topmargin+1in\relax% + \fi% +} +\renewcommand*{\coverpagebottommargin}{% + \if@tud@coverpage% + \dimexpr\tud@len@widemargin\relax% + \else% + 2\dimexpr\coverpagetopmargin\relax% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \coverpagebottommargin +% \end{macro}^^A \coverpagetopmargin +% \begin{macro}{\tud@cover@fixmargins} +% \changes{v2.06}{2018/08/16}{neu}^^A +% \begin{macro}{\tud@cover@setmargins} +% \changes{v2.06}{2018/08/16}{neu}^^A +% Diese beiden Befehle werden verwendet, um die von \KOMAScript{} zur Verfügung +% gestellten Befehle für die Definition der Cover-Seitenränder so anzupassen, +% dass diese auch mit der Option \opt{layout} aus dem Paket \pkg{geometry} +% genutzt werden können. Dafür werden die vom Anwender definierten Seitenränder +% expandiert und mit dem notwendigen Offset beaufschlagt. +% \begin{macrocode} +\newcommand*\tud@cover@fixmargins{% + \begingroup% + \tud@cdgeometry@assignlayout% + \tud@x@geometry@fixmargins% +% \end{macrocode} +% Standardmäßig ist \cs{coverbottommargin} abhängig von \cs{covertopmargin}, +% weshalb dieses Makro als erstes expandiert wird. +% \begin{macrocode} + \setlength\@tempdima{% + \dimexpr\coverpagebottommargin-\tud@len@layoutvoffset + +\paperheight-\tud@len@layoutheight\relax% + }% + \edef\coverpagebottommargin{\the\@tempdima}% + \setlength\@tempdima{% + \dimexpr\coverpagetopmargin+\tud@len@layoutvoffset\relax% + }% + \edef\coverpagetopmargin{\the\@tempdima}% +% \end{macrocode} +% Selbiges gilt für \cs{coverrightmargin} und \cs{coverleftmargin}. +% \begin{macrocode} + \setlength\@tempdima{% + \dimexpr\coverpagerightmargin-\tud@len@layouthoffset + +\paperwidth-\tud@len@layoutwidth\relax% + }% + \edef\coverpagerightmargin{\the\@tempdima}% + \setlength\@tempdima{% + \dimexpr\coverpageleftmargin+\tud@len@layouthoffset\relax% + }% + \edef\coverpageleftmargin{\the\@tempdima}% +% \end{macrocode} +% Abschließend werden die gewünschten Längen nach der lokalen Gruppe definiert. +% \begin{macrocode} + \edef\tud@res@a{% + \endgroup% + \def\noexpand\coverpagetopmargin{\coverpagetopmargin}% + \def\noexpand\coverpagebottommargin{\coverpagebottommargin}% + \def\noexpand\coverpageleftmargin{\coverpageleftmargin}% + \def\noexpand\coverpagerightmargin{\coverpagerightmargin}% + }% + \tud@res@a% +} +\newcommand*\tud@cover@setmargins{% + \tud@cover@fixmargins% + \topmargin=\dimexpr\coverpagetopmargin-1in\relax% + \oddsidemargin=\dimexpr\coverpageleftmargin-1in\relax% + \evensidemargin=\dimexpr\coverpageleftmargin-1in\relax% + \textwidth=\dimexpr\paperwidth-\coverpageleftmargin% + -\coverpagerightmargin\relax% + \textheight=\dimexpr\paperheight-\coverpagetopmargin% + -\coverpagebottommargin\relax% + \headheight=0pt% + \headsep=0pt% + \footskip=\baselineskip% + \@colht=\textheight% + \@colroom=\textheight% + \vsize=\textheight% + \columnwidth=\textwidth% + \hsize=\columnwidth% + \linewidth=\hsize% +} +% \end{macrocode} +% \end{macro}^^A \tud@cover@setmargins +% \end{macro}^^A \tud@cover@fixmargins +% +% \iffalse +%</book|report|article> +%</class&body> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-twocolfix.dtx b/macros/latex/contrib/tudscr/source/tudscr-twocolfix.dtx new file mode 100644 index 0000000000..ff86b18493 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-twocolfix.dtx @@ -0,0 +1,258 @@ +% \CheckSum{214} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-twocolfix.dtx +%<*dtx> +% \fi +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-twocolfix.dtx}[2019/06/28 v2.06 TUD-Script\space% +% +% \iffalse +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{twocolfix}[% +%<*package> +%!TUD@Version +%</package> +%<package> package +%<*dtx|package> +% \fi + (twocolumn layout bugfix)% +] +% \iffalse +%</dtx|package> +%<*dtx> +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-twocolfix.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v2.05}{2016/04/25}{Überprüfen der Definition von \cs{@topnewpage} +% des \LaTeXe-Kernels}^^A +% +% \section{Das Paket \pkg{twocolfix} -- Bugfix für den zweispaltigen Satz} +% +% Der \LaTeXe-Kernel enthält einen Fehler, der Kapitelüberschriften im +% zweispaltigen Layout höher setzt, als im einspaltigen. Zwar ist der +% \hrfn{http://latex-project.org/cgi-bin/ltxbugs2html?pr=latex/3126}{Fehler} +% schon länger bekannt, allerdings noch nicht in den \LaTeXe-Kernel übernommen +% worden. Das Paket \pkg{twocolfix} soll das Problem beheben. Eine Integration +% des Bugfixes in \KOMAScript{} wurde bereits bei Markus Kohm angefragt, jedoch +% \hrfn{http://www.komascript.de/node/1681}{von ihm nicht weiter verfolgt}. +% +% \ToDo{Als eingenständiges Paket herauslösen}[v2.??] +% \ToDo{CheckCommand verwenden}[v2.??] +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*package> +% \fi +% +% Es wird der fehlerhafte Befehl aus dem \LaTeXe-Kernel neu definiert. +% Allerdings definieren die \KOMAScript-Klassen das Makro \cs{@topnewpage} +% um und sichern vorher das Original in \cs{scr@topnewpage}. Daher wird der +% neue Befehl erst temporär definiert. +% \begin{macrocode} +\long\def \@tempa [#1]{% + \@nodocument% + \@next\@currbox\@freelist{}{}% + \global \setbox\@currbox% + \vbox {% + \break% + \prevdepth\z@% + \begingroup% + \normalcolor% + \hsize\textwidth% +% \end{macrocode} +% Damit der Inhalt des optionale Argumentes mit den gleichen Absatzeinstellungen +% gesetzt wird, werden diese nach \cs{@parboxrestore} für \KOMAScript-Klassen +% wiederhergestellt. +% \begin{macrocode} + \@parboxrestore% + \ifcsname KOMAClassName\endcsname% + \KOMAoptionOf[\KOMAoption{parskip}]{\KOMAClassFileName}{parskip}% + \fi% + \col@number \@ne% + \ignorespaces #1\par% + \ifdim\parskip>\z@\null\fi% + \vskip -\dbltextfloatsep% + \endgroup% + \ifdim\parskip>\z@\vskip\parskip\else\null\fi% + \vskip -\topskip% + }% + \begingroup% + \splitmaxdepth\maxdepth \splittopskip\topskip% + \setbox\@tempboxa \vsplit\@currbox to\z@% + \endgroup% + \ifdim \ht\@currbox>\textheight% + \ht\@currbox \textheight% + \fi% + \global \count\@currbox \tw@% + \@tempdima -\ht\@currbox% + \advance \@tempdima -\dbltextfloatsep% + \global \advance \@colht \@tempdima% + \ifx \@dbltoplist \@empty% + \else% + \@latexerr{Float(s) lost}\@ehb% + \let \@dbltoplist \@empty% + \fi% + \@cons \@dbltoplist \@currbox% + \global \@dbltopnum \m@ne% + \ifdim \@colht<2.5\baselineskip% + \@latex@warning@no@line {Optional argument of \noexpand\twocolumn + too tall on page \thepage}% + \@emptycol% + \if@firstcolumn% + \else% + \@emptycol% + \fi% + \else% + \global \vsize \@colht% + \global \@colroom \@colht% + \@floatplacement% + \fi% +} +% \end{macrocode} +% Um eine Änderung am \LaTeXe-Kernel feststellen zu können, wird auf die zum +% Zeitpunkt des Paketes aktuelle Definition von \cs{@topnewpage} geprüft. +% \begin{macrocode} +\long\def\@tempb[#1]{% + \@nodocument + \@next\@currbox\@freelist{}{}% + \global \setbox\@currbox + \color@vbox + \normalcolor + \vbox {% + \hsize\textwidth + \@parboxrestore + \col@number \@ne + #1% + \vskip -\dbltextfloatsep + }% + \color@endbox + \ifdim \ht\@currbox>\textheight + \ht\@currbox \textheight + \fi + \global \count\@currbox \tw@ + \@tempdima -\ht\@currbox + \advance \@tempdima -\dbltextfloatsep + \global \advance \@colht \@tempdima + \ifx \@dbltoplist \@empty + \else + \@latexerr{Float(s) lost}\@ehb + \let \@dbltoplist \@empty + \fi + \@cons \@dbltoplist \@currbox + \global \@dbltopnum \m@ne + \ifdim \@colht<2.5\baselineskip + \@latex@warning@no@line {Optional argument of \noexpand\twocolumn + too tall on page \thepage}% + \@emptycol + \if@firstcolumn + \else + \@emptycol + \fi + \else + \global \vsize \@colht + \global \@colroom \@colht + \@floatplacement + \fi +} +% \end{macrocode} +% \begin{macro}{\@topnewpage} +% \begin{macro}{\scr@topnewpage} +% Nachdem der neue Befehl sowie die Definition aus dem \LaTeXe-Kernel zuerst +% temporär definiert wurden, wird nun abhängig von der aktiven Klasse der +% notwendige Befehl mit der neuen Definition überschrieben. +% \begin{macrocode} +\ifx\scr@topnewpage\@undefined + \@check@eq\@topnewpage\@tempb% + \let\@topnewpage\@tempa% +\else + \@check@eq\scr@topnewpage\@tempb% + \let\scr@topnewpage\@tempa% +\fi +% \end{macrocode} +% \end{macro}^^A \scr@topnewpage +% \end{macro}^^A \@topnewpage +% +% \iffalse +%</package> +% \fi +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr-version.dtx b/macros/latex/contrib/tudscr/source/tudscr-version.dtx new file mode 100644 index 0000000000..10d37f2e8b --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-version.dtx @@ -0,0 +1,324 @@ +% \CheckSum{135} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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-version.dtx +% \fi +% +% \iffalse +% Nicht verwirren lassen! In dieser Datei steht ein Teil der Dokumentation und +% des Codes vor dem Treiber. Das ist notwendig, weil der Teil des Codes bereits +% am Anfang des Treibers selbst benötigt wird. Genauer gesagt handelt es sich +% dabei um den Teil zur Versionsangbabe. +% \fi +% +% \selectlanguage{ngerman} +% +% \changes{v1.0}{2012/10/31}{\TUDScript-Bundle erstmalig veröffentlicht}^^A +% \changes{v2.00}{2014/04/21}{\TUDScript-Bundle auf \pkg{docstrip} umgestellt +% und stark erweitert}^^A +% \changes{v2.01}{2014/04/24}{Anpassungen in Dokumentation und +% Schriftinstallation, Fehlerkorrekturen}^^A +% \changes{v2.02}{2014/05/14}{Problem globaler Längenänderungen behoben}^^A +% \changes{v2.02}{2014/05/16}{Umbennenung mehrerer Befehle zur Kompatibilität +% mit anderen Paketen}^^A +% +% \section{Die Version des \texorpdfstring{\TUDScript}{TUD-Script}-Bundles} +% +% Für alle Klassen und Paketen, die zum \TUDScript-Bundle auf \KOMAScript-Basis +% gehören wird als erstes die aktuelle Version festgelgt. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \begin{macro}{\TUD@Version} +% \begin{macro}{\TUD@Version@Check} +% \changes{v2.02}{2014/07/22}{Expandieren der Versionsangabe bei der Verwendung +% von \pkg{docstrip} ermöglicht}^^A +% \begin{macro}{\TUD@Version@KOMA} +% \begin{macro}{\TUDScriptVersion} +% \begin{macro}{\TUDScriptVersionNumber} +% Das Makro \cs{TUD@Version} gibt an, zu welcher \TUDScript"~Version die +% Datei gehört. Die Klassen und Pakete des Bundles verwenden dieses Makro +% außerdem zur eigenen Versionsangabe. Je nachdem, ob \cs{TUD@Version} +% bereits definiert ist oder nicht, wird mit \cs{TUD@Version@Check} die +% Definition überprüft oder eine globale Definition vorgenommen. Da das Ganze +% auch bei der Erstellung der Dokumentation geschieht, wird \cs{makeatletter} +% innerhalb einer Gruppe verwendet. Das Makro \cs{TUD@Version@KOMA} definiert +% die mindestens notwendige Version von \KOMAScript. In \cs{TUDScriptVersion} +% wird die Versioninformation für den Anwender definiert. +% \begin{macrocode} +\begingroup + \catcode`\@11\relax +%<*!(package|class)> + \ifx\newcommand\undefined + \gdef\TUD@Version@Check#1{% + \gdef\TUD@Version{\space\space#1}% + \gdef\TUDScriptVersion{\space\space#1}% + \aftergroup\endinput% + } + \else +%</!(package|class)> + \ifx\TUD@Version\@undefined + \newcommand*\TUD@Version@Check[1]{% + \gdef\TUD@Version{#1}% + \gdef\TUDScriptVersion{#1}% + \def\@tempb##1 v##2 ##3\relax##4\relax{\gdef\TUDScriptVersionNumber{##2}}% + \edef\@tempa{\TUD@Version}% + \expandafter\@tempb\@tempa\relax? ? \relax\relax% + \gdef\TUD@Version@KOMA{3.25}% + } + \else + \newcommand*\TUD@Version@Check[1]{% + \def\@tempa{#1}% + \ifx\TUD@Version\@tempa\else% + \@latex@warning@no@line{% + \noexpand\TUD@Version\space is `\TUD@Version',\MessageBreak% + but `#1' was expected!\MessageBreak% + You should not use classes, packages or files from\MessageBreak% + different TUD-Script-Bundle versions% + }% + \fi% + } + \fi +%<*!(package|class)> + \fi +%</!(package|class)> + \TUD@Version@Check{2019/08/27 v2.06d TUD-Script} +\endgroup +% \end{macrocode} +% \end{macro}^^A \TUDScriptVersionNumber +% \end{macro}^^A \TUDScriptVersion +% \end{macro}^^A \TUD@Version@KOMA +% \end{macro}^^A \TUD@Version@Check +% \end{macro}^^A \TUD@Version +% +% \iffalse +%<*dtx> +% \fi +% +\ProvidesFile{tudscr-version.dtx}[\TUDScriptVersion\space (versions)] +% +% \iffalse +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-version.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \tableofcontents + \DocInput{\filename} +\end{document} +%</dtx> +% \fi +% +% Als erstes das benötigte \LaTeX-Format. +% \begin{macrocode} +%<package|class>\NeedsTeXFormat{LaTeX2e} +% \end{macrocode} +% \begin{macro}{\tudscrmail} +% Die E"~Mail-Adresse für Supportanfragen. +% \begin{macrocode} +%<package|class>\providecommand*\tudscrmail{hanisch.latex@outlook.com} +% \end{macrocode} +% \end{macro}^^A \tudscrmail +% +% \iffalse +%<*class> +% \fi +% +% \begin{macro}{\TUD@ProvidesClass} +% \changes{v2.04}{2015/06/13}{neu}^^A +% \begin{macro}{\TUD@ProvidesWrapperClass} +% \changes{v2.04}{2015/06/13}{neu}^^A +% \begin{macro}{\TUD@Class@Name} +% \changes{v2.04}{2015/06/12}{neu}^^A +% \begin{macro}{\TUD@Class@Parent} +% \changes{v2.04}{2015/06/12}{neu}^^A +% \begin{macro}{\TUD@Class@KOMA} +% \changes{v2.04}{2015/06/12}{neu}^^A +% Mit diesen Befehlen erfolgt die Versionsangabe der \TUDScript-Klassen beim +% Laden. Dabei werden hier einmalig die Namen der jeweiligen Klassen definiert. +% Hierfür werden die Befehle \cs{TUD@ProvidesClass} für die Hauptklassen und +% \cs{TUD@ProvidesWrapperClass} für auf diesen aufbauende Wrapper-Klassen +% genutzt. Das erste Argument ist die zu definierende Klasse, das zweite +% Argument entspricht der Basis-Klasse. Das dritte Argument enthält eine kurze +% Beschreibung. +% \begin{macrocode} +%<*!inherit> +\newcommand*\TUD@ProvidesClass[3]{% + \ProvidesClass{#1}[% +%!TUD@Version + #3 (#2)% + ]% + \newcommand*\TUD@Class@KOMA{#2}% + \ifx\TUD@Class@Parent\@undefined% + \newcommand*\TUD@Class@Name{#1}% + \TUD@Class@Info% + \fi% +} +%</!inherit> +%<*inherit> +\newcommand*\TUD@ProvidesWrapperClass[3]{% + \ProvidesClass{#1}[% +%!TUD@Version + #3 (#2)% + ]% + \newcommand*\TUD@Class@Parent{#2}% + \newcommand*\TUD@Class@Name{#1}% + \TUD@Class@Info% +} +%</inherit> +% \end{macrocode} +% \end{macro}^^A \TUD@Class@KOMA +% \end{macro}^^A \TUD@Class@Parent +% \end{macro}^^A \TUD@Class@Name +% \end{macro}^^A \TUD@ProvidesWrapperClass +% \end{macro}^^A \TUD@ProvidesClass +% \begin{macro}{\TUD@Class@Info} +% \changes{v2.04}{2015/06/13}{neu}^^A +% Beim Verwenden der Klassen wird in der log-Datei ein Vermerk mit \cs{typeout} +% erstellt. +% \begin{macrocode} +\providecommand*\TUD@Class@Info{% + \typeout{+------------------------------------------------------------------}% + \typeout{| Corporate Design of Technische Universitaet Dresden}% + \typeout{| Class: \TUD@Class@Name}% + \typeout{| Version: \TUD@Version}% + \typeout{| Author: Falk Hanisch (\tudscrmail)}% + \typeout{| Repository: https://github.com/tud-cd/tudscr}% + \typeout{| Forum: https://latex.wcms-file3.tu-dresden.de}% + \typeout{+------------------------------------------------------------------}% +} +% \end{macrocode} +% \end{macro}^^A \TUD@Class@Info +% Hier erfolgt nun die Indentifizierung und die Zuweisung der Klassennamen. +% \begin{macrocode} +%<book>\TUD@ProvidesClass{tudscrbook}{scrbook}{document class} +%<report>\TUD@ProvidesClass{tudscrreprt}{scrreprt}{document class} +%<article>\TUD@ProvidesClass{tudscrartcl}{scrartcl}{document class} +%<poster>\TUD@ProvidesClass{tudscrposter}{scrartcl}{poster class} +%<doc>\TUD@ProvidesClass{tudscrdoc}{scrartcl}{source code documentation class} +%<manual>\TUD@ProvidesWrapperClass{tudscrmanual}{tudscrreprt}{manual class} +% \end{macrocode} +% \begin{macro}{\TUDScriptClassName} +% \begin{macro}{\TUDClassName} +% Die Benutzermakros für den Namen der verwendeten \TUDScript-Klasse. +% \begin{macrocode} +\edef\TUDScriptClassName{\TUD@Class@Name} +\providecommand*\TUDClassName{\TUDScriptClassName} +% \end{macrocode} +% \end{macro}^^A \TUDClassName +% \end{macro}^^A \TUDScriptClassName +% +% \iffalse +%</class> +%<*package&(supervisor|comp|tutorial)> +% \fi +% +% \section{Verwendbarkeit von \TUDScript-Paketen} +% +% Einige Pakete sind nur mit den \TUDScript-Klassen verwendbar. Diese erzeugen +% einen Fehler, wenn sie nicht mit diesen verwendet werden. +% \begin{macrocode} +\ifx\TUD@Class@Name\@undefined + \PackageError{% +%<supervisor> tudscrsupervisor% +%<comp&base> tudscrcomp% +%<comp&book> tudscrcomp-book% +%<comp&poster> tudscrcomp-poster% +%<tutorial> tudscrtutorial% + }{Unsupported class found}{% + This package can only be used with a class out of the\MessageBreak% + tudscr bundle (tudscrbook, tudscrreprt, tudscrartcl, tudscrposter).% + }% + \endinput% +\fi +% \end{macrocode} +% +% \iffalse +%</package&(supervisor|comp|tutorial)> +% \fi +% +% \section{Das \TUDScript-Logo} +% \begin{macro}{\TUDScript} +% Der Schriftzug von \TUDScript. +% \begin{macrocode} +%<*package|class> +\@ifundefined{TUDScript}{% + \DeclareRobustCommand\TUDScript{% + \textsf{% + T\kern.05em U\kern.05em D\kern.1em-\kern.1em Script% + }% + \ifcsname xspace\endcsname% + \xspace% + \fi% + }% +}{} +%</package|class> +% \end{macrocode} +% \end{macro}^^A \TUDScript +% +% \Finale +% +\endinput diff --git a/macros/latex/contrib/tudscr/source/tudscr.ins b/macros/latex/contrib/tudscr/source/tudscr.ins new file mode 100644 index 0000000000..3503f12938 --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr.ins @@ -0,0 +1,287 @@ +% +% TUD-Script -- Corporate Design of Technische Universitaet Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% 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. +% +% ---------------------------------------------------------------------------- +\input docstrip.tex +\begingroup +\catcode`\%=12 \catcode`\*=14 +\gdef\processLineX%#1{* + \ifcase\ifx%#10\else + \ifx<#11\else + \ifx!#12\else 3\fi\fi\fi\relax + \expandafter\putMetaComment\or + \expandafter\checkOption\or + \expandafter\expandVariable\or + \expandafter\removeComment\fi + #1} +\endgroup +\def\expandVariable!#1\endLine{% + \advance\codeLinesPassed\@ne + \maybeMsg{x}% + \edef\inLine{\csname #1\endcsname}% + \let\do\putline@do + \activefiles +} +\@@input tudscr-version.dtx +\keepsilent +\preamble + +TUD-Script -- Corporate Design of Technische Universitaet Dresden + +\TUD@Version + +Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 + +This file was generated from file(s) of the TUD-Script bundle. +---------------------------------------------------------------------------- + +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. + +\endpreamble +\askforoverwritefalse +\usedir{tex/latex/tudscr} +\generate{% + \usepreamble\defaultpreamble% + \file{tudscrbase.sty}{% + \from{tudscr-version.dtx}{package,base}% + \from{tudscr-base.dtx}{package,base}% + } + \file{tudscrbook.cls}{% + \from{tudscr-version.dtx}{class,book}% + \from{tudscr-base.dtx}{class,book,load}% + \from{tudscr-base.dtx}{class,book,option}% + \from{tudscr-fonts.dtx}{class,book,option}% + \from{tudscr-area.dtx}{class,book,option}% + \from{tudscr-pagestyle.dtx}{class,book,option}% + \from{tudscr-layout.dtx}{class,book,option}% + \from{tudscr-title.dtx}{class,book,option}% + \from{tudscr-frontmatter.dtx}{class,book,option}% + \from{tudscr-misc.dtx}{class,book,option}% + \from{tudscr-comp.dtx}{class,book,option}% + \from{tudscr-misc.dtx}{class,book,execute}% + \from{tudscr-base.dtx}{class,book,body}% + \from{tudscr-fonts.dtx}{class,book,body}% + \from{tudscr-fields.dtx}{class,book,body}% + \from{tudscr-localization.dtx}{class,book,body}% + \from{tudscr-area.dtx}{class,book,body}% + \from{tudscr-pagestyle.dtx}{class,book,body}% + \from{tudscr-layout.dtx}{class,book,body}% + \from{tudscr-title.dtx}{class,book,body}% + \from{tudscr-frontmatter.dtx}{class,book,body}% + \from{tudscr-comp.dtx}{class,book,body}% + \from{tudscr-misc.dtx}{class,book,body}% + } + \file{tudscrreprt.cls}{% + \from{tudscr-version.dtx}{class,report}% + \from{tudscr-base.dtx}{class,report,load}% + \from{tudscr-base.dtx}{class,report,option}% + \from{tudscr-fonts.dtx}{class,report,option}% + \from{tudscr-area.dtx}{class,report,option}% + \from{tudscr-pagestyle.dtx}{class,report,option}% + \from{tudscr-layout.dtx}{class,report,option}% + \from{tudscr-title.dtx}{class,report,option}% + \from{tudscr-frontmatter.dtx}{class,report,option}% + \from{tudscr-misc.dtx}{class,report,option}% + \from{tudscr-comp.dtx}{class,report,option}% + \from{tudscr-misc.dtx}{class,report,execute}% + \from{tudscr-base.dtx}{class,report,body}% + \from{tudscr-fonts.dtx}{class,report,body}% + \from{tudscr-fields.dtx}{class,report,body}% + \from{tudscr-localization.dtx}{class,report,body}% + \from{tudscr-area.dtx}{class,report,body}% + \from{tudscr-pagestyle.dtx}{class,report,body}% + \from{tudscr-layout.dtx}{class,report,body}% + \from{tudscr-title.dtx}{class,report,body}% + \from{tudscr-frontmatter.dtx}{class,report,body}% + \from{tudscr-comp.dtx}{class,report,body}% + \from{tudscr-misc.dtx}{class,report,body}% + } + \file{tudscrartcl.cls}{% + \from{tudscr-version.dtx}{class,article}% + \from{tudscr-base.dtx}{class,article,load}% + \from{tudscr-base.dtx}{class,article,option}% + \from{tudscr-fonts.dtx}{class,article,option}% + \from{tudscr-area.dtx}{class,article,option}% + \from{tudscr-pagestyle.dtx}{class,article,option}% + \from{tudscr-layout.dtx}{class,article,option}% + \from{tudscr-title.dtx}{class,article,option}% + \from{tudscr-frontmatter.dtx}{class,article,option}% + \from{tudscr-misc.dtx}{class,article,option}% + \from{tudscr-comp.dtx}{class,article,option}% + \from{tudscr-misc.dtx}{class,article,execute}% + \from{tudscr-base.dtx}{class,article,body}% + \from{tudscr-fonts.dtx}{class,article,body}% + \from{tudscr-fields.dtx}{class,article,body}% + \from{tudscr-localization.dtx}{class,article,body}% + \from{tudscr-area.dtx}{class,article,body}% + \from{tudscr-pagestyle.dtx}{class,article,body}% + \from{tudscr-layout.dtx}{class,article,body}% + \from{tudscr-title.dtx}{class,article,body}% + \from{tudscr-frontmatter.dtx}{class,article,body}% + \from{tudscr-comp.dtx}{class,article,body}% + \from{tudscr-misc.dtx}{class,article,body}% + } + \file{tudscrposter.cls}{% + \from{tudscr-version.dtx}{class,poster}% + \from{tudscr-base.dtx}{class,poster,load}% + \from{tudscr-base.dtx}{class,poster,option}% + \from{tudscr-fonts.dtx}{class,poster,option}% + \from{tudscr-area.dtx}{class,poster,option}% + \from{tudscr-pagestyle.dtx}{class,poster,option}% + \from{tudscr-layout.dtx}{class,poster,option}% + \from{tudscr-title.dtx}{class,poster,option}% + \from{tudscr-frontmatter.dtx}{class,poster,option}% + \from{tudscr-misc.dtx}{class,poster,option}% + \from{tudscr-comp.dtx}{class,poster,option}% + \from{tudscr-misc.dtx}{class,poster,execute}% + \from{tudscr-base.dtx}{class,poster,body}% + \from{tudscr-fonts.dtx}{class,poster,body}% + \from{tudscr-fields.dtx}{class,poster,body}% + \from{tudscr-localization.dtx}{class,poster,body}% + \from{tudscr-area.dtx}{class,poster,body}% + \from{tudscr-pagestyle.dtx}{class,poster,body}% + \from{tudscr-layout.dtx}{class,poster,body}% + \from{tudscr-title.dtx}{class,poster,body}% + \from{tudscr-frontmatter.dtx}{class,poster,body}% + \from{tudscr-comp.dtx}{class,poster,body}% + \from{tudscr-misc.dtx}{class,poster,body}% + } +} +\generate{% + \usepreamble\defaultpreamble% + \file{tudscrsupervisor.sty}{% + \from{tudscr-version.dtx}{package,supervisor}% + \from{tudscr-supervisor.dtx}{package,supervisor}% + \from{tudscr-fields.dtx}{package,supervisor}% + \from{tudscr-localization.dtx}{package,supervisor}% + } +} +\generate{% + \usepreamble\defaultpreamble% + \file{tudscrfonts.sty}{% + \from{tudscr-version.dtx}{package,fonts}% + \from{tudscr-fonts.dtx}{package,fonts,identify}% + \from{tudscr-base.dtx}{package,fonts,load}% + \from{tudscr-fonts.dtx}{package,fonts,option}% + \from{tudscr-misc.dtx}{package,fonts,option}% + \from{tudscr-comp.dtx}{package,fonts,option}% + \from{tudscr-misc.dtx}{package,fonts,execute}% + \from{tudscr-fonts.dtx}{package,fonts,body}% + \from{tudscr-comp.dtx}{package,fonts,body}% + \from{tudscr-misc.dtx}{package,fonts,body}% + } +} +\generate{% + \usepreamble\defaultpreamble% + \file{tudscrcolor.sty}{% + \from{tudscr-version.dtx}{package,color}% + \from{tudscr-color.dtx}{package,color}% + } + \file{twocolfix.sty}{% + \from{tudscr-twocolfix.dtx}{package}% + } + \file{mathswap.sty}{% + \from{tudscr-mathswap.dtx}{package}% + } +} +\generate{% + \usepreamble\defaultpreamble% + \file{tudscrcomp.sty}{% + \from{tudscr-version.dtx}{package,comp,base}% + \from{tudscr-comp.dtx}{package,comp,base,identify}% + } + \file{tudscrcomp-book.sty}{% + \from{tudscr-version.dtx}{package,comp,book}% + \from{tudscr-comp.dtx}{package,comp,book,identify}% + \from{tudscr-comp.dtx}{package,comp,book,option}% + \from{tudscr-misc.dtx}{package,comp,book,execute}% + \from{tudscr-comp.dtx}{package,comp,book,body}% + } + \file{tudscrcomp-poster.sty}{% + \from{tudscr-version.dtx}{package,comp,poster}% + \from{tudscr-comp.dtx}{package,comp,poster,identify}% + \from{tudscr-comp.dtx}{package,comp,poster,option}% + \from{tudscr-misc.dtx}{package,comp,poster,execute}% + \from{tudscr-comp.dtx}{package,comp,poster,body}% + } +} +\generate{% + \usepreamble\defaultpreamble% + \file{fix-tudscrfonts.sty}{% + \from{tudscr-version.dtx}{package,fixfonts}% + \from{tudscr-comp.dtx}{package,fixfonts,identify}% + \from{tudscr-base.dtx}{package,fixfonts,load}% + \from{tudscr-layout.dtx}{package,fixfonts,option}% + \from{tudscr-misc.dtx}{package,fixfonts,execute}% + \from{tudscr-layout.dtx}{package,fixfonts,body}% + \from{tudscr-comp.dtx}{package,fixfonts,body}% + } +} +\generate{% + \usepreamble\defaultpreamble% + \file{tudscrmanual.cls}{% + \from{tudscr-version.dtx}{class,manual,inherit}% + \from{tudscr-manual.dtx}{class,manual}% + \from{tudscr-base.dtx}{class,manual,inherit,load}% + \from{tudscr-manual.dtx}{class,manual,option}% + \from{tudscr-misc.dtx}{class,manual,inherit,execute}% + \from{tudscr-manual.dtx}{class,manual,body}% + \from{tudscr-fields.dtx}{class,manual,body}% + \from{tudscr-localization.dtx}{class,manual,body}% + \from{tudscr-texindy.dtx}{class,manual}% + } + \file{tudscrtutorial.sty}{% + \from{tudscr-version.dtx}{package,tutorial}% + \from{tudscr-manual.dtx}{package,tutorial,identify}% + \from{tudscr-base.dtx}{package,tutorial,load}% + \from{tudscr-manual.dtx}{package,tutorial,option}% + \from{tudscr-misc.dtx}{package,tutorial,execute}% + \from{tudscr-manual.dtx}{package,tutorial,body}% + \from{tudscr-texindy.dtx}{package,tutorial}% + } +} +\generate{% + \usepreamble\defaultpreamble% + \file{tudscrdoc.cls}{% + \from{tudscr-version.dtx}{class,doc}% + \from{tudscr-base.dtx}{class,doc,load}% + \from{tudscr-doc.dtx}{class,doc,option}% + \from{tudscr-localization.dtx}{class,doc}% + \from{tudscr-manual.dtx}{class,doc}% + \from{tudscr-doc.dtx}{class,doc,body}% + \from{tudscr-texindy.dtx}{class,doc}% + } +} +\endbatchfile diff --git a/macros/latex/contrib/tudscr/source/tudscrsource.tex b/macros/latex/contrib/tudscr/source/tudscrsource.tex new file mode 100644 index 0000000000..f1bbcf9d9c --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscrsource.tex @@ -0,0 +1,106 @@ +\begingroup + \def\ProvidesFile#1[#2]{\csname endinput\endcsname}% + \input tudscr-version.dtx + \gdef\filename{\jobname} +\endgroup +\ProvidesFile{tudscrsource.tex}[\TUDScriptVersion (sourcedoc)] +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +%\EnableCrossrefs +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscrsource.tex} + +\begin{document} +\addtokomafont{subject}{\sffamily} +\subject{\TUDScript basierend auf \KOMAScript} +\title{Ein \LaTeX-Bundle für Dokumente \mbox{im neuen \CD der} \mbox{\TnUD}} +\subtitle{Dokumentierter Quelltext} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\makeatletter +\begingroup% + \def\and{, }% + \let\thanks\@gobble% + \let\footnote\@gobble% + \let\mailto\@gobble% + \let\qquad\relax% + \hypersetup{% + pdfauthor = {\@author},% + pdftitle = {\@title},% + pdfsubject = {Quelltextdokumentation des \TUDScript-Bundles},% + pdfkeywords = {LaTeX, \TUDScript, Quelltext},% + }% +\endgroup% +\let\@maketitle\scr@maketitle% +\makeatother + + +\maketitle + +\ToDo{Release-Prozess mit \app{make} und \file{Makefile}}[v2.07] + +Das \TUDScript-Bundle setzt das \TUDCD für \LaTeXe{} um. Die enthaltenen +Klassen und Pakete basieren auf dem \KOMAScript-Bundle und sind sehr eng mit +diesen verwoben. Momentan ergänzen sie das Vorlagenpaket von Klaus Bergmann, +das auf den Standard-\LaTeX-Klassen basiert und als veraltet betrachtet werden +kann. Die dazugehörigen Klassen sollen mittel- bis langfristig ersetzt werden.% +\footnote{% + aktuell ist dies \cls{tudbook}, geplant \cls{tudfax}, \cls{tudletter}, + \cls{tudform}, \cls{tudhaus} und evtl. auch \cls{tudbeamer}% +} +Es handelt sich bei diesem Dokument \emph{nicht} um das Anwenderhandbuch +sondern um den dokumentierten Quelltext der Implementierung von \TUDScript. +Das Anwenderhandbuch kann über die Kommandozeile respektive das Terminal mit +dem Aufruf \texttt{texdoc tudscr} geöffnet werden. + +\tableofcontents +\clearpage + +\DocInclude{tudscr-version} +\DocInclude{tudscr-base} +\DocInclude{tudscr-fonts} +\DocInclude{tudscr-fields} +\DocInclude{tudscr-localization} +\DocInclude{tudscr-area} +\DocInclude{tudscr-pagestyle} +\DocInclude{tudscr-layout} +\DocInclude{tudscr-title} +\DocInclude{tudscr-frontmatter} +\DocInclude{tudscr-comp} +\DocInclude{tudscr-misc} +\DocInclude{tudscr-color} +\DocInclude{tudscr-supervisor} + +\DocInclude{tudscr-twocolfix} +\DocInclude{tudscr-mathswap} + +\ifdefined\tudfinalflag\else +\DocInclude{tudscr-manual} +\DocInclude{tudscr-doc} +\DocInclude{tudscr-texindy} +%\DocInclude{install/tudscr-metrics} +%\DocInclude{install/tudscr-scripts} +\fi + +\addpart{\appendixname} +\vspace*{-2\baselineskip} +\PrintIndex +\clearpage +\PrintChanges +\clearpage +\PrintToDos +\clearpage +\end{document} |