\setchapterpreamble{\tudhyperdef'{sec:packages}}
\chapter{Benötigte, unterstützte und empfehlenswerte Pakete}
\index{Kompatibilität|?}%
%
\section{Notwendige und ergänzende Pakete für \TUDScript}
\tudhyperdef*{sec:packages:needed}%
Diese Pakete werden von den \TUDScript"~Klassen zwingend benötigt und 
eingebunden. Möchten Sie eines der im Folgenden aufgezählten Pakete selber 
mit bestimmten Optionen nutzen, so sollten diese bereits \emph{vor} dem Laden 
der Dokumentklasse an das Paket weitergereicht werden, falls bei der folgenden
Beschreibung des Paketes nichts anderweitiges angegeben wird.
%
\begin{Example}
Das Weiterreichen von Optionen an Pakete muss folgendermaßen erfolgen:
\begin{Code}[escapechar=§]
\PassOptionsToPackage§\Parameter{Paketoptionen}\Parameter{Paket}§
\documentclass§\OParameter{Klassenoptionen}\PParameter{tudscr\dots}§
\end{Code}
\end{Example}
%
\begin{packages}
\item[koma-script,typearea,scrbase,scrlayer-scrpage,scrextend]
  \begin{Declaration*}{\Class{scrbook}}
  \begin{Declaration*}{\Class{scrreprt}}
  \begin{Declaration*}{\Class{scrartcl}}
  \begin{Declaration*}{\Class{scrlttr2}}
  \ChangedAt{%
    v2.02:Paket \Package{scrlayer-scrpage} ist für \TUDScript unabdingbar%
  }%
  Das \KOMAScript-Bundle ist die zentrale Grundlage für \TUDScript. Neben den 
  Klassen \Class{scrbook}, \Class{scrreprt} und \Class{scrartcl} wird das Paket 
  \Package{scrbase} benötigt. Dieses erlaubt das Definieren von Klassenoptionen 
  im Stil von \KOMAScript, welche auch noch nach dem Laden der Klasse mit den 
  Befehlen \Macro{TUDoption} und \Macro{TUDoptions} geändert werden können. Für 
  die Bereitstellung der \PageStyle{tudheadings}"=Seitenstile ist das Paket 
  \Package{scrlayer-scrpage} notwendig. Wenn es nicht durch den Anwender~-- mit 
  beliebigen Optionen~-- geladen wird, erfolgt dies am Ende der Präambel 
  automatisch durch \TUDScript.
  \end{Declaration*}
  \end{Declaration*}
  \end{Declaration*}
  \end{Declaration*}
\item[opensans,iwona]
  \index{Schriftart|!}%
  \ChangedAt{%
    v2.06:Pakete \Package{opensans}, \Package{iwona} und \Package{mathastext}
    sind für \TUDScript zwingend erforderlich%
  }%
  Das Paket \Package{opensans} stellt die Schriftfamilie \OpenSans sowohl für 
  den Fließtext als auch den mathematischen Satz zur Verfügung. Es enthält alle 
  nötigen Schriftschnitte sowohl im Type1- als auch im OpenType-Format. Da die 
  Schriftfamilie in der aktuellen Version keine mathematischen Glyphen 
  bereitstellt, werden die Pakete \Package{mathastext} und \Package{iwona} 
  zusätzlich genutzt, um zumindest einen halbwegs erträglichen mathematischen 
  Satz mit \OpenSans zu ermöglichen. Werden dabei zusätzliche Symbole benötigt, 
  wird empfohlen, auf das Paket \Package{amssymb} zu verzichten und anstelle 
  dessen \Package{mdsymbol} zu laden.
\item[mweights]
  \index{Schriftstärke}%
  \ChangedAt{%
    v2.06:Paket \Package{mweights} ist für \TUDScript zwingend erforderlich%
  }%
  In \hologo{LaTeXe} existieren die Schriftfamilien für Serifenschriften 
  (\Macro*{rmfamily}), serifenlose Schriften (\Macro*{sffamily}) sowie die 
  Schreibmaschinenschriften (\Macro*{ttfamily}). Deren Schriftstärke wird für 
  gewöhnlich mit den beiden Befehlen \Macro*{mddefault} und \Macro*{bfdefault} 
  einheitlich festgelegt. Bei der Verwendung unterschiedlicher Schriftpakete 
  kann es unter Umständen zu Problemen bei den Schriftstärken kommen. Diese 
  Paket erlaubt die individuelle Definition der Schriftstärke für jede der drei 
  Schriftfamilien.
\item[geometry]
  \index{Satzspiegel}%
  Das Paket wird zum Festlegen der Seitenränder respektive des Satzspiegels 
  verwendet.
  \Attention{%
    Ein Weiterreichen zusätzlicher Optionen an das Paket wird dringlich nicht 
    empfohlen.
  }%
\item[graphicx]
  \index{Grafiken}%
  Dies ist das De"~facto"~Standard"~Paket zum Einbinden von Grafiken. Zum 
  Setzen des Logos der \TnUD im Kopf sowie aller weitere Abbildungen und Logos 
  wird \Macro{includegraphics}(\Package{graphicx})'none' genutzt.
\item[xcolor]
  \index{Farben}%
  Damit werden die Farben des \CDs zur Verwendung im Dokument definiert. 
  Genaueres ist bei der Beschreibung von \Package{tudscrcolor}'auto' zu finden. 
\item[kvsetkeys]
  Das von \Package{scrbase} geladene Paket \Package{keyval} ermöglicht das 
  Definieren von Klassen"~ und Paketoptionen sowie Parametern nach dem 
  Schlüssel"=Wert"=Prinzip. Mit diesem Paket kann das Verhalten für unbekannte 
  Schlüssel festgelegt werden.
\item[etoolbox,xpatch,letltxmacro,etexcmds]
  Diese Pakete stellen viele Funktionen zum Testen und zur Ablaufkontrolle 
  bereit. Weiterhin wird das Manipulieren vorhandener Makros ermöglicht.
\item[environ]
  \index{Befehlsdeklaration}%
  Es wird eine verbesserte Deklaration von Umgebungen ermöglicht, bei der auch 
  beim Abschluss der Umgebung auf die übergebenen Parameter zugegriffen werden 
  kann. 
\item[trimspaces]
  Bei mehreren Eingabefeldern für den Anwender werden die Argumente mithilfe 
  dieses Paketes um eventuell angegebene, unnötige Leerzeichen befreit.
\end{packages}
%



\minisec{Durch \TUDScript direkt unterstütze Pakete}
%
Einige der unter \autoref{sec:packages:recommended} beschriebenen Pakete werden 
durch \TUDScript direkt unterstützt und erweitern dessen Funktionalität. Dies
sind namentlich \Package{hyperref}, \Package{multicol}, \Package{quoting}, 
\Package{ragged2e} und \Package{crop} sowie \Package{isodate} respektive 
\Package{datetime2}. Weitere Informationen dazu ist den nachfolgenden 
Beschreibung des jeweiligen Paketes zu entnehmen.



\newcommand*\RecPack{%
  \hyperref[sec:packages:recommended]{Paketbeschreibung}:\xspace%
}
\section{Empfehlenswerte Pakete}
\tudhyperdef*{sec:packages:recommended}%
%
In diesem \autorefname wird eine Vielzahl an Paketen~-- zumeist kurz~-- 
vorgestellt, welche sich für mich persönlich bei der Arbeit mit \hologo{LaTeX} 
bewährt haben. Einige davon werden außerdem im Tutorial \Tutorial{treatise} in 
ihrer Anwendung beschrieben. Für detaillierte Informationen sowie bei Fragen zu 
den einzelnen Paketen sollte die jeweilige Dokumentation%
\footnote{Kommandozeile/Terminal: \Path{texdoc\,\PName{Paketname}}}
zu Rate gezogen werden, das Lesen der hier gegebenen Kurzbeschreibung ersetzt 
dies in keinem Fall. 


\subsection{Pakete zur Verwendung in jedem Dokument}
Die hier vorgestellten Pakete gehören meiner Meinung nach in die Präambel eines 
jeden Dokumentes. Die Dokumentsprache sollte in jedem Fall mit \Package{babel} 
oder \Package{polyglossia} definiert werden~-- auch wenn dies Englisch ist. Für 
deutschsprachige Dokumente ist für eine annehmbare Worttrennung beim Einsatz 
von \Engine{pdfLaTeX} das Paket \Package{hyphsubst} unbedingt zu verwenden.

\begin{packages}
\item[fontenc,fontspec]
  \index{Zeichensatzkodierung}%
  \ChangedAt{v2.02:\RecPack \Package{fontspec}}
  Die Zeichensatzkodierung des Ausgabefonts sollte immer festgelegt werden. Für 
  \Engine{pdfLaTeX} ist die Ausgabe als 7"~bit"~kodierte Schrift in der 
  Voreinstellung gewählt, was unter anderem dazu führt, dass keine echten
  Umlaute im erzeugten PDF"~Dokument verwendet werden. Um auf 8"~bit"~Schriften
  zu schalten, ist \Macro*{usepackage}[\POParameter{T1}\PParameter{fontenc}] zu
  nutzen.
  
  Für die Unicode"=Textsatzsysteme \Engine{LuaLaTeX} oder \Engine{XeLaTeX} 
  sollte stattdessen das Paket \Package{fontspec} verwendet werden. Damit 
  können Systemschriften im OpenType-Format und einer beliebigen 
  Zeichensatzkodierung eingebunden werden, womit sich die Auswahl der 
  verwendbaren Schriften stark erweitert. Das Paket wird durch \TUDScript 
  unterstützt.
\item[microtype]
  \index{Typografie}%
  Dieses Paket kümmert sich um den optischen Randausgleich%
  \footnote{englisch: protrusion, margin kerning}
  und das Nivellieren der Wortzwischenräume%
  \footnote{englisch: font expansion}
  im Dokument. Es funktioniert nicht mit der klassischen \Engine*{TeX}"~Engine, 
  wohl jedoch mit \Engine*{pdfTeX} oder \Engine*{LuaTeX} sowie \Engine*{XeTeX}.
\item[babel,polyglossia]
  \index{Sprachunterstützung}%
  \index{Bezeichner}%
  Mit dem Paket \Package{babel} erfolgt die Einstellung der im Dokument 
  verwendeten Sprache(n). Bei mehreren angegebenen Sprachen ist die zuletzt 
  geladene die Hauptsprache des Dokumentes. Die gewünschten Sprachen sollten 
  nicht als Paketoption sondern als Klassenoption und gesetzt werden, damit 
  auch andere Pakete auf die Spracheinstellungen zugreifen können. Für 
  deutschsprachige Dokumente ist die Option \Option*{ngerman} für die neue oder 
  \Option*{german} für die alte deutsche Rechtschreibung zu verwenden. 
  
  Mit dem Laden von \Package{babel} und der dazugehörigen Sprachen werden 
  sowohl die Trennmuster als auch die sprachabhängigen Bezeichner angepasst.
  Von einer Verwendung der obsoleten Pakete \Package{german} beziehungsweise 
  \Package{ngerman} anstelle von \Package{babel} wird abgeraten. Für 
  \Engine{LuaLaTeX} und \Engine{XeLaTeX} kann das Paket \Package{polyglossia} 
  genutzt werden.
\item[hyphsubst,dehyph-exptl]
  \index{Worttrennung|!}%
  Die möglichen Trennstellen von Wörtern wird von \hologo{LaTeX} mithilfe 
  eines Algorithmus berechnet. Dieser wird für deutschsprachige Texte mit dem 
  Paket \Package{hyphsubst} entscheidend verbessert. \Engine{LuaLaTeX} und 
  \Engine{XeLaTeX} nutzen diese Trennmuster automatisch, für \Engine{pdfLaTeX} 
  müssen diese mit folgendermaßen eingebunden werden:
  \begin{Code}[escapechar=§]
    \usepackage[ngerman=ngerman-x-latest]{hyphsubst}
  \end{Code}\vspace{-\baselineskip}%
  In \autoref{sec:tips:hyphenation} wird genauer auf das Zusammenspiel von 
  \Package{hyphsubst} und \Package{babel} sowie \Package{fontenc} eingegangen, 
  ein Blick dahin wird dringend empfohlen. Zusätzliche werden dort weitere 
  Hinweise für eine verbesserte Worttrennung gegeben.
\end{packages}


\subsection{Pakete zur situativen Verwendung}
Die nachfolgenden Pakete sollten nicht zwangsweise in jedem Dokument geladen 
werden sondern nur, falls dies auch tatsächlich notwendig ist. Zur besseren 
Übersicht wurde versucht, diese thematisch passend zu gruppieren. Daraus lässt 
sich keinerlei Wertung bezüglich ihrer Nützlichkeit oder meiner persönlichen 
Wertschätzung ableiten.


\subsubsection{Typografie und Layout}
\index{Typografie|(}%
%
Neben dem zuvor beschriebenem Paket \Package{microtype}, welches verantwortlich 
für mikrotypografische Feinheiten ist, existieren weitere Pakete, die vorrangig 
die Makrotypografie adressieren.
%
\begin{packages}
\item[setspace]
  \index{Zeilenabstand}%
  Die Vergrößerung des Zeilenabstandes wird:
  %
  \begin{enumerate}[itemindent=0pt,labelwidth=*,labelsep=1em,label=\Roman*.]
  \stditem viel zu häufig und völlig unnötig gefordert und
  \stditem schließlich auch noch zu groß gewählt.
  \end{enumerate}
  %
  Die Forderung nach Erhöhung des Zeilenabstandes~-- in der Typografie als 
  Durchschuss bezeichnet~-- kommt aus den Zeiten der Textverarbeitung mit der 
  Schreibmaschine. Ein einzeiliger Zeilenabstand bedeutete hier, dass die 
  Unterlängen der oberen Zeile genau auf der Höhe der Oberlängen der folgenden 
  Zeile lagen. Ein anderthalbzeiliger Zeilenabstand erzielte hier somit einen 
  akzeptablen Durchschuss. Eine Erhöhung des Durchschusses bei der Verwendung 
  von \hologo{LaTeX} ist an und für sich nicht notwendig. Sinnvoll ist dies 
  nur, wenn im Fließtext serifenlose Schriften zum Einsatz kommen, um die damit 
  verbundene schlechte Lesbarkeit etwas zu verbessern.
  
  Ist die Erhöhung des Durchschusses wirklich notwendig, sollte das Paket 
  \Package{setspace} genutzt werden. Dieses stellt den Befehl 
  \Macro{setstretch}[\Parameter{Faktor}](\Package{setspace})'none' zur 
  Verfügung, mit dem der Durchschuss respektive Zeilenabstand angepasst werden 
  kann. Der Wert des Faktors ist standardmäßig auf~1 gestellt und sollte 
  maximal bis~1.25 vergrößert werden. Der Befehl \Macro*{onehalfspacing} aus 
  diesem Paket setzt diesen Wert auf eben genau~1.25. Allerdings ist hier 
  anzumerken, dass die Vergrößerung des Zeilenabstandes~-- so wie ich es mir 
  angelesen habe~-- aus der Sicht eines Typographen keine Spielerei ist sondern 
  vielmehr allein der Lesbarkeit des Textes dient und möglichst gering 
  ausfallen sollte.
  
  Ziel ist es, beim Lesen nach dem Beenden einer Zeile das Auffinden der neuen 
  Zeile zu vereinfachen. Bei Serifen ist dies durch die Betonung der Grundlinie 
  sehr gut möglich. Bei serifenlosen Schriften~-- wie der im \TUDCD verwendeten 
  \OpenSans~-- ist dies schwieriger und ein erweiterter Abstand der Zeilen kann 
  hierbei hilfreich sein. Jedoch sollte nicht nach dem Motto 
  \enquote{viel hilft viel} verfahren werden. Für dieses Dokument wurde 
  \Macro{setstretch}[\PParameter{1.1}](\Package{setspace})'none' für den 
  Zeilenabstand gewählt. Weitere Tipps sind in \autoref{sec:tips:headings} und 
  \autoref{sec:tips:headline} zu finden.
\item[multicol]
  \index{Satzspiegel!zweispaltig|?}%
  \index{Mehrspaltensatz}%
  \index{Satzspiegel!mehrspaltig}%
  Hiermit kann jeglicher beliebiger Inhalt in zwei oder mehr Spalten ausgegeben 
  werden, wobei~-- im Gegensatz zum normalen zweispaltigen Satz über die
  \KOMAScript-Option \Option{twocolumn}(\Package{typearea})'none'~-- für einen 
  Spaltenausgleich gesorgt wird. Unterstützt wird das Paket innerhalb der 
  Umgebungen \Environment{abstract} und \Environment{tudpage}.
\item[balance]
  \index{Satzspiegel!zweispaltig}%
  Dieses Paket ermöglicht einen Spaltenausgleich im zweispaltigen Satz auf der 
  letzten Dokumentseite. Alternativ dazu kann auch \Package{multicol} verwendet 
  werden.
\item[isodate,datetime2]
  \index{Datum|?}%
  Mit \Macro{printdate}[\Parameter{Datum}](\Package{isodate})'none' formatiert 
  das Paket \Package{isodate} die Ausgabe eines Datums automatisch in ein
  spezifiziertes Format. Die Datumsangabe kann dabei im deutschen, englischen 
  oder ISO"~Format erfolgen. Alternativ kann auch das Paket \Package{datetime2}
  genutzt werden, welches zwingend die Eingabe im ISO"~Format erfordert. Wird
  eines der beiden Pakete geladen, werden alle Datumsfelder, welche durch die 
  \TUDScript-Klassen definiert wurden,%
  \footnote{%
    \Macro{date}, \Macro{dateofbirth} und \Macro{defensedate} sowie aus 
    \Package{tudscrsupervisor} \Macro{duedate}(\Package{tudscrsupervisor}) und 
    \Macro{issuedate}(\Package{tudscrsupervisor})%
  }
  im durch das jeweilige Paket definierten Ausgabeformat ausgegeben.
\item[quoting]
  \index{Zitate}%
  \hologo{LaTeX} bietet von Haus aus \emph{zwei} verschiedene Umgebungen~-- 
  \Environment{quote}(\Package{koma-script})'none' und 
  \Environment{quotation}(\Package{koma-script})'none'~-- für Zitate und 
  ähnliches an. Allerdings werden durch beide Umgebungen die \KOMAScript-Option 
  \Option{parskip=\PName{Methode}}(\Package{koma-script})'none'|declare|
  ignoriert. Mit der Umgebung \Environment{quoting}(\Package{quoting})'none'
  aus dem gleichnamigen Paket lässt sich dieses Problem umgehen. Wird das Paket 
  geladen, wird diese innerhalb der \Environment{abstract}"=Umgebung verwendet.
\item[csquotes]
  \index{Zitate}%
  Das Paket stellt unter anderem den Befehl 
  \Macro{enquote}[\Parameter{Zitat}](\Package{csquotes})'none'
  zur Verfügung, welcher Anführungszeichen in Abhängigkeit der gewählten 
  Sprache setzt. Zusätzlich werden weitere Kommandos und Optionen für die 
  spezifischen Anforderungen des Zitierens bei wissenschaftlichen Arbeiten 
  angeboten. Außerdem wird es durch \Package{biblatex} unterstützt und sollte 
  zumindest bei dessen Verwendung geladen werden.
\item[noindentafter]
  \ChangedAt{v2.02:\RecPack \Package{noindentafter}}
  Mit diesem Paket lassen sich automatische Absatzeinzüge für selbst zu 
  bestimmende Befehle und Umgebungen unterdrücken.
\item[ragged2e]
  \index{Worttrennung}%
  Das Paket verbessert den Flattersatz, indem für diesen die Worttrennung 
  aktiviert wird.
\item[fnpct]
  \index{Fußnoten|?}%
  \ChangedAt{v2.05:\RecPack \Package{fnpct}}
  Diese Paket sorgt zum einen für das Einhalten der richtigen Reihenfolge von 
  Satzzeichen und Fußnoten und zum anderen wird das typografisch korrekte 
  Setzen mehrerer, nacheinander folgender Fußnoten unterstützt.
\item[xspace,xpunctuate]
  \index{Befehlsdeklaration}%
  Mit \Package{xspace} kann bei der Definition eigener Makros der Befehl 
  \Macro{xspace}(\Package{xspace})'none' genutzt werden. Dieser setzt ein 
  gegebenenfalls notwendiges Leerzeichen automatisch. In 
  \autoref{sec:tips:xspace} ist die Definition eines solchen Befehls 
  exemplarisch ausgeführt. Durch das Paket \Package{xpunctuate} wird 
  \Package{xspace} um die Beachtung von Interpunktionen erweitert.
\item[ellipsis]
  \index{Befehlsdeklaration}%
  In \hologo{LaTeX} folgen den Befehlen für Auslassungspunkte (\Macro{dots} und 
  \Macro{textellipsis}) \emph{immer} ein Leerzeichen. Dies kann unter Umständen 
  unerwünscht sein. Mit dem Paket \Package{ellipsis} wird das nachfolgende 
  Leerzeichen~-- im Gegensatz zum Standardverhalten~-- nur gesetzt, wenn ein 
  Satzzeichen und kein Buchstabe folgt, \seeref*{\autoref{sec:tips:dots}}.
\stditem[\Application{DeLig}<delig>, \Package{selnolig}]
  \index{Ligaturen}%
  Hierbei handelt es sich um ein Java"~Script, das anhand eines Wörterbuches 
  falsche Ligaturen innerhalb eines Dokumentes automatisiert entfernt. Diese 
  müssten~-- insbesondere in deutschen Texten aufgrund der vielen Komposita~-- 
  für einen guten Satz manuell aufgelöst werden.%
  \footnote{%
    Das sind \enquote{ff}, \enquote{fi}, \enquote{fl}, \enquote{ffi}, und 
    \enquote{ffl} bei den meisten \hologo{LaTeX}"=Schriften.%
  }
  Mit \Engine{LuaLaTeX} als Textsatzsystem kann auch \Package{selnolig} 
  alternativ dazu verwendet werden.
\index{Typografie|)}%
\end{packages}


\subsubsection{Rechtschreibung}
\index{Rechtschreibung|(}%
%
Für die Rechtschreibkontrolle zeichnet im Normalfall der verwendete Editor 
verantwortlich. Dennoch gibt es einige wenige Pakete, welche sich diesem Thema 
widmen. Diese sind jedoch ausschließlich nutzbar, wenn als Textsatzsystem 
\Engine{LuaLaTeX} genutzt wird.
\begin{packages}
\item[lua-check-hyphen]
  \index{Worttrennung}%
  Hiermit lassen sich mit \Engine{LuaLaTeX} Trennstellen am Zeilenende zur 
  Prüfung markieren. Zum Thema der \textit{korrekten Worttrennung} sei außerdem 
  auf \autoref{sec:tips:hyphenation} verwiesen.
\item[spelling]
  Wird \Engine{LuaLaTeX} als Textsatzsystem verwendet, wird mit diesem Paket 
  der reine Textanteil aus dem \hologo{LaTeX}"~Dokument extrahiert~-- wobei 
  Makros und aktive Zeichen entfernt werden~-- und in eine separate Textdatei 
  geschrieben. Anschließend kann diese Datei mit einer externen Software zur  
  Rechtschreibprüfung wie \Application{GNU~Aspell}, \Application{Hunspell} oder 
  \Application{LanguageTool} analysiert und falsch geschriebene Wörter im 
  PDF"~Dokument hervorgehoben werden.
\index{Rechtschreibung|)}%
\end{packages}


\subsubsection{Schriften und Sonderzeichen}
\begin{packages}
\item[lmodern]<lm>
  \index{Schriftart}%
  Soll mit den klassischen \hologo{LaTeX}"=Standardschriften gearbeitet werden, 
  empfiehlt sich die Verwendung des Paketes \Package{lmodern}. Dieses 
  verbessert die Darstellung der Computer~Modern sowohl am Bildschirm als auch 
  beim finalen Druck.
\item[cfr-lm]
  \index{Schriftart}%
  Dieses experimentelle Paket liefert weitere Schriftschnitte für das Paket 
  \Package{lmodern}.
\item[newtx,newtxmath]<newtx>
  \index{Schriftart}%
  \index{Mathematiksatz}%
  Es werden einige alternative Schriften sowohl für den Fließtext 
  (\textit{Times} und \textit{Helvetica}) als auch den Mathematikmodus 
  bereitgestellt.
\item[libertine]
  \index{Schriftart}%
  Das Paket stellt die Schriften Linux~Libertine und Linux~Biolinum zur 
  Verfügung. Um diese Schriftart auch für den Mathematikmodus verwenden zu 
  können, sollte \Package{newtxmath} aus dem \Package{newtx}"=Bundle mit 
  \Macro*{usepackage}[\POParameter{libertine}\PParameter{newtxmath}] in der 
  Präambel eingebunden werden. Das Paket \Package{libgreek} enthält griechische 
  Buchstaben für Linux~Libertine.
\item[relsize]
  \index{Schriftgröße}%
  Die Größe einer Textauszeichnung kann relativ zur aktuellen Schriftgröße 
  gesetzt werden.
\item[textcomp]
  \index{Sonderzeichen}%
  Es werden zusätzliche Symbole und Sonderzeichen wie beispielsweise das 
  Promille- oder Eurozeichen sowie Pfeile für den Fließtext zur Verfügung 
  gestellt.
\end{packages}
%
\index{Mathematiksatz|(}%
Auch für (serifenlose) Mathematikschriften gibt es einige nützliche Pakete. 
Werden die Schriften des \CDs genutzt, sei auf die Option \Option{cdmath} 
verwiesen.
%
\begin{packages}
\item[sansmathfonts,sansmath]
  Sollten die normalen \hologo{LaTeX}"=Schriften Computer~Modern verwendet 
  werden, lässt sich dieses Paket zum serifenlosen Setzen mathematischer 
  Ausdrücke nutzen. Ein alternatives Paket mit der gleichen Zielstellung ist 
  \Package{sansmath}
\item[sfmath]
  Diese Paket verfolgt ein ähnliches Ziel, kann jedoch im Gegensatz zu 
  \Package{sansmath} nicht nur für Computer~Modern sondern mit der 
  entsprechenden Option auch für Latin~Modern, Helvetica und 
  Computer~Modern~Bright verwendet werden.
\item[mathastext]
  Mit dem Paket wird das Ziel verfolgt, aus der genutzten Schrift für den 
  Fließtext alle notwendigen Zeichen für den Mathematiksatz zu extrahieren.
\end{packages}


\subsubsection{Mathematiksatz}
Dies sind Pakete, die Umgebungen und Befehle für den Mathematiksatz sowie das 
Setzen von Einheiten und Zahlen im Allgemeinen anbieten.

\begin{packages}
  \item[mathtools,amsmath]
    Dieses Paket stellt für das De"~facto"~Standard"~Paket \Package{amsmath} 
    für Mathematikumgebungen Bugfixes zur Verfügung und erweitert dieses.
  \item[bm]
    Das Paket bietet mit \Macro*{bm} eine Alternative zu \Macro*{boldsymbol} im 
    \hrfn{http://tex.stackexchange.com/questions/3238}{Mathematiksatz}. Sollten 
    bei der Nutzung des Paketes Fehler auftreten, sei auf dessen Dokumentation 
    und insbesondere auf das Makro \Macro*{bmmax} verwiesen.
\end{packages}
%
Die korrekte Formatierung von Zahlen ist häufig ein Problem bei der Verwendung 
von \hologo{LaTeX}. Insbesondere, wenn in einem deutschsprachigen Dokument 
Daten im englischsprachigen Format verwendet werden, kommt es zu Problemen. 
Dafür wird im \TUDScript-Bundle das Paket \Package{mathswap} bereitgestellt. 
Dennoch gibt es zu diesem auch Alternativen.
%
\begin{packages}
\index{Zifferngruppierung|(}%
  \item[ionumbers]
    Dieses Paket ist mir tatsächlich erst bei der Arbeit an \Package{mathswap} 
    bekannt geworden. Es bietet mehr Funktionalitäten und kann als Alternative 
    dazu betrachtet werden.
  \item[icomma]
    Wird im Mathematikmodus nach dem Komma ein Leerzeichen gesetzt, wird dies 
    bei der Ausgabe beachtet. Der Verfasser muss sich demzufolge jederzeit 
    selbst um die typografisch korrekte Ausgabe kümmern.
  \item[ziffer]
    Für deutschsprachige Dokumente wird das Komma als Dezimaltrennzeichen 
    zwischen zwei Ziffern definiert. Folgt dem Komma keine Ziffer, wird 
    jederzeit der obligatorische Freiraum gesetzt, was meiner Meinung nach 
    besser als das Verhalten von \Package{icomma} ist.
\index{Zifferngruppierung|)}%
\end{packages}
%
Für das typografisch korrekte Setzen von Einheiten~-- ein halbes Leerzeichen 
zwischen Zahl und \emph{aufrecht} gesetzter Einheit~-- gibt es zwei gut 
nutzbare Pakete.
%
\begin{packages}
\index{Einheiten|(}%
\item[units]
  Dies ist ein einfaches und sehr zweckdienliches Paket zum Setzen von 
  Einheiten und für die meisten Anforderungen völlig ausreichend.
\item[siunitx]
  Dieses Paket ist in seinem Umfang im Vergleich deutlich erweitert. Neben 
  Einheiten können zusätzlich auch Zahlen typografisch korrekt gesetzt werden. 
  Die Ausgabe lässt sich in vielerlei Hinsicht an individuelle Bedürfnisse 
  anpassen. Für deutschsprachige Dokumenten sollte die Lokalisierung angegeben 
  werden. Mehr dazu in \autoref{sec:tips:siunitx}.
\index{Einheiten|)}%
\end{packages}
%
Weitere Hinweise zur mathematischen Typografie werden in \autoref{sec:tut} 
gegeben.
\index{Mathematiksatz|)}%


\subsubsection{Listen}
\index{Listen|?(}%
%
\begin{packages}
\item[enumitem]
  Das Paket \Package{enumitem} erweitert die rudimentären Funktionalitäten der 
  \hologo{LaTeX}"=Standardlisten
  \Environment{itemize}(\Package{koma-script},\Package{enumitem})'none',
  \Environment{enumerate}(\Package{koma-script},\Package{enumitem})'none' sowie
  \Environment{description}(\Package{koma-script},\Package{enumitem})'none' und
  ermöglicht die individuelle Anpassung dieser durch die Bereitstellung vieler 
  optionale Parameter nach dem Schlüssel"=Wert"=Prinzip. Eine von mir sehr 
  häufig genutzte Funktion ist beispielsweise die Entfernung des zusätzlichen 
  Abstand zwischen den einzelnen Einträgen einer Liste mit 
  \Macro{setlist}[\PParameter{noitemsep}](\Package{enumitem})'none'.
\end{packages}
\index{Listen|?)}%


\subsubsection{Verzeichnisse aller Art}
\index{Verzeichnisse|?(}%
%
Neben dem Erstellen des eigentlichen Dokumentes sind für eine wissenschaftliche 
Arbeit meist auch allerhand Verzeichnisse gefordert. Fester Bestandteil ist 
dabei das Literaturverzeichnis, auch ein Abkürzungs- und Formelzeichen- 
beziehungsweise Symbolverzeichnis werden häufig gefordert. Gegebenenfalls wird 
auch noch ein Glossar benötigt. Hier werden die passenden Pakete vorgestellt. 
Sollen im Dokument komplette Quelltexte oder auch nur Auszüge daraus erscheinen 
und für diese auch gleich ein entsprechendes Verzeichnis generiert werden, so 
sei auf das Paket \Package{listings}'full' verwiesen.

\begin{packages}
\item[biblatex]
  \index{Literaturverzeichnis}%
  Das Paket kann als legitimer Nachfolger zu \hologo{BibTeX} gesehen werden. 
  Ähnlich dazu bietet \Package{biblatex} die Möglichkeit, Literaturdatenbanken 
  einzubinden und verschiedene Stile der Referenzierung und Darstellung des 
  Literaturverzeichnisses auszuwählen. 
  
  Mit \Package{biblatex} ist die Anpassung eines bestimmten Stiles wesentlich 
  besser umsetzbar als mit \hologo{BibTeX}. Wird \Application{biber} für die 
  Sortierung des Literaturverzeichnisses genutzt, ist die Verwendung einer 
  UTF"~8"~kodierten Literaturdatenbank problemlos möglich. In Verbindung mit 
  \Package{biblatex} wird die zusätzliche Nutzung des Paketes 
  \Package{csquotes} sehr empfohlen.
\item[glossaries,nomencl]
  \index{Glossar}%
  \index{Abkürzungsverzeichnis}%
  \index{Formelzeichenverzeichnis}%
  \index{Symbolverzeichnis}%
  Dies ist ein sehr mächtiges Paket zum Erstellen eines Glossars sowie 
  Abkürzungs- und Symbolverzeichnisses. Die mannigfaltige Anzahl an Optionen 
  ist zu Beginn eventuell etwas abschreckend. Insbesondere wenn Verzeichnisse 
  für Abkürzungen \emph{und} Formelzeichen respektive Symbole notwendig sind, 
  sollte dieses Paket in Erwägung gezogen werden.
  
  Alternativ dazu kann für ein Symbolverzeichnis auch lediglich eine manuell 
  gesetzte Tabelle genutzt werden. Das hierfür sehr häufig empfohlene Paket 
  \Package{nomencl} bietet meiner Meinung nach demgegenüber keinerlei Vorteile.
\item[acro,acronym]
  \index{Abkürzungsverzeichnis}%
  Soll lediglich ein Abkürzungsverzeichnis erstellt werden, ist dieses Paket 
  die erste Wahl. Es stellt Befehle zur Definition von Abkürzungen sowie zu 
  deren Verwendung im Text und zur sortierten Ausgabe eines Verzeichnisses 
  bereit. Alternativ dazu kann das Paket \Package{acronym} verwendet werden. 
  Die Sortierung des Abkürzungsverzeichnisses muss hier allerdings manuell 
  durch den Anwender erfolgen.
\index{Verzeichnisse|?)}%
\end{packages}


\subsubsection{Gleitobjekte}
\index{Gleitobjekte|?(}%
%
Es werden Pakete für die Beeinflussung von Aussehen, Beschriftung und 
Positionierung von Gleitobjekten vorgestellt. Unter \autoref{sec:tips:floats} 
sind außerdem Hinweise zur manuellen Manipulation der Gleitobjektplatzierung zu 
finden.

\begin{packages}
\item[caption]
  Mit der Option \Option{captions=\PSet}(\Package{koma-script})'none'|declare| 
  bieten die \KOMAScript-Klassen bereits einige Möglichkeiten zum Formatieren 
  der Beschriftungen für Gleitobjekte. Dieses Paket ist daher meist nur in 
  gewissen Ausnahmefällen für spezielle Anweisungen notwendig, allerdings auch 
  bei der Verwendung unbedenklich.
\item[subcaption]
  Diese Paket kann zum einfachen Setzen von Unterabbildungen oder "~tabellen 
  mit den entsprechenden Beschriftungen genutzt werden. Das dazu alternative 
  Paket \Package{subfig} sollte vermieden werden, da es nicht mehr gepflegt 
  wird und es mit diesem im Zusammenspiel mit anderen Paketen des Öfteren zu 
  Problemen kommt. Sollte der Funktionsumfang von \Package{subcaption} nicht 
  ausreichen, kann anstelle dessen das Paket \Package{floatrow} verwendet 
  werden, welches ähnliche Funktionalitäten wie \Package{subfig} bereitstellt.
\item[floatrow]
  Mit diesem Paket können global wirksame Einstellungen und Formatierungen für 
  \emph{alle} Gleitobjekte eines Dokumentes über die Paketoptionen oder mit 
  \Macro{floatsetup}[\PParameter{\dots}](\Package{floatrow})'none' vorgenommen 
  werden. So lässt sich unter anderem die verwendete Schrift innerhalb der 
  Umgebungen \Environment{figure} und \Environment{table} mit
  \Macro*{floatsetup}[\PParameter{font=\dots}] einstellen. Mit 
  \begin{Code}
    \floatsetup[figure]{capposition=bottom}
    \floatsetup[table]{capposition=top}
  \end{Code}\vspace{-\baselineskip}%
  lässt sich automatisch das typografisch korrekte Setzen von 
  Abbildungs\emph{unterschriften} sowie Tabellen\emph{überschriften} 
  erzwingen~-- unabhängig von der Position des Befehls zur Beschriftung 
  \Macro{caption}(\Package{koma-script},\Package{caption})'none' 
  innerhalb der jeweiligen Gleitobjektumgebung. Wird das Verhalten wie  
  empfohlen eingestellt, sollte für eine gute vertikale Platzierung der 
  Tabellenüberschriften zusätzlich die 
  \KOMAScript-Option \Option{captions=tableheading}(\Package{koma-script})'none'
  genutzt werden.
\item[placeins]
  Mit diesem Paket kann die Ausgabe von Gleitobjekten vor Kapiteln und wahlweise
  Unterkapiteln erzwungen werden.
\item[flafter]
  Dieses Paket erlaubt die frühestmögliche Platzierung von Gleitobjekten im 
  ausgegeben Dokument erst an der Stelle ihres Auftretens im Quelltext. Diese 
  werden dementsprechend nie vor ihrer Definition am Anfang der Seite 
  erscheinen.
\end{packages}
\index{Gleitobjekte|?)}%



\subsubsection{Tabellen}
\index{Tabellen|?(}%
%
Für den Tabellensatz werden standardmäßig die Umgebungen \Environment{tabbing} 
und \Environment{tabular} respektive \Environment{tabular*} bereitgestellt, 
welche in ihrer Funktionalität für einen qualitativ hochwertigen Tabellensatz 
meist nicht ausreichen. Deshalb werden hier zusätzliche Pakete vorgestellt. 
%
\begin{packages}
\item[array]
  Dieses Paket ermöglicht mit \Macro{newcolumntype}(\Package{array})'none' das 
  Erstellen neuer Spaltentypen und die erweiterte Definition von Tabellenspalten
  (\PValue{>\PParameter{\dots}}\PName{Spaltentyp}\PValue{<\PParameter{\dots}}), 
  wobei mithilfe sogenannter \enquote{Hooks} vor und nach Einträgen innerhalb 
  einer Spalte gezielt Anweisungen gesetzt werden können. Die Zeilenhöhe lässt 
  sich mit \Macro{extrarowheight}(\Package{array})'none' ändern. 
\item[booktabs]
  Für einen guten Tabellensatz mit \hologo{LaTeX} gibt es bereits zahlreiche 
  \hrfn{http://userpage.fu-berlin.de/latex/Materialien/tabsatz.pdf}{Tipps} im 
  Internet zu finden. Zwei Regeln sollten dabei definitiv beachtet werden:
  %
  \begin{enumerate}[itemindent=0pt,labelwidth=*,labelsep=1em,label=\Roman*.]
  \stditem keine vertikalen Linien
  \stditem keine doppelten Linien
  \end{enumerate}
  %
  Das Paket \Package{booktabs} (deutsche Dokumentation \Package*{booktabs-de}) 
  ist für den Satz von hochwertigen Tabellen eine große Hilfe und stellt die 
  Befehle \Macro{toprule}(\Package{booktabs})'none', 
  \Macro{midrule}(\Package{booktabs})'none' sowie 
  \Macro{cmidrule}(\Package{booktabs})'none' und 
  \Macro{bottomrule}(\Package{booktabs})'none'
  für unterschiedliche horizontale Linien bereit.
\item[widetable]
  Mit der Standard"=\hologo{LaTeX}"=Umgebung \Environment{tabular*} kann eine 
  Tabelle mit einer definierten Breite gesetzt werden. Dieses Paket stellt die 
  Umgebung \Environment{widetable}(\Package{widetable})'none' zur Verfügung, 
  die als Alternative genutzt werden kann und eine symmetrische Tabelle erzeugt.
\item[tabularx]
  Auch mit diesem Paket kann die Gesamtbreite einer Tabelle spezifiziert 
  werden. Dafür wird der Spaltentyp \PValue{X} definiert, welcher als Argument 
  der \Environment{tabularx}(\Package{tabularx})'none'"=Umgebung beliebig 
  häufig angegeben werden kann 
  (\Macro*{begin}[\PParameter{tabularx}\Parameter{Breite}\Parameter{Spalten}]). 
  Die \PValue{X}"~Spalten ähneln denen vom Typ~\PValue{p}\Parameter{Breite}, 
  wobei die Breite dieser aus der gewünschten Tabellengesamtbreite abzüglich 
  dem benötigten Platz der gegebenenfalls vorhandenen Standardspalten 
  automatisch berechnet wird.
\item[tabulary]
  Dies ist ein weiteres Paket zur automatischen Berechnung von Spaltenbreiten. 
  Der zur Verfügung stehende Platz~-- gewünschte Gesamtbreite abzüglich der 
  notwendigen Breite für Standardspalten~-- wird jedoch nicht wie bei der 
  \Environment{tabularx}(\Package{tabularx})'none' auf alle Spalten 
  gleichmäßig verteilt sondern in der 
  \Environment{tabulary}(\Package{tabulary})'none'"=Umgebung für die 
  Spaltentypen~\PValue{LCRJ} anhand ihres Zellinhaltes gewichtet vergeben. 
  (\Macro*{begin}[\PParameter{tabulary}\Parameter{Breite}\Parameter{Spalten}]). 
\item[longtable,ltxtable,ltablex]
  Sollen mehrseitige Tabellen mit Seitenumbruch erstellt werden, ist dieses 
  Paket das Mittel der ersten Wahl. Für die Kombination mehrseitiger Tabellen 
  mit einer \Environment{tabularx}(\Package{tabularx})'none'"=Umgebung können 
  die Pakete \Package{ltablex} oder besser noch \Package{ltxtable} verwendet 
  werden. Alternativ dazu lässt sich auch \Package{tabu} nutzen.
\item[multirow]
  Es wird der Befehl \Macro{multirow}(\Package{multirow})'none' definiert, der 
  das Zusammenfassen von mehreren Zeilen in einer Spalte ermöglicht~-- ähnlich 
  zum Makro \Macro{multicolumn} für Spalten.
\item[tabularborder]
  Bei Tabellen wird zwischen Spalten automatisch ein horizontaler Abstand 
  (\Length{tabcolsep}) gesetzt~-- besser gesagt jeweils vor und nach einer 
  Spalte. Dies geschieht auch \emph{vor} der ersten und \emph{nach} der letzten 
  Spalte. Dieser zusätzliche Platz an den äußeren Rändern kann störend wirken, 
  insbesondere wenn die Tabelle über die komplette Textbreite gesetzt wird. Mit 
  dem Paket \Package{tabularborder} kann dieser Platz automatisch entfernt 
  werden.
  
  Dies funktioniert allerdings nur mit der \Environment{tabular}"=Umgebung. 
  Die Tabellen aus den Paketen \Package{tabularx}, \Package{tabulary} und 
  \Package{tabu} werden nicht unterstützt. Wie dieser Abstand bei diesen 
  manuell entfernt werden kann, ist unter \autoref{sec:tips:table} zu finden.
\item[tabu]
  \ChangedAt{%
    v2.02:\RecPack \Package{tabu} ist nur bedingt empfehlenswert
  }
  Dies ist ein relativ neues Paket, welches versucht, viele der zuvor genannten 
  Funktionalitäten zu implementieren und weitere bereitzustellen. Dafür werden 
  die Umgebungen \Environment{tabu}(\Package{tabu})'none' und 
  \Environment{longtabu}(\Package{tabu})'none' definiert. Es 
  kann alternativ zu \Package{tabularx} verwendet werden und ist insbesondere 
  als Ersatz für das Paket \Package{ltxtable} empfehlenswert.
  
  \Attention{%
    Für das Paket in der Version~v2.8 wären seit einigen Jahren mehrere 
    Bugfixes notwendig. Der originäre Autor hatte außerdem die Änderung der 
    \hrfn{https://groups.google.com/d/topic/comp.text.tex/xRGJTC74uCI}{%
      Benutzerschnittstelle in einer zukünftigen Version%
    }
    angekündigt, anscheinend aber mittlerweile die Pflege des Paketes komplett 
    eingestellt. 
  }%
  
  Durch Änderungen am \hologo{LaTeXe}"~Kernel wurde das Paket unbrauchbar. 
  Deshalb sind durch das \hrfn{https://github.com/tabu-fixed/tabu}{%
    \hologo{LaTeX3}-Projektteam die allernötigsten Anpassungen%
  } vorgenommen worden, damit das Paket in der aktuellen Version~v2.9 zumindest 
  grundsätzlich lauffähig ist. Ein Großteil der ursprünglich sehr guten 
  Funktionalitäten kann momentan allerdings nicht genutzt werden. Deshalb ist 
  das Paket aktuell nur bedingt empfehlenswert.
\end{packages}
\index{Tabellen|?)}%


\subsubsection{Grafiken und Abbildungen}
\index{Grafiken|?(}%
%
Grafiken für wissenschaftliche Arbeiten sollten als Vektorgrafiken erstellt 
werden, um die Skalierbarkeit und hohe Druckqualität zu gewährleisten. 
Bestenfalls folgen diese auch dem Stil der dazugehörigen Arbeit.%
\footnote{%
  Für qualitativ hochwertige Dokumente sollten übernommene Grafiken nicht 
  direkt kopiert oder gescannt sondern im gewünschten Zielformat neu erstellt 
  und mit einer Referenz auf die Quelle eingebunden werden.%
}
Für das Erstellen eigener Vektorgrafiken, welche die \hologo{LaTeX}"=Schriften 
und das Layout des Hauptdokumentes nutzen, gibt es zwei mögliche Ansätze. 
Entweder die Grafiken werden ähnlich wie das Dokument \enquote{programmiert} 
oder Zeichenprogramme, welche wiederum die Ausgabe oder das Weiterreichen von 
Text an \hologo{LaTeX} unterstützen, werden genutzt. 
Für das Programmieren von Grafiken sollen hier die wichtigsten Pakete 
vorgestellt werden. Wie diese zu verwenden sind, ist den dazugehörigen 
Paketdokumentationen zu entnehmen. 

\begin{packages}
\item[tikz]<pgf>
  Dies ist ein sehr mächtiges Paket für das Programmieren von Vektorgrafiken 
  und sehr häufig~-- insbesondere bei Einsteigern~-- die erste Wahl bei der 
  Verwendung von \Engine{pdfLaTeX}.
\item[pstricks]
  Diese Paket stellt die zweite Variante zum Programmieren von Grafiken dar. 
  Da hiermit auf PostScript (direkt) zugegriffen werden kann, existieren 
  \emph{noch} mehr Möglichkeiten bei der Erstellung eigener Grafiken, wovon
  die bereitgestellten Befehle rege Gebrauch machen. 
  
  Daraus resultiert allerdings der Nachteil, dass die mit \Package{pstricks} 
  erstellten Grafiken nicht direkt in eine PDF"~Datei kompiliert werden können. 
  Vielmehr müssen die Grafiken aus den Umgebungen 
  \Environment{pspicture}(\Package{pstricks})'none' zunächst über den Pfad 
  \Path{latex\,>\,dvips\,>\,ps2pdf} in PDF"~Dateien gewandelt werden. Diese 
  lassen sich von \Engine{pdfLaTeX} anschließend als Abbildungen einbinden. Um 
  dieses Vorgehen zu ermöglichen, lassen sich folgende Pakete nutzen:
  %
  \begin{packages}
  \item[pst-pdf]
    Dieses Paket stellt Methoden für den Export von PostSript-Grafiken in 
    PDF"~Datien bereit. Die einzelnen Aufrufe zur Kompilierung von DVI über 
    PostScript zu PDF müssen durch den Anwender manuell beziehungsweise über 
    die Ausgaberoutinen des verwendeten Editors durchgeführt werden.
  \item[auto-pst-pdf,pdftricks2]
    Das Paket automatisiert die Erzeugung der \Package{pstricks}"=Grafiken mit 
    dem Paket \Package{pst-pdf}. Hierfür muss \Engine{pdfLaTeX} per Option mit 
    erweiterten Schreibrechten ausgeführt werden. Dazu ist der Aufruf von 
    \Path{pdflatex} mit der Option \Path{-{}-shell-escape} respektive 
    \Path{-{}-enable-write18} notwendig. Bitte beachten Sie dazu ebenfalls die 
    Hinweise in \autoref{sec:tips:auto-pst-pdf}. Eine Alternative dazu ist das 
    Paket \Package{pdftricks2}.
  \end{packages}
\end{packages}
%
Im Tutorial \Tutorial{treatise} wird für \Package{pstricks} und \Package{tikz} 
jeweils ein Beispiel gegeben. Um bei der Erstellung von Grafiken mit einem der 
beiden Paketen nicht bei jeder Änderung das komplette Dokument kompilieren zu 
müssen, können diese in separate Dateien ausgelagert werden. Hierfür sind die 
beiden Pakete \Package{standalone} oder \Package{subfiles} sehr nützlich.

Für das Zeichnen einer Grafik mit einem Bildbearbeitungsprogramm, welches die 
Weiterverarbeitung durch \hologo{LaTeX} erlaubt, möchte ich auf die freien 
Programme \Application{LaTeXDraw} und \Application{Inkscape} verweisen. 
Insbesondere das zuletzt genannte Programm ist sehr empfehlenswert. 
%
\begin{packages}
\item[svg]
  Mit diesem Paket können alle notwendigen Schritte zum Einfügen einer 
  SVG"~Grafik in ein \hologo{LaTeX}"~Dokument automatisiert durchgeführt 
  werden. In \autoref{sec:tips:svg} sind weitere Hinweise hierzu zu finden.
\end{packages}
\index{Grafiken|?)}%


\subsubsection{Querverweise und Lesezeichen}
\index{Querverweise|?(}%
\index{Lesezeichen|?(}%
%
Für das Erzeugen von Querverweisen auf bestimmte Gliederungsebenen, Tabellen, 
Abbildungen oder auch Gleichungen muss für diese besagten Elemente zunächst mit 
\Macro{label}[\Parameter{Label}] ein \emph{eindeutiges} Label erzeugt werden, 
auf welches im Dokument entweder mit \Macro{ref} oder nach dem Laden von 
\Package{hyperref} besser noch mit \Macro{autoref}(\Package{hyperref})'none' 
referenziert werden kann. In \autoref{sec:tips:references} sind diesbezüglich 
weitere Informationen zu finden.
%
\begin{packages}
\item[hyperref]
  Hiermit können in einem PDF"~Dokument Lesezeichen, Querverweise und 
  Hyperlinks erstellt werden. Wird es geladen, sind außerdem die Option 
  \Option{tudbookmarks} sowie der Befehl \Macro{tudbookmark} nutzbar. Das 
  Paket \Package{bookmark} erweitert die Unterstützung nochmals. Beide 
  genannten Pakete sollten~-- bis auf sehr wenige Ausnahmen wie beispielsweise 
  \Package{glossaries}~-- als letztes in der Präambel eingebunden werden.
\item[bookmark]
  Dieses Paket verbessert und erweitert die von \Package{hyperref} angebotenen 
  Möglichkeiten zur Erstellung von Lesezeichen~-- auch Outline"=Einträge~-- im 
  PDF"~Dokument. Zum Beispiel können Schriftfarbe- und "~stil geändert werden.
\item[varioref]
  Mit diesem Paket lassen sich sehr gute Verweise auf bestimmte Seiten 
  erzeugen. Insbesondere, wenn der Querverweis auf die aktuelle, die 
  vorhergehende oder nachfolgende sowie im doppelseitigen Satz auf die 
  gegenüberliegende Seite erfolgt, werden passende Textbausteine für diesen 
  verwendet.
\item[cleveref]
  Dieses Paket vereint die Vorzüge der automatischen Benennung referenzierter 
  Objekte mit dem Befehl \Macro{autoref}(\Package{hyperref})'none' aus dem 
  Paket \Package{hyperref} und der Verwendung von \Package{varioref}.
\end{packages}
\index{Lesezeichen|?)}%
\index{Querverweise|?)}%


\subsubsection{Aufteilung des Hauptdokumentes in Unterdateien}
Um während des Entwurfes eines Dokumentes die Zeitdauer für das Kompilieren zu 
verkürzen, kann dieses in Unterdokumente gegliedert werden. Dadurch wird es 
möglich, nur den momentan bearbeiteten Dokumentteil~-- respektive die aktuelle 
\Package{tikz}"~ oder \Package{pstricks}"=Grafik~-- zu kompilieren. Die meiner 
Meinung nach besten Pakete für dieses Unterfangen werden folgend vorgestellt.
%
\begin{packages}
\item[standalone]
  \ChangedAt{%
    v2.02:Bugfix für Verwendung der Klasse \Class{standalone} aus dem Paket 
    \Package{standalone}%
  }
  Dieses Paket ist für das Erstellen eigenständiger (Unter)"~Dokumente gedacht, 
  welche später in ein Hauptdokument eingebunden werden können. Jedes dieser 
  Teildokumente benötigt eine eigene Präambel. Optional lassen sich die 
  Präambeln der Unterdokumente automatisch in ein Hauptdokument einbinden.
\item[subfiles]
\ChangedAt{v2.02:\RecPack \Package{subfiles}}
  Dieses Paket wählt einen etwas anderen Ansatz als \Package{standalone}. Es 
  ist von Anfang an dafür gedacht, ein dediziertes Hauptdokument zu verwenden. 
  Die darin mit \Macro{subfiles}(\Package{subfiles})'none' eingebundenen 
  Unterdateien nutzen bei der autarken Kompilierung dessen Präambel.
\end{packages}
%
Unabhängig davon, ob Sie eines der beiden Pakete nutzen oder alles in einem 
Dokument belassen, ist es ratsam, eigens definierte Befehle, Umgebungen und 
ähnliches in ein separates Paket auszulagern. Dafür müssen Sie lediglich ein 
leeres \hologo{LaTeX}"=Dokument erzeugen und es unter \File*{mypreamble.sty} 
oder einem anderen Namen im gleichen Ordner wie das Hauptdokument speichern. 
Dann können Sie in dieser Datei ihre Deklarationen ausführen und diese mit 
\Macro*{usepackage}[\PParameter{mypreamble}] in das Dokument einbinden. Dies 
hat den Vorteil, dass das Hauptdokument zum einen übersichtlich bleibt und Sie 
zum anderen Ihre persönliche Präambel generisch wachsen lassen und für andere 
Dokumente wiederverwenden können.


\subsubsection{Die kleinen und großen Helfer\dots}
Hier taucht alles auf, was nicht in die vorherigen Kategorien eingeordnet 
werden konnte.
%
\begin{packages}
\item[marginnote]
  \index{Randnotizen}%
  Mit dem Befehl \Macro{marginpar}(\Package{koma-script})'none' lassen sich 
  Randnotizen erzeugen. Diese sind in \hologo{LaTeX} spezielle Gleitobjekte, 
  wodurch selbige nicht immer direkt an der ursprünglich intendierten Stelle am 
  Blattrand gesetzt werden. Das Paket \Package{marginnote} stellt den Befehl 
  \Macro{marginnote}(\Package{marginnote})'none' für nicht"~gleitende 
  Randnotizen zur Verfügung. Eine Alternative dazu ist Paket \Package{mparhack}.
\item[todonotes]
  \index{Randnotizen}%
  Mit \Package{todonotes} können noch offene Aufgaben in unterschiedlicher 
  Formatierung am Blattrand oder im direkt Fließtext ausgegeben werden. Aus 
  allen Anmerkungen lässt sich eine Liste aller offenen Punkte erzeugen.
\item[xparse]
  \index{Befehlsdeklaration}%
  Dieses mächtige Paket entstammt dem \hologo{LaTeX3}"=Projekt und bietet für 
  die Erstellung eigener Befehle und Umgebungen einen alternativen Ansatz zu 
  den bekannten \hologo{LaTeX}"=Deklarationsbefehlen \Macro*{newcommand} und 
  \Macro*{newenvironment} sowie deren Derivaten. Mit \Package{xparse} wird es 
  möglich, obligatorische und optionale Argumente an beliebigen Stellen 
  innerhalb des Befehlskonstruktes zu definieren. Auch die Verwendung anderer 
  Zeichen als eckige Klammern für die Spezifizierung eines optionalen 
  Argumentes ist möglich.
\item[xkeyval,keyval,kvoptions,pgfkeys]
  \index{Befehlsdeklaration}%
  \ChangedAt{v2.02:\RecPack \Package{xkeyval}}
  Das \KOMAScript"=Bundle lädt das Paket \Package{keyval}, um Optionen mit 
  einer Schlüssel"=Wert"=Syntax deklarieren zu können. Zusätzlich wird von 
  \TUDScript das Paket \Package{kvsetkeys} geladen, um auf nicht definierte 
  Schlüssel reagieren zu können. Die Schlüssel"=Wert"=Syntax kann auch für 
  eigens definierte Makros genutzt werden, um sich das exzessive Verwenden von 
  optionalen Argumenten zu ersparen. Damit wäre folgende Definition möglich:
  \Macro*{newcommand}[%
    \Macro*{Befehl}[\OParameter{Schlüssel"=Wert"=Liste}\Parameter{Argument}]%
  ]
  
  Das Paket \Package{xkeyval} erweitert insbesondere die Möglichkeiten zur 
  Deklaration unterschiedlicher Typen von Schlüsseln. Sollten die bereits durch 
  \TUDScript geladenen Pakete \Package{keyval} und \Package{kvsetkeys} in ihrer 
  Funktionalität nicht ausreichen, kann dieses Paket verwendet werden. Für die 
  Entwicklung eigener Pakete, deren Optionen das Schlüssel"=Wert"=Format 
  unterstützen, kann das Paket \Package{scrbase} genutzt werden. Soll aus einem 
  Grund auf \KOMAScript{} gänzlich verzichtet werden, sind die beiden Pakete 
  \Package{kvoptions} oder \Package{pgfkeys} eine Alternative.
\item[scrlfile]
  \index{Paketabhängigkeiten}
  \ChangedAt{v2.05:\RecPack \Package{scrlfile}}
  Dieses \KOMAScript-Paket erlaubt es, auf das Laden von Klassen oder Paketen 
  direkt davor oder danach zu reagieren, um beispielsweise Paketabhängigkeiten 
  aufzulösen oder nach dem Laden eines bestimmten Paketes gezielt Befehle 
  anzupassen. Mehr dazu ist im \scrguide zu finden.
\item[calc]
  \index{Berechnungen}%
  Normalerweise lassen sich Berechnungen im Dokument lediglich mit 
  Low"~Level"~\hologo{TeX}"=Primitiven durchführen. Dieses Paket stellt eine 
  einfachere Syntax für Rechenoperationen der vier Grundrechenarten zur 
  Verfügung. Zusätzlich werden neue Befehle zur Bestimmung der Höhe und Breite 
  bestimmter Textauszüge definiert.
\item[mwe,blindtext]
  \index{Minimalbeispiel|?}%
  \ChangedAt{v2.02:\RecPack \Package{mwe}}
  Mit dem Paket \Package{mwe} lassen sich sehr einfach Minimalbeispiele 
  erzeugen, die sowohl Blindtexte als auch Abbildungen enthalten sollen. Werden 
  keine Grafiken sondern lediglich Textabschnitte etc. benötigt, ist das Laden 
  von \Package{blindtext} ausreichend.
\item[filecontents]
  \index{Minimalbeispiel|?}%
  Dieses Paket erweitert die im \hologo{LaTeX}"=Kernel definierte Umgebung 
  \Environment{filecontents}(\Package{filecontents})'none' dahingehend,
  dass bereits existierende Dateien überschrieben werden können.
\item[pdfpages]
  Das Paket ermöglicht die Einbindung von einzelnen oder mehreren PDF"~Dateien.
\item[crop]
  \index{Beschnittzugabe}\index{Schnittmarken}%
  Hiermit können eine Beschnittzugabe sowie Schnittmarken~-- beispielsweise für 
  Poster~-- erzeugt werden. Hierzu ist in \autoref{sec:tips:crop} ein Beispiel 
  zu finden.
\item[pagecolor]
  \index{Farben}%
  Mit dem Paket kann die Hintergrundfarbe der Seiten im Dokument geändert 
  werden.
\item[afterpage]
  Der Befehl \Macro{afterpage}[\PParameter{\dots}](\Package{afterpage})'none' 
  kann genutzt werden, um den Inhalt aus dessen Argument direkt nach der 
  Ausgabe der aktuellen Seite auszuführen.
\item[filemod]
  Wird entweder \Engine{pdfLaTeX} oder \Engine{LuaLaTeX} als Textsatzsystem 
  eingesetzt, können mit diesem Paket das Änderungsdatum zweier Dateien 
  miteinander verglichen und in Abhängigkeit davon definierbare Aktionen 
  ausgeführt werden.
\item[listings]
  \index{Quelltextdokumentation}%
  Dieses Paket eignet sich hervorragend zur Quelltextdokumentation in 
  \hologo{LaTeX}. Es bietet die Möglichkeit, externe Quelldateien einzulesen 
  und darzustellen sowie die Syntax in Abhängigkeit der verwendeten 
  Programmiersprache hervorzuheben. Zusätzlich lässt sich ein Verzeichnis mit 
  allen eingebundenen sowie direkt im Dokument angegebenen Quelltextauszügen 
  erstellen.
  \ChangedAt{v2.02:\RecPack \Package{listings}}
  Wird \Package{listings} in Dokumenten mit UTF"~8"~Kodierung verwendet, 
  sollte direkt nach dem Laden des Paketes in der Präambel Folgendes 
  hinzugefügt werden:
  \begin{Code}
    \lstset{%
      inputencoding=utf8,extendedchars=true,
      literate=%
        {ä}{{\"a}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
        {Ä}{{\"A}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
        {~}{{\textasciitilde}}1 {ß}{{\ss}}1
    }
  \end{Code}\vspace{-\baselineskip}%
\item[coseoul]
  Mit diesem Paket kann die Struktur der Gliederung relativ erstellt werden. 
  Es wird keine absolute Gliederungsebene (\Macro*{chapter}, \Macro*{section}) 
  angegeben sondern die Relation zwischen vorheriger und aktueller Ebene 
  (\Macro*{levelup}, \Macro*{levelstay}, \Macro*{leveldown}).
\item[selinput,inputenc]
  \index{Eingabekodierung}%
  \index{Minimalbeispiel|?}%
  Die verwendete Eingabekodierung ist standardmäßig auf \PValue{utf8}
  festgelegt, was von (fast) allen \LaTeX-Editoren unterstützt wird. Dies 
  sollte im Normalfall auch nicht geändert werden. Ältere Dokumente sind aber 
  vielleicht noch in einer anderen Eingabekodierung gespeichert. Kann diese 
  nicht geändert werden, so ist es für \Engine{pdfLaTeX} möglich, eine 
  andere~-- im \hyperref[sec:tips:editor]{Editor (\autoref{sec:tips:editor})} 
  vom Anwender eingestellte~-- Eingabekodierungen zu nutzen. Diese kann mit dem 
  Paket \Package{selinput} (automatisch) für \LaTeX{} festgelegt werden Mit:
  \begin{Code}
    \usepackage{selinput}
    \SelectInputMappings{adieresis={ä},germandbls={ß}}
  \end{Code}\vspace{-\baselineskip}%
  wird es verwendet. Alternativ dazu lässt sich mit dem Paket 
  \Package{inputenc} die Eingabekodierung manuell mit  
  \Macro*{usepackage}[\OParameter{Eingabekodierung}\PParameter{inputenc}]  
  einstellen. Das Paket \Package{fontenc} sollte in jedem Fall \emph{zuvor}
  geladen werden.
\end{packages}


\subsubsection{Bugfixes}
\begin{packages}
\item[scrhack]<koma-script>
  Das Paket behebt Kompatibilitätsprobleme der \KOMAScript-Klassen mit den 
  Paketen \Package{hyperref}, \Package{float}, \Package{floatrow} und
  \Package{listings}. Es ist durchaus empfehlenswert, jedoch sollte unbedingt 
  die Dokumentation beachtet werden.
\item[scrwfile,morewrites]
  Falls der Fehler \texttt{No room for a new \textbackslash write} erscheint, 
  kann dieser möglicherweise mit einem dieser beiden Pakete behonben werden. 
  Mehr dazu in \autoref{sec:tips:write}.
\item[mparhack]
  Zur Behebung falsch gesetzter Randnotizen wird ein Bugfix für 
  \Macro{marginpar}(\Package{koma-script})'none' bereitgestellt. Alternativ 
  dazu lässt sich auch \Package{marginnote} verwenden.
\item[fix-cm]
  Sollte bei einer Schriftgrößenänderung eine oder mehrere Warnungen der Form
  \begin{Code}
    Font shape `T1/cmr/m/n' in size <...> not available
  \end{Code}\vspace{-\baselineskip}%
  erscheinen, so sollte das Paket \Package{fix-cm} \emph{vor} der Klasse 
  geladen werden. Siehe dazu auch die Hinweise in \autoref{sec:tips:fontsize}.
\end{packages}
