Wie man Troff zur Formatierung von PDF-Dokumenten in Linux verwendet

Troff ist ein minimaler, aber leistungsstarker Textverarbeitungsprogramm für Linux-Systeme. Es ermöglicht Ihnen, druckfertige Dokumente einfach zu erstellen, indem Sie Quelltexte über die Befehlszeile kompilieren. Im Gegensatz zu LaTeX ist Troff unglaublich leichtgewichtig und auf den meisten Linux-Systemen vorinstalliert. Dieses Tutorial zeigt Ihnen, wie Sie Troff zur Formatierung von PDF-Dokumenten in Ubuntu verwenden.
Inhaltsverzeichnis
- Was ist Troff und warum sollte man es verwenden
- Troff installieren
- Erstellen Sie Ihr erstes Troff-Dokument
- Verstehen des Troff-Formats
- Erstellen von fett, kursiv und unterstrichenem Text
- Erstellen neuer Dokumentabschnitte
- Erstellen von Listen in Troff
- Erstellen von Tabellen mit Preprozessoren in Troff
- Häufig gestellte Fragen
Was ist Troff und warum sollte man es verwenden
Im Grunde genommen ist Troff ein Textverarbeitungsprogramm, das codeähnliche Skripte in druckbare Dokumente umwandelt. Im Gegensatz zu Textverarbeitungsprogrammen basiert Troff nicht auf dem “WYSIWYG”-Paradigma. Stattdessen müssen Sie spezifische Arten von Code verwenden, um Ihre Formatierung zu steuern.

Einer der größten Vorteile dieses Ansatzes ist die Einfachheit. Eine grundlegende Installation von Troff hat alles, was Sie benötigen, um ein Dokument zu erstellen. Darüber hinaus bedeutet das Fehlen einer grafischen Benutzeroberfläche, dass Sie ein Dokument sogar über SSH erstellen können.

Tipp: Lernen Sie, wie Sie GUI-Anwendungen über SSH in Linux weiterleiten.
Troff installieren
Troff ist oft standardmäßig in den meisten Linux-Distributionen enthalten. Sie können überprüfen, ob Sie es auf Ihrem System haben, indem Sie das -h-Flag ausführen. Dies zeigt eine kurze Liste aller Flags an, die Ihre Troff-Installation akzeptiert.
troff -h
Es gibt Fälle, in denen Distributionen Troff standardmäßig nicht bündeln. In diesem Fall können Sie es installieren, indem Sie nach dem “groff”-Paket suchen.

Dies ist eine Neuimplementierung der Troff- und Nroff-Programme durch das GNU-Projekt, die eine Reihe neuer und moderner Funktionen umfasst.
Sie können groff in Ubuntu mit dem folgenden Befehl installieren:
sudo apt install groff
Erstellen Sie Ihr erstes Troff-Dokument
Ähnlich wie Quellcode ist jedes Troff-Dokument eine Textdatei, die Anweisungen enthält, wie ein Dokument erstellt werden soll. Dazu gehören die Seiten- und Randbreite sowie der Buchstaben- und Seitenabstand.

Dieses Maß an Kontrolle ermöglicht es Ihnen, das Programm zu manipulieren, um jede Art von Dokument zu erstellen. Um das zu vereinfachen, haben die Entwickler von Troff “Makros” erstellt, die diese Befehle in eine einfachere Syntax zusammenfassen.

