roff ist die Urform des Textsatzes unter Unix: ein Auszeichnungs- und Formatiersystem, das aus reinen Textdateien mit eingebetteten Punkt-Kommandos gesetzte Dokumente erzeugt. Aus ihm gingen die Klassiker nroff und troff hervor — und bis heute basieren die Manpages von Linux und BSD auf dieser Sprache.
Geschichte
Die Wurzeln liegen in RUNOFF, das Jerome H. Saltzer 1964 für das MIT-Betriebssystem CTSS schrieb. Auf Unix übertrug Ken Thompson das Konzept; Joe Ossanna entwickelte daraus 1973 das erste echte roff für den PDP-11, zunächst in Assembler. Brian Kernighan übersetzte die Implementierung später nach C. Der Name ist eine Kurzform von run off — ein Dokument „ausdrucken“.
Grundprinzip: Punkt-Kommandos
Jede Zeile, die mit einem Punkt beginnt, ist ein Formatierkommando (Request), alles andere ist Fließtext:
.sp 2 " zwei Leerzeilen
.ce " folgende Zeile zentrieren
.br " Zeilenumbruch erzwingen
.nf / .fi " Zeilenumbruch aus / an
Darüber hinaus gibt es Makros (Kommando-Bündel wie .TH oder .SH), Registerspeicher für Zahlen und Strings für Textbausteine. Genau diese Mechanik wurde später zur Grundlage der Manpage-Auszeichnung.
Die drei klassischen Formatter
- roff: der ursprüngliche Allzweck-Formatter
- nroff: Ausgabe für Terminals und Zeilendrucker
- troff: Ausgabe für Fotosatzbelichter (Typesetter)
Die moderne GNU-Implementierung ist groff, das alle drei Varianten in einem Programm vereint. Tabellen in roff-Dokumenten formatiert der Präprozessor tbl.
Verwandte Grundlagen: troff-Befehle, nroff-Befehle, groff-Befehle.