dantefaq:verbatimmode

%META:TOPICINFO{author=“HerbertVoss” date=“1381659743” format=“1.1” reprev=“1.5” version=“1.5”}% %META:TOPICPARENT{name=“WebHome”}%

\verb-Anweisung, verbatim- und Kommentar-Umgebungen

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 <a name"62" id="62">=fancyvrb=</a> 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.

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, dass 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.

Die intuitive Definition

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

einer solchen Umgebung ist nicht möglich, da <a name"65" id="65">=verbatim </a> ,festverdrahtet` nach der Zeichenkette \end{verbatim} sucht, sodass 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ässt die drei Zeichen \, { und } in ihrer besonderen Bedeutung, ist daher keine vollständige verbatim-Umgebung. * verbatim erlaubt die Definition eigener =verbatim=-Umgebungen, wie z.B. <verbatim>\newenvironment{myverbatim}{% \verbatim % ⇐= nicht \begin{verbatim} ! }{% \endverbatim % ⇐= nicht \end{verbatim} ! }</verbatim>

  • moreverb und fancyvrb enthalten weitere Umgebungen, die unterschiedliche =verbatim=-ähnliche Umgebungen vordefiniert enthalten oder mit denen man solche definieren kann.

Neben der Möglichkeit, kurze Abschnitte ,verbatim` einzubinden, gibt es verschiedene Tools, die automatisch LaTeX-Code mit den entsprechenden Syntaxhervorhebungen erzeugen: * <a name"67" id="67"></a> =listings Reine LaTeX-Lösung; unterstützt viele Programmiersprachen; in neueren Versionen kann listings zusätzlich einige der Möglichkeiten des Pakets fancyvrb nutzen. Möchte man allerdings Umlaute im Programm-Listing darstellen, so mussfolgendes definiert werden: <verbatim>\lstset{% literate={ä}a1 {ö}o1 {ü}u1 {Ä}a1 {Ö}o1 {Ü}u1 {ß}{\ss}1}</verbatim>

  • lgrind C-Programm und LaTeX-Style, für LaTeX2e; unterstützt sehr viele Programmiersprachen.
  • tiny_C2 l ex-Programm und LaTeX-Style; unterstützt neben C auch C++ und Java; kann überlange Zeilen umbrechen.

verbatim <a name"69" id="69"></a> 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.

Zu diesem Zweck ist es nötig, die Art der Kodierung dieser Zeichen anzugeben und für das Paket listings <verbatim>\lstset{% literate={ä}a1 {ö}o1 {ü}u1 {Ä}a1 {Ö}o1 {Ü}u1 {ß}{\ss}1}</verbatim>

Zu diesem Zweck gibt es die beiden LaTeX-Pakete ,lineno`<a name=“72” id=“72”></a> und ,numline`. Handelt es sich um Programmcode, der numeriert werden soll, sind jedoch die in Frage 7.3.4 genannten Lösungen zu bevorzugen.

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:

<verbatim>\iffalse
    Kommentartext, wird sehr schnell ueberlesen
\fi</verbatim> 

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:

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

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`<a name"74" id="74"></a> aus dem ,tools`-Bündel definiert eine sehr einfache Umgebung namens ,comment`, die man jedoch nicht schachteln kann. Weiterhin gibt es noch =xcomment, eine speziell an die Erfordernisse des Paketes seminar angepasste und abgespeckte Version des verbatim. Mit comment kann man neue Kommentarumgebungen definieren, die mit \includecomment und \excludecomment Deklarationen aus- und eingeblendet werden können.

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

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=<a name="78" id="78"></a> und =path für Dateinamen, E-Mail- und WWW-Adressen, bei denen nur an bestimmten Stellen umbrochen werden darf, dies aber bereits automatisch geschieht.

Verwendet man das Paket hyperref, so wird automatisch das Paket url geladen. Für den Fall., dass man zum Übersetzen des Dokuments die Sequenz latexdvipsps2pdf benutzt, ist statt url das Paket breakurl zu laden und zwar nach hyperref!

– Main.HerbertVoss - 17 Mar 2009

  • dantefaq/verbatimmode.txt
  • Last modified: 2023/02/28 10:39
  • by 127.0.0.1