Eines der häufigsten Makros, das Sie in Troff verwenden werden, ist “ms.” Es erstellt ein Dokument im Artikelstil. Sie können ein ms-Dokument mit dem touch-Befehl erstellen:
touch my-first-document.msDa alle Troff-Dokumente Text sind, können Sie Ihr Dokument mit einem Texteditor öffnen. In meinem Fall verwende ich vim. Alternativ können Sie einen dieser Texteditoren für Linux verwenden.
vim my-first-document.ms
Verstehen des Troff-Formats
Alle Troff-Dokumente folgen einer ähnlichen Struktur. Jeder Formatierungsbefehl, den Sie ausführen, muss in einer separaten Zeile im Inhalt stehen, den er zu formatieren versucht. Daher sieht ein typisches Troff-Dokument etwa so aus:
.COMMAND1
Dies ist ein Stück Inhalt in einem Troff-Dokument.
.COMMAND2
Dies ist ein anderes Stück Inhalt in einem Troff-Dokument.Zwei der grundlegendsten Befehle, die Sie in ms verwenden werden, sind .TL und .PP. Ersterer wandelt Ihren Text in einen Titel um und zentriert ihn in Ihrem Dokument, während letzterer Ihren Text so formatiert, dass er einem absatzähnlichen Stil folgt.
Zum Beispiel verwendet der folgende Auszug sowohl die .TL- als auch die .PP-Befehle:
.TL
Mein erstes Troff-Dokument
.PP
Dies ist Inhalt, der wie ein Absatz in meinem endgültigen Dokument aussehen soll. Es ist kein sehr langer Inhalt, aber es ist mein erstes Troff-Dokument und ich bin stolz darauf. Es ist etwa drei Sätze lang und sollte sich richtig um das Dokument wickeln.
Von hier aus erstellen Sie Ihr Dokument, indem Sie Ihre Datei an das Troff-Programm übergeben.
groff -ms-Tpdf ./my-first-document.ms > output.pdf
Tipp: Wenn Sie etwas Einfacheres bevorzugen, lernen Sie, wie man im MLA-Format in Google Docs schreibt.
Erstellen von fett, kursiv und unterstrichenem Text
Genau wie bei einer regulären Textverarbeitung bieten die meisten Troff-Makros eine Reihe von Stilbefehlen zur Anpassung Ihres Dokuments. Für ms sind dies .B, .I, .UL und .BX.
- Der
.B-Befehl ändert den Text in Fettdruck. - Der
.I-Befehl ändert den Text in Kursivschrift. .ULund.BXsind Befehle, die eine Unterstreichung und einen Rahmen um Ihren Text zeichnen.
Ähnlich wie bei den obigen Befehlen erfordert die Verwendung dieser in Ihrem Dokument, dass Sie jeden Stil in einer eigenen Zeile trennen:
.TL
Mein erstes Troff-Dokument
.PP
Dies ist
.B
Inhalt
.R
, den ich wie einen Absatz in meinem endgültigen Dokument aussehen lassen möchte. [...]In diesem Beispiel habe ich eine neue Zeile vor dem Wort “Inhalt” erstellt und den .B-Befehl hinzugefügt, um es in Fettdruck zu ändern, dann habe ich eine neue Zeile erstellt und den .R-Befehl hinzugefügt. Dies ermöglicht Troff, zum vorherigen Stil zurückzukehren.

Es ist wichtig zu beachten, dass Sie immer den .R-Befehl hinzufügen müssen, wenn Sie den Stil ändern. Zum Beispiel wird der folgende Auszug den .I-Befehl nicht beenden, da Troff kein .R danach gesehen hat:
.TL
Mein erstes Troff-Dokument
.PP
Dies ist
.I
Inhalt
, der ich wie einen Absatz in meinem endgültigen Dokument aussehen lassen möchte. [...]
Erstellen neuer Dokumentabschnitte
Ähnlich wie LaTeX unterstützt Troff auch Abschnitte und Hierarchiedetektion, sodass Sie beim Bearbeiten nicht jede Kopfzeilenebene anordnen und anpassen müssen.
Um einen neuen Abschnitt in Ihrem Dokument zu erstellen, verwenden Sie den .NH-Befehl, gefolgt vom Namen Ihrer Überschrift.
.TL
Mein erstes Troff-Dokument
.NH
Meine erste Überschrift
.PP
Dies ist Inhalt, den ich wie einen Absatz in meinem endgültigen Dokument aussehen lassen möchte.
Standardmäßig hat jede Troff-Überschrift einen Wert für die Ebene, der diktiert, wie das Programm seinen Inhalt im endgültigen Dokument strukturiert und anzeigt. Wenn Sie das wissen, können Sie diesen Wert ändern, um die Ebene für eine Überschrift anzupassen.
Zum Beispiel erstellt das folgende einen Überschrift der Ebene 2 direkt unter ihrem Elternteil:
.TL
Mein erstes Troff-Dokument
.NH
Meine erste Überschrift
.NH 2
Meine erste Unterüberschrift
.PP
Dies ist Inhalt, den ich wie einen Absatz in meinem endgültigen Dokument aussehen lassen möchte.
Neben regulären nummerierten Überschriften kann Troff auch leere Überschriften erstellen, die dennoch der Hierarchie des Dokuments folgen.
Um dies zu tun, ersetzen Sie .NH durch den .SH-Befehl:
.TL
Mein erstes Troff-Dokument
.SH
Meine erste Überschrift
.SH 2
Meine erste Unterüberschrift
.PP
Dies ist Inhalt, den ich wie einen Absatz in meinem endgültigen Dokument aussehen lassen möchte.
Tipp: Finden Sie heraus, wie Sie die Ränder in Google Docs ändern können.
Erstellen von Listen in Troff
Die Einfachheit von Troff ermöglicht es Ihnen auch, sein Verhalten nach Ihren Bedürfnissen zu gestalten. Zum Beispiel kommen Listen standardmäßig weder in Troff noch in ms-Makros vor. Trotzdem können Sie eine Liste erstellen, indem Sie einige ms-Befehle kombinieren.
Jede Liste in Troff besteht aus drei Teilen: einem Einzug, einem Aufzählungszeichen und dem Inhalt. Um den Einzug zu erstellen, verwenden Sie die Befehle .RS und .RE. Diese verschieben das aktuelle Einzugsniveau von jedem Text darin um vier Leerzeichen.
.RS
Dies ist mein erster Punkt.
.RE
Erstellen Sie als Nächstes das Aufzählungszeichen für Ihr Listenitem mit .IP. Dies ist der “Einzug-Absatz”-Befehl, der den linken Rand Ihres Textes auf eine bestimmte Breite festlegt.
Der .IP-Befehl ermöglicht es Ihnen auch, einen benutzerdefinierten Aufzählungspunkt und den Abstand zwischen ihm und Ihrem Text festzulegen. In diesem Fall setze ich meinen Aufzählungspunkt auf “[1]” und gebe ihm vier Leerzeichen.
.RS
.IP [1]4
Dies ist mein erster Punkt.
.RE
Kopieren und fügen Sie nun Ihren .IP-Befehl ein, um zusätzliche Listenpunkte zu erstellen.
.RS
.IP [1]4
Dies ist mein erster Punkt.
.IP [2]4
Dies ist mein zweiter Punkt.
.IP [3]4
Dies ist mein dritter Punkt.
.RE
Automatisieren Sie diesen Prozess schließlich, indem Sie ein benutzerdefiniertes Makro erstellen. Zum Beispiel bindet der folgende Auszug meinen .IP-Befehl an .QW:
.de QW
.IP [-]4
..
.RS
.QW
Dies ist mein erster Punkt.
.QW
Dies ist mein zweiter Punkt.
.QW
Dies ist mein dritter Punkt.
.RE
Erstellen von Tabellen mit Preprozessoren in Troff
Eine Eigenheit von Troff ist, dass die meisten seiner Funktionen als “Preprozessoren” existieren. Diese sind größtenteils Binärdateien außerhalb des Programms, die durch das Erstellen von “Preprozessor-Container-Skripten” arbeiten und diese in niedrigstufigen Troff-Code umwandeln.

