troff is a minimal but highly effective doc textual content processor for Linux programs. You may simply create printable documentation by compiling supply recordsdata from the command line. Not like LaTeX, Troff is extremely light-weight and comes pre-installed on most Linux programs. This tutorial will present you methods to format a PDF doc on Ubuntu utilizing Troff.
What’s troff and why we use it
Principally, Troff is a textual content processing program that converts code-like scripts into printable paperwork. Not like phrase processors, Troff doesn’t depend on the “WYSIWYG” paradigm. As a substitute, you must use a particular sort of code to deal with formatting.

One of many largest benefits of this strategy is its simplicity. A fundamental set up of Troff consists of the whole lot you’ll want to create paperwork. Moreover, the shortage of a graphical person interface implies that paperwork may also be authored over SSH.

Ideas: Learn to switch GUI functions over SSH on Linux.
Putting in Troff
Troff is commonly bundled by default with most Linux distributions.You may verify in case your system has it by operating -h
Nationwide flag. This offers you a fast checklist of all flags accepted by your Troff set up.

Your distribution could not have Troff bundled by default. In that case, you possibly can set up it by on the lookout for the “groff” bundle.

It is a reimplementation of the Troff and Nroff packages by the GNU Undertaking and consists of many new and leading edge options.
You may set up groff on Ubuntu with the next command:

Creating your first troff doc
Like supply code, all Troff documentation is a textual content file containing directions on methods to create the documentation. These embrace web page and margin widths, letter and web page spacing.

This stage of management permits you to manipulate this system to create any sort of doc. To simplify this, the Troff builders created “macros” that condense these instructions into an easier syntax.

One of the vital frequent macros utilized in Troff is ‘ms’. Create paperwork in article type. You may create ms paperwork utilizing contact
Directions:
contact my-first-document.ms
All Troff paperwork are textual content, so you should use any textual content editor to open the paperwork. In my case, I am utilizing vim. Alternatively, you should use these textual content editors for Linux.

Concerning the Troff format
All Troff paperwork comply with an analogous construction. Any formatting instructions you write needs to be on separate traces of the content material you are attempting to format. So a typical Troff doc appears to be like like this:
.COMMAND1 It is a piece of content material in a Troff doc. .COMMAND2 It is a completely different piece of content material in a Troff doc.
The 2 most elementary instructions to make use of with ms are: .TL
and .PP
The previous converts the textual content right into a title and facilities it within the doc, whereas the latter codecs the textual content right into a paragraph-like type.
For instance, within the following excerpt: .TL
and .PP
command:
.TL
My First Troff Doc
.PP
That is content material that I need to appear like a paragraph in my closing doc. It isn't a really lengthy content material however it's my first Troff doc and it's one thing that I'm happy with. It's about three sentences lengthy and it ought to wrap across the doc correctly.

From right here, go the file to the Troff program to create a doc.
groff -ms -Tpdf ./my-first-document.ms > output.pdf

Ideas: Should you desire one thing less complicated, learn to write in MLA format in Google Docs.
Create daring, italic, and underlined textual content
Similar to an everyday phrase processor, most Troff macros provide a lot of type instructions for customizing your doc. For ms these are .B
, .I
, .UL
and .BX
.
- of
.B
The command adjustments the textual content to daring. - of
.I
The command adjustments the textual content to italic. .UL
and.BX
These instructions draw an underline and a field round textual content, respectively.
As with the instructions above, every type should be separated by a line to make use of them in your doc.
.TL My First Troff Doc .PP That is .B content material .R that I need to appear like a paragraph in my closing doc. (...)
On this instance, create a brand new line earlier than the phrase “content material”, .B
I modified it to daring utilizing the command and created a brand new line and added .R
directions. This permits Troff to revert to his earlier type.

It is vital to notice that you must at all times add .R
Command when altering type. For instance, the next excerpt doesn’t finish: .I
The command is .R
after that:
.TL My First Troff Doc .PP That is .I content material that I need to appear like a paragraph in my closing doc. (...)

Create a brand new doc part
Like LaTeX, Troff additionally helps part and hierarchy detection, so you do not have to regulate the extent of every header to match when enhancing.
To create a brand new part within the doc, .NH
Identify the heading after the command.
.TL
My First Troff Doc
.NH
My First Heading
.PP
That is content material that I need to appear like a paragraph in my closing doc.

