PrevUpNext
Zurück zu:   6 TeX, LaTeX, Makros etc. (II)
Hoch zu:     Inhalt
Weiter zu:   8 TeX, LaTeX, Makros etc. (IV)

DE-TeX-FAQ (Version 56 vom Oktober 1999)
Copyright © 1995-1999 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 des \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 Wie kann ich verhindern, daß z.B. \subsection usw. im Anhang in das Inhaltsverzeichnis aufgenommen werden?
  • 7.1.6 Wie kann ich erreichen, daß Literatur-, Abbildungs-, Tabellen- und sonstige Verzeichnisse in das Inhaltsverzeichnis mit aufgenommen werden?
  • 7.1.7 Wie kann ich die Formatierung des automatisch erzeugten Inhaltsverzeichnis ändern?
  • 7.1.8 Wie kann ich mit \ref nicht nur die Abschnittsnummer, sondern auch den Text einer Abschnittsüberschrift erhalten?
  • 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 runde Klammern (1) oder Schrägstriche /1/ verwenden?
  • 7.2.5 Wie kann ich verhindern, daß die Wörter im Titel eines .bib-Eintrages kleingeschrieben werden?
  • 7.2.6 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.7 Kann ich Umlaute direkt in einer .bib-Datei verwenden?
  • 7.2.8 Wie kann ich erreichen, daß für Zitate im Text statt der eckigen Klammern [1] hochgestellte Ziffern verwendet werden?
  • 7.2.9 Wie kann ich erreichen, daß mehrere Zitate [1,3,5,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.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 eine Datei (z.B. mit Programmcode) innerhalb einer ,verbatim'-Umgebung einbinden?
  • 7.3.6 Gibt es eine Kommentarumgebung, mit der ich größere Textteile auskommentieren kann?
  • 7.3.7 Ich will \verb z.B. für Dateinamen und E-Mail-Adressen 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 und \pageref verwenden, ohne Fehler wie ,! Argument of \@sect has an extra }.' zu erhalten?

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

    7.1.1 Beim Formatieren des \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.

    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''.

    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''.

    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/supported/tocloft
    stdclsdv:  CTAN: macros/latex/contrib/supported/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.

    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 LaTeX2e-Standardklassen.
    titlesec:  CTAN: macros/latex/contrib/supported/titlesec
    sectsty:  CTAN: macros/latex/contrib/supported/sectsty

    7.1.5 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.6 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/supported/koma-script/
    tocbibind:  CTAN: macros/latex/contrib/supported/tocbibind/

    7.1.7 Wie kann ich die Formatierung des automatisch erzeugten Inhaltsverzeichnis ä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/supported/titlesec/
    tocloft:  CTAN: macros/latex/contrib/supported/tocloft/

    7.1.8 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
    titleref:  CTAN: macros/latex/contrib/other/misc/titleref.sty

    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/supported/natbib/
    theapa:  CTAN: macros/latex209/contrib/theapa/
    cite:  CTAN: macros/latex/contrib/supported/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/supported/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 Abschnitt 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 ,,abbrvdin.zip'', ,,alphadin.zip'', ,,plaindin.zip'', ,,unsrtdin.zip'' und ,,natdin.zip'' an DIN angepaßte BibTeX-Style-Dateien. ,,natdin'' ermöglicht Verfasser-Jahr-Zitierweisen zusammen mit DIN-Zitierstandard.
    Online-Tutorial:  http://www.bui.fh-hamburg.de/projekt/din1505/

    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/
    dinalpha:  CTAN: biblio/bibtex/contrib/dinalpha.bst
    geralpha:  CTAN: biblio/bibtex/contrib/geralpha/
    germbib:  CTAN: biblio/bibtex/contrib/germbib/

    7.2.4 Wie kann ich statt der eckigen Klammern [1] im Text bzw. im Literaturverzeichnis 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).
    cite, overcite:  CTAN: macros/latex/contrib/supported/cite/

    7.2.5 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 die 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 Abschnitt 7.2.3) bereits der Fall sein, im Paket ,custom-bib' (siehe Abschnitt 7.2.2) kann die Umwandlung über einen Menüpunkt ausgewählt werden.

    7.2.6 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 lesen!

    7.2.7 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 auf 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 bzw. dem ersten Wort eines .bib-Eintrages, sollte man sich auf die 2*26 Klein- und Großbuchstaben, die 10 Ziffern und die Satzzeichen beschränken. Dieser Schlüssel muß von (La)TeX an BibTeX übergeben werden und ein Schlüssel mit Umlauten kann auf diesem Wege eventuell zu einer anderen Zeichenkette expandiert werden, 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.

    7.2.8 Wie kann ich erreichen, daß für Zitate im Text statt der eckigen Klammern [1] hochgestellte Ziffern verwendet werden?

    overcite:  CTAN: macros/latex/contrib/supported/cite/

    7.2.9 Wie kann ich erreichen, daß mehrere Zitate [1,3,5,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 dem Paket ,cite' oder ,overcite'.
    cite, overcite:  CTAN: macros/latex/contrib/supported/cite/

    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, dafür ist dieses Paket etwas ausgereifter, da es z.B. problemlos mit anderen Paketen wie ,natbib' zusammenarbeitet.
    chapterbib:  CTAN: macros/latex/contrib/supported/cite/
    bibunits:  CTAN: macros/latex/contrib/supported/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ß.
    bibtopic:  CTAN: macros/latex/contrib/supported/bibtopic/

    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.

    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.
    bibentry:  CTAN: macros/latex/contrib/supported/natbib/

    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ämbel 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/supported/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:  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/supported/moreverb
    fancyvrb:  CTAN: macros/latex/contrib/supported/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:

    lgrind:  CTAN: support/lgrind/
    tiny_C2l:  CTAN: support/tiny_c2l/
    listings:  CTAN: macros/latex/contrib/supported/listings/

    7.3.5 Wie kann ich eine Datei (z.B. mit Programmcode) innerhalb einer ,verbatim'-Umgebung einbinden?

    ,verbatim' (von Rainer Schöpf et al.) stellt für diese Zwecke die Anweisung

    \verbatiminput{<filename>}
    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/supported/moreverb
    fancyvrb:  CTAN: macros/latex/contrib/supported/fancyvrb

    7.3.6 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'-Bundle definiert eine sehr einfache Umgebung namens ,comment', die man jedoch nicht schachteln kann. Weiterhin gibt es noch ,xcomment' (von T. van Zandt, eine speziell an die Erfordernisse des Paketes ,seminar' angepaßte und abgespeckte Version des ,verbatim'. Mit ,comment' (von V. 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/other/seminar/inputs/xcomment.sty
    comment:  CTAN: macros/latex/contrib/other/misc/comment.sty

    7.3.7 Ich will \verb z.B. für Dateinamen und E-Mail-Adressen 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.
    url:  CTAN: macros/latex/contrib/other/misc/url.sty
    path:  CTAN: macros/latex/contrib/other/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 daher ,moving arguments'.

    Die korrekte Ausführung von ,zerbrechlichen Anweisungen' hängt intern von Zuweisungen ab. Innerhalb eines ,moving arguments' 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 Abschnitt 7.4.2, Bemerkung am Ende).

    7.4.2 Wie kann ich innerhalb des Arguments von \caption, \section etc. Anweisungen wie \cite, \ref und \pageref verwenden, ohne Fehler wie ,! Argument of \@sect has an extra }.' 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 LaTeX2e vom 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 56 vom Oktober 1999)
    Copyright © 1995-1999 B. Raichle, R. Niepraschk, Th. Hafner

    Kommentare zur FAQ bitte an 'detexfaq@dante.de' - bitte keine Fragen zu TeX!
    (Diese HTML-Version der DE-TeX-FAQ wurde am 13. Oktober 1999 erzeugt)
    Prev Up Next