Copyright © 1995 by O'Reilly/International Thomson Verlag

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches "Linux - Wegweiser zur Installation & Konfiguration", dann klicken Sie hier.


Kapitel 5

Texte und Dokumente erstellen

Im ersten Kapitel sind wir kurz auf die verschiedenen Textbearbeitungssysteme unter Linux eingegangen und haben die Unterschiede zu den Textverarbeitungen herausgestellt, mit denen Sie vielleicht schon vertraut sind. Die meisten Textverarbeitungen bringen den Text in einer WYSIWYG-Darstellung auf den Bildschirm (What You See Is What You Get; der Text erscheint am Bildschirm so, wie er später ausgedruckt wird). Textformatierer dagegen lassen den Benutzer den Quelltext mit einem Texteditor eingeben; dieser Quelltext kann mit beliebigen Editoren bearbeitet werden. (Emacs bietet verschiedene Modi für die Bearbeitung von Texten aus diversen Textformatierern.) Nach der Eingabe des Quelltextes wird dieser vom Textformatierer in das endgültige Druck- oder Anzeigeformat gewandelt.

In diesem Abschnitt wollen wir drei der populärsten Textformatierer für Linux besprechen: TEX, groff und Texinfo.

TEX und LATEX

TEX ist ein vollwertiger Textformatierer für alle Arten von Schriftstücken, Artikeln und Büchern -- insbesondere solche Bücher, die eine Menge Mathematik enthalten. Es handelt sich um eine Sprache für die Bearbeitung von Texten, die auf einer sehr niedrigen Ebene der Textgestaltung operiert, weil sie dem Rechner beschreibt, wie das Textlayout auf einer Seite aussehen soll, wie der Zeilendurchschuß sein soll usw. TEX beschäftigt sich nicht direkt mit den Gestaltungselementen auf den höheren Ebenen wie z.B. Kapitel, Abschnitte, Fußnoten usw. (die Elemente, an denen Sie als Autor am meisten interessiert sind). Aus diesem Grund bezeichnet man TEX als funktionale Sprache der Textbearbeitung (und meint damit die physikalische Gestaltung des Textes auf der Seite). Im Gegensatz dazu stehen die logischen Textbearbeitungssprachen, die Gestaltungselemente wie Kapitel und Abschnitte handhaben. TEX wurde von Donald E. Knuth entworfen, einem der weltweit führenden Experten in der Programmierung. Eines der Ziele, die Knuth mit der Entwicklung von TEX verfolgte war ein Satzsystem, das flexibel genug sein sollte, die mathematischen Inhalte in seiner Serie von Informatikbüchern zu formatieren. Für Knuth führte das zu acht Jahren Arbeit an TEX -- die meisten Leute sind sich einig, daß sich das Warten gelohnt hat.

Natürlich können Sie TEX problemlos erweitern, und Sie können TEX-Makros schreiben, die es dem Autor ermöglichen, sich in erster Linie mit dem logischen statt dem physikalischen Format eines Textes zu befassen. Tatsächlich gibt es eine Reihe solcher Makropakete -- das bekannteste davon ist LATEX, ein Paket mit Erweiterungen zu TEX von Leslie Lamport. LATEX-Befehle kümmern sich hauptsächlich um die logische Struktur eines Textes; weil LATEX aber lediglich ein Makropaket zu TEX ist, können Sie auch die einfachen TEX-Befehle benutzen. LATEX vereinfacht die Arbeit mit TEX ganz erheblich, indem es die meisten Funktionen der unteren Ebenen vor dem Schreiber verbirgt.

Wenn Sie mit TEX gut strukturierte Schriftstücke erstellen möchten, sollten Sie entweder ein fertiges Makropaket wie LATEX benutzen oder eigene Makros entwickeln (oder Sie wählen eine Kombination aus beiden). In The TEXbook beschreibt Knuth die Makros, die er bei der Produktion des Buches benutzte. Natürlich sind Makros für die Formatierung von Kapiteln, Absätzen usw. enthalten -- diese Makros ähneln den entsprechenden LATEX-Makros. Wir werden uns in diesem Abschnitt auf die Benutzung von LATEX konzentrieren, das viele Typen von Schriftgut unterstützt: technische Artikel, Handbücher, andere Bücher, Briefe usw. Genau wie das einfache TEX ist auch LATEX erweiterbar.

Aller Anfang ist schwer

Falls Sie noch nie mit einem Textformatierungssystem gearbeitet haben, sollten Sie sich mit einer Reihe von neuen Konzepten vertraut machen. Wir haben bereits erwähnt, daß Textformatierer von einem Quelltext ausgehen, den Sie mit einem einfachen Editor wie z.B. Emacs eingeben. Der Quelltext wird in einer Formatierungssprache geschrieben, die sowohl den reinen Text als auch die Befehle enthält, die den Textformatierer anweisen, wie der Text formatiert werden soll. Im ersten Kapitel haben wir an einem einfachen Beispiel gezeigt, wie die Formatierungssprache LATEX aussieht und welche formatierte Ausgabe sie erzeugt.

Lassen Sie uns jetzt ganz einfach ohne großes Getue in die Materie eintauchen und einen kleinen Text schreiben und formatieren -- vom Anfang bis zum Ende. Als Beispiel benutzen wir LATEX und erstellen damit einen kurzen Geschäftsbrief. Geben Sie mit Ihrem Lieblingseditor folgenden Text ein (ohne die Zeilennummern) und nennen Sie die Datei letter.tex :