Tbl ist ein großartiges Beispiel für einen Troff-Preprozessor. Es ist ein Programm, das Tabellen in einem Dokument verwaltet. Ein grundlegender Tbl-Container sieht etwa so aus:
.TS
allbox ;
c c c.
item1 item2 item3
item4 item5 item6
.TE - Die
.TS- und.TE-Befehle sagen Tbl, dass dies eine Umgebung ist, die es lesen kann. - Die zweite Zeile sagt dem Programm, wie es diese Tabelle formatieren soll.
- Die dritte Zeile ist ein durch Leerzeichen getrennter Feld, der die Anzahl der Spalten und deren Ausrichtung in Ihrer Tabelle diktiert.
- Die vierte und fünfte Zeile sind durch Tabulatoren getrennte Felder, die den Inhalt Ihrer Tabelle enthalten.

Das Kompilieren eines Dokuments mit Tbl ist etwas anders als bei einer regulären Troff-Datei. Zuerst laden Sie Ihre Datei:
tbl my-first-document.ms > preprocessed.msAls Nächstes geben Sie die Ausgabe des Programms an Troff weiter:
groff -ms-Tpdf ./preprocessed.ms > output.pdfSchließlich automatisieren Sie diesen Prozess, indem Sie UNIX-Pipes verwenden:
tbl my-first-document.ms | groff -ms-Tpdf> output.pdf
Gut zu wissen: Lernen Sie mehr über UNIX-Pipes und Dateiumleitungen mit sed.
Häufig gestellte Fragen
Ist es möglich, Troff unter Windows zu verwenden?
Standardmäßig sind weder Troff noch Groff offiziell für Windows portiert. Trotzdem können Sie Groff zusammen mit anderen GNU-Dienstprogrammen verwenden, indem Sie das Windows-Subsystem für Linux installieren.
Hat Troff eine Funktion zur Verfolgung von Bibliografien?
Ja. Refer ist ein einfacher Preprozessor, der eine externe Bibliografiedatei verwendet, um automatisch Referenzen in einem Troff-Dokument zu verfolgen. Sie können mehr darüber erfahren, wie es funktioniert, indem Sie seine Handbuchseite besuchen, indem Sie man refer ausführen.
Wie kann ich den Fehler “fehlendes DESC” beim Kompilieren von Troff beheben?
Dieses Problem ist höchstwahrscheinlich auf eine fehlende Abhängigkeit in Ihrem System oder eine nicht übereinstimmende Versionsdatei zurückzuführen. Um dies zu beheben, installieren Sie das entsprechende groff-Paket aus dem Repository Ihrer Distribution.
Bildnachweis: Simon Hattinga Verscheure über Unsplash. Alle Änderungen und Screenshots von Ramces Red.