So verwenden Sie Troff zum Formatieren von PDF-Dokumenten unter Linux

So verwenden Sie Troff zum Formatieren von PDF-Dokumenten unter Linux

Troff ist ein minimaler, aber leistungsstarker Dokumententextprozessor für Linux-Systeme. Es ermöglicht Ihnen, auf einfache Weise druckfertige Dokumente zu erstellen, indem Sie Quelldateien über die Befehlszeile kompilieren. Im Gegensatz zu LaTeX ist Troff unglaublich leicht und auf den meisten Linux-Systemen vorinstalliert. Dieses Tutorial zeigt Ihnen, wie Sie mit Troff PDF-Dokumente in Ubuntu formatieren.

Was ist Troff und warum sollte man es verwenden?

Im Grunde genommen ist Troff ein Textverarbeitungsprogramm, das codeähnliche Skripte in druckbare Dokumente umwandelt. Anders als Textverarbeitungsprogramme setzt Troff nicht auf das „WYSIWYG“-Paradigma. Stattdessen müssen Sie bestimmte Arten von Code verwenden, um Ihre Formatierung zu handhaben.

Der Standardbildschirm von Libreoffice Writer.

Einer der größten Vorteile dieses Ansatzes ist die Einfachheit. Eine Basisinstallation von Troff enthält alles, was Sie zum Erstellen eines Dokuments benötigen. Außerdem bedeutet das Fehlen einer grafischen Benutzeroberfläche, dass Sie ein Dokument sogar über SSH erstellen können.

Eine entfernte OpenBSD-Sitzung, auf der Troff läuft.

Troff installieren

Troff ist in den meisten Linux-Distributionen oft standardmäßig gebündelt. Sie können überprüfen, ob Sie es in Ihrem System haben, indem Sie sein -hFlag ausführen. Dadurch wird eine kurze Liste aller Flags angezeigt, die Ihre Troff-Installation akzeptiert.

troff -h

Ein Terminalbildschirm, auf dem das Flag -h in Troff ausgeführt wird.

Es gibt Fälle, in denen Distributionen Troff nicht standardmäßig bündeln. In diesem Fall können Sie es installieren, indem Sie nach dem Paket „groff“ suchen.

Ein Terminalfenster, in dem der Befehl apt info für groff ausgeführt wird.

Dies ist eine Neuimplementierung der Programme Troff und Nroff durch das GNU-Projekt, die eine Reihe neuer und moderner Funktionen enthält.

Sie können groff in Ubuntu mit dem folgenden Befehl installieren:

sudo apt install groff

Ein Terminalfenster, das den Befehl apt install für groff zeigt.

Erstellen Sie Ihr erstes Troff-Dokument

Ähnlich wie Quellcode ist jedes Troff-Dokument eine Textdatei, die Anweisungen enthält, wie ein Dokument erstellt wird. Dazu gehören die Seiten- und Randbreite sowie der Buchstaben- und Seitenabstand.

Ein Terminalfenster mit einem komplexen Troff-Makro.

Diese Ebene der Kontrolle ermöglicht es Ihnen, das Programm zu manipulieren, um jede Art von Dokument zu erstellen. Um dies zu vereinfachen, haben die Entwickler von Troff „Makros“ erstellt, die diese Befehle zu einer einfacheren Syntax verdichten.

Eines der häufigsten Makros, die Sie in Troff verwenden werden, ist „ms“. Es wird ein Dokument in einem Artikelstil erstellt. Sie können ein MS-Dokument erstellen, indem Sie den touchBefehl verwenden:

touch my-first-document.ms

Da 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

Ein Terminalfenster mit einem neuen MS-Dokument.

Das Troff-Format verstehen

Alle Troff-Dokumente folgen einer ähnlichen Struktur. Jeder von Ihnen vorgenommene Formatierungsbefehl muss sich in einer separaten Zeile in dem Inhalt befinden, den er zu formatieren versucht. Ein typisches Troff-Dokument sieht also etwa so aus:

.COMMAND1
This is a piece of content in a Troff document.

.COMMAND2
This is a different piece of content in a Troff document.

Zwei der grundlegendsten Befehle, die Sie in ms verwenden werden, sind .TLund .PP. Ersteres konvertiert Ihren Text in einen Titel und zentriert ihn in Ihrem Dokument, während letzteres Ihren Text so formatiert, dass er einem absatzähnlichen Stil folgt.

Der folgende Auszug verwendet beispielsweise sowohl die Befehle .TLals auch :.PP

.TL
My First Troff Document

.PP
This is content that I want to look like a paragraph in my final document. It is not a very long content but it is my first Troff document and it is something that I am proud of. It is about three sentences long and it should wrap around the document properly.

