Groff – Textsatz wie TeX, aber besser?

Troff und Groff – Was soll das sein?

Troff (und seine GNU/Linux-Implementierung Groff) ist ein Programm zum Setzen von Dokumenten. Da es wie TeX funktioniert, sollte es statt "Textverarbeitungsprogramm" eher als Dokumenten-Vorbereitungssystem bezeichnet werden. Wie bei TeX gibt es eine Quelldatei mit Text und Formatierungsbefehlen. Aus dieser werden dann beim Kompilieren vollständige Dokumente zusammengesetzt. Groff ist freie Software.

Kurze Geschichte

Troff (manchmal T-roff ausgesprochen) ist ein Textsatzsystem, das von AT&T für Unix entwickelt wurde, und dessen Geschichte über ntroff und runoff bis auf den Anfang der 1970er Jahre zurückgeht! Groff heißt einfach die GNU/Linux-Implementierung von troff, die erstmals 1990 veröffentlicht wurde. Wie TeX blicken diese Textsatzsysteme (die insbesondere auf Unix-Systemen weit verbreitet sind) auf eine jahrzehntelange Entwicklung zurück und sind entsprechend ausgereift und bugfrei. Noch heute wird groff gerne zur Anzeige und zum Verfassen von Handbüchern (man pages) unter Unix verwendet.

Unterschiede zu Textverarbeitungsprogrammen (LibreOffice Writer, MS Word u.a.)

Im Prinzip können hier dieselben Unterschiede genannt werden, wie sie auch für die Arbeit mit TeX-Dokumenten zutreffen. Einige wichtige Punkte:

  • Der Textsatz ist sehr hochwertig und üblicherweise dem der heutigen großen Textverarbeitungsprogramme überlegen.
  • Zur Bearbeitung der Dokumente bedarf es lediglich eines beliebigen Texteditors, noch nicht einmal eine grafische Oberfläche (GUI) ist erforderlich.
  • Die Software ist frei, portabel und kann sehr einfach an eigene Bedürfnisse angepasst werden.
  • Die Trennung von Formatierungsbefehlen und Text-Inhalt ermöglicht sehr einfach Änderungen an der dokumentweiten Formatierung: Stil der Kopf- und Fußzeile, Überschriften, Seitenlayout, Schriftarten, typografische Manipulationen (Zurichtung, Buchstaben-, Wort- und Satzabstände) u.a. Außerdem gibt es die von TeX bekannten und geschätzten Automatismen wie Nummerierung und Sortierung der Überschriften, Bilder, Fußnoten, ohne dass etwas durcheinander kommt.
  • Es besteht Layout-Konstanz (derartig gesetzte Dokumente sind layoutstabil) selbst bei langen und komplexen Dokumenten, und das Layout ist jederzeit reproduzierbar.

Wie bei TeX ist über die Einbindung von Makros die Gestaltung von Tabellen und Diagrammen, das Einbinden von Grafiken und das Setzen von mathematischen und chemischen Formeln möglich. Über das Kompilieren des Quellcodes (Eingabedatei) können eine Vielzahl von Ausgabe-Formaten erzeugt werden (PostScript, PCL, DVI, HTML, PDF u.a.)

Unterschiede zu TeX

Wenn alles so ähnlich ist wie bei TeX (selbst der gute Textsatz ist vergleichbar hochwertig), warum sollte ich dann Groff anstelle von TeX nutzen? Hier einige wichtige Unterschiede:

Unterschied 1: Groff ist ein im Vergleich zu TeX winziges Programm. Die Programmgröße von Groff ist < 5 MB, während eine voll installierte TeX-Distribution mehrere GB auf der Festplatte einnehmen kann.

Gegenargument 1: mehrere GB sind auf modernen Festplatten Peanuts.

Gegenargument 2: eine volle TeX-Distribution (z.B. TeXLive) enthält auch Dutzende von Sprachen und Schriftarten, die man vermutlich niemals nutzen wird.

Unterschied 2: Die Syntax ist vermutlich noch einfacher als bei TeX.

Hier muss man jetzt unterscheiden: Die Formatierungssyntax von troff und TeX ist, jeweils OHNE Makropakete, sehr steif und wenig eingängig. Der Erfolg von TeX geht ja zum großen Teil auf das Makropaket LaTeX zurück, das die am meisten gebrauchten Befehle auf eine einigermaßen verständliche Syntax umlenkt. Dasselbe gilt für troff und groff: Erst mit Verwendung von Makropaketen (siehe unten) wird die Eingabesyntax handlich und überschaubar, im Gebrauch leicht zu merken und zu verändern. Und eben diese Syntax der troff/groff-Makropakete ist es, die – meiner Meinung nach – der von LaTeX in vielen Fällen überlegen ist (siehe Beispiele unten).

Unterschied 3: Eine komplizierte Präambel (wie bei TeX-Dokumenten üblich) entfällt größtenteils. Notfalls startet man sofort mit dem ersten Absatz und kann das Dokument bereits erfolgreich kompilieren.

Unterschied 4: Im Gegensatz zu TeX folgt die Eingabe von Sonderzeichen einem einheitlicheren Konzept. Man denke hier an mathematische Operatoren, griechische Buchstaben, Diakritika etc. Mit troff/groff kann man den ursprünglich nur nutzbaren ASCII-Zeichensatz mit allen möglichen Unicode-Zeichen erweitern (sofern man das beim Kompilieren mit angibt, siehe unten). Ein Sonderzeichen wird üblicherweise mit Escape-Zeichen eingeleitet und in eckigen Klammern eingeschlossen, z.B. \[*b] für den griechischen Buchstaben beta, oder \[38] für den Bruch 3/8. Eine Übersicht der verfügbaren Sonderzeichen gibt es hier.

Unterschied 5: Beim Kompilieren einfacher Dokumente werden keine Meta-Dateien erzeugt, wie man das von TeX kennt. Es gibt nur den Quellcode und das kompilierte Dokument. Da bleibt das Verzeichnis übersichtlich.

Gibt es auch Nachteile im Vergleich zu TeX?

Ich würde sagen, einige wenige: Zum einen ist mir kein grafischer Editor bekannt, der per integriertem GUI-Button das Dokument kompiliert (wie es beispielsweise TeXMaker und Dutzende andere Texteditoren und LaTeX-Editoren vermögen). Das bedeutet, das Dokument muss auf der Kommandozeile per Eingabebefehl kompiliert werden. Das kann abschrecken. Allerdings ist der Befehl zum Kompilieren recht eingängig und nach mehrfacher Anwendung genauso verinnerlicht wie jedes andere Kommando.

Jeder einzelne Absatz muss mit einem Kommando eingeleitet werden, um als solcher gekennzeichnet zu werden. Bei TeX reicht üblicherweise eine Leerzeile, was auch die Übersichtslichkeit des Quellcodes erhöht.

Als letzter Nachteil ist die geringere Übersichtlichkeit von Quellcode-Dokumenten im Vergleich zu TeX-Quellcode zu nennen: In troff/groff haben Leerzeilen große Bedeutung, weswegen die Code-Syntax hintereinanderweg geschrieben wird (siehe auch template-Dokument ganz unten). Befehl folgt auf Textblock folgt auf Befehl etc. Inline-Formatierungsangaben sind selbstverständlich möglich (je nach verwendeter Makro-Sprache), aber trotzdem muss man genauer schauen, wenn man im Quellcode arbeitet.

Makropakete: Warum Mom?

Für troff/groff stehen einige Makropakete zur Verfügung, um die eigentlich umständlichen troff-Kommandos leichter zugänglich zu machen. Bekannte Makropakete heißen etwa "man" (für Unix man-pages = Handbücher), "ms" (für technische Papiere und Berichte entwickelt), "mm" (umfangreicher als "ms", aber (im Internet) schlechter dokumentiert) oder "me". Eine Übersicht gibt es hier und hier.

Infos zu den Makros inkl. bereitgestellte Befehle kann man sich jederzeit über die Kommandozeile ausgeben lassen:

man groff_ms

Anstelle von "ms" kann man auch "mm", "me", "mom" etc. angeben.

Unter den Makropaketen hebt sich "mom" von P. Schaffter bemerkenswert ab. Denn es verwendet weitgehend nicht die (immer noch) wenig eingängigen 2-Buchstaben-Kommandos (z.B. ".uh" für eine unnummerierte Überschrift im "me"-Makropaket, oder ".AS" für die Kennzeichnung des Abstract im "ms"-Makropaket), sondern weitgehend lesbare Befehle (etwa ".QUOTE" für den Beginn einer Zitat-Umgebung). "mom" wurde für das Schreiben von Prosa (Romane etc.) konzipiert und bringt hierfür viele nützliche Anweisungen mit. Außerdem gibt es eine wirklich großartige Dokumentation zu dem Makropaket, die wenig Fragen offen lässt. (mom ist nur für groff verfügbar, so wie ich das verstanden habe.)

