| groff(1) | General Commands Manual | groff(1) |
groff - Frontend für das GNU-roff(7)-Dokumentenformatierungssystem
groff |
[-abcCeEgGijklNpRsStUVXzZ] [-d cText] [-d Zeichenkette=Text] [-D Rückfallkodierung] [-f Schriftfamilie] [-F Schriftverzeichnis] [-I Einbindungsverzeichnis] [-K Eingabekodierung] [-L Spooler-Argument] [-m Makropaket] [-M Makroverzeichnis] [-n Seitennummer] [-o Seitenliste] [-P Postprozessorargument] [-r numerischer_Ausdruck] [-r Register=numerischer_Ausdruck] [-T Ausgabegerät] [-w Warnungskategorie] [-W Warnungskategorie] [Datei …] |
groff |
-h |
groff |
--help |
groff |
-v [option …] [Datei …] |
groff |
--version [Option …] [Datei .…] |
groff ist das primäre Frontend für das GNU- roff(7) -Dokumentenformatierungssystem. GNU- roff(7) ist ein Textsatzsystem, das reine Textdateien als Eingabe liest und die enthaltenen Formatierungsbefehle verwendet, um Ausgaben in PostScript, PDF, HTML, DVI und anderen Formaten oder die Anzeige im Terminal zu erstellen. Formatierbefehle können grundlegende Schriftsatzprimitive, Makros eines bereitgestellten Pakets oder benutzerdefinierte Makros sein. Alle drei Ansätze können kombiniert werden. Falls kein Operand Datei angegeben ist oder falls Datei »-« ist, liest groff aus dem Standardeingabedatenstrom.
groff ist eine Neuimplementierung und Erweiterung des Schriftsatzprogramms aus AT&T Unix und aufgrund seiner langen Verbindung mit Unix-Handbüchern (einschließlich der Handbuchseiten) auf den meisten POSIX-Systemen vorhanden. Zusammen mit seinen Vorgängern ist es bemerkenswert für die Erstellung mehrerer Bestseller über Software-Engineering. groff ist in der Lage, typographisch fortgeschrittene Dokumente zu erstellen und dabei minimale Systemressourcen zu verwenden.
Der Befehl groff arrangiert die Ausführung von Präprozessoren, die Umwandlung von Eingabedokumenten in eine geräteunabhängige Seitenbeschreibungssprache und die Erstellung der Ausgabe aus dieser Sprache.
-h und --help zeigen eine kurze Aufrufsinformation an und beenden das Programm.
Da groff dazu gedacht ist, die direkten Aufrufe der meisten der troff(1) -Formatierer zusammenzufassen, nutzen die beiden Programme diverse Optionen gemeinsam. Allerdings verfügt groff über Optionen, die troff(1) nicht hat und andere, die groff anders interpretiert. Gleichzeitig können nicht alle gültigen troff(1) -Optionen an groff übergeben werden.
Die folgenden Optionen gibt es entweder bei GNU- troff(1) nicht oder sie werden von groff anders interpretiert.
Folgende Optionen werden unverändert an das Formatierprogramm troff(1) weitergegeben und detaillierter in dessen Handbuchseite beschrieben.
Die Architektur des GNU- roff(7) -Systems folgt der anderer geräteunabhängiger roff(7) -Implementierungen. Sie besteht aus Präprozessoren, Makropaketen, Ausgabetreibern (oder »Postprozessoren«), einer Sammlung von Hilfswerkzeugen und zentral dem Formatierer troff(1) Siehe roff(7) für eine Übersicht darüber, wie ein Roff-System funktioniert.
Die im GNU- roff(7) -System verfügbaren Frontend-Programme erleichtern die Verwendung gegenüber traditionellen roff(7) -Systemen, die die Erstellungen von Befehlsfolgen oder die Verwendung temporärer Dateien benötigen, um die Quellen von der wartbaren Form in die Geräte-bereite Ausgabe zu bringen. Die nachfolgende Erörterung fasst die Bestandteile des GNU- roff(7) -Systems zusammen. Es ergänzt roff(7) mit groff-spezifischen Funktionen.
Wer das Lernen durch Experimente bevorzugt oder den Wunsch hat, schnelle Rückmeldungen vom System zu bekommen, möchte vielleicht mit einem »Hello, world!«-Dokument anfangen.
$ echo "Hello, world!" | groff -Tascii | sed '/^$/d' Hello, world!
Der sed(1) -Befehl wurde nur verwandt, um die 65 leeren Zeilen zu beseitigen, die andernfalls das Terminalfenster geflutet hätten. ( roff(7) -Systeme wurden zu Zeiten von papierbasierten Terminals mit 66 Zeilen pro Seite entwickelt.)
Heutige Benutzer könnten die Ausgabe auf ein UTF-8-fähiges Terminal bevorzugen.
$ echo "Hello, world!" | groff -Tutf8 | sed '/^$/d'
Die Erstellung von PDF, HTML oder TeXs DVI ist auch unkompliziert. Der schwierige Teil könnte die Auswahl eines Betrachtungsprogramms für die Ausgabe sein.
$ echo "Hello, world!" | groff -Tpdf > hello.pdf $ evince hello.pdf $ echo "Hello, world!" | groff -Thtml > hello.html $ firefox hello.html $ echo "Hello, world!" | groff -Tdvi > hello.dvi $ xdvi hello.html
Benutzer mit Programmiererfahrung mögen sich freuen, dass sie groff in einer Lese-Auswert-Ausgabe-Schleife (REPL) verwenden können. Dies kann praktisch sein, um das eigene Verständnis des Verhaltens des Formatierers oder der von ihm verstandenen Syntax zu bestätigen. Einschalten aller Warnungen mit -ww kann hierbei helfen.
$ groff -ww -Tutf8 \# Dies ist ein Kommentar. Definieren wir ein Register. .nr a 1 \# Ganzzahlarithmetik mit Operatoren erfolgt von links nach rechts. .nr b \n[a]+5/2 \# Lassen Sie uns das Ergebnis auf dem Standard-Datenfehlerstrom ausgeben. .tm \n[b] 3 \# Jetzt definieren wir eine Zeichenkette. .ds name Leslie\" So können Kommentare auch erfolgen. .nr b (\n[a] + (7/2)) \# Den Text der nächsten zwei Eingabezeilen zentrieren. .ce 2 Hi, \*[name]. Your secret number is \n[b]. \# Jetzt wird erkennbar, dass die Division Richtung Null gerundet wurde. It is \# Hier ist eine If-Else-Steuerstruktur. .ie (\n[b] % 2) odd. .el even. \# Dieser Trick setzt die Seitenlänge auf die aktuelle vertikale Position, \# so dass keine leeren Zeilen ausgespuckt werden, wenn wir fertig sind. .pl \n[nl]u <Control-D>
Hi, Leslie.
Your secret number is 4. It is even.
In GNU- roff(7) werden die Seitengrößen für den Formatierer troff(1) und für die Ausgabegeräte getrennt behandelt. Im Formatierer werden Anfragen zum Setzen der Seitenlänge (.pl), des Seitenversatzes (oder linken Randes, .po) und der Zeilenlänge (.ll) verwandt. Der rechte Rand wird nicht explizit konfiguriert; die Kombination aus Seitenversatz und Zeilenlänge stellt die zur Ableitung notwendigen Informationen bereit. Das automatisch von troff(1) geladene Makropaket papersize stellt eine Schnittstelle für die Konfiguration der Seitendimensionen über bequeme Namen bereit, wie »letter« oder »A4«, siehe groff_tmac(5) In dieser Installation ist die Vorgabe des Formatierers »A4«.
Es obliegt jedem Makropaket, die auf diese Art konfigurierten Seitendimensionen zu berücksichtigen. Einige bieten alternative Mechanismen.
Für jedes Ausgabegerät kann die Größe des Ausgabemediums in seiner DESC-Datei gesetzt werden. Die meisten Ausgabetreiber erkennen auch eine Befehlszeilenoption -p, um die Standarddimensionen außer Kraft zu setzen und eine Option -l, um Querformat zu verwenden. Siehe groff_font(5) für eine Beschreibung der Direktive papersize, die ein Argument der gleichen Form wie bei -p akzeptiert. Die Handbuchseite des Ausgabetreibers, wie grops(1), könnte auch hilfreich sein. groff verwendet die Befehlszeilenoption -P, um Optionen an die Ausgabegeräte weiterzugeben. Verwenden Sie beispielsweise folgendes für die Postscript-Ausgabe auf A4-Papier im Querformat:
groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
Das groff-Programm ist ein Wrapper um das troff(1) -Programm. Es ermöglicht die Angabe von Präprozessoren mittels Befehlszeilenoption und führt automatisch den für das ausgewählte Ausgabegerät geeigneten Postprozessor aus. Damit kann die manuelle Zusammenstellung von Bearbeitungssequenzen oder die Verwaltung temporärer Dateien vermieden werden, die von Benutzern traditioneller roff(7) -Systeme verlangt wird. Verwenden Sie das Programm grog(1) , um die korrekte groff-Befehlszeile zur Formatierung eines Dokuments abzuleiten.
Eingabe für ein roff(7) -System ist eine reine Textdatei, in der die Steuerzeilen und Maskiersequenzen eingeschoben sind. Die Kombination bildet ein Dokument in einer der Sprachfamilien, die auch roff(7) genannt werden, siehe roff(7) Hintergrundinformationen. Ein Überblick über Sprachsyntax und -funktionalitäten von roff(7) , einschließlich der vollständigen Liste unterstützter Maskiersequenzen, Anfragen und vordefinierter Register kann in groff(7) gefunden werden. GNU roff(7) -Erweiterungen zur AT&T- troff(1) -Sprache, eine gemeinsame Teilmenge der noch bestehenden roff(7) -Dialekte, werden in groff_diff(7) im Detail beschrieben.
Ein Präprozessor interpretiert eine
domänenspezifische Sprache, die Ausgabe in der Sprache roff(7)
erzeugt. Häufig wird solche Eingabe auf Abschnitte oder Bereiche
einer roff(7) -Datei beschränkt (durch Makroaufrufe, die
spezifisch für jeden Präprozessor sind, eingeklammert), die
dadurch ersetzt werden. Präprozessoren interpretieren daher eine
Teilmenge der roff(7) -Syntax zusammen mit ihrer eigenen Sprache. GNU
roff(7) stellt Neuimplementierungen der meisten den Benutzern von
AT&T troff(1) vertrauten Präprozessoren bereit. Diese
haben regelmäßig erweiterte Funktionalitäten und/oder
benötigen GNU- troff(1) , um ihre Ausgabe zu formatieren.
| tbl | ordnet Tabellen an |
| eqn | setzt Mathematik |
| pic | zeichnet Diagramme |
| refer | verarbeitet Literaturverweise |
| soelim | bearbeitet »eingelesene« Eingabedateien vor |
| grn | stellt Diagramme dar |
| chem | . zeichnet chemische Struturformeln mittels pic |
| gperl | füllt groff- Register und Zeichenketten mittels |
| glilypond | bettet LilyPond- Notenblätter ein |
| gpinyin | erleichtert die Eingabe von chinesischem Mandarin mittels Hanyu Pinyin |
Ein nur bei GNU roff(7) verfügbarer Präprozessor ist preconv(1) , der diverse Eingabekodierungen in eine für GNU troff(1) verständliche konvertiert. Wird dieser verwandt, dann wird er vor allen anderen Präprozessoren ausgeführt.
Die meisten Präprozessoren schließen den Inhalt zwischen einem Paar von charakteristischen Merkmalen ein. Jedes solches Merkmal muss am Anfang der Eingabezeile vorkommen und den Punkt als Steuerzeichen verwenden. Leerzeichen und Tabulatoren dürfen dem Steuerzeichen nicht folgen oder vor dem Ende der Eingabezeile sein. Wird von diesen Regeln abgewichen, dann kann der Präprozessor diese Merkmale nicht mehr erkennen. Merkmale werden im Allgemeinen in der Präprozessorausgabe beibehalten und durch troff(1) nachfolgend als Makros interpretiert. Der Präprozessor ideal ist in groff noch nicht verfügbar.
| Präprozessor | Anfangsmerkmal | Endemerkmal |
| chem | .cstart | .cend |
| eqn | .EQ | .EN |
| grap | .G1 | .G2 |
| grn | .GS | .GE |
| ideal | .IS | .IE |
| .IF | ||
| pic | .PS | .PE |
| .PF | ||
| .PY | ||
| refer | .R1 | .R2 |
| tbl | .TS | .TE |
| glilypond | .lilypond start | .lilypond stop |
| gperl | .Perl start | .Perl stop |
| gpinyin | .pinyin start | .pinyin stop |
Makrodateien sind roff(7)-Eingabedateien und so entwickelt, dass sie selbst keine Ausgabe produzieren, sondern die Erstellung anderer roff(7)-Dokumente vereinfachen. Wenn eine Makrodatei an einem Standardort installiert wurde und für die Verwendung durch die Allgemeinheit geeignet ist, dann heißt sie Makropaket.
Makropakete können vor allen roff(7) -Eingabedokumenten mit der Option -m geladen werden. Das GNU- roff(7) -System implementiert die bekanntesten Makropakete für AT&T troff(1) auf eine kompatible Art und erweitert sie. Diese haben ein- oder zweibuchstabige Namen, die von der intensiven Durchführung der Namensökonomie der frühen Unix-Kultur stammen, ein prägnanter Ansatz, der zur Kennzeichnung vieler Pakete in der allgemeinen Anwendung führt, wobei der nroff(1) - und -Optionsbuchstabe zu ihrem Aufruf führte. Manchmal ergab das Wortspiele, wie bei »man« (kurz für »manual« (Handbuch)) und selbst mit dem Optionsstrich, wie im Falle des Pakets s, besser bekannt als ms oder sogar -ms.
Makropakete dienen einer Reihe von Zwecken. Manche sind »vollumfängliche« Pakete, die neben anderen grundsätzlichen Aufgaben die Verantwortung für Seitenlayout übernehmen und ihr eigenes Lexikon an Makros zum Dokumentenaufbau definieren. Jedes dieser Pakete steht alleine und ein bestimmtes Dokument kann davon höchstens eines nutzen.
Andere sind ergänzend. Zum Beispiel ist andoc ein Wrapper-Paket speziell für GNU- roff(7) , das erkennt, ob das Dokument das man- oder das mdoc-Format benutzt, und das entsprechende Makropaket lädt. Es kann auf der Befehlszeile mit -mandoc angegeben werden. Ein man(1) -Bibliotheksprogramm kann diese Makrodatei dazu verwenden, das Laden des korrekten Makropakets zu delegieren. Es ist daher für man selbst nicht notwendig, den Inhalt eines Dokumentes zu durchsuchen, um das Problem zu entscheiden.
Viele Makropakete erweitern die Funktion der vollumfänglichen Pakete oder von roff(7) -Dokumenten, die solch ein Paket nicht einsetzen – letztere werden manchmal als »roh« charakterisiert. Diese Hilfspakete werden zusammen mit Details der Makrodatei-Benennung und -Ablage in groff_tmac(5) beschrieben.
Der Formatierer, das Programm, das die Eingabe der Sprache roff(7) interpretiert, ist troff(1) Er bietet die Funktionalitäten der AT&T troff(1) und nroff(1) sowie viele Erweiterungen. Die Befehlszeilenoption -C schaltet troff(1) in den Kompatibilitätsmodus, der versucht, das klassische roff(7) so gut wie praktisch möglich zu emulieren, um das Formatieren von Dokumenten, die für ältere Systeme geschrieben wurden, zu ermöglichen.
Ein Shellskript, nroff(1) , emuliert das Verhalten des klassischen AT&T nroff. Es versucht, die Ausgabe korrekt basierend auf der Locale zu kodieren, entlastet den Benutzer davon, das Ausgabegerät mit der Option -T anzugeben und ist daher für die Verwendung als Terminalausgabegerät praktisch, wie das im nächsten Unterabschnitt beschrieben wird.
GNU troff(1) erstellt die Ausgabe in einer Geräte-unabhängigen aber dennoch Geräte-wahrnehmenden Seitenbeschreibungssprache, die in groff_out(5) ausführlich beschrieben wird.
Die Ausgabe von troff(1) wird für ein bestimmtes Ausgabegerät formatiert, das typischerweise über die Option -T des Formatierers oder eines Frontends bestimmt wird. Falls weder diese Option noch die Umgebungsvariable GROFF_TYPESETTER verwandt wird, ist das Vorgabegerät ps. Ein Ausgabegerät kann eines der folgenden sein:
Jedes Programm, das die Ausgabe von GNU- troff(1) interpretiert, ist ein Postprozessor. Die durch GNU- roff(7) bereitgestellten Postprozessoren sind Ausgabetreiber, die ein Dokument zum Anschauen oder Drucken vorbereiten. Postprozessoren für andere Zwecke, wie Seitenumsortierung oder statistische Messungen in einem Dokument, sind denkbar.
Jeder Ausgabetreiber unterstützt ein oder mehrere Ausgabegeräte, von denen jedes seine eigene Gerätebeschreibungsdatei hat. Ein Gerät bestimmt seinen Postprozessor mit der Direktive postpro in seiner Gerätebeschreibungsdatei, siehe groff_font(5). Die Option -X setzt diese Auswahl außer Kraft und führt dazu, dass gxditview(1) als Ausgabetreiber agiert.
GNU roff(7) enthält eine Sammlung von Hilfswerkzeugen.
Eine Reihe von Hilfswerkzeugen bereiten Schriftbeschreibungen vor, und ermöglichen es dem Formatierer, sie bei der Erstellung der Ausgabe für ein bestimmtes Gerät zu verwenden.
Ein Werkzeugtrio, das mit der Präprozessorsprache roff(7) erstelltes Material in graphische Bilddateien umwandelt.
Eine weitere Gruppe an Programmen arbeitet mit bibliographischen Datendateien, die vom Präprozessor refer(1) verwandt werden.
groff beendet sich mit einem Fehlerstatus, falls es beim Auswerten seiner Argumente ein Problem gab und mit einem erfolgreichen Status, falls entweder die Option -h oder --help angegeben wurde. Andernfalls führt groff eine Befehlssequenz zur Verarbeitung seiner Eingabe aus; falls sich alle Befehle innerhalb der Befehlssequenz erfolgreich beenden, macht groff dies auch. Falls nicht, kodiert der Exit-Status von groff eine Zusammenfassung der aufgetretenen Probleme; dabei wird Bit 0 gesetzt, falls sich ein Programm mit einem Fehlerstatus beendete, Bit 1, falls ein Programm durch ein Signal beendet wurde und Bit 2, falls ein Befehl nicht ausgeführt werden konnte. (Falls daher alle drei Unglücksfälle die Befehlssequenz betreffen würden, würde sich groff mit dem Status 2^0 + 2^1 + 2^2 = 1+2+4 = 7 beenden.) Um Fehler bei Problemen in der Sequenz zu untersuchen, könnte der erneute Aufruf von groff mit der Option -V hilfreich sein und dabei die berichtete Befehlssequenz in separate Stufen herunterzubrechen und dann den von jedem Befehl ausgegebenen Exit-Status und die Diagnosemeldungen zu untersuchen.
Normalerweise ist in Umgebungsvariablen, die mit PATH enden, das Trennzeichen für Pfadangaben der Doppelpunkt; dies kann abhängig vom Betriebssystem variieren. Zum Beispiel nutzt Windows stattdessen ein Semikolon.
roff(7) -Systeme sind am besten für die Formatierung von Handbuchseiten bekannt. Sobald ein man(1) -Bibliotheksprogramm eine Handbuchseite gefunden hat, kann es den Befehl groff ganz ähnlich wie folgt aufrufen:
groff -t -man -Tutf8 /usr/share/man/man1/groff.1
Um eine roff(7) -Datei mittels der Präprozessoren tbl und pic sowie dem Makropaket me zu verarbeiten wie dies Benutzer des klassischen AT&T- roff(7) gewohnt sind, muss eine Befehlssequenz geschrieben (oder geskriptet) werden.
pic foo.me | tbl | troff -me -Tutf8 | grotty
Bei groff kann diese Pipe auf den entsprechenden Befehl gekürzt werden.
groff -p -t -me -T utf8 foo.me
Ein einfachere Möglichkeit, dies zu erreichen, ist grog(1) zu verwenden, um den Präprozessor und die Makrooptionen zu erraten, und das Ergebnis durch Verwendung der Befehlssubstitutionsfunktionalität der Shell auszuführen.
$(grog -Tutf8 foo.me)
Jede Befehlszeilenoption an einen Postprozessor muss mit der benötigten Anzahl an einleitenden Gedankenstrichen »-« angegeben werden, da groff die Argumente unverändert an den Postprozessor weitergibt; dies ermöglicht die Übergabe einer beliebigen Anzahl an Argumenten. Um zum Beispiel einen Titel an den Postprozessor gxditview weiterzureichen, sind die Shell-Befehle
groff -X -P -title -P 'Probelauf' mydoc.t
groff -X -Z mydoc.t | gxditview -title 'Probelauf' -
Bei der seitenweisen Anzeige für die Geräte ascii, cp1047, latin1 und utf8 könnten Programme wie more(1) und less(1) Befehlszeilenoptionen benötigen, um bestimmte Terminal-Maskiersequenzen korrekt zu handhaben; siehe grotty(1).
In EBCDIC-Umgebungen wie OS/390 Unix sind die Ausgabegeräte ascii und latin1 nicht verfügbar. Umgekehrt ist das Gerät cp1047 auf Systemen, die auf den Zeichenkodierungsnormen ISO/IEC 646 oder ISO/IEC 8859 basieren, nicht verfügbar.
GNU groff installiert Dateien an verschiedene Stellen, abhängig von seiner Konfiguration zum Zeitpunkt der Kompilierung. Auf dieser Installation werden die folgenden Orte verwandt:
Die meisten durch GNU- roff(7) bereitgestellten Makropakete sind in /usr/share/groff/1.23.0/tmac für die Installation entsprechend dieses Dokuments gespeichert. Als grundsätzliche Regel gilt, dass mehrere Verzeichnisse nach Makrodateien durchsucht werden; siehe %troff(1) Sie finden in groff_tmac(5) einen Katalog an von GNU roff(7) bereitgestellten Makrodateien.
Von GNU roff(7) bereitgestellte Geräte- und Schriftbeschreibungsdateien sind in /usr/share/groff/1.23.0/font bei einer Installation entsprechend dieses Dokuments gespeichert. Als grundsätzliche Regel gilt, dass mehrere Verzeichnisse nach Geräte- und Schriftbeschreibungsdateien durchsucht werden; siehe troff(1). Zu den Formaten dieser Dateien siehe groff_font(5).
Sie erhalten Links zu groff-Veröffentlichungen zum Herunterladen, seinem Quell-Depot, Diskussions-Mailinglisten, eine Unterstützungs-Problemdatenbank und weitere Informationen auf der groff-Seite der GNU-Website.
Eine freie Implementierung des Präprozessors grap, geschrieben von Ted Faber kann auf der grap-Website gefunden werden. groff unterstützt nur dieses grap.
groff (sowohl die Frontend-Befehle als auch das Gesamtsystem) wurde primär von James Clark geschrieben. Zu diesem Dokument haben auch Clark, Trent A. Fisher Werner Lemberg , Bernd Warken und G. Branden Robinson beigetragen.
Groff: Die GNU-Implementierung von Troff, von Trent A. Fisher und Werner Lemberg, ist das primäre groff-Handbuch. Sie können es interaktiv mit »info groff« lesen.
Die deutsche Übersetzung dieser Handbuchseite wurde von Florian Rehnisch <fr@fm-r.eu>, Frank Stähr <der-storch-85@gmx.net>, Mario Blättermann <mario.blaettermann@gmail.com>, Dr. Tobias Quathamer <toddy@debian.org> und Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.
| 4. Mai 2025 | Groff 1.23.0 |