Ein Terminalfenster, das ein einfaches Troff-Dokument zeigt.

Erstellen Sie von hier aus Ihr Dokument, indem Sie Ihre Datei an das Troff-Programm übergeben.

groff -ms -Tpdf. /my-first-document.ms > output.pdf

Eine PDF-Ausgabe eines einfachen Troff-Dokuments.

Erstellen von fettem, kursivem und unterstrichenem Text

Genau wie ein normales Textverarbeitungsprogramm bieten die meisten Troff-Makros eine Reihe von Stilbefehlen, um Ihr Dokument anzupassen. Für ms sind dies .B, .I, .ULund .BX.

  • Der .BBefehl ändert den Text in Fettdruck.
  • Der .IBefehl ändert den Text in Kursivschrift.
  • .ULund .BXsind Befehle, die Ihren Text unterstreichen bzw. umrahmen.

Ähnlich wie bei den obigen Befehlen müssen Sie bei der Verwendung dieser Befehle in Ihrem Dokument jeden Stil in einer eigenen Zeile trennen:

.TL
My First Troff Document

.PP
This is
.B
content
.R
that I want to look like a paragraph in my final document. [...]

In diesem Beispiel habe ich eine neue Zeile vor dem Wort „Inhalt“ erstellt und den .BBefehl hinzugefügt, um es in Fettdruck zu ändern, dann eine neue Zeile erstellt und den .RBefehl hinzugefügt. Damit kehrt Troff zu seinem früheren Stil zurück.

Eine PDF-Ausgabe eines Troff-Dokuments, das ein einzelnes Wort in Fettdruck anzeigt.

Es ist wichtig zu beachten, dass Sie den Befehl immer hinzufügen müssen, .Rwenn Sie den Stil ändern. Beispielsweise beendet der folgende Auszug den .IBefehl nicht, da Troff kein .Rdahinter sah:

.TL
My First Troff Document

.PP
This is
.I
content
that I want to look like a paragraph in my final document. [...]

Eine PDF-Ausgabe eines Troff-Dokuments, das den größten Teil des Körpers in Kursivschrift zeigt.

Erstellen neuer Dokumentabschnitte

Ähnlich wie LaTeX unterstützt Troff auch die Erkennung von Abschnitten und Hierarchien, sodass Sie beim Bearbeiten nicht die Ebene der einzelnen Überschriften anordnen und anpassen müssen.

Um einen neuen Abschnitt in Ihrem Dokument zu erstellen, verwenden Sie den .NHBefehl gefolgt vom Namen Ihrer Überschrift.

.TL
My First Troff Document

.NH
My First Heading
.PP
This is content that I want to look like a paragraph in my final document.

Eine PDF-Ausgabe eines Troff-Dokuments mit einer einzelnen nummerierten Überschrift.

Standardmäßig hat jeder Troff-Header einen Ebenenwert, der bestimmt, wie das Programm seinen Inhalt strukturiert und im endgültigen Dokument anzeigt. Wenn Sie das wissen, können Sie diesen Wert ändern, um die Ebene für eine Überschrift anzupassen.

Im Folgenden wird beispielsweise eine Überschrift der Ebene 2 direkt unter ihrem übergeordneten Element erstellt:

.TL
My First Troff Document

.NH
My First Heading
.NH 2
My First Subheading
.PP
This is content that I want to look like a paragraph in my final document.

Eine PDF-Ausgabe eines Troff-Dokuments, die eine Seite mit einer nummerierten verschachtelten Überschrift zeigt.

Abgesehen von normal nummerierten Kopfzeilen kann Troff auch leere Kopfzeilen erstellen, die weiterhin der Ebenenhierarchie des Dokuments folgen.

Ersetzen Sie dazu .NHdurch den .SHBefehl:

.TL
My First Troff Document

.SH
My First Heading
.SH 2
My First Subheading
.PP
This is content that I want to look like a paragraph in my final document.

Eine PDF-Ausgabe eines Troff-Dokuments, das eine nicht nummerierte verschachtelte Überschrift zeigt.

Erstellen von Listen in Troff

Die Einfachheit von Troff ermöglicht es Ihnen auch, sein Verhalten so zu biegen, wie Sie es brauchen. Beispielsweise sind Listen weder in Troff- noch in MS-Makros standardmäßig vorhanden. 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ählungspunkt und dem Inhalt. Verwenden Sie zum Erstellen des Einzugs die Befehle .RSund . .REDiese verschieben die aktuelle Einzugsebene von Text darin um vier Leerzeichen.

.RS
This is my first item.
.RE

Eine PDF-Ausgabe eines Troff-Dokuments, das ein einfaches Listenelement zeigt.