Im Punkt "Anwendungsbeispiele" (siehe unten) werde ich mich daher auf das Makropaket "mom" beziehen.

Installation von groff unter Linux

Einfach hat's der GNU/Linux-Nutzer: In allen gängigen Distributionen findet sich das Paket namens "groff" in der Paketverwaltung. Fertig.

Anwendungsbeispiele

Zunächst wird ein Textdokument mit einem beliebigen Texteditor angelegt. Als Dateiendung (die eigentlich egal ist) nutzt man gerne den Namen des verwendeten Makropakets, also z.B. Dokument.mom oder Dokument.me

Syntax-Regeln

Bevor es losgeht, einige Regeln: Von Ausnahmen abgesehen

  • beginnen alle Makros mit einem Punkt,
  • stehen in einer eigenen Zeile
  • und sind in Großbuchstaben zu setzen.

LeerZEICHEN am Zeilenanfang sind ebenso zu vermeiden wie LeerZEILEN.

Präambel einrichten

Sinnvollerweise richtet man eine sog. Präambel (wie bei TeX-Dokumenten) ein, die Anweisungen mit dokumentweiter Wirkung (Schriftart, Schriftgröße, individuelle Einstellungen für Überschriften und Fußnoten etc.) sammelt. Eine solche Präambel ist aber nicht zwingend notwendig. Unerlässlich sind bei Verwendung des mom-Makropakets nur die Anweisungen .PRINTSTYLE und .START.

Der Vollständigkeit halber richten wir eine Minimal-Präambel ein:

.AUTHOR "Hans Peters"
.TITLE "Mein erstes Dokument"
.SUBTITLE "mit Makropaket"
.PRINTSTYLE TYPESET
.PAPER A4
.START

Würde man dieses Dokument (und etwas Beispieltext) kompilieren, erhielte man einen schicken Dokumentkopf mit Titel, Autornamen etc. in einer Times-Schriftart. Würde die Papiergröße nicht mitgegeben, betrügen die Abmessungen der Seite 8.5 mal 11 inch.

Der Befehl .PRINTSTYLE erlaubt die Möglichkeiten "TYPESET" oder "TYPEWRITE". Dahinter steht eine Besonderheit des "mom"-Makropakets, nämlich den Text in finalem Layout auszugeben (TYPESET) oder als eine Art Roh-Manuskript (TYPEWRITE) mit großem Zeilenabstand und einer Monospace-Schrift, wie man derartige Manuskripte von Drehbüchern kennt. Einfach mal ausprobieren!

Das Kommando .START kennzeichnet den Beginn des Dokuments.

Absätze

Der erste Textblock kann nun geschrieben werden. JEDER Absatz wird mit dem Kommando .PP eingeleitet, um den Absatz als solchen zu kennzeichnen. Absätze haben normalerweise eine Einrückung (Einzug, Indent), außer die ersten Absätze nach Überschriften. Das erkennt das Programm automatisch. Es wird empfohlen, jeden Satz eines Absatzes in einer neuen Zeile zu beginnen.

.PP
Dies ist mein erster Beispielsatz.
Ich habe noch nicht viel zu sagen.
.PP
Nun möchte ich etwas Text ergänzen.
Also habe ich einen weiteren Absatz begonnen.

Dokument kompilieren

Nun möchte man das Ergebnis ja auch sehen, daher wird nun gezeigt, wie das Dokument kompiliert wird. Verwendet wird auf der Kommandozeile der Befehl (Dateinamen sind anzupassen!):

groff -mom Dokument.mom > Ergebnis.ps

Die Option "-mom" steht offensichtlich für das verwendete Makro, das muss groff ja wissen. "Dokument.mom" ist der Quellcode, "Ergebnis.ps" das kompilierte Dokument, in diesem Fall im PostScript-Format.

Festlegung der Dokumentsprache

