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.