Erstellen Sie als Nächstes das Aufzählungszeichen für Ihr Listenelement, indem Sie verwenden .IP. Dies ist der Befehl „Absatz einrücken“, der den linken Rand Ihres Textes auf eine bestimmte Breite festlegt.

Mit dem .IPBefehl können Sie auch einen benutzerdefinierten Aufzählungspunkt und den Abstand zwischen ihm und Ihrem Text festlegen. In diesem Fall setze ich mein Aufzählungszeichen auf „[1]“ und gebe ihm vier Leerzeichen.

.RS
.IP [1] 4
This is my first item.
.RE

Eine PDF-Ausgabe eines Troff-Dokuments, das ein einzelnes Listenelement mit einem Aufzählungspunkt zeigt.

Kopieren Sie nun Ihren .IPBefehl und fügen Sie ihn ein, um zusätzliche Listenelemente zu erstellen.

.RS
.IP [1] 4
This is my first item.
.IP [2] 4
This is my second item.
.IP [3] 4
This is my third item.
.RE

Eine PDF-Ausgabe eines Troff-Dokuments, das drei grundlegende Listenelemente mit Aufzählungszeichen zeigt.

Automatisieren Sie schließlich diesen Prozess, indem Sie ein benutzerdefiniertes Makro erstellen. Zum Beispiel bindet der folgende Auszug meinen .IPBefehl an .QW:

.de QW
.IP [-] 4
..

.RS
.QW
This is my first item.
.QW
This is my second item.
.QW
This is my third item.
.RE

Ein Terminalfenster, das die Quelldatei eines Dokuments anzeigt, das Makros verwendet hat, um die Listenerstellung zu automatisieren.

Erstellen von Tabellen mit Präprozessoren in Troff

Eine Besonderheit von Troff ist, dass die meisten seiner Funktionen als „Präprozessoren“ existieren. Zum größten Teil handelt es sich dabei um Binärdateien außerhalb des Programms, die funktionieren, indem sie „Präprozessor-Containerskripte“ erstellen und diese in Low-Level-Troff-Code konvertieren.

Ein Terminalfenster, das den konvertierten Troff-Code von einem Präprozessor anzeigt.

Tbl ist ein großartiges Beispiel für einen Troff-Präprozessor. Es ist ein Programm, das Tabellen in einem Dokument verwaltet. Ein einfacher Tbl-Container sieht etwa so aus:

.TS
allbox ;
c c c.
item1 <Tab> item2 <Tab> item3
item4 <Tab> item5 <Tab> item6

.TE

  • Die Befehle .TSund .TEteilen Tbl mit, dass dies eine Umgebung ist, die es lesen kann.
  • Die zweite Zeile teilt dem Programm mit, wie diese Tabelle zu formatieren ist.
  • Die dritte Zeile ist ein durch Leerzeichen getrenntes Feld, das die Anzahl der Spalten und ihre Ausrichtung in Ihrer Tabelle vorgibt.
  • Die vierte und fünfte Zeile sind tabulatorgetrennte Felder, die den Inhalt Ihrer Tabelle enthalten.
Ein Terminalfenster, das das Präprozessorskript für Tbl anzeigt.

Das Kompilieren eines Dokuments mit Tbl unterscheidet sich geringfügig von einer normalen Troff-Datei. Laden Sie zuerst Ihre Datei:

tbl my-first-document.ms > preprocessed.ms

Geben Sie als Nächstes die Ausgabe des Programms an Troff weiter:

groff -ms -Tpdf. /preprocessed.ms > output.pdf

Automatisieren Sie schließlich diesen Prozess, indem Sie UNIX-Pipes verwenden:

tbl my-first-document.ms | groff -ms -Tpdf > output.pdf

Eine PDF-Ausgabe eines Troff-Dokuments, das eine einfache Tabelle zeigt.

Häufig gestellte Fragen

Ist es möglich, Troff unter Windows zu verwenden?

Standardmäßig sind weder Troff noch Groff offiziell auf Windows portiert. Trotzdem können Sie Groff weiterhin zusammen mit anderen GNU-Dienstprogrammen verwenden, indem Sie das Windows-Subsystem für Linux installieren.

Hat Troff eine Bibliografie-Tracking-Funktion?

Ja. Referist ein einfacher Präprozessor, der eine externe Bibliografiedatei verwendet, um Verweise in einem Troff-Dokument automatisch zu verfolgen. Sie können mehr darüber erfahren, wie es funktioniert, indem Sie die Handbuchseite besuchen, indem Sie ausführen man refer.

Wie kann ich den Fehler „missing 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 richtige groff-Paket aus dem Repository Ihrer Distribution.

Bildnachweis : Simon Hattinga Verscheure über Unsplash . Alle Änderungen und Screenshots von Ramces Red.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert