gtroff Output (The GNU Troff Manual)

### 6.1 `gtroff` Output

This section describes the `groff` intermediate output format produced by GNU `troff`.

As `groff` is a wrapper program around GNU `troff` and automatically calls an output driver (or “postprocessor”), this output does not show up normally. This is why it is called intermediate. `groff` provides the option `-Z` to inhibit postprocessing such that the produced intermediate output is sent to standard output just as it is when calling GNU `troff` directly.

Here, the term troff output describes what is output by GNU `troff`, while intermediate output refers to the language that is accepted by the parser that prepares this output for the output drivers. This parser handles whitespace more flexibly than AT&T’s implementation and implements obsolete elements for compatibility; otherwise, both formats are the same.124

The main purpose of the intermediate output concept is to facilitate the development of postprocessors by providing a common programming interface for all devices. It has a language of its own that is completely different from the `gtroff` language. While the `gtroff` language is a high-level programming language for text processing, the intermediate output language is a kind of low-level assembler language by specifying all positions on the page for writing and drawing.

The intermediate output produced by `gtroff` is fairly readable, while output from AT&T `troff` is rather hard to understand because of strange habits that are still supported, but not used any longer by `gtroff`.