1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
.ss 12 0
.nr PI 0
.nr PD 0.5v
.if n .nr PD 1v
.de i
\\fI\\$*\\fR\c
..
.de bi
\\f(BI\\$*\\fB\c
..
.de cw
\\f(CW\\$*\\fR\c
..
.de cwb
\\f(CB\\$*\\fR\c
..
.TL
.bi Xroff
, an alternative troff syntax
.AU
John Ankarström
.DA 10 June 2022
.SH 1
Introduction
.LP
.i Xroff
is an alternative syntax for troff, visually inspired by SGML/XML. It differs from troff's default syntax in the following ways:
.IP 1. 3
Xroff requests begin with a less-than sign and end with a greater-than sign, e.g., \c
.cw \<SH 1>
\&. These symbols may be escaped with a backslash.*
.IP 2.
Xroff requests may be used inline. The following works as expected: \c
.cw "(\<ft B>bold\<ft R>)"
\&.**
.IP 3.
Xroff ignores empty lines.
.IP 4.
Default troff syntax may be used between \c
.cw \<![
and \c
.cw ]>
\&.
.LP
The similarities with XML end at the visual level. Unlike XML, xroff is unstructured and imperative. There is no concept of closing tags.
.FS *
For comparison, default troff requests begin with a newline and a control character, usually a period or an apostrophe, and end with another newline.\c
.FE
.FS **
Before an inline request, \c
.cw xroff
automatically inserts a \c
.cw \\\\c
escape when appropriate.\c
.FE
.SH 1
Example
.IP "" 3
.nf
.eo
<de b>\\fB\\$*\\fR<.>
<TL>Example document
<AU>John Doe
<AB>Pellentesque dapibus suscipit ligula. Donec posuere augue in quam.
Etiam vel tortor sodales tellus ultricies commodo. Suspendisse
potenti. Aenean in sem ac leo mollis blandit. Donec neque quam,
dignissim in, mollis nec, sagittis eu, wisi.<AE>
<SH 1>Introduction
<LP><b Nullam eu ante> vel est convallis dignissim. Fusce suscipit,
wisi nec facilisis facilisis, est dui fermentum leo, quis tempor
ligula erat quis odio. Nunc porta vulputate tellus.
.ec
.SH 1
.cwb Xroff
.PP
The program \c
.cw xroff
translates xroff source to troff source.
.SH 1
.cwb Xroff-mode
.PP
For Emacs users, there is a major mode named \c
.cw xroff-mode
that provides syntax highlighting for xroff source. To further improve the writing experience, I also recommend \c
.cw olivetti-mode
\&.
.SH 1
Caveats
.LP
Xroff does not treat indented lines specially. As such, indentation cannot be used to convey structure.
|