diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/tudscr/source/doc/tutorials |
Initial commit
Diffstat (limited to 'macros/latex/contrib/tudscr/source/doc/tutorials')
3 files changed, 3782 insertions, 0 deletions
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} |