By default, all Troff headers have a stage worth that determines how this system ought to construction and show its content material within the closing doc. Figuring out that, you possibly can change this worth to regulate the heading stage.
For instance, the next creates a stage 2 heading slightly below the father or mother.
.TL My First Troff Doc .NH My First Heading .NH 2 My First Subheading .PP That is content material that I need to appear like a paragraph in my closing doc.

Other than common numbered headers, Troff also can create clean headers alongside the extent hierarchy of the doc.
To do that, .NH
with .SH
Directions:
.TL My First Troff Doc .SH My First Heading .SH 2 My First Subheading .PP That is content material that I need to appear like a paragraph in my closing doc.

Ideas: Learn to change margins in Google Docs.
Creating lists in Troff
Additionally, Troff’s simplicity permits you to change its conduct as wanted. For instance, by default there is no such thing as a checklist in both the Troff or ms macros. Nonetheless, you possibly can mix a number of millisecond instructions to create an inventory.
All Troff lists include three components: indentation, bullets, and content material. To create an indentation, .RS
and .RE
command. These transfer the present indentation stage of the textual content inside them by 4 areas.
.RS That is my first merchandise. .RE

Then create an inventory merchandise bullet utilizing: .IP
It is a “paragraph indent” command that fixes the left margin of textual content to a sure width.
of .IP
The command additionally permits you to set customized bullets and the spacing between bullets and textual content. On this case, set the bullet to “(1)” and allocate 4 areas.
.RS .IP (1) 4 That is my first merchandise. .RE

copy and paste now .IP
Create further checklist objects utilizing instructions.
.RS .IP (1) 4 That is my first merchandise. .IP (2) 4 That is my second merchandise. .IP (3) 4 That is my third merchandise. .RE

Lastly, create a customized macro to automate this course of.For instance, the next excerpt from my .IP
Command .QW
:
.de QW .IP (-) 4 .. .RS .QW That is my first merchandise. .QW That is my second merchandise. .QW That is my third merchandise. .RE

Create a desk with the preprocessor in Troff
One of many options of Troff is that almost all of its performance exists as a “preprocessor”. Normally, these are binaries exterior to this system that create and act on “preprocessor container scripts”, remodeling them into low-level his Troff code.

Tbl is an effective instance of a Troff preprocessor. A program that manages tables in paperwork. A fundamental Tbl container appears to be like like this:
.TS allbox ; c c c. item1 <Tab> item2 <Tab> item3 item4 <Tab> item5 <Tab> item6 .TE
- of
.TS
and.TE
The command tells Tbl that it is a readable setting. - The second line tells this system methods to format this desk.
- The third row is a space-separated area that specifies the quantity and placement of columns within the desk.
- Rows 4 and 5 are tab-separated fields containing the contents of the desk.

Compiling a doc utilizing Tbl is barely completely different than an everyday Troff file. First, load the file.
tbl my-first-document.ms > preprocessed.ms
Then feed this system’s output to Troff.
groff -ms -Tpdf ./preprocessed.ms > output.pdf
Lastly, use UNIX pipes to automate this course of.
tbl my-first-document.ms | groff -ms -Tpdf > output.pdf

Helpful info: Extra info on file redirection with unix pipes and sed might be discovered right here.
FAQ
Is it doable to make use of Troff on Home windows?
Neither Troff nor Groff are formally ported to Home windows by default. Nonetheless, you should use Groff with different GNU utilities by putting in the Home windows Subsystem for Linux.
Does Troff have a reference monitoring characteristic?
sure. Refer
is an easy preprocessor that routinely tracks references in Troff paperwork utilizing an exterior bibliography file.You may be taught extra about the way it works by visiting the person web page by operating man refer
.
How can I repair the “lacking DESC” error when compiling Troff?
This problem is almost definitely attributable to lacking dependencies or mismatched model recordsdata in your system. To repair this, set up the suitable groff bundle out of your distribution’s repositories.
Picture credit score: Simon Hattinga Verscheure through Unsplash. All adjustments and screenshots by Ramces Pink.