Nun geht's um die verwendete Dokumentsprache. Wird Englisch geschrieben, kann die oben angegebene Anweisung zum Kompilieren benutzt werden. Schon bei jeder anderen (europäischen) Sprache hat man Diakritika im Text und benötigt darüber hinaus sprachspezifische Makros zur korrekten Silbentrennung.

Als erstes wird beim Kompilieren die Option -Kutf8 mitgegeben. Die gewährleistet, dass alle verwendeten nicht-ASCII-Zeichen (aus Unicode) korrekt dargestellt werden. (Das Textdokument sollte dann selbstverständlich die Unicode-Zeichencodierung nutzen!) Wird ein Dokument mit Diakritika ohne diese Option kompiliert, gibt es eine Fehlermeldung.

Als nächstes wird die Dokumentsprache angegeben, sodass der korrekte Algorithmus zur Silbentrennung (hyphenation patterns) geladen werden kann. Wird nicht-englischer Text ohne diese Anweisung kompiliert, wird das üblicherweise zu falsch umgebrochenen Wörtern führen! Dasselbe Spiel kennt man von TeX: Wird dort die falsche Dokumentsprache angeben, führt das zu mangelhaften Umbrüchen. TeX und groff können ja nur dann großartigen Textsatz erzeugen, wenn sie korrekt umbrechen "dürfen"!

Im Unterschied zu TeX gibt man die verwendete Dokumentsprache nicht im groff-Quellcode selbst an, sondern gibt beim Kompilieren eine Option vor, um bestimmte sprachenspezifische Makros zu nutzen. Die Liste ist kurz und beschränkt sich auf:

cs (Tschechisch), us (US-Englisch), fr (Französisch), det (Deutsch, traditionell), den (Deutsch, Rechtschreibreform), sv (Schwedisch).

Ich kann damit leben. Man sollte sich aber keine falschen Vorstellungen machen: Die Makros enthalten offenbar nur Vorgaben, wie viele Buchstaben mindestens vor und nach der Trennung zu stehen haben. Das kann im Deutschen nicht immer richtig sein. Bislang hatte ich keine Probleme damit.

Jedes Sprachen-Makro wird mit einem -m eingeleitet, also -mfr (für Französisch) oder -mden (für Deutsch). Der vollständige Befehl zum Kompilieren lautet dann für einen deutschen Text:

groff -mom -mden -Kutf8 Dokument.mom > Ergebnis.ps

Wer damit immer noch Probleme hat, kann die Worttrennung in der Dokument-Präambel vollständig ausschalten, aber dann nimmt man einen Layout-Alptraum in Kauf (Blocksatz ohne Wortumbruch, igitt):

.HY OFF

Übrigens: Die Auswahl der korrekten Dokumentsprache beeinflusst auch andere Bestandteile des Dokuments: Wer das Makro .AUTHOR nutzt (siehe oben), erhält auf seiner Titelseite den Titel, gefolgt von einem "by" darunter der Autorenname. Wird das Dokument mit deutschem Sprachmakro kompiliert, wird aus dem "by" ein "von". Entsprechendes gilt für die anderen Sprachen.

Von PostScript zu PDF

Möchte man lieber ein PDF erzeugen, wird PostScript rasch auf der Kommandozeile konvertiert:

ps2pdf Ergebnis.ps Ergebnis.pdf

Nicht verschweigen will ich das Programm pdfmom, das mom-Quellcode direkt zu PDF kompiliert.

Noch einige grundlegende Dokument-Einstellungen …

Seitenränder

Seitenränder können mit folgenden Kommandos manuell gesetzt werden ("c" dient als Kürzel für Zentimeter):

.L_MARGIN 3.5c
.R_MARGIN 2.2c
.T_MARGIN 3.3c
.B_MARGIN 4.5c

Wie immer stehen die Buchstaben L für left = links, R für right = rechts, T für top = oben, B für bottom = unten. Die Anweisung wird am besten in der "Präambel", also vor dem .START-Kommando gesetzt.

Achtung bei Verwendung von Fußnoten: Wird der bottom-Rand (unten) zu eng eingestellt, kann das beim Kompilieren zu Fehlermeldungen führen!

Schriftarten

Vorinstalliert sind bei groff einige Schriftarten, die über ein einfaches Kommando umgeschaltet werden können. Zur Erinnerung: Standard ist "Times Roman". Mit dem Kommando ".FAMILY <Buchstabe>" wird die verwendete Schriftartenfamilie für das gesamte Dokument bestimmt. Die Anweisung kommt in die "Präambel", also vor die .START-Anweisung.