1  \documentstyle{letter}
2  \address{755 Chmod Way \\ Apt 0x7F \\
3           Pipeline, N.M. 09915}
4  \signature{Boomer Petway}
5  
6  \begin{document}
7  \begin{letter}{O'Reilly and Associates, Inc. \\
8                 103 Morris Street Suite A \\ 
9                 Sebastopol, C.A. 95472}
10 
11 \opening{Dear Mr. O'Reilly,}
12 
13 I would like to comment on the \LaTeX\ example as presented in
14 Chapter~5 of {\em Running Linux}. Although it was a valiant effort,
15 I find that the example falls somewhat short of what one might expect in
16 a discussion of text formatting systems. In a future edition of the book,
17 I suggest that you replace the example with one that is more instructive.
18 
19 \closing{Thank you,}
20 
21 \end{letter}
22 \end{document}

Dies ist das vollständige LATEX-Dokument zu dem Geschäftsbrief, den wir verschicken möchten. Wie Sie sehen, besteht es aus dem eigentlichen Text sowie einer Reihe von eingestreuten Anweisungen (mit Backslashes und geschweiften Klammern). Lassen Sie uns das ganze einmal genau betrachten.

In Zeile 1 steht die Anweisung documentstyle, mit dem der Typ dieses Schriftstücks bestimmt wird (in diesem Fall ein Brief). Anweisungen in LATEX beginnen mit einem Backslash; dahinter steht die Anweisung selbst (hier documentstyle). Hinter dem Namen der Anweisung stehen eventuell vorhandene Argumente in geschweiften Klammern. LATEX kennt andere Dokumentstile wie z.B. article, report und book und Sie können selbst weitere Typen definieren. Mit der Angabe des Dokumentstils werden globale Makros für die Benutzung in diesem Schriftstück definiert; in diesem Beispiel etwa die Anweisungen address und signature in den Zeilen 2 bis 4. Sie haben vielleicht schon erraten, daß mit address und signature Ihre eigene Adresse und Unterschrift innerhalb des Briefes definiert werden. Die doppelten Backslashes (\\) in der address-Anweisung erzeugen die Zeilenumbrüche im fertig formatierten Schriftstück.

Hier noch ein Hinweis darauf, wie LATEX seine Eingabedaten verarbeitet: Wie bei den meisten Textformatierern werden auch hier Leerzeichen, Zeilenumbrüche und ähnliche Zeichen in der Eingabedatei bei der Wandlung in die Ausgabedatei nicht wörtlich interpretiert. Sie können die Zeilen deshalb umbrechen, wo Sie wollen -- beim Formatieren der Abschnitte wird LATEX die Zeilen wieder zusammenfügen. Natürlich gibt es Ausnahmen hierzu: Leerzeilen in der Eingabedatei leiten einen neuen Abschnitt ein, und mit bestimmten Befehlen können Sie LATEX zwingen, den Quelltext wortwörtlich zu interpretieren.

Die Anweisung \begin{document} in Zeile 6 bezeichnet den Anfang des eigentlichen Textes. Alles, was zwischen \begin{document} und \end{document} in Zeile 22 erscheint, wird als zu formatierender Text behandelt; alles vor \begin{document} gehört zur Präambel und definiert noch vor dem eigentlichen Text einige Parameter für die Formatierung.

In den Zeilen 7 bis 9 wird mit \begin{letter} der Brief eingeleitet. Diese Anweisung wird benötigt, weil innerhalb eines einzelnen Dokuments mehrere Briefe stehen können, und jeder Brief wird mit einem \begin{letter} eingeleitet. Die Anweisung nimmt als Argument die Adresse des Empfängers auf; wie bei der Anweisung address bezeichnen doppelte Backslashes auch hier einen Zeilenumbruch innerhalb der Adresse.

In Zeile 11 beginnt mit der Anweisung opening der Brief, und die Zeilen 12 bis 18 enthalten den Text. So einfach dieser auch aussehen mag, sind doch einige Tricks darin enthalten. In Zeile 13 erzeugt die Anweisung LaTeX das LATEX-Logo. Sie werden bemerkt haben, daß sowohl vor als auch hinter der Anweisung LaTeX ein Backslash steht; der angehängte Backslash erzeugt eine Leerstelle hinter dem Wort »LATEX«. Das ist an dieser Stelle notwendig, weil TEX Leerzeichen hinter den Anweisungen ignoriert. (Ohne den angehängten Backslash würde »LATEX macht Spaß« als »LATEXmacht Spaß« erscheinen.)

Zeile 14 enthält zwei bemerkenswerte Besonderheiten. Zunächst steht eine Tilde (~) zwischen »Chapter« und »5«; damit wird eine Leerstelle zwischen den beiden Begriffen erzeugt und gleichzeitig verhindert, daß in der Ausgabedatei an dieser Stelle ein Zeilenumbruch erfolgt (also daß »Chapter« am Ende einer Zeile und »5« am Anfang der nächsten Zeile steht). Sie brauchen die Tilde nur dort einzufügen, wo zwei Begriffe auf jeden Fall in derselben Zeile erscheinen sollen, wie etwa in Chapter~5 und Mr.~Jones. (Wir hätten die Tilde auch in den Anweisungen \begin{letter} und \opening benutzen können, obwohl TEX innerhalb der Adresse oder Anrede wahrscheinlich keinen Zeilenumbruch einfügen würde.)

Die zweite Besonderheit in Zeile 14 ist das \em, mit dem in der Ausgabedatei kursiv gesetzt wird. LATEX unterstützt weitere Schriftauszeichnungen wie fett (\bf) und gesperrt (\tt).

In Zeile 19 wird mit \closing der Brieftext beendet. Gleichzeitig hat dies den Effekt, daß in der Ausgabedatei die in Zeile 4 angegebene Unterschrift eingefügt wird. Die Zeilen 21 und 22 schließen mit \end{letter} diesen Brief und mit \end{document} das ganze Dokument ab und bilden somit die Gegenstücke zu den Zeilen 6 und 7.

Sie werden bemerkt haben, daß keine der Anweisungen im LATEX-Quelltext mit der Festlegung von Seitenrändern, Zeilenabständen oder anderen funktionalen Aspekten der Textformatierung zu tun hat. Diese Dinge werden von den LATEX-Makros erledigt, die auf der TEX-Umgebung aufsetzen. LATEX enthält sinnvolle Voreinstellungen für solche Parameter; falls Sie irgendwelche dieser Einstellungen ändern möchten, können Sie dazu andere Befehle aus LATEX benutzen (oder die darunterliegenden TEX-Befehle).

Wir erwarten nicht, daß Sie anhand dieses einfachen Beispiels alle Feinheiten von LATEX verstehen, aber Sie sollten einen Eindruck davon erhalten haben, wie ein echtes LATEX-Dokument aussieht. Lassen Sie uns im nächsten Schritt dieses Dokument zum Ausdrucken vorbereiten.

Formatieren und drucken

Ob Sie es glauben oder nicht: Der Befehl, mit dem LATEX-Quellen in ein druckbares Format gebracht werden, lautet latex . Nachdem Sie das oben gezeigte Dokument editiert und als letter.tex gespeichert haben, sollte Sie folgenden Befehl eingeben.

eggplant$ latex letter 
This is TeX, C Version 3.141
(letter.tex
LaTeX Version 2.09 <25 March 1992>
(/usr/TeX/lib/tex/macros/LaTeX/letter.sty
Standard Document Style `letter' <25 Mar 92>.
) [1] )
Output written on letter.dvi (1 page, 1152 bytes).
Transcript written on letter.log.
eggplant$

Der Befehl latex erwartet für seine Quelldateien die Endung .tex . In diesem Beispiel hat LATEX die Quelldatei letter.tex verarbeitet und das Ergebnis in letter.dvi gespeichert. Es handelt sich hierbei um eine Geräte-unabhängige Datei, die auf einer Reihe von Druckern ausgegeben werden kann. Wir werden gleich sehen, daß es einige Tools gibt, die .dvi -Dateien in PostScript-, HP-LaserJet- und andere Formate konvertieren.

Statt den Brief sofort auszudrucken, möchten Sie ihn vielleicht zunächst einmal am Bildschirm betrachten um sicherzustellen, daß alles in Ordnung ist. Unter dem X Window System können Sie .dvi -Dateien mit dem Befehl xdvi am Bildschirm darstellen. Und wie wird der Brief nun gedruckt? Als erstes müssen Sie die .dvi -Datei in ein Format überführen, das Ihr Drucker versteht. DVI-Treiber gibt es für viele verschiedene Drucker. Fast alle diese Programme haben einen Namen, der mit den Buchstaben »dvi« beginnt, etwa dvips , dvilj usw. Falls Ihr System den benötigten Treiber nicht enthält und Sie Zugang zum Internet haben, können Sie ihn aus einem der TEX-Archive besorgen. Lesen Sie die Details in den FAQs zu comp.text.tex nach.

Falls Sie das Glück haben, über einen Drucker zu verfügen, der PostScript beherrscht, können Sie mit dem Befehl:

eggplant$ dvips -o letter.ps letter.dvi

eine Datei im PostScript-Format erzeugen. Mit lpr können Sie die Datei dann ausdrucken. Wenn dies in einem Schritt erfolgen soll, geben Sie ein:

eggplant$ dvips letter.dvi | lpr

Der Befehl dvilj druckt .dvi -Dateien auf einem HP-LaserJet aus, und mit eps erzeugen Sie einen Ausdruck auf Epson-kompatiblen Druckern.

Wenn Sie absolut keinen DVI-Treiber für Ihren Drucker finden können, haben Sie noch die Möglichkeit, mittels GhostScript aus der PostScript-Datei (die Sie mit dvips erstellt haben) eine Datei zu erzeugen, die Ihr Drucker handhaben kann. Obwohl einige der GhostScript-Fonts nicht besonders gut sind, können Sie damit die Adobe-Fonts benutzen (die Sie sich für MS-DOS besorgen und dann von Linux aus unter GhostScript einsetzen). GhostScript bietet außerdem einen SVGA-Treiber, mit dem Sie die Datei ohne das X Window System benutzen können.

Falls es Ihnen auf irgendeine Weise gelingt, den Beispielbrief zu formatieren und auszudrucken, sollte das Ergebnis etwa so aussehen:

Literaturhinweise

Wenn Sie den Eindruck haben, daß LATEX für die Bearbeitung Ihrer Dokumente geeignet ist, und wenn Sie zumindest dieses einfache Beispiel formatieren und drucken konnten, dann sollten Sie einen Blick in Leslie Lamports LATEX User's Guide and Reference Manual werfen. Sie finden darin alles, was Sie bei der Formatierung von Briefen, Artikeln, Büchern und anderen Schriftstücken über LATEX wissen müssen. Wenn Sie hacken möchten oder sich einfach für die grundlegende Arbeitsweise von TEX interessieren (was ausgesprochen hilfreich sein kann), dann ist Donald Knuths The TEXbook das Werk Ihrer Wahl. Making TEX Work von Norman Walsh zeigt, wie Sie TEX konfigurieren und es mit anderen Programmen zusammenarbeiten lassen.

Die USENET-Gruppe, die sich mit diesen Textformatierern beschäftigt, ist comp.text.tex ; allerdings wird vorausgesetzt, daß Sie in irgendeiner Form bereits Zugriff auf TEX- und LATEX-Dokumentation haben, z.B. auf die weiter oben erwähnten Handbücher.

groff

Parallel zu TEX entwickelten sich unabhängig troff und später nroff . Es handelt sich um Textformatierer, die bei den Bell Laboratories für das ursprüngliche UNIX entwickelt wurden (zeitweise wurde die Entwicklung von UNIX sogar vorangetrieben, um einen solchen Textformatierer einsetzen zu können). Die erste Version dieses Systems hieß roff (von »runoff«; etwa: Entscheidungslauf) und später kam troff dazu, mit dem Ausdrucke für den jeweils gerade benutzten Drucker erzeugt wurden. nroff war eine spätere Version, die zum Standardtextformatierer auf allen UNIX-Systemen wurde. groff ist die GNU-Version von nroff und troff , die auf Linux-Systemen eingesetzt wird. groff enthält einige Erweiterungen sowie Treiber für eine Reihe von Druckern.

Mit groff lassen sich Schriftstücke, Artikel und Bücher in ganz ähnlicher Weise wie mit TEX erstellen. Allerdings hat groff (wie auch das originale nroff ) eine Möglichkeit mitbekommen, die in TEX und seinen Varianten fehlt: das ist die Fähigkeit, reine ASCII-Ausgaben zu erzeugen. Während TEX sehr gut geeignet ist, wenn formatierte Dokumente erzeugt werden sollen, lassen sich mit groff Ausgaben im ASCII-Format erzeugen, die auf dem Bildschirm angezeigt (oder als unformatierter Text selbst auf dem einfachsten Drucker ausgegeben) werden können. Falls Sie Texte erstellen wollen, die sowohl am Bildschirm als auch in gedruckter Form gelesen werden, ist groff vielleicht das geeignete Werkzeug für Sie (auch wenn es Alternativen gibt, von denen Texinfo, das wir weiter unten besprechen, nur eine ist).

groff bietet darüber hinaus den Vorteil, daß es wesentlich kleiner ist als TEX; es benötigt weniger Programme und andere Dateien als selbst die kleinste TEX-Distribution.

Eine besondere Anwendung findet groff bei der Formatierung der Manual-Pages von UNIX. Wenn Sie unter UNIX programmieren, werden Sie schließlich irgendeine Form von Dokumentation erstellen müssen. In diesem Abschnitt wollen wir Sie in die Benutzung von groff einführen, indem wir eine kleine Man-Page erstellen.

Wie TEX so benutzt auch groff eine spezielle Textformatierungssprache um zu beschreiben, wie ein Text verarbeitet werden soll. Diese Sprache ist noch etwas kryptischer als TEX, nimmt aber weniger Platz in Anspruch. Zu groff gehören außerdem mehrere Makropakete, die zusätzlich zum eigentlichen Formatierer groff eingesetzt werden. Diese Makropakete sind für bestimmte Dokumenttypen maßgeschneidert. So sind z.B. die mgs-Makros ideal für Zeitungsartikel und andere kurze Texte, während die man-Makros bei der Erstellung von Man-Pages benutzt werden.

Eine Manual-Page erstellen

Das Erstellen einer Manual-Page mit groff ist ziemlich einfach. Damit Ihre Man-Page so aussieht wie andere auch, müssen Sie im Quelltext einige Konventionen befolgen, die wir weiter unten vorstellen. Wir wollen in diesem Beispiel eine Man-Page für den fiktiven Befehl coffee erstellen, mit dem Sie Ihre Kaffeemaschine über das Netzwerk auf verschiedene Weise beeinflussen können.

Geben Sie mit Ihrem Texteditor folgenden Quelltext ein und speichern Sie das Ergebnis als coffee.man :

1  .TH COFFEE 1 "23 March 94" 
2  .SH NAME
3  coffee \- Control remote coffee machine
4  .SH SYNOPSIS
5  \fBcoffee\fP [ -h | -b ] [ -t \fItype\fP ] \fIamount\fP
6  .SH DESCRIPTION
7  \fIcoffee\fP queues a request to the remote coffee machine at the
8  device \fB/dev/cf0\fR. The required \fIamount\fP argument specifies
9  the number of cups, generally between 0 and 15 on ISO standard
10 coffee machines. 
11 .SS Options
12 .TP
13 \fB-h\fP
14 Brew hot coffee. Cold is the default.
15 .TP
16 \fB-b\fP
17 Burn coffee. Especially useful when executing \fIcoffee\fP on behalf
18 of your boss.
19 .TP
20 \fB-t \fItype\fR
21 Specify the type of coffee to brew, where \fItype\fP is one of
22 \fBcolombian\fP, \fBregular\fP, or \fBdecaf\fP. 
23 .SH FILES
24 .TP
25 \fI/dev/cf0\fR
26 The remote coffee machine device
27 .SH "SEE ALSO"
28 milk(5), sugar(5)
29 .SH BUGS
30 May require human intervention if coffee supply is exhausted.

Lassen Sie sich von den mysteriösen Einträgen in dieser Quelldatei nicht abschrecken. Sie kommen schon wesentlich weiter, wenn Sie wissen, daß mit den Zeichenfolgen \fB, \fI und \fR die Schriftattribute fett (bold), kursiv (italic) bzw. roman (mit Serifen) eingeschaltet werden. Mit \fP kehren Sie zu der Schriftart zurück, die vor der jetzt gültigen eingeschaltet war.

Weitere groff -Anweisungen stehen in Zeilen, die mit einem Punkt beginnen (.). In Zeile 1 sehen wir, wie mit der Anweisung .TH der Titel dieser Man-Page als COFFEE definiert und als Manual-Section die 1 angegeben wird. (Der Abschnitt 1 enthält Benutzerbefehle, Abschnitt 2 Systemaufrufe usw.) Mit der Anweisung .TH wird außerdem das Datum der letzten Bearbeitung dieser Man-Page eingegeben.

Die Anweisung .SH in Zeile 2 leitet einen Abschnitt namens NAME ein. Fast alle UNIX-Man-Pages enthalten die Abschnitte NAME, SYNOPSIS, DESCRIPTION, FILES, SEE ALSO, NOTES, AUTHOR und BUGS in dieser Reihenfolge; weitere Abschnitte werden bei Bedarf eingefügt. Es handelt sich hierbei lediglich um eine Konvention bei der Erstellung von Man-Pages, deren Einhaltung von der Software in keiner Weise verlangt wird.

Zeile 3 enthält den Namen des Befehls und eine kurze Beschreibung hinter dem Bindestrich (\-). Sie sollten dieses Format für den Abschnitt NAME beibehalten, damit Ihre Man-Page in die whatis -Datenbank aufgenommen werden kann, auf die die Befehle man -k und apropos zugreifen.

In den Zeilen 4 und 5 geben wir die Syntax des Befehls coffee in Kurzform an. Beachten Sie, daß die Parameter für die Befehlszeile kursiv gesetzt werden (\fI...\fP), und daß optionale Argumente in eckigen Klammern stehen.

Die Zeilen 6 bis 10 enthalten eine kurze Beschreibung des Befehls. Dabei werden Befehle, Dateinamen und Optionen in der Regel kursiv gesetzt. In Zeile 11 wird mit der Anweisung .SS ein Unterabschnitt namens Options eingeleitet. Die Zeilen 12 bis 22 enthalten eine Liste der Optionen, die in Form einer Liste dargestellt werden. Jeder Punkt dieser Liste wird mit der Anweisung .TP eingeleitet. Die Zeile nach der .TP-Zeile enthält das »Etikett« dieser Listenzeile, dahinter folgt der Text zu diesem Punkt. Ein Beispiel: Der Quelltext in den Zeilen 12 - 14:

.TP 
\fB-h\fP
Brew hot coffee. Cold is the default.

wird in der Ausgabe folgendermaßen erscheinen:

-h      Brew hot coffee. Cold is the default.

In dieser Weise sollten Sie alle Optionen für die Befehlszeile Ihres Programms beschreiben.

Die Zeilen 23 bis 26 enthalten den Abschnitt FILES der Manual-Page, in dem alle Dateien beschrieben werden, die dieser Befehl zu seiner Ausführung benötigt. Auch hierfür wird mit der Anweisung .TP eine Liste angelegt.

In den Zeilen 27 und 28 steht der Abschnitt SEE ALSO, der Querverweise auf andere relevante Man-Pages enthält. Beachten Sie, daß in Zeile 27 die Zeichenfolge "SEE ALSO" hinter der Anweisung .SH in Anführungszeichen steht; das ist notwendig, weil .SH die Zeichen bis zur ersten Leerstelle als Titel des Abschnitts benutzt. Deshalb müssen alle Titel, die aus mehr als einem Wort bestehen, in Anführungszeichen stehen, damit sie als ein Argument behandelt werden. Die Zeilen 29 und 30 schließlich enthalten den Abschnitt BUGS.

Eine Manual-Page formatieren und installieren

Wenn Sie diese Manual-Page formatieren und auf dem Bildschirm anzeigen wollen, geben Sie folgenden Befehl ein:

eggplant$ groff -Tascii -man coffee.man | more

Die Option -Tascii weist groff an, eine Ausgabe im ASCII-Format zu erzeugen; die Option -man läßt groff die speziellen Makros für Man-Pages benutzen. Wenn alles geklappt hat, sollte die Man-Page in dieser Form angezeigt werden:

COFFEE(1)                                               COFFEE(1)

NAME
       coffee - Control remote coffee machine

SYNOPSIS
       coffee [ -h | -b ] [ -t type ] amount

DESCRIPTION
       coffee  queues  a  request to the remote coffee machine at
       the device /dev/cf0. The required amount  argument  speci-
       fies the number of cups, generally between 0 and 12 on ISO
       standard coffee machines.

   Options
       -h     Brew hot coffee. Cold is the default.
       -b     Burn coffee. Especially useful when executing  cof-
              fee on behalf of your boss.
       -t type
              Specify  the  type of coffee to brew, where type is
              one of colombian, regular, or decaf.

FILES
       /dev/cf0
            The remote coffee machine device

SEE ALSO
       milk(5), sugar(5)

BUGS
       May  require  human  intervention  if  coffee  supply   is
       exhausted.

Wie wir bereits erwähnt haben, kann groff auch andere Ausgabeformate erzeugen. Mit der Option -Tps statt -Tascii erhalten Sie die Ausgabe im PostScript-Format, die Sie in einer Datei speichern und dann mit Ghostview anzeigen oder auf einem PostScript-Drucker ausgeben können. Die Option -Tdvi erzeugt eine Ausgabe im Geräte-unabhängigen .dvi -Format ähnlich wie TEX.

Wenn andere Benutzer die Möglichkeit haben sollen, Ihre Man-Page zu lesen, müssen Sie den groff -Quelltext in einem Verzeichnis ablegen, das im MANPATH des Benutzers enthalten ist. üblicherweise stehen Man-Pages unter /usr/man . Quelltexte für Man-Pages aus dem Abschnitt 1 sollten deshalb in /usr/man/man1 stehen. Mit dem Befehl:

eggplant$ cp coffee.man /usr/man/man1/coffee.1

installieren Sie diese Manual-Page in /usr/man , so daß alle Benutzer Zugriff darauf haben (beachten Sie das Suffix .1 statt .man zum Dateinamen). Wenn anschließend man coffee aufgerufen wird, wird die Man-Page automatisch neu formatiert und der lesbare Text wird in /usr/man/cat1/coffee.1.Z gespeichert.

Falls Sie die Quelltexte zu Manual-Pages nicht direkt nach /usr/man kopieren können, haben Sie noch die Möglichkeit, einen eigenen Verzeichnisbaum für Man-Pages anzulegen und diesen in Ihren MANPATH aufzunehmen. Lesen Sie den Abschnitt » Manual-Pages « in Kapitel 3 zu diesem Thema.

Texinfo

Texinfo ist ein Textformatierungssystem, das innerhalb des GNU-Projektes benutzt wird, um sowohl die Online-Dokumentation in Form von Hypertextseiten als auch, mittels TEX, gedruckte Handbücher zu erstellen. Texinfo wird durch seine eigenen Info-Seiten komplett dokumentiert, die Sie innerhalb von Emacs (mit dem Befehl C-h i) oder mit einem eigenständigen Info-Reader wie z.B. info lesen können. Wenn in Ihrem System die GNU-Info-Seiten installiert sind, ist darin auch die komplette Dokumentation zu Texinfo enthalten. In derselben Weise, wie Sie mit groff eine Man-Page erstellen, werden Sie mit Texinfo ein Info-Dokument schreiben.

Einen Texinfo-Quelltext schreiben

In diesem Abschnitt wollen wir einen einfachen Texinfo-Quelltext in kleinen Schritten präsentieren und dabei erklären, was jeder Bestandteil bewirkt.

Unsere Texinfo-Quelldatei soll vacuum.texi heißen. Wie üblich geben Sie den Quelltext mit einem einfachen Texteditor ein.

\input texinfo @c -*-texinfo-*-
@c %**start of header
@setfilename vacuum.info
@settitle The Empty Info File
@setchapternewpage odd
@c %**end of header

Dies ist der Vorspann (header) der Texinfo-Quelldatei. Die erste Zeile enthält eine TEX-Anweisung, die die Texinfo-Makros einbindet, wenn Dokumentation in gedruckter Form erstellt werden soll. In Texinfo beginnen Anweisungen mit dem Zeichen @. Die Anweisung @c leitet einen Kommentar ein; in diesem Fall ist der Kommentar -*-texinfo-*- ein Hinweis für Emacs, daß es sich um eine Texinfo-Quelle handelt, damit Emacs den passenden Major-Modus einstellen kann. (Wir haben die Major-Modi weiter oben im Abschnitt » Emacs anpassen « besprochen.)

Die Kommentare @c %**start of header und @c %**end of header umschließen den Texinfo-Vorspann. Sie werden gebraucht, wenn nur ein Teil der Texinfo-Datei formatiert werden soll. Die Anweisung @setfilename bestimmt den Namen der Info-Ausgabedatei, @settitle gibt dem Dokument einen Namen, und @setchapternewpage odd weist Texinfo an, jedes neue Kapitel auf einer ungeraden Seite anfangen zu lassen. Dies sind einfache Standardanweisungen, die in jeder Texinfo-Datei erscheinen sollten.

Der folgende Abschnitt der Quelldatei legt das Aussehen der Titelseite für die Formatierung durch TEX fest. Diese Anweisungen sollten selbsterklärend sein.

@titlepage
@title Vacuum
@subtitle The Empty Info File
@author by Tab U. Larasa
@end titlepage

Wir kommen jetzt zum Hauptteil des Texinfo-Quelltextes. Die Info-Datei ist in Knoten (nodes) aufgeteilt, wobei jeder Knoten so etwas wie eine »Seite« des Dokuments darstellt. Jeder Knoten hat Verbindungen (engl.: links) zum vorhergehenden, zum nächsten sowie zum übergeordneten Knoten und kann mit anderen Knoten als Querverweis verbunden werden. Sie können sich die Knoten als Kapitel oder Abschnitte eines Schriftstücks vorstellen, wobei dem ganzen ein Verzeichnis aller Knoten unterlegt ist. So enthält z.B. das Menü eines Knotens auf Kapitel-Ebene Verweise auf alle Abschnitte in diesem Kapitel. Die Knoten dieser Abschnitte verweisen alle auf den Knoten der Kapitel-Ebene als übergeordneten Knoten. Außerdem verweist das Menü eines jeden Abschnitts auf den vorhergehenden und den folgenden Abschnitt, sofern diese existieren. Dies ist ziemlich kompliziert, aber es wird klarer werden, wenn Sie tatsächlich damit arbeiten.

Jeder Knoten bekommt einen kurzen Namen; derjenige auf der obersten Ebene heißt Top. Mit der Anweisung @node wird ein Knoten erzeugt; diese Anweisung bekommt als Argument den eigenen Namen sowie die Namen des vorhergehenden, des folgenden und des übergeordneten Knotens mit. Wir haben weiter oben bereits darauf hingewiesen, daß der vorhergehende und der folgende Knoten auf derselben Ebene angeordnet sein sollten. Der übergeordnete Knoten ist derjenige, der im »Verzeichnisbaum« über dem aktuellen Knoten steht (ein Beispiel: der übergeordnete Knoten zum Abschnitt 2.1 eines Schriftstücks ist das Kapitel 2). In Abbildung 5--1. zeigen wird eine beispielhafte Hierarchie von Knoten.

Abbildung 5-1. Hierarchie von Knoten in Texinfo

So sieht der Quelltext für den Knoten Top aus:

@c    Node, Next, Previous, Up
@node Top ,     ,         , (dir)

@ifinfo
This Info file is a close approximation to a vacuum. It documents
absolutely nothing.
@end ifinfo

@menu
* Overview::              Overview of Vacuum
* Invoking::              How to use the Vacuum
* Concept Index::         Index of concepts
@end menu

Wir haben der Anweisung @node einen Kommentar vorangestellt, um dort die Reihenfolge der Argumente für @node festzuhalten. In diesem Beispiel hat Top keinen vorhergehenden oder folgenden Knoten, deshalb bleiben diese Felder leer. Der übergeordnete Knoten zu Top ist (dir), womit dasjenige Verzeichnis im System benannt wird, in dem die Info-Seiten stehen. Wir gehen davon aus, daß Ihre Info-Datei in den Verzeichnisbaum der Info-Dateien des Systems eingebunden wird; deshalb sollte der Knoten Top auf das übergeordnete Info-Verzeichnis verweisen.

Der Anweisung @node folgt eine kurze Zusammenfassung des gesamten Schriftstücks, die von @ifinfo...@end ifinfo begrenzt wird. Diese Anweisungen werden benutzt, weil der eigentliche Text des Knotens Top nur in der Info-Datei erscheinen soll, nicht aber im gedruckten, mit TEX erzeugten Dokument.

Die Anweisungen @menu...@end menu bezeichnen das Menü dieses Knotens. Jeder Menüeintrag enthält den Namen eines Knotens sowie eine kurze Beschreibung desselben. In unserem Beispiel verweist das Menü auf die Knoten Overview, Invoking und Concept Index, deren Quelltexte weiter unten in der Datei erscheinen. Diese drei Knoten entsprechen den drei »Kapiteln« unseres Schriftstücks.

Lassen Sie uns mit dem Knoten Overview weitermachen, der dem ersten »Kapitel« entspricht:

@c    Node,     Next,    Previous, Up
@node Overview, Invoking,        , Top
@chapter Overview of @code{vacuum}

@cindex Nothingness
@cindex Overview
@cindex Vacuum cleaners

A @code{vacuum} is a space entirely devoid of all matter. That means no air,
no 
empty beer cans, no dust, no nothing. Vacuums are usually found in outer
space. 
A vacuum cleaner is a device used to clean a vacuum.
See @xref{Invoking} for information on running @code{vacuum}.

Der Knoten, der auf Overview folgt, ist Invoking; dies ist der Knoten des zweiten »Kapitels« und damit auch der nächste Menüeintrag. Beachten Sie, daß Sie Ihren Texinfo-Dokumenten fast jede beliebige Struktur geben können; allerdings ist es oft sinnvoll, eine Struktur zu finden, in der die Knoten den Kapiteln, Abschnitten, Unterabschnitten usw. entsprechen. Diese Entscheidung liegt ganz bei Ihnen.

Mit der Anweisung @chapter beginnen Sie ein Kapitel; dies wirkt sich nur aus, wenn Sie den Quelltext mit TEX formatieren. In ähnlicher Weise werden mit den Anweisungen @section und @subsection (Sie haben richtig geraten!) die Abschnitte und Unterabschnitte des entstehenden TEX-Dokuments eingeleitet. Der Name des Kapitels (Abschnitts, Unterabschnitts) kann ruhig etwas ausführlicher sein als der kurze Name für den Knoten selbst.

Sie werden bemerkt haben, daß innerhalb des Kapitelnamens die Anweisung @code... benutzt wurde. Dies ist nur eine Möglichkeit, Text in irgendeiner Weise hervorzuheben. Sie sollten @code für Anweisungen und Programmquelltexte benutzen. Sie bewirken damit, daß der Text innerhalb von @code... im fertigen TEX-Dokument gesperrt gedruckt und in der Info-Datei in einfache Anführungsstriche (etwa 'so') gesetzt wird.

Anschließend haben wir dreimal die Anweisung @cindex benutzt, um die Einträge für den Index am Ende des Dokuments zu erzeugen. Danach erscheint der eigentliche Text dieses Knotens. Auch hier haben wir @code benutzt, um den Namen der »Anweisung« vacuum hervorzuheben.

Mit der Anweisung @xref erzeugen Sie einen Querverweis auf einen anderen Knoten; der Leser kann diesem Verweis im Info-Reader mit der Anweisung f folgen. Mit @xref können Sie auch Querverweise auf andere Texinfo-Dokumente erzeugen. Lesen Sie die Details hierzu in der Dokumentation zu Texinfo nach.

Der folgende Knoten heißt Invoking:

@node Invoking, Concept Index, Overview, Top 
@chapter Running @code{vacuum}

@cindex Running @code{vacuum}
@code{vacuum} is executed as follows:

@example
vacuum @var{optionen} @dots{}
@end example

In diesem Knoten haben wir @example...@end example benutzt, um ein Beispiel hervorzuheben. Innerhalb des Beispiels wird @var als Metavariable eingesetzt, also als Platzhalter für eine Zeichenfolge, die der Benutzer einzugeben hat (in diesem Fall die Optionen zur Anweisung vacuum ). Mit @dots{} erzeugen Sie die drei Punkte. Dieses Beispiel wird im TEX-Dokument so erscheinen:

vacuum optionen...

und in der Info-Datei so:

vacuum OPTIONEN ... 

Mit Anweisungen wie @code und @var erzeugen Sie Hervorhebungen, die in den TEX- und Info-Dokumenten auf verschiedene Arten dargestellt werden können.

Wir fahren mit dem Knoten Invoking folgendermaßen fort:

@cindex Options
@cindex Arguments
The following options are supported:

@cindex Getting help
@table @samp
@item -help
Print a summary of options.

@item -version
Print the version number for @code{vacuum}.

@cindex Empty vacuums
@item -empty 
Produce a particularly empty vacuum. This is the default.
@end table

Hiermit erzeugen wir eine Tabelle der Optionen, die vacuum anscheinend unterstützt. Die Anweisung @table @samp leitet eine zweispaltige Tabelle ein (die schließlich mehr wie eine einfache Liste aussieht). Die einzelnen Tabelleneinträge werden mit der Anweisung @samp hervorgehoben. @samp funktioniert so ähnlich wie @code und @var, ist aber für feste Eingaben (wie z.B. die Optionen auf der Befehlszeile) gedacht.

Ein normales Texinfo-Dokument würde außerdem Knoten für Beispiele, Hinweise zur Benachrichtigung im Fall von Fehlern sowie einige andere Punkte enthalten. Wir wollen uns kurz fassen und unser Beispiel deshalb mit dem letzten Knoten, Concept Index, beenden. Es handelt sich dabei um einen Index der Konzepte, die in diesem Dokument vorgestellt werden; dieser Index wird mit der Anweisung @printindex selbständig erstellt.

@node Concept Index, , Invoking, Top
@unnumbered Concept Index

@printindex cp

@printindex cp weist den Formatierer an, den Konzeptindex an dieser Stelle einzufügen. Es gibt andere Arten von Indizes wie z.B. den Funktionsindex, den Befehlsindex usw. Sie werden alle mit Varianten der Anweisungen @cindex und @printindex erstellt. Die letzten drei Zeilen unseres Texinfo-Quelltextes lauten:

@shortcontents
@contents
@bye

Hier wird der Formatierer angewiesen, ein »zusammengefaßtes« Inhaltsverzeichnis zu erstellen (@shortcontents), dazu ein komplettes Inhaltsverzeichnis (@contents), und dann die Formatierung zu beenden (@bye). @shortcontents erstellt ein kurzes Inhaltsverzeichnis, das nur die Kapitel und Anhänge aufführt. Wahrscheinlich werden Sie nur für lange Schriftstücke die Anweisung @shortcontents zusätzlich zu @contents benutzen.

Texinfo formatieren

Wenn Sie aus der Texinfo-Quelle eine Info-Datei erstellen möchten, benutzen Sie dazu den Befehl makeinfo . (Dieser Befehl ist wie die anderen Programme zur Bearbeitung von Texinfo ein Teil der Texinfo-Distribution, die manchmal zusammen mit Emacs ausgeliefert wird.) Mit dem Befehl:

eggplant$ makeinfo vacuum.texi

erzeugen Sie aus vacuum.texi die Datei vacuum.info . makeinfo benutzt den Dateinamen für die Ausgabedatei, der durch @setfilename im Quelltext festgelegt wird; mit der Option -o können Sie einen anderen Namen vergeben.

Falls die entstehende Info-Datei sehr groß ist, wird makeinfo sie in eine Reihe von Dateien mit den Namen vacuum.info-1 , vacuum.info-2 usw. aufteilen. Dabei ist die Datei vacuum.info die »Haupt«-Datei, die auf die verschiedenen Teil-Dateien verweist. Solange alle vacuum.info -Dateien im selben Verzeichnis stehen, sollte der Info-Reader sie finden können.

Sie haben auch die Möglichkeit, mit den Emacs-Befehlen M-x makeinfo-region und M-x makeinfo-buffer aus dem Texinfo-Quelltext die Info-Dateien zu erstellen.

Anschließend können Sie aus Emacs heraus mit C-h i die Info-Datei lesen. Im Info-Modus von Emacs müssen Sie den Befehl g zusammen mit dem kompletten Pfad zu Ihren Info-Dateien angeben, z.B. so:

Goto node: (/home/loomer/mdw/info/vacuum.info)Top

Das hängt damit zusammen, daß Emacs Info-Dateien in der Regel nur in seinem eigenen Info-Verzeichis sucht (das könnte auf Ihrem System /usr/local/emacs/info sein).

Eine andere Möglichkeit ist es, den von Emacs unabhängigen Info-Reader info zu benutzen. Mit dem Befehl:

eggplant$ info -f vacuum.info

rufen Sie info auf, um Ihre neue Info-Datei zu lesen.

Falls alle Benutzer Ihres Systems Zugriff auf die neue Info-Seite haben sollen, müssen Sie noch in der Datei dir im info -Verzeichnis von Emacs einen Verweis auf die neue Seite eintragen. Die Texinfo-Dokumentation beschreibt diesen Schritt im Detail.

Um aus dem Quelltext ein gedrucktes Schriftstück zu erstellen, müssen Sie auf Ihrem System TEX installiert haben. Die Texinfo-Software enthält die Datei texinfo.tex mit TEX-Makros; die alle Makros definiert, die Texinfo für die TEX-Formatierung benötigt. Falls alles korrekt installiert ist, sollte sich texinfo.tex im inputs -Verzeichnis von TEX befinden, wo TEX diese Datei finden kann. Falls das nicht der Fall ist, können Sie texinfo.tex in das Verzeichnis kopieren, in dem Ihre Texinfo-Dateien stehen.

Verarbeiten Sie zuerst die Texinfo-Datei mittels TEX:

eggplant$ tex vacuum.texi

Damit wird in diesem Verzeichnis eine ganze Reihe von Dateien erzeugt, von denen einige zu TEX gehören; andere werden bei der Erstellung des Indexes benutzt. Der Befehl texindex (der im Texinfo-Paket enthalten ist) wird benutzt, um den Index so zu formatieren, daß TEX damit etwas anfangen kann. Als nächstes geben Sie deshalb den Befehl:

eggplant$ texindex vacuum.??

ein. Der Platzhalter ?? sorgt dafür, daß texindex alle Dateien in diesem Verzeichnis bearbeitet, die ein zweibuchstabiges Suffix haben; dies sind genau die Dateien, die Texinfo erzeugt hat, um daraus den Index zu erstellen.

Zum Schluß müssen Sie noch die Texinfo-Datei mittels TEX neu formatieren; damit werden die Querverweise aufgelöst und der Index wird erstellt:

eggplant$ tex vacuum.texi

Nach diesem Schritt sollten Sie eine Datei namens vacuum.dvi haben; eine Geräte-unabhängige Datei, die Sie entweder mit xdvi anschauen oder in ein druckbares Format konvertieren können. Im Abschnitt »TEX und LATEX« weiter oben in diesem Kapitel zeigen wir, wie .dvi -Dateien gedruckt werden.

Wie üblich gibt es auch über dieses System eine Menge mehr zu lernen. Texinfo selbst enthält einen kompletten Satz an Info-Seiten, die Sie sicherlich mit Ihrem Info-Reader lesen können. Nachdem Sie jetzt aber mit den Grundlagen vertraut sind, könnten Sie die Quelltexte der Texinfo-Dokumentation mit TEX selbst formatieren. Die .texi -Quelldateien der Dokumentation zu Texinfo sind in der Texinfo-Distribution enthalten.


Inhaltsverzeichnis Vorherige Abschnitt Nächste Abschnitt