`Zurück zu:` 6 TeX, LaTeX, Makros etc. (II)
`Hoch zu:` Inhalt
`Weiter zu:` 8 TeX, LaTeX, Makros etc. (IV)
`Mehr zu TeX et al.:` DANTE e.V.

DE-TeX-FAQ (Version 72 vom September 2003)
Copyright © 1995-2003 B. Raichle, R. Niepraschk, Th. Hafner

# 7 TeX, LaTeX, Makros etc. (III)

- 7.1 Gliederung, Inhalts-, Abbildungs- und andere Verzeichnisse
- 7.1.1 Beim Formatieren von `\tableofcontents` erhalte ich sehr viele Meldungen mit ,,`overfull` `\hbox```. Woran liegt das?
- 7.1.2 Bei einem Artikel mit sehr vielen Abschnitten und Unterabschnitten ,,klebt`` die Überschrift im ,toc` direkt hinter der Abschnittsnummer. Kann man den Platz verbreitern?
- 7.1.3 Warum werden die durch `\subsubsection` angegebenen Abschnitte nicht mehr numeriert?
- 7.1.4 Wie erreiche ich, daß Abschnittsüberschriften ein anderes Aussehen bekommen?
- 7.1.5 Warum werden die durch `\subsubsection` angegebenen Abschnitte nicht mehr ins Inhaltsverzeichnis aufgenommen?
- 7.1.6 Wie kann ich verhindern, daß z.B. `\subsection` usw. im Anhang in das Inhaltsverzeichnis aufgenommen werden?
- 7.1.7 Wie kann ich erreichen, daß Literatur-, Abbildungs-, Tabellen- und sonstige Verzeichnisse in das Inhaltsverzeichnis mit aufgenommen werden?
- 7.1.8 Wie kann ich die Formatierung der automatisch erzeugten Inhalts-, Abbildungs- und Tabellenverzeichnisse ändern?
- 7.1.9 Wie kann ich mit `\ref` nicht nur die Abschnittsnummer, sondern auch den Text einer Abschnittsüberschrift erhalten?
- 7.1.10 Wie kann ich in einem Stichwortverzeichnis oder einem Literaturverzeichnis noch Text zwischen die Überschrift und die Verzeichnisliste bekommen?
- 7.1.11 Wie kann ich mehrere Verzeichnisse in der Art des Stichwortverzeichnisses, z.B. ein zusätzliches Autorenverzeichnis, anlegen?
- 7.1.12 In meinem LaTeX-Dokument fehlen die Einträge im Inhalts-, Tabellen- und Abbildungsverzeichnis, obwohl die Dateien .toc, .lot bzw. .lof vorhanden sind. Ich benutze das Paket ,fancybox`.
- 7.1.13 Wie mache ich alle Labels von Querverweisen sichtbar und wie erhalte ich eine Liste dieser Labels?
- 7.1.14 Wie kann ich erreichen, dass Referenzen in einem LaTeX-Dokument, das ich nach PDF umwandle, als Hyperlinks angezeigt werden, und kann man auch Bookmarks (Lesezeichen) automatisch entsprechend dem Inhaltsverzeichnis erstellen lassen?
- 7.1.15 Um PDF zu erzeugen, binde ich das Paket ,hyperref` ein, aber beim Betrachten mit ,acroread` werden keine Hyperlinks und auch keine Bookmarks angezeigt. Seltsamerweise zeigen ,xdvi` bzw. ,yap` bei Betrachten der dvi-Datei korrekte Hyperlinks an.
- 7.1.16 Wieso werden, wenn ich unter Verwendung des Pakets ,hyperref` auf dem Umweg über PostScript pdf-Dateien erzeuge (mit ,ps2pdf` oder ,Adobe Acrobat Distiller`), plötzlich alle Texte, die als Links dienen, insbesondere die Abschnittsüberschriften im Inhaltsverzeichnis nicht mehr umbrochen?
- 7.1.17 Wie erstelle ich ein Glossar?
- 7.2 Literaturzitate, Literaturverzeichnis, BibTeX
- 7.2.1 Wie kann ich im Text mit dem Autor/Jahreszahl o.ä. zitieren?
- 7.2.2 Wie kann ich das BibTeX-Stylefile xyz.bst so abändern, daß an Stelle X ein/kein Komma/Punkt erscheint, daß der Eintrag Y anders formatiert wird etc.?
- 7.2.3 Gibt es ans Deutsche angepaßte .bst-Dateien?
- 7.2.4 Wie kann ich statt der eckigen Klammern `[1]` im Text bzw. im Literaturverzeichnis hochgestellte Ziffern, runde Klammern `(1)` oder Schrägstriche `/1/` verwenden?
- 7.2.5 Wie erreiche ich, daß innerhalb eines `\cite` im Dokumenttext umbrochen werden darf?
- 7.2.6 Wie kann ich verhindern, daß die Wörter im Titel eines .bib-Eintrages kleingeschrieben werden?
- 7.2.7 Bei Labels wie `[Rai95]`, die aus Teilen des Autorennamens gebildet werden, treten Fehler bei Autorennamen mit Umlauten auf; wie kann ich das verhindern?
- 7.2.8 Kann ich Umlaute direkt in einer .bib-Datei verwenden?
- 7.2.9 Wie kann ich erreichen, daß mehrere Zitate `[5,3,1,7,6]` zu `[1,3,5-7]` sortiert und zusammengefaßt werden?
- 7.2.10 Wie kann man in einem Dokument verschiedene Abschnitte mit eigenen Literaturverzeichnissen versehen?
- 7.2.11 Wie kann man ein thematisch untergliedertes Literaturverzeichnis erstellen?
- 7.2.12 Wie kann ich in einer BibTeX-Datenbank WWW- oder ftp-Quellen, die als URL vorliegen, zitieren?
- 7.2.13 Gibt es einen Weg, daß `\cite` gleich die komplette Literaturstelle liefert?
- 7.2.14 Wie kann ich mit Kurzformen von Autor und Titel zitieren oder zwischen Kurz- und Langformen wechseln?
- 7.2.15 Wie kann ich die Einträge in `@phdthesis` mit ,,Diplomarbeit`` oder ähnlicher Klassifikation auszeichnen?
- 7.3 `\verb`-Anweisung, verbatim- und Kommentar-Umgebungen
- 7.3.1 Wieso kann ich `\verb` nicht im Argument einer anderen Anweisung wie `\footnote`, `\parbox` u.ä. verwenden? Wieso geht dies mit LaTeX2e nicht mehr, obwohl es mit LaTeX 2.09 ging?
- 7.3.2 Wieso bekomme ich die Fehlermeldung ,`! LaTeX Error: `\verb` ended by end of line.``, wenn ich im Argument von `\verb` in der Eingabe ein Zeilenende habe?
- 7.3.3 Wie kann ich eine eigene ,`verbatim``-Umgebung definieren?
- 7.3.4 Wie kann ich Programm-Code in mein LaTeX-Dokument einbinden?
- 7.3.5 Wie kann ich den Inhalt einer Datei innerhalb einer ,`verbatim``-Umgebung darstellen?
- 7.3.6 Wie erreiche ich, dass innerhalb einer ,`verbatim``-Umgebung Umlaute und andere Sonderzeichen zu sehen sind?
- 7.3.7 Wie kann ich Zeilennummern zu meinem Text hinzufügen?
- 7.3.8 Gibt es eine Kommentarumgebung, mit der ich größere Textteile auskommentieren kann?
- 7.3.9 Wie kann ich mehrere Versionen eines Textes erstellen oder bedingte Textteile verwenden?
- 7.3.10 Ich will `\verb` z.B. für Dateinamen, E-Mail-Adressen und URL verwenden. Wie schaffe ich es, daß innerhalb von `\verb` an geeigneten Stellen getrennt wird?
- 7.4 Zerbrechliche Anweisungen in ,moving arguments`
- 7.4.1 Was sind ,fragile commands`/zerbrechliche Anweisungen, was sind ,moving arguments`?
- 7.4.2 Wie kann ich innerhalb des Arguments von `\caption`, `\section` etc. Anweisungen wie `\cite`, `\ref`, `\pageref` oder `\footnote` verwenden, ohne Fehler wie ,`! Argument of `\@sect` has an extra `}`.`` oder ,`! Use of `\@chapter` doesn't match its definition.`` zu erhalten?

  ## 7.1 Gliederung, Inhalts-, Abbildungs- und andere Verzeichnisse

  ### 7.1.1 Beim Formatieren von `\tableofcontents` erhalte ich sehr viele Meldungen mit ,,`overfull` `\hbox```. Woran liegt das?

  Die Seitennummer wird in eine Box der Breite `\@pnumwidth` gesetzt. Der in den Standardklassen hierfür verwendete Wert von 1.55em kann in manchen Situationen (Seitennummer>=1000, breiterer Font) zu klein sein. Abhilfe:

      \renewcommand{\@pnumwidth}{2em}% statt `2em' evtl. groesserer Wert

  Eventuell muß man dann auch den Wert im Makro `\@tocrmarg` anpassen. Da man ein internes Makro ändert, ist diese Anweisung in eine .sty-Datei oder mit `\makeatletter` ... `\makeatother` geklammert in die Dokumentpräambel zu schreiben.

  Längere Abschnittsnummern können eine andere Ursache dieses Fehlers sein. Hier muß man in den Definitionen der Makros `\l@<type>`, wie z.B. `\l@section`, im Aufruf des Makros `\@dottedtocline` das dritte Argument entsprechend vergrößern. Näheres hierzu im Buch ,,Der LaTeX-Begleiter`` (siehe Frage 2.4.1).

  ### 7.1.2 Bei einem Artikel mit sehr vielen Abschnitten und Unterabschnitten ,,klebt`` die Überschrift im ,toc` direkt hinter der Abschnittsnummer. Kann man den Platz verbreitern?

  In der Datei der verwendeten Klasse wird das Aussehen einer Zeile in den Verzeichnissen durch ein Makro namens ,`\l@<typ>`` festgelegt. Für eine `\subsection` ist dies das Makro `\l@subsection`, das z.B. in ,,`article.cls``` durch

      \newcommand{\l@subsection}{\@dottedtocline{2}{1.5em}{2.3em}}

  definiert ist. Die Länge 1.5em gibt an, wie breit der Einschub vom linken Rand ist, die Länge 2.3em, wie breit der Platz für die Abschnittsnummer sein soll. Will man diese vergrößern, kann man dies beispielsweise mit

      \renewcommand{\l@subsection}{\@dottedtocline{2}{1.5em}{3.3em}}

  in einer .sty-Datei oder mit `\makeatletter` ... `\makeatother` geklammert in der Dokumentpräambel. Mehr dazu findet man im Buch ,,Der LaTeX-Begleiter`` (siehe Frage 2.4.1).

  Sehr viel einfacher geht dies mit dem Paket ,tocloft`, das einem die volle Kontrolle über die Formatierung der einzelnen Verzeichnisse erlaubt. Es benötigt noch das Paket ,stdclsdv`.

  tocloft: | CTAN: `macros/latex/contrib/tocloft`
  stdclsdv: | CTAN: `macros/latex/contrib/stdclsdv`

  ### 7.1.3 Warum werden die durch `\subsubsection` angegebenen Abschnitte nicht mehr numeriert?

  Jeder Gliederungsebene ist in LaTeX eine Nummer zugeordnet:

  -1 | part | 1 | section | 3 | subsubsection | 5 | subparagraph
  0 | chapter | 2 | subsection | 4 | paragraph

  Bei der Klasse ,article` existiert der Befehl `\chapter` nicht, und `\part` erhält die Nummer 0 zugeordnet.

  Die Gliederungsebene, bis zu der numeriert wird, legt der Zähler ,secnumdepth` fest. Die Standardklassen setzen diesen Zähler auf den Wert 2, also bis `\subsection`. Um auch für tieferliegende Ebenen eine Numerierung zu erhalten, muß der Zähler entsprechend erhöht werden. Mit `\setcounter{secnumdepth}{4}` werden die Überschriften der Ebenen bis `\paragraph` mit einer Nummer versehen, auch wenn dies nur in den allerwenigsten Fällen sinnvoll ist.

  Um die Numerierung von Überschriften im Dokument vollständig zu verhindern, muß man den Zähler ,secnumdepth` auf den Wert -2 gesetzt werden. Ein Inhaltsverzeichnis wird dennoch erzeugt, da dies durch den Zähler ,tocdepth` gesteuert wird.

  ### 7.1.4 Wie erreiche ich, daß Abschnittsüberschriften ein anderes Aussehen bekommen?

  Die LaTeX-Anweisungen `\section`, `\subsection` etc. werden in den Klassendateien wie z.B. ,,`article.cls``` definiert. (In LaTeX 2.09 wurden sie dagegen in den Hilfsdateien wie z.B. ,,`art10.sty``` definiert.) Die Definitionen verwenden dabei die allgemeinere Anweisung `\@startsection`, in deren sechstem Argument man Formatieranweisungen angeben kann. Zur Änderung kopiert man sich die Definition aus ,,`article.cls``` bzw. die entsprechende Klassendatei in eine .sty-Datei, ändert `\newcommand` (bzw. `\def`) zu `\renewcommand` und fügt die Anweisung `\centering` zu den bestehenden Formatieranweisungen hinzu:

      \renewcommand{\section}{%
        \@startsection {section}{1}{\z@}%
                       {-3.5ex plus -1ex minus -.2ex}%
                       {2.3ex plus.2ex}%
                       {\normalfont\Large\bfseries \centering}}

  Man vergesse nicht, diese Definition mit `\makeatletter` ... `\makeatother` zu klammern oder in eine .sty-Datei zu schreiben!

  Mit dem Paket ,titlesec` können Abschnittsüberschriften noch einfacher angepaßt werden. Beispielsweise erhält man mit

      \usepackage{titlesec}
      \titleformat{\section}%
        {\normalfont\Large\bfseries \filcenter}%
        {\thesection}%
        {1em}%
        {}%

  eine Zentrierung der `\section`-Überschriften. Hierbei wurde `\filcenter`, eine spezielle Anweisung des Pakets verwendet, jedoch kann auch `\centering` verwendet werden. Die Anweisung `\titleformat` hat ein optionales Argument, mit dem man beispielsweise wie bei `\paragraph` eingebettete oder in den Rand ragende Überschriften erhalten kann. Abstände zwischen Überschrift und Text werden mit der Anweisung `\titlespacing` vorgegeben.

  Ebenso erleichtert das Paket ,sectsty` die Änderung der Abschnittsüberschriften in den LaTeX-Standardklassen.

  Bei Verwendung einer aktuellen Version der -Klassen lassen sich beispielweise die Schriftart, die Ausrichtung sowie weiteres ebenfalls leicht anpassen.

  titlesec: | CTAN: `macros/latex/contrib/titlesec`
  sectsty: | CTAN: `macros/latex/contrib/sectsty`
  KOMA-Script: | CTAN: `macros/latex/contrib/koma-script/`

  ### 7.1.5 Warum werden die durch `\subsubsection` angegebenen Abschnitte nicht mehr ins Inhaltsverzeichnis aufgenommen?

  Ebenso wie der Zähler ,secnumdepth` die Gliederungsebene festlegt, bis zu der Abschnitte numeriert werden, legt der Zähler ,tocdepth` die Gliederungsebene fest, bis zu der Abschnitte in das Inhaltsverzeichnis aufgenommen werden. Beispielsweise werden nach der Anweisung `\setcounter{tocdepth}{4}` alle Abschnitte einschließlich der `\paragraph`-Ebene in das Inhaltsverzeichnis aufgenommen (siehe dazu Frage 7.1.3). Diese Anweisung muß in der Präambel, auf jeden Fall vor `\tableofcontents` verwendet werden.

  ### 7.1.6 Wie kann ich verhindern, daß z.B. `\subsection` usw. im Anhang in das Inhaltsverzeichnis aufgenommen werden?

  Der Zähler ,tocdepth` wird nur beim `\tableofcontents` ausgewertet, also nur beim Satz und nicht bei der Erstellung der .toc-Datei. Daher hat eine Änderung von ,tocdepth` nach dem Befehl `\appendix` keine Wirkung. Stattdessen muß man dafür sorgen, daß die Änderung von ,tocdepth` mit `\addtocontents` in die .toc-Datei gelangt:

      \documentclass{article}
      %
      \newcommand{\settocdepth}[1]{%
        \addtocontents{toc}{\protect\setcounter{tocdepth}{#1}}}
      %
      \begin{document}
      \tableofcontents
      \section{Abschnitt}
      \subsection{Unterabschnitt}
      blabla
      %
      \appendix
      \settocdepth{1}
      %
      \section{Abschnitt}
      \subsection{Unterabschnitt}
      \subsubsection{Unterunterabschnitt}
      blabla
      \end{document}

  ### 7.1.7 Wie kann ich erreichen, daß Literatur-, Abbildungs-, Tabellen- und sonstige Verzeichnisse in das Inhaltsverzeichnis mit aufgenommen werden?

  Diese Verzeichnisse werden normalerweise nicht in das Inhaltsverzeichnis aufgenommen. Wenn dies dennoch notwendig ist oder erwünscht wird, kann man es am einfachsten mit den Dokumentklassen des KOMA-Script-Paketes erreichen, da diese Klassen die hierfür gedachten Optionen ,liststotoc`, ,bibtotoc` bzw. ,bibtotocnumbered` und ,idxtotoc` kennen.

  Bei Verwendung anderer Klassen kann eventuell das Paket ,tocbibind` weiterhelfen. Ansonsten könnte man als letzte Lösung unmittelbar vor die Anweisungen `\bibliography`, `\listoftables`, `\listoffigures` und `\printindex` die Anweisungen

      \clearpage
      \addcontentsline{toc}{section}{\refname}

  schreiben. Statt `\refname` ist evtl. `\bibname` bzw. `\listtablename`, `\listfigurename` oder `\indexname` einzusetzen; ,section` kann bei Verwendung der Dokumentklassen ,report` und ,book` durch ,chapter` ersetzt werden. Außerdem muß bei Verwendung der Klassenoption ,twoside`, die bei ,book` voreingestellt ist, `\clearpage` durch `\cleardoublepage` ersetzt werden.

  KOMA-Script: | CTAN: `macros/latex/contrib/koma-script/`
  tocbibind: | CTAN: `macros/latex/contrib/tocbibind/`

  ### 7.1.8 Wie kann ich die Formatierung der automatisch erzeugten Inhalts-, Abbildungs- und Tabellenverzeichnisse ändern?

  Mit dem Paket ,titletoc`, das zusammen mit dem Paket ,titlesec` verteilt und dokumentiert wird, kann man sehr frei die Formatierung der Inhaltsverzeichniseinträge ändern. Daneben gibt es noch das Paket ,tocloft`, mit dem man ebenso die Formatierung des Inhalts-, Abbildungs- und Tabellenverzeichnisses anpassen kann.

  titletoc/titlesec: | CTAN: `macros/latex/contrib/titlesec/`
  tocloft: | CTAN: `macros/latex/contrib/tocloft/`

  ### 7.1.9 Wie kann ich mit `\ref` nicht nur die Abschnittsnummer, sondern auch den Text einer Abschnittsüberschrift erhalten?

  Das Paket ,titleref` stellt hierzu die Anweisung `\titleref`, der analog zu `\ref` und `\pageref` den Text einer Abschnittsüberschrift oder Abbildungsunterschrift liefert. Hierzu muß die Anweisung `\label` nach den Abschnittsanweisungen und `\caption` erfolgen und darf nicht im Argument angegeben werden.

  Im ,hyperref`-Bündel existiert mit ,nameref` ein weiteres Paket, das diese Funktionalität anbietet. Dieses definiert die Anweisung `\nameref`. Insbesondere im Zusammenhang mit der Erzeugung von pdf-Dateien sollte diese Lösung bevorzugt werden.

  titleref: | CTAN: `macros/latex/contrib/misc/titleref.sty`
  nameref: | CTAN: `macros/latex/contrib/hyperref/`

  ### 7.1.10 Wie kann ich in einem Stichwortverzeichnis oder einem Literaturverzeichnis noch Text zwischen die Überschrift und die Verzeichnisliste bekommen?

  Hierfür muß man die Umgebung ,`thebibliography`` bzw. ,`theindex`` umdefinieren. Man kopiert sich dazu die Definition dieser Umgebungen aus der Klassendatei in eine eigene Paketdatei, ersetzt die Anweisung `\newenvironment` durch `\renewenvironment`. Anschließend fügt man zwischen der Überschrift, die mit `\section` oder `\chapter` erzeugt wird und der Listen-Umgebung die Anweisungen

      \renewenvironment{\thebibliography}[1]{%
        \section*{\refname
          \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}%
        % vvvv--- neu
        \thebibliographyhook
        \renewcommand{\thebibliographyhook}{}%  Hook ruecksetzen
        % ^^^^--- neu
        \list{\@biblabel{\arabic{enumiv}}}%
       ...

  wie hier für ,`thebibliography`` gezeigt, ein.

  Für das Stichwortverzeichnis werden diese Zeilen, diesmal mit `\theindexhook`, in die entsprechend zu ändernde Definition der Umgebung ,`theindex`` eingefügt. Bei dieser muß man darauf achten, die beiden Zeilen in das optionale Argument der Anweisung `\twocolumn` einzufügen, wenn der Text über beide Spalten gehen soll.

  Schließlich werden diese ,,Haken`` mit der neuen Definition

      \newcommand{\thebibliographyhook}{} % Standard-Wert: kein Text
      \newcommand{\theindexhook}{} % Standard-Wert: kein Text

  auf einen Wert gesetzt, der das bisherige Verhalten nicht verändert. Will man nun zusätzlichen Text einfügen, so wird der jeweilige Hook direkt vor dem entsprechenden Verzeichnis per `\renewcommand` auf den gewünschten Text gesetzt.

  Von Version 2.6c an bieten die Dokumentklassen des KOMA-Script-Paketes einen noch einfacheren Weg mit den Anweisungen ,`\setbibpreamble`` und ,`\setindexpreamble``.

  KOMA-Script: | CTAN: `macros/latex/contrib/koma-script/`

  ### 7.1.11 Wie kann ich mehrere Verzeichnisse in der Art des Stichwortverzeichnisses, z.B. ein zusätzliches Autorenverzeichnis, anlegen?

  Zu diesem Zweck geeignet sind die LaTeX-Pakete ,camel` und ,multind`.

  camel: | CTAN: `macros/latex/contrib/camel/`
  multind: | CTAN: `macros/latex209/contrib/misc/multind.sty`

  ### 7.1.12 In meinem LaTeX-Dokument fehlen die Einträge im Inhalts-, Tabellen- und Abbildungsverzeichnis, obwohl die Dateien .toc, .lot bzw. .lof vorhanden sind. Ich benutze das Paket ,fancybox`.

  Diese Besonderheit verschwindet mit einer aktuelleren Version des Paketes ,fanycbox`, mindestens Version 1.3. Um sicherzustellen, daß man eine einigermaßen aktuelle Version benützt, kann man beim Laden des Pakets das Datum angeben:

      \usepackage{fancybox}[2000/09/19]

  fancybox: | CTAN: `macros/latex/contrib/fancybox/`

  ### 7.1.13 Wie mache ich alle Labels von Querverweisen sichtbar und wie erhalte ich eine Liste dieser Labels?

  Mit dem Paket ,showkeys` aus dem ,tools`-Bündel werden alle Querverweise im Dokument als Marginalien gesetzt.

  Eine Liste der Labels eines Dokuments erhält man mit Hilfsdokument ,,`lablst.tex```, das zu Beginn den Namen des Dokuments, die Dokumentklasse als auch die durch Kommata getrennte Liste aller verwendeten Pakete erfrägt. Dieses Hilfsdokument liegt jeder LaTeX-Verteilung bei.

  lablst.tex: | CTAN: `macros/latex/base/`
  showkeys: | CTAN: `macros/latex/required/tools/`

  ### 7.1.14 Wie kann ich erreichen, dass Referenzen in einem LaTeX-Dokument, das ich nach PDF umwandle, als Hyperlinks angezeigt werden, und kann man auch Bookmarks (Lesezeichen) automatisch entsprechend dem Inhaltsverzeichnis erstellen lassen?

  All dies und vieles mehr wird automatisch von dem Paket ,hyperref` erledigt. Neben der automatischen Erzeugung von Hyperlinks und Bookmarks stellt das Paket zusätzliche Befehle zur Verfügung, mit denen Benutzer ihren Dokumenten weitere Hypertext-Elemente hinzufügen können. Auch das Setzen bestimmter PDF-Dokumenteigenschaften (Autorinformationen, Seitenübergänge) und die ,,Steuerung`` des ,acroread` aus einem Dokument heraus sind mit dem Paket möglich.

  hyperref: | CTAN: `macros/latex/contrib/hyperref/`
  hyperref (beta-Version): | `http://www.tug.org/applications/hyperref/`

  ### 7.1.15 Um PDF zu erzeugen, binde ich das Paket ,hyperref` ein, aber beim Betrachten mit ,acroread` werden keine Hyperlinks und auch keine Bookmarks angezeigt. Seltsamerweise zeigen ,xdvi` bzw. ,yap` bei Betrachten der dvi-Datei korrekte Hyperlinks an.

  Da es sehr viele Methoden gibt, LaTeX-Dokumente in PDF zu wandeln, wobei die dafür verwendeten Programme jeweils eine andere Notation verwenden, wie Links angegeben werden, ist ,hyperref` auf die Verwendung von ,Treibern` angeweisen, die für jede Methode der PDF-Erstellung festlegen, wie Links spezifiziert werden.

  Wird kein Treiber explizit angegeben (als Paketoption; die Dokumentation erklärt, wie das geht), so muss ,hyperref` raten, welcher Treiber zu verwenden ist. Wird pdfTeX zur Übersetzung verwendet, so wird automatisch der passende Treiber verwendet; bei Benutzung von LaTeX ist der Standardtreiber jedoch fast immer ,hypertex`, was beispielsweise von ,xdvi` und ,yap` verstanden wird, jedoch zur Umwandlung in PDF ungeeignet ist.

  Wenn dieser (falsche) Treiber verwendet wird, so ist in der Protokolldatei die Zeile

      *hyperref using default driver hypertex*

  zu finden.

  In diesem Fall muß entweder ein Treiber explizit als Paketoption angegeben werden (Vorsicht, dies kann dazu führen, daß nun die Übersetzung mit pdfTeX nicht mehr funktioniert!), oder es muß ein passender Standardtreiber eingestellt werden.

  Hierfür eignet sich die Datei ,,`hyperref.cfg```, die von ,hyperref` automatisch nachgeladen wird, wenn sie (an passender Stelle) existiert. Ob eine solche Datei existiert und geladen wird, ist aus der Protokolldatei ersichtlich.

  Wenn man PDF mit LaTeX, ,dvips` und Acrobat Distiller erstellt, ist der korrekte Treiber ,dvips`. Diesen legt man als Standardtreiber fest, indem man der Datei ,,`hyperref.cfg``` die folgenden Zeilen hinzufügt (bzw. eine Datei mit diesem Inhalt neu erstellt):

      \@ifundefined{pdfoutput}{%
        \let\pdfoutput=\@undefined
        \ExecuteOptions{dvips}%
      }{}%

  ### 7.1.16 Wieso werden, wenn ich unter Verwendung des Pakets ,hyperref` auf dem Umweg über PostScript pdf-Dateien erzeuge (mit ,ps2pdf` oder ,Adobe Acrobat Distiller`), plötzlich alle Texte, die als Links dienen, insbesondere die Abschnittsüberschriften im Inhaltsverzeichnis nicht mehr umbrochen?

  Das Paket ,hyperref` kennt die Option ,breaklinks`, die festlegt, ob Links umbrochen werden dürfen. Diese Option ist bei Verwendung von pdfLaTeX automatisch aktiv, bei ,dvips` oder ,ps2pdf` aber nicht, da der im letzteren Fall verwendete pdfmark-Mechanismus einen Umbruch von Links nicht zuläßt. Es ist in diesem Fall also auf keinen Fall möglich, den Umbruch von Links ,,verlustfrei`` zuzulassen. Eine saubere Lösung dieses Dilemmas besteht zur Zeit ausschließlich in der Verwendung eines Systems, das den Linkumbruch erlaubt, wie etwa pdfTeX oder VTeX.

  Man könnte die Paketoption ,breaklinks` bei ,hyperref` auch direkt angeben, muß dann aber damit leben, daß die im Umbruchfall erstellten Links nicht oder nur eingeschränkt funktionieren.

  Ein total kaputtes Inhaltsverzeichnis kann man weiterhin durch Angabe der Option ,linktocpage` vermeiden, die bewirkt, daß die Links im Inhaltsverzeichnis den Seitenangaben statt den Abschnittstiteln unterlegt werden.

  ### 7.1.17 Wie erstelle ich ein Glossar?

  Um ein Wortverzeichnis mit Erklärungen oder im weiteren Sinne ein Verzeichnis von benutzten Begriffen mit Erklärungen, wie beispielsweise von Formelzeichen oder von Abkürzungen, zu erstellen, bietet LaTeX mit den Anweisungen `\makeglossary` und `\glossary` die Möglichkeit, Einträge vorzunehmen. Jedoch verbleibt es beim Autor, diese Einträge zu sortieren und zu formatieren.

  Um die Einträge zu sortieren wird meist ,makeindex`, ,xindy` oder BibTeX, eventuell ergänzt um ein Zusatzprogramm, verwendet. Zur Formatierung und zur leichteren oder differenzierteren Eingabe verwendet man ein entsprechendes LaTeX-Paket.

  Das Paket ,nomencl` ist entstanden, um Verzeichnisse von Formelzeichen anzulegen, kann aber darüberhinaus noch mehr. Datenbanken mit Abkürzungen etc. verwaltet das Paket ,gloss` mit Hilfe von BibTeX. Das Tool ,glosstex` erstellt automatisch ein Glossar, ein Abkürzungsverzeichnis oder ganz allgemein sortierte Listen. Es kombiniert die Funktionalität von ,acronym`, ,nomencl` und ,glotex` und kann ebenfalls Datenbanken verwalten. Mit dem Paket ,makeglos` kann in ein Dokument ein Glossar eingebunden werden, das beispielsweise mit ,makeindex` oder ,xindy` erstellt wurde. Dieses Paket ist weniger umfangreich als ,glosstex`.

  nomencl: | CTAN: `macros/latex/contrib/nomencl`
  gloss: | CTAN: `macros/latex/contrib/gloss`
  glosstex: | CTAN: `support/glosstex/`
  acronym: | CTAN: `macros/latex/contrib/acronym`
  glotex: | CTAN: `indexing/glo+idxtex/`
  makeglos: | CTAN: `macros/latex/contrib/makeglos`

  ## 7.2 Literaturzitate, Literaturverzeichnis, BibTeX

  ### 7.2.1 Wie kann ich im Text mit dem Autor/Jahreszahl o.ä. zitieren?

  Hierfür gibt es eine größere Anzahl von Paketen, wie ,natbib`, ,theapa` oder ,cite`, die dies erlauben.

  natbib: | CTAN: `macros/latex/contrib/natbib/`
  theapa: | CTAN: `macros/latex209/contrib/theapa/`
  cite: | CTAN: `macros/latex/contrib/cite/`

  ### 7.2.2 Wie kann ich das BibTeX-Stylefile xyz.bst so abändern, daß an Stelle X ein/kein Komma/Punkt erscheint, daß der Eintrag Y anders formatiert wird etc.?

  Die Programmiersprache von BibTeX, in der die .bst-Dateien geschrieben sind, ist in der Datei ,,`btxhak.tex``` beschrieben, die jedem BibTeX-Paket beiliegen sollte. Bevor man diese für die meisten ungewohnte Sprache lernt, sollte man zuerst überprüfen, ob die eigenen Wünsche schon durch das Paket ,custom-bib` abgedeckt werden können. Dieses Paket enthält ein menügesteuertes, in TeX selbst geschriebenes Erzeugungsprogramm, das aus einer Master-bst-Datei eine bst-Datei mit den ausgewählten Eigenschaften erzeugt.

  custom-bib: | CTAN: `macros/latex/contrib/custom-bib/`
  btxdoc/btxhak: | CTAN: `biblio/bibtex/distribs/doc/`

  ### 7.2.3 Gibt es ans Deutsche angepaßte .bst-Dateien?

  Ja, zum Beispiel kann man mit dem in Frage 7.2.2 genannten Paket ,custom-bib` .bst-Dateien für verschiedene Sprachen, darunter auch Deutsch, generieren.

  Unter `http://www.fh-hamburg.de/pers/Lorenzen/bibtex/` findet man in den Dateien ,,`abbrvdin.zip```, ,,`alphadin.zip```, ,,`plaindin.zip```, ,,`unsrtdin.zip``` und ,,`natdin.zip``` an DIN angepaßte BibTeX-Style-Dateien. ,,`natdin.bst``` ermöglicht Verfasser-Jahr-Zitierweisen zusammen mit DIN-Zitierstandard. Der BibTeX-Style ,,`dinat.bst``` ist eine verbesserte Versionen von ,,`natdin.bst```.

  Online-Tutorial: | `http://www.din1505.informationskompetenz.net/`
  dinat: | CTAN: `biblio/bibtex/contrib/german/dinat/`

  Außerdem gibt es folgende angepaßte .bst-Dateien und -Pakete (ohne Gewähr, unvollständig, Reihenfolge ist keine Wertung):

  abstyles: | CTAN: `biblio/bibtex/contrib/abstyles/`
  germbib: | CTAN: `biblio/bibtex/contrib/germbib/`
  geralpha: | CTAN: `obsolete/biblio/bibtex/contrib/geralpha/`

  ### 7.2.4 Wie kann ich statt der eckigen Klammern `[1]` im Text bzw. im Literaturverzeichnis hochgestellte Ziffern, runde Klammern `(1)` oder Schrägstriche `/1/` verwenden?

  Für die Form der Labels im Text ist die interne Anweisung `\@cite`, für die Form im Literaturverzeichnis die interne Anweisung `\@biblabel` anzupassen. Deren Standarddefinitionen lauten:

      \newcommand{\@cite}[2]{[{#1\if@tempswa , #2\fi}]}
      \newcommand{\@biblabel}[1]{[#1]}

  Will man statt der eckigen Klammern Schrägstriche, so lauten die Redefinitionen

      \renewcommand{\@cite}[2]{/{#1\if@tempswa , #2\fi}/}
      \renewcommand{\@biblabel}[1]{/#1/}

  Nicht vergessen: Redefinitionen von internen Anweisungen (= enthalten ein ,@` im Namen) müssen entweder in ein .sty-File geschrieben oder in der Präambel des Dokuments durch `\makeatletter` ... `\makeatother` geklammert werden!

  Die Pakete ,cite` und ,overcite` definieren Befehle, wie `\citeleft` und `\citeright`, die die Klammern erzeugen und die der Benutzer mit `\renewcommand` sehr einfach umdefinieren kann. Nach

      \usepackage{cite}
      \renewcommand{\citeleft}{(}
      \renewcommand{\citeright}{)}

  bekommt man statt eckiger Klammern `[1]` runde Klammern `(1)`.

  Das Paket ,overcite` erlaubt es außerdem, Zitatstellen im Text mit hochgestellten Ziffern zu markieren.

  cite, overcite: | CTAN: `macros/latex/contrib/cite/`

  ### 7.2.5 Wie erreiche ich, daß innerhalb eines `\cite` im Dokumenttext umbrochen werden darf?

  Das Paket ,cite` definiert die Zitieranweisung von LaTeX so um, daß ein Zeilenumbruch möglich ist.

  cite: | CTAN: `macros/latex/contrib/cite/`

  ### 7.2.6 Wie kann ich verhindern, daß die Wörter im Titel eines .bib-Eintrages kleingeschrieben werden?

  Entweder den Titel komplett oder alle groß zu schreibenden Wörter einzeln noch einmal klammern, also in der .bib-Datei statt

      title = {Fragen und Antworten}

  einfach

      title = {{Fragen und Antworten}}

  oder

      title = {{Fragen} und {Antworten}}

  eingeben.

  Eine alternative Lösung (oder besser: Ergänzung der Klammerung) ist die Änderung oder Verwendung einer entsprechend geänderten bst-Datei, in der bei der Formatierung des Titels und anderer Teile eines Eintrages die BibTeX-Anweisung ,`change.case$`` nicht ausgeführt wird. Dies sollte bei den an das Deutsche angepaßten bst-Dateien (siehe Frage 7.2.3) bereits der Fall sein, im Paket ,custom-bib` (siehe Frage 7.2.2) kann die Umwandlung über einen Menüpunkt ausgewählt werden.

  ### 7.2.7 Bei Labels wie `[Rai95]`, die aus Teilen des Autorennamens gebildet werden, treten Fehler bei Autorennamen mit Umlauten auf; wie kann ich das verhindern?

  Damit BibTeX die Konstruktion ,`\"a`` für Umlaute als ein einzelnes Zeichen korrekt erkennen kann, muß der Umlaut mit einer zusätzlichen Klammerung im Eintrag in der .bib-Datei eingegeben werden, also als ,`{\"a}`` oder ,`{\ss}``. Tip: BibTeX-Dokumentation in ,,`btxdoc``` lesen!

  btxdoc: | CTAN: `biblio/bibtex/distribs/doc/`

  ### 7.2.8 Kann ich Umlaute direkt in einer .bib-Datei verwenden?

  Jein. Einige neuere BibTeX-Implementierungen erlauben die Ein- und Ausgabe von Umlauten und anderen akzentuierten Zeichen. Will man diese Dateien jedoch an Personen mit anderen Rechnersystemen und anderen BibTeX-Implementierungen weitergeben, sollte man sich auf die Standard-Kodierung mit ,`{\"a}`` etc. beschränken.

  Im Schlüssel eines Verweises, also dem Argument von `\cite`, ebenso wie im Schlüssel eines .bib-Eintrages, also dem ersten Wort des Eintrags, darf man keine Umlaute verwenden. Hier sollte man sich auf die 26 Klein- und 26 Großbuchstaben, die 10 Ziffern und die Satzzeichen beschränken. Der Grund liegt darin, daß dieser Schlüssel von (La)TeX an BibTeX übergeben werden muß und ein Schlüssel mit Umlauten auf diesem Wege eventuell zu einer anderen Zeichenkette expandiert werden kann, die im BibTeX-Lauf mit keinem Schlüssel in der .bib-Datei übereinstimmt. Dadurch kann dann der Eintrag von BibTeX bzw. von (La)TeX nicht gefunden werden.

  8-Bit-BibTeX: | CTAN: `biblio/bibtex/8-bit/`

  ### 7.2.9 Wie kann ich erreichen, daß mehrere Zitate `[5,3,1,7,6]` zu `[1,3,5-7]` sortiert und zusammengefaßt werden?

  Je nach Art der bevorzugten Darstellung der Zitate im Text erreicht man dies mit den Paketen ,cite` oder ,overcite` sowie ,natbib` (Optionen: ,,numbers,sort&compress``). Sollen im endgültigen Dokument die Zitate unter Verwendung des Pakets ,hyperref` anklickbar werden, ist die letztgenannte Lösung zu bevorzugen. Ergänzend kann das Paket ,hypernat` benutzt werden, um auch die Wirkung der ,hyperref`-Optionen ,backref` und ,pagebackref` in diesem Fall sicherzustellen.

  cite, overcite: | CTAN: `macros/latex/contrib/cite/`
  natbib: | CTAN: `macros/latex/contrib/natbib/`
  hypernat: | CTAN: `macros/latex/contrib/misc/`

  ### 7.2.10 Wie kann man in einem Dokument verschiedene Abschnitte mit eigenen Literaturverzeichnissen versehen?

  Die Pakete ,chapterbib` und ,bibunits` erlauben es, mehrere Literaturverzeichnisse in einem Dokument zu verwenden, solange diese in eigenen Abschnitten stehen. Bei ,chapterbib` muß jeder der Abschnitte in einer getrennt mit `\include``{...}` einzubindenden Datei stehen. Beide Pakete (,bibunits` ab Version 2.1) arbeiten problemlos mit anderen Paketen wie ,natbib` zusammenarbeitet.

  chapterbib: | CTAN: `macros/latex/contrib/cite/`
  bibunits: | CTAN: `macros/latex/contrib/bibunits/`

  ### 7.2.11 Wie kann man ein thematisch untergliedertes Literaturverzeichnis erstellen?

  Das Paket ,bibtopic`, vormals ,bibtopics`, ermöglicht die Untergliederung eines Literaturverzeichnisses, wobei allerdings die .bib-Datenbankdatei entsprechend der Gliederung in mehrere Dateien aufgeteilt werden muß. Ein alternatives Paket ist ,multibib`, bei dem die Aufteilung der .bib-Datenbankdatei nicht nötig ist.

  bibtopic: | CTAN: `macros/latex/contrib/bibtopic/`
  multibib: | CTAN: `macros/latex/contrib/multibib/`

  ### 7.2.12 Wie kann ich in einer BibTeX-Datenbank WWW- oder ftp-Quellen, die als URL vorliegen, zitieren?

  Die Quellen können mit den üblichen BibTeX-Styles auf unterschiedliche Art und Weise zitiert werden. Eine Variante ist

      @manual{KEITH,
        author = "Keith Reckdahl",
        title  = "Using Imported Graphics in \LaTeXe\ Documents",
        year   = "1997",
        month  = dec,
        note   = "CTAN: \url{tex-archive/info/epslatex.ps}"}

  und eine weitere

      @misc{GRANT,
        author = "Michael C. Grant and David Carlisle",
        title  = "The PSFrag system, version~3",
        year   = "1996",
        month  = nov,
        howpublished = "CTAN: \url{tex-archive/macros/latex/contrib/%
                supported/psfrag/pfgguide.tex}"}

  In beiden Fällen wird das LaTeX-Paket ,url` verwendet, um den Umbruch der Adressen zu erreichen (siehe Frage 7.3.10). Auf dieses Paket kann verzichtet werden, wenn bereits das Paket ,hyperref`, mindestens Version 6.70s (2000-08-31) oder aktueller, benutzt wird.

  Wird das ,hyperref` nicht verwendet, so solle man das Prozentzeichen am Zeilenende entfernen, da dann das Paket ,url` dieses dann mit ausgeben würde.

  Wird das Paket ,jurabib` verwendet, so kann man auch einfach wie folgt zitieren:

      @manual{KEITH,
        author = "Keith Reckdahl",
        title  = "Using Imported Graphics in \LaTeXe\ Documents",
        year   = "1997",
        month  = dec,
        url    = "ftp://ftp.dante.de/tex-archive/info/epslatex.ps"}

  url: | CTAN: `macros/latex/contrib/misc/url.sty`
  hyperref: | CTAN: `macros/latex/contrib/hyperref/`
  jurabib: | `http://www.jurabib.org/`

  ### 7.2.13 Gibt es einen Weg, daß `\cite` gleich die komplette Literaturstelle liefert?

  Dies geht zwar nicht direkt mit der Anweisung `\cite`, aber im Paket ,bibentry`, das ,natbib` beiliegt, gibt es die Anweisung `\bibentry`, die die vollständige Literaturangabe liefert. Näheres ist der mitgelieferten Dokumentation zu entnehmen. Eine Alternative bietet das Paket ,inlinebib`, das man allerdings nur mit dem beigefügten ,,`inlinebib.bst``` verwenden kann. Auch das Paket ,jurabib` ist in der Lage, z.B. mittels `\fullcite` oder der Option ,,`citefull=all``` bzw. ,,`citefull=first``` eine vollständige Literaturstelle zu liefern. Es kann jedoch nur mit den ,jurabib`-eigenen BibTeX-Stil ,,`jurabib``` verwendet werden.

  bibentry: | CTAN: `macros/latex/contrib/natbib/`
  inlinebib: | CTAN: `biblio/bibtex/contrib/inlinebib/`
  jurabib: | `http://www.jurabib.org/`
  ~: | CTAN: `macros/latex/contrib/jurabib/`

  ### 7.2.14 Wie kann ich mit Kurzformen von Autor und Titel zitieren oder zwischen Kurz- und Langformen wechseln?

  Das Paket ,jurabib` bietet dazu die Eintragsfelder `juraauthor` und `juratitle` an, in die man die zu verwendende Kurzform des Autors bzw. des Titels einträgt. Es bietet auch die Option ,,`citefull=first```, mit dem bei Erstnennung eines Werkes eine vollständige Literaturstelle erscheint, bei den weiteren Zitaten erscheinen jedoch nur noch die angegebenen Kurzformen. Werden keine Kurzformen angegeben, werden sie (größtenteils) von ,jurabib` generiert. Auch ,inlinebib` bietet Felder für Kurzformen an.

  inlinebib: | CTAN: `biblio/bibtex/contrib/inlinebib/`
  jurabib: | CTAN: `macros/latex/contrib/jurabib/`

  ### 7.2.15 Wie kann ich die Einträge in `@phdthesis` mit ,,Diplomarbeit`` oder ähnlicher Klassifikation auszeichnen?

  Im einfachsten Fall kann man die Art der These durch die Eigenschaft `type` üeberschreiben, also mit `type="Dissertation"`. Soll als Standard-Wert etwas anderes verwendet werden, so muß man die .bst-Datei anpassen.

  ## 7.3 `\verb`-Anweisung, verbatim- und Kommentar-Umgebungen

  ### 7.3.1 Wieso kann ich `\verb` nicht im Argument einer anderen Anweisung wie `\footnote`, `\parbox` u.ä. verwenden? Wieso geht dies mit LaTeX2e nicht mehr, obwohl es mit LaTeX 2.09 ging?

  Dies ging in LaTeX 2.09 auch nur, solange innerhalb des Arguments von `\verb` keine Zeichen mit besonderer Bedeutung verwendet wurden. Für diese Fälle hätte ein einfaches `{\tt ...}` auch ausgereicht. Die Eingabe ,,``\footnote``{`\verb`+`\cite`+}```` liefert auch mit LaTeX 2.09 Fehler mit einer sehr kryptischen Fehlermeldung, deshalb wird diese falsche Benutzung in LaTeX2e mit der aussagekräftigeren Fehlermeldung ,`! LaTeX Error: `\verb` illegal in command argument.`` verhindert.

  Benutzt man das Paket ,fancyvrb` und verwendet man in der Präambel des Dokuments die von diesem Paket definierte Anweisung `\VerbatimFootnotes`, so können, anders als in Standard-LaTeX, innerhalb von Fußnoten `\verb`-Anweisungen verwendet werden.

  fancyvrb: | CTAN: `macros/latex/contrib/fancyvrb`

  ### 7.3.2 Wieso bekomme ich die Fehlermeldung ,`! LaTeX Error: `\verb` ended by end of line.``, wenn ich im Argument von `\verb` in der Eingabe ein Zeilenende habe?

  LaTeX 2.09 war bei `\verb` sehr viel toleranter und hat den Zeilenwechsel innerhalb des Arguments von `\verb` erlaubt, obwohl dies keinen Sinn macht, da `\verb` nur für kurze Textstücke gedacht ist und im formatierten Ergebnis kein Zeilenumbruch sichtbar wurde.

  Aus diesen Gründen wird nun in LaTeX2e ein eventuell vorhandenes Zeilenende im Argument von `\verb` als Fehler gemeldet. Dies hat den Vorteil, daß ein versehentlich vergessenes Argumentendezeichen sehr früh erkannt und mit einer sinnvoller Fehlermeldung angezeigt werden kann. Als Seiteneffekt kann hierdurch auch die Verwendung von `\verb` im Argument einer anderen Anweisung erkannt und angezeigt werden.

  Eine Abhilfe ist sehr einfach möglich, indem man in der Eingabe einen Zeilenwechsel im Argument von `\verb` vermeidet.

  ### 7.3.3 Wie kann ich eine eigene ,`verbatim``-Umgebung definieren?

  Die intuitive Definition

  `\newenvironment{myverbatim}{%`
  `\begin{verbatim}%`
  `}{%`
  `\end{verbatim}%`
  `}`

  einer solchen Umgebung ist nicht möglich, da ,`verbatim`` ,festverdrahtet` nach der Zeichenkette ,`\end``{verbatim}`` sucht, so daß die neue Umgebung das ,`\end``{myverbatim}`` nicht als Ende erkennen kann.

  Um dennoch ,`verbatim``-ähnliche Umgebungen definieren zu können, gibt es mehrere Pakete:

  - ,alltt` beläßt die drei Zeichen `\`, `{` und `}` in ihrer besonderen Bedeutung, ist daher keine vollständige verbatim-Umgebung.
  - ,verbatim` (von Rainer Schöpf et al.) erlaubt die Definition eigener ,`verbatim``-Umgebungen, wie z.B.
    `\newenvironment{myverbatim}{%`
    `\verbatim % <== nicht \begin{verbatim} !`
    `}{%`
    `\endverbatim % <== nicht \end{verbatim} !`
    `}`
  - ,moreverb` und ,fancyvrb` enthalten weitere Umgebungen, die unterschiedliche ,`verbatim``-ähnliche Umgebungen vordefiniert enthalten oder mit denen man solche definieren kann.

  alltt: | CTAN: `macros/latex/base/`
  | CTAN: `macros/latex/unpacked/`
  | CTAN: `macros/latex209/contrib/misc/alltt.sty`
  verbatim: | CTAN: `macros/latex/required/tools/`
  moreverb: | CTAN: `macros/latex/contrib/moreverb`
  fancyvrb: | CTAN: `macros/latex/contrib/fancyvrb`

  ### 7.3.4 Wie kann ich Programm-Code in mein LaTeX-Dokument einbinden?

  Neben der Möglichkeit, kurze Abschnitte ,verbatim` einzubinden, gibt es verschiedene Tools, die automatisch LaTeX-Code mit den entsprechenden Syntaxhervorhebungen erzeugen:

  - ,listings`
    Reine LaTeX-Lösung; unterstützt viele Programmiersprachen; in neueren Versionen kann ,listings` zusätzlich einige der Möglichkeiten des Pakets ,fancyvrb` nutzen.
  - ,lgrind`
    C-Programm und LaTeX-Style, für LaTeX2e; unterstützt sehr viele Programmiersprachen.
  - ,tiny_c2l`
    lex-Programm und LaTeX-Style; unterstützt neben C auch C++ und Java; kann überlange Zeilen umbrechen.

  listings: | CTAN: `macros/latex/contrib/listings/`
  lgrind: | CTAN: `nonfree/support/lgrind/`
  tiny_C2l: | CTAN: `support/tiny_c2l/`

  ### 7.3.5 Wie kann ich den Inhalt einer Datei innerhalb einer ,`verbatim``-Umgebung darstellen?

  ,verbatim` (von Rainer Schöpf et al.) stellt für diese Zwecke die Anweisung `\verbatiminput``{Dateiname}` zur Verfügung. Die Pakete ,moreverb` und ,fancyvrb` stellen weitere Anweisungen und Umgebungen zur Verfügung.

  verbatim: | CTAN: `macros/latex/required/tools/`
  moreverb: | CTAN: `macros/latex/contrib/moreverb`
  fancyvrb: | CTAN: `macros/latex/contrib/fancyvrb`

  ### 7.3.6 Wie erreiche ich, dass innerhalb einer ,`verbatim``-Umgebung Umlaute und andere Sonderzeichen zu sehen sind?

  Zu diesem Zweck ist es nötig, die Art der Kodierung dieser Zeichen anzugeben. Siehe dazu Frage 8.5.3.

  ### 7.3.7 Wie kann ich Zeilennummern zu meinem Text hinzufügen?

  Zu diesem Zweck gibt es die beiden LaTeX-Pakete ,lineno` und ,numline`. Handelt es sich um Programmcode, der numeriert werden soll, sind jedoch die in Frage 7.3.4 genannten Lösungen zu bevorzugen.

  lineno: | CTAN: `macros/latex/contrib/lineno`
  numline: | CTAN: `macros/latex/contrib/numline`

  ### 7.3.8 Gibt es eine Kommentarumgebung, mit der ich größere Textteile auskommentieren kann?

  Um Teile eines Textes auszukommentieren, kann man entweder zwei sehr einfache TeX-Konstrukte verwenden, oder man bedient sich spezieller Pakete, die unterschiedlich mächtige Kommentar-Umgebungen anbieten.

  Zu den einfachen Konstrukten, die TeX selbst anbietet, zählt zum einen die Einklammerung des zu ignorierenden Textes mit den TeX-Primitiven `\iffalse` ... `\fi`:

      \iffalse
          Kommentartext, wird sehr schnell ueberlesen
      \fi

  Hier sollten im Kommentartext keine `\if...`-, `\else`- und `\fi`-Tokens (bzw. diese müssen korrekt geschachtelt sein), keine ,outer`-Makros oder unerlaubte Zeichen auftauchen, da diese zu einem Fehler oder vielleicht zu doch nicht auskommentierten Textteilen führen können.

  Ein anderes, einfaches Verfahren ist die Verwendung eines Makros, wobei der auszukommentierende Text in dessen Argument geschrieben wird:

      \newcommand{\kommentar}[1]{}
      % ...
      \kommentar{%
        Kommentartext, wird als Argument gelesen und ignoriert
      }%

  Auch hier sollten die oben genannten Tokens nicht im Kommentartext auftauchen, außerdem darf der Kommentartext nicht zu lang sein, da sonst TeXs ,main memory` überlaufen könnte.

  Spezielle Kommentarumgebungen beseitigen diese Einschränkungen - und haben meist selbst eigene Einschränkungen. ,verbatim` aus dem ,tools`-Bündel definiert eine sehr einfache Umgebung namens ,`comment``, die man jedoch nicht schachteln kann. Weiterhin gibt es noch ,xcomment` (von Timothy van Zandt), eine speziell an die Erfordernisse des Paketes ,seminar` angepaßte und abgespeckte Version des ,verbatim`. Mit ,comment` (von Victor Eijkhout) kann man neue Kommentarumgebungen definieren, die mit `\includecomment`- und `\excludecomment`-Deklarationen aus- und eingeblendet werden können.

  verbatim: | CTAN: `macros/latex/required/tools/`
  xcomment: | CTAN: `macros/latex/contrib/seminar/inputs/xcomment.sty`
  comment: | CTAN: `macros/latex/contrib/comment/`

  ### 7.3.9 Wie kann ich mehrere Versionen eines Textes erstellen oder bedingte Textteile verwenden?

  Auf der einen Seite kann man die in Frage 7.3.8 beschriebenen Kommentarumgebungen entsprechend verwenden. Daneben gibt es mit den Paketen ,version`, ,optional` und dem bereits erwähnten ,comment` Erweiterungen, mit denen man über Flags im Dokumentkopf Textteile bedingt ein- oder ausblenden kann.

  version: | CTAN: `macros/latex/contrib/misc/version.sty`
  optional: | CTAN: `macros/latex/contrib/misc/optional.sty`
  comment: | CTAN: `macros/latex/contrib/comment/`

  ### 7.3.10 Ich will `\verb` z.B. für Dateinamen, E-Mail-Adressen und URL verwenden. Wie schaffe ich es, daß innerhalb von `\verb` an geeigneten Stellen getrennt wird?

  Für einige Anwendungen, wo man evtl. `\verb` benutzen könnte, gibt es auch spezielle Lösungen, die für den Anwendungszweck besser geeignet sind. So gibt es beispielsweise die Pakete ,url` und ,path` für Dateinamen, E-Mail- und WWW-Adressen, bei denen nur an bestimmten Stellen umbrochen werden darf, dies aber bereits automatisch geschieht.

  url: | CTAN: `macros/latex/contrib/misc/url.sty`
  path: | CTAN: `macros/latex/contrib/misc/path.sty`

  ## 7.4 Zerbrechliche Anweisungen in ,moving arguments`

  ### 7.4.1 Was sind ,fragile commands`/zerbrechliche Anweisungen, was sind ,moving arguments`?

  Der Text, den ein Autor im Argument von Anweisungen wie `\caption`, `\section` etc. angibt, kann an mehreren Stellen in einem Dokument gesetzt werden. Der Argumenttext von `\section` wird z.B. als Kapitelüberschrift gesetzt und taucht evtl. nochmals im Inhaltsverzeichnis oder im Seitenkopf bzw. -fuß auf. Diese Argumente nennt man ,moving arguments`, da sie vom Platz, wo ein Autor sie angibt, auch zu anderen Stellen verschoben werden.

  Die korrekte Ausführung von ,zerbrechlichen Anweisungen` hängt intern von Zuweisungen ab. Innerhalb eines ,moving argument` werden diese Zuweisungen jedoch nicht durchgeführt, so daß solche Anweisungen ,zerbrechen`. Zu den zerbrechlichen Anweisungen zählen unter anderem `\cite`, `\ref`, `\pageref` für Literatur- und Querverweise, `\footnote`, `\footnotemark`, die Anweisungen `\small`, `\large` etc. zur Wahl der Schriftgröße, mathematische Formelzeichen wie `\sqrt`, `\notin`, `\overbrace` und viele mehr (siehe Frage 7.4.2, Bemerkung am Ende).

  ### 7.4.2 Wie kann ich innerhalb des Arguments von `\caption`, `\section` etc. Anweisungen wie `\cite`, `\ref`, `\pageref` oder `\footnote` verwenden, ohne Fehler wie ,`! Argument of `\@sect` has an extra `}`.`` oder ,`! Use of `\@chapter` doesn't match its definition.`` zu erhalten?

  Zerbrechliche Befehle wie `\cite` müssen im ,moving argument` der Anweisung `\caption` mit `\protect` geschützt werden, d.h. statt

      \caption{Bildunterschrift~\cite{PartlKnappen95}}

  ist ein `\protect` direkt und ohne geschweifte Klammern vor die zu schützende Anweisung zu setzen:

      \caption{Bildunterschrift~\protect\cite{PartlKnappen95}}

  Anweisungen wie `\caption`, `\section` etc. haben außerdem noch die Möglichkeit, in einem optionalen Argument den zu ,verschiebenden Argumenttext` anzugeben. Das heißt, obiges könnte auch in

      \caption[Bildunterschrift]%
              {Bildunterschrift~\cite{PartlKnappen95}}

  umformuliert werden. Jetzt ist das optionale Argument in []-Klammern das ,moving argument`, in dem Sie zerbrechliche Anweisungen mit `\protect` schützen müssen!

  Beginnend mit LaTeX von Dezember 1995 sind Anweisungen wie `\cite` und Anweisungen mit optionalem Argument, wie `\sqrt`, nicht mehr zerbrechlich und benötigen damit kein `\protect` mehr. Dennoch sollten Sie diese Anweisungen weiterhin mit `\protect` schützen, wenn Sie Ihre Dokumente anderen zukommen lassen wollen.

  DE-TeX-FAQ (Version 72 vom September 2003)
  Copyright © 1995-2003 B. Raichle, R. Niepraschk, Th. Hafner