Als Buchstaben kommen infrage:

A = Avant Garde
BM = Bookman
H = Helvetica (ähnlich Arial)
HN = Helvetica Narrow (also ein gestauchter Schnitt)
N = New Century Schoolbook
P = Palatino
T = Times Roman (Standard)
ZCM = Zapt Chancery

.FAMILY H

Das ist doch schon mal was. Selbstverständlich kann man auch eigene Schriftarten für das System hinzufügen, aber darauf gehe ich hier nicht ein.

Zeilenabstand

Zeilenabstand wird mit folgendem Kommando gesetzt:

.LS 18

Die Zahl hinter dem Kommando ist der Zeilenabstand – in Punkt! Der Zeilenabstand wird am besten in der Präambel, also noch vor der .START-Anweisung festgelegt.

Schriftgröße

Die generelle Schriftgröße des Dokuments kann wie folgt festgelegt werden:

.PT_SIZE 12

Die Zahl steht selbstverständlich für die Schriftgröße in Punkt. Und wie immer sammelt man (übrigens auch bei TeX) derartige Kommandos mit dokumentweitem Einfluss in der "Präambel", also noch vor der .START-Anweisung.

Überschriften

Als nächstes wird das Ganze mit Überschriften gegliedert. Dem Kommando .HEADING wird eine Ziffer für die Gliederungsebene nachgestellt (1 = höchste). Dann kommt der Titel in Anführungszeichen:

.HEADING 1 "Einleitung"
.PP
Ein bisschen Einleitungs-blabla.
.HEADING 2 "Methoden"
.PP
Nun komme ich zu den Methoden.
.HEADING 2 "Fehlerbetrachtung"
.PP
Etwas Fehlerbetrachtung darf nicht fehlen!

In der Standardeinstellung werden unnummerierte Überschriften erzeugt. Wer das ganze nummeriert haben will, setzt einen Schalter in die "Präambel", also vor das .START-Kommando:

.HEADING_STYLE 1 NUMBER
.HEADING_STYLE 2 NUMBER

Die Anweisung wird wiederholt für alle Level, die benutzt worden sind (hier nur 2 Hierarchien).

Formatierung Kursiv und Fett

Zur grundlegenden Textformatierung gehören Kursiv und Fett. Um Text auf diese Weise zu formatieren, wird der zu formatierende Text mit folgenden Kommandos eingeschlossen:

Ich schreibe jetzt \*[IT]kursive\*[PREV] Wörter
und auch einiges in \*[BD]Fettschrift\*[PREV].

Es wird also zunächst in Kursiv-Modus (IT = italic) geschaltet, dann wieder zurück zu Normal (prev = previous). Dasselbe mit BD = bold.

Zitat-Umgebungen

Als nächstes soll eine Zitat-Umgebung geschaltet werden, d.h. ein beidseitig eingerückter, abgesetzter Bereich, der für zitierte Textpassagen genutzt werden kann:

.BLOCKQUOTE
Diese Umgebung kann für die Wiedergabe eines
umfangreichen Textzitats genutzt werden.
.BLOCKQUOTE OFF

Daneben gibt es auch die sog. QUOTE-Umgebung, mit der sich Einzeiler (z.B. Verse) wiedergeben lassen:

.QUOTE
Ich lebe, was ich immer wusste,
nach Treu und Glauben liderlich,
bekenne ich den roh' Gedanken,
ahne ich, es schickt sich nicht?
.QUOTE END

Ohne weitere Anweisungen wird der QUOTE-Text kursiv gesetzt. Zeilenumbrüche sind manuell zu setzen.

Widmung

So ähnlich wie QUOTE und BLOCKQUOTE ist EPIGRAPH, das kann als Widmung, z.B. direkt nach der Titelseite, genutzt werden (und sollte im Quellcode in entsprechender Reihenfolge einsortiert werden):

.EPIGRAPH
für meine Frau und meine liebe Oma
.EPIGRAPH OFF

EPIGRAPH-Text erscheint mittig zentriert.

Code

Wenn Code gesetzt werden soll, bedient man sich zumeist einer Egyptienne- (Monospace)-Schriftart. Das Pluginpaket "mom" stellt hierfür die CODE-Umgebung bereit:

.CODE
groff -mom -Kutf8 input.mom > output.ps
.CODE OFF

Soll der Code inline genutzt werden, macht man das so:

Ich schreibe ein \*[CODE]groff\*[CODE OFF]-Tutorial.

Szenenwechsel

Eine sehr schöne Gliederungsmöglichkeit sehe ich in der LINEBREAK-Anweisung, die drei mittig ausgerichtete Sternchen erzeugt (das kenne ich nicht einmal von TeX). Auf diese Weise kann man hervorragend Gedanken oder Szenen trennen. Der anschließende Absatz wird wieder ohne Einrückung gesetzt:

.PP
Dies ist der letzte Satz meines alten Gedankens.
.LINEBREAK
.PP
Und jetzt befinde ich mich in einer ganz neuen Szene.

Horizontale Linie

Eine horizontale Linie wird mit .DRH (draw rule horizontal, drh) erzeugt, ggf. mit dem vorausgehenden und nachfolgenden Kommando für vertikalen Abstand (.SP, siehe unten):

.DRH

Manueller Zeilenumbruch

Ein manueller Zeilenumbruch wird wie folgt gesetzt:

.NEWPAGE

Vertikale Abstände

Manchmal möchte man Textblöcke in der Vertikalen etwas ausrichten und trennen (Titelseite). Vertikale Abstände erzeugt man so:

.SP

Ohne Angabe einer Zahl steht .SP (Space) für genau eine Leerzeile. Gibt man eine Zahl mit, wird die entsprechende Anzahl an Leerzeilen eingefügt:

.SP 4

Fußnoten und Endnoten

Fußnoten können selbstverständlich auch gesetzt werden und werden beim Kompilieren des Dokuments sogar automatisch und korrekt nummeriert:

An diesen Text möchte ich eine Fußnote\c
.FOOTNOTE
Das ist der Inhalt meiner Fußnote.
.FOOTNOTE OFF
setzen. Hier geht es weiter im Text.

Mit dem Kommando \c wird also eine Markierung gesetzt und in den nächsten Zeilen sofort als zugehörige Fußnote beschrieben. Anschließend geht es weiter im Text. Man beachte, dass die weiterführende Textzeile mit einem Leerzeichen beginnt, sonst klebt das der Fußnote folgende Wort direkt am Fußnotenzeichen! Und wenn beim Kompilieren eine Warnung ausgegeben wird, kann das mit einem zu geringen Seitenrand (unten) zu tun haben (.B_MARGIN, siehe oben)!

Ohne Eingriff werden die Fußnoten automatisch mit Sternchen und Kreuzchen gesetzt. Das kann ungewohnt sein, und man will lieber Zahlen sehen. Dann einfach am Dokumentanfang die folgende Anweisung mitgeben:

.FOOTNOTE_MARKER_STYLE NUMBER

(Standard ist nicht "NUMBER" sondern "STAR".)

Sollen die Markierungen stattdessen nicht als Fußnoten am Ende jeder Seite sondern als sog. Endnoten (gesammelt am Ende des Dokuments) erscheinen, gibt man an entsprechender Stelle die Anweisung:

.ENDNOTES

Dafür fasst man den referenzierten Text aber auch nicht in "FOOTNOTE" ein, sondern in "ENDNOTE"! Siehe hier:

An diesen Text möchte ich eine Fußnote\c
.ENDNOTE
Das ist der Inhalt meiner Endnote.
.ENDNOTE OFF
setzen. Hier geht es weiter im Text.

Initiale

Sehr einfach umzusetzen ist die Platzierung eines Initials am Beginn des ersten Absatzes. Sinnvollerweise kommt zuvor eine .HEADING-Anweisung:

.HEADING 1 "Introduction"
.PP
.DROPCAP U 3
t wisi enim ad minim veniam ...

Nach dem Kommando .DROPCAP kommt der Buchstabe der als Initial gesetzt werden soll, gefolgt von der Anzahl der Zeilen, die das Initial groß ist. Beim nachfolgenden Text wird der erste Buchstabe (= Initial) selbstverständlich entfernt.

Anstrich-Listen, nummerierte Listen

Oft gebraucht werden Listen-Umgebungen (Anstrichlisten, nummerierte Listen). Zunächst wird eine .LIST-Umgebung geöffnet, in der jeder Eintrag einer Zeile mit .ITEM folgt:

.LIST
.ITEM
Bananen
.ITEM
Äpfel
.ITEM
Pfirsiche
.LIST OFF

Das erzeugt eine Liste mit Punkten. Man kann dem .LIST-Kommando auch Schlüsselwörter mitgeben, um die Anführungssymbole zu beeinflussen oder Ziffern statt Symbole zu erhalten:

.LIST BULLET (Standard = Punkte)
.LIST DASH (Spiegelstriche)
.LIST DIGIT (für arabische Ziffern = nummerierte Liste)
.LIST ALPHA (große Buchstaben)
.LIST alpha (kleine Buchstaben)
.LIST ROMAN<n> (große römische Zahlzeichen; für <n> wird eine Zahl eingesetzt, die der Anzahl der aufgeführten Einheiten entspricht!)
.LIST roman<n> (kleine römische Zahlzeichen)

Es können auch eigene Zeichen vorgegeben werden. Möchte man beispielsweise ein Fragezeichen als Auflistungszeichen sehen, setzt man:

.LIST USER ?

Man kann auch die Kommandos für die Eingabe von Sonderzeichen benutzen. Einige nütztliche Vorgaben (aus dem mom-Handbuch entnommen) sind:

.LIST USER \[sq] (erzeugt Quadrat)
.LIST USER \[rh] (erzeugt nach rechts zeigenden Finger)
.LIST USER \[->] (erzeugt Rechtspfeil)
.LIST USER \[rA] (erzeugt doppelten Rechtspfeil)
.LIST USER \[OK] (erzeugt Okay-Häckchen)

Kommentar

Manchmal möchte man Zeilen unsichtbar schalten, dann werden sie "auskommentiert". In TeX reicht hierfür ein Prozent-Zeichen am Anfang der Zeile. Für einen Kommentar bei troff/groff nutzt man \#

\# auskommentierter Beitrag

Anführungszeichen

Anführungszeichen können zunächst ganz intuitiv gesetzt werden:

Meinen "Text" zitieren.

Daraus werden beim Kompilieren allerdings doppelte ENGLISCHE Anführungszeichen (66 oben vorne, 99 oben hinten). Einfache englische Anführungszeichen werden mit folgenden Zeichen gesetzt:

Meinen `Text' zitieren.

Das eingehende Zeichen ist ein Gravis, das ausgehende Zeichen ist ein einfaches Apostroph.

Möchte man „deutsche“ Gänsefüßchen oder «französische/schweizerische» Guillemets, kommt man nicht um die Eingabe von Sonderzeichen-Befehlen herum (Liste siehe hier):

\[Bq]deutsche\[lq] und
\[Fo]französische/schweizerische\[Fc]
Anführungszeichen

Wird ein Unicode-Textdokument kompiliert, darf man selbstverständlich auch die entsprechenden Zeichen direkt im Quellcode benutzen. »Guillemets« kann man unter Linux z.B. direkt über die Tastatur eingeben (AltGr+X und Y).

Hochstellungen

Inline-Hochstellungen werden mit folgendem Kommando erzeugt:

Produktname\*[SUP]TM\*[SUPX]

Inhaltsverzeichnis

Als letztes: Wie funktioniert das automatisch generierte Inhaltsverzeichnis? Ganz einfach: Man gibt folgende Anweisung (table of content, toc):

.TOC

Auch wenn das Inhaltsverzeichnis üblicherweise am Beginn einer Dokuments steht, wird es hier ALS LETZTER BEFEHL im Dokument gesetzt. Dort erscheint es zunächst auch nach dem Kompilieren. Um es an die richtige Stelle, nämlich an den Anfang, zu verschieben, kann man das Kommando .AUTO_RELOCATE_TOC beim Kompilieren mit pdfmom mitgeben. Über das Programm pdfmom kann man aus dem mom-Quellcode direkt ein PDF-Dokument erzeugen, wer das möchte.

Für alle oben aufgeführten Anweisungen gilt: Sie geben nur die Basis-Funktionalität wieder. Jede dieser Anweisungen kann auf vielfältige Weise angepasst werden, doch dazu möchte ich auf das umfangreiche Handbuch der mom-Makrosammlung verweisen.

Vorlage/Muster-Dokument

Muster-Dokument für groff mit mom-Makros
template_groff-mom.zip
Komprimiertes Archiv im ZIP Format 14.9 KB