Troff 是用于 Linux 系统的最小但功能强大的文档文本处理器。 它允许您通过从命令行编译源文件来轻松创建可打印文档。 与 LaTeX 不同,Troff 非常轻巧,并且预装在大多数 Linux 系统上。 本教程向您展示怎样在 Ubuntu 中使用 Troff 格式化 PDF 文档。
内容
- 什么是 Troff 以及为什么要使用它
- 安装 Troff
- 创建您的第一个 Troff 文档
- 了解 Troff 格式
- 创建粗体、斜体和下划线文本
- 创建新文档部分
- 在 Troff 中创建列表
- 在 Troff 中使用预处理器创建表
- 经常问的问题
什么是 Troff 以及为什么要使用它
从基本意义上说, 特罗夫 是一个文本处理程序,可以将类似代码的脚本转换为可打印的文档。 与文字处理器不同,Troff 不依赖于“所见即所得”范式。 相反,它要求您使用特定类型的代码来处理格式设置。
这种方法的最大优点之一是简单。 Troff 的基本安装将包含创建文档所需的一切。 此外,它没有图形用户界面,这意味着您甚至可以通过 SSH 创建文档。

提示: 了解怎样在 Linux 中通过 SSH 转发 GUI 应用程序。
安装 Troff
大多数 Linux 发行版中通常默认捆绑了 Troff。 您可以通过运行它来检查您的系统中是否有它 -h
旗帜。 这将显示您的 Troff 安装接受的所有标志的简短列表。
troff -h

在某些情况下,发行版默认不捆绑 Troff。 在这种情况下,您可以通过查找“groff”包来安装它。

这是 GNU 项目对 Troff 和 Nroff 程序的重新实现,其中包括许多新的和现代的功能。
您可以使用以下命令在 Ubuntu 中安装 groff:
sudo apt install groff

创建您的第一个 Troff 文档
与源代码类似,每个 Troff 文档都是一个文本文件,其中包含有关怎样创建文档的说明。 这些包括页面和边距宽度以及字母和页面间距。

这种控制级别允许您操纵程序来创建任何类型的文档。 为了简化它,Troff 的开发人员创建了“宏”,将这些命令压缩为更简单的语法。

您将在 Troff 中使用的最常见的宏之一是“ms”。 它将以文章样式创建文档。 您可以使用以下命令创建 ms 文档 touch
命令:
touch my-first-document.ms
由于所有 Troff 文档都是文本,因此您可以使用文本编辑器打开文档。 就我而言,我使用的是 vim。 或者,您可以使用这些适用于 Linux 的文本编辑器中的任何一个。
vim my-first-document.ms

了解 Troff 格式
所有 Troff 文档都遵循类似的结构。 您所做的每个格式化命令都需要在它试图格式化的内容中单独一行。 因此,典型的 Troff 文档看起来像这样:
.COMMAND1 This is a piece of content in a Troff document. .COMMAND2 This is a different piece of content in a Troff document.
您将在 ms 中使用的两个最基本的命令是 .TL
和 .PP
. 前者将您的文本转换为标题并将其置于文档中心,而后者将您的文本格式化为类似段落的样式。
为了 example以下摘录同时使用了 .TL
和 .PP
命令:
.TL
My First Troff Document
.PP
This is content that I want to look like a paragraph in my final document. It is not a very long content but it is my first Troff document and it is something that I am proud of. It is about three sentences long and it should wrap around the document properly.

从这里,通过将您的文件传递给 Troff 程序来创建您的文档。
groff -ms -Tpdf ./my-first-document.ms > output.pdf

提示:如果您喜欢更简单的内容,请学习怎样在 Google 文档中以 MLA 格式编写。
创建粗体、斜体和下划线文本
就像普通的文字处理器一样,大多数 Troff 宏都提供了许多样式命令来自定义您的文档。 对于 ms,这些是 .B
, .I
, .UL
和 .BX
.
- 这
.B
命令将文本更改为粗体。 - 这
.I
命令将文本更改为斜体。 .UL
和.BX
是分别在文本周围绘制下划线和方框的命令。
与上面的命令类似,在您的文档中使用这些命令需要您将每种样式分开一行:
.TL My First Troff Document .PP This is .B content .R that I want to look like a paragraph in my final document. [...]
在这个 example,我在“content”这个词之前创建了一个新行并添加了 .B
命令将其更改为粗体,然后创建一个新行并添加 .R
命令。 这使 Troff 可以恢复到以前的风格。

重要的是要注意,您始终需要添加 .R
更改样式时的命令。 为了 example以下摘录不会终止 .I
命令,因为 Troff 没有看到 .R
在它之后:
.TL My First Troff Document .PP This is .I content that I want to look like a paragraph in my final document. [...]

创建新文档部分
与LaTeX 类似,Troff 也支持section 和hierarchy 检测,因此您在编辑时无需排列和匹配每个header 的层级。
要在您的文档中创建一个新部分,请使用 .NH
命令后跟标题的名称。
.TL
My First Troff Document
.NH
My First Heading
.PP
This is content that I want to look like a paragraph in my final document.

默认情况下,每个 Troff 标头都有一个级别值,指示程序怎样在最终文档中构建和显示其内容。 知道这一点后,您可以更改此值以调整标题的级别。
为了 example以下内容在其父项的正下方创建了一个 2 级标题:
.TL My First Troff Document .NH My First Heading .NH 2 My First Subheading .PP This is content that I want to look like a paragraph in my final document.

除了常规编号的标题外,Troff 还可以创建仍将遵循文档级别层次结构的空白标题。
为此,请更换 .NH
与 .SH
命令:
.TL My First Troff Document .SH My First Heading .SH 2 My First Subheading .PP This is content that I want to look like a paragraph in my final document.

提示:了解怎样在 Google 文档中更改页边距。
在 Troff 中创建列表
Troff 的简单性还允许您根据需要改变其行为。 为了 example, Troff 或 ms 宏默认不提供列表。 尽管如此,您仍然可以通过组合几个 ms 命令来创建列表。
Troff 中的每个列表都由三部分组成:缩进、项目符号和内容。 要创建缩进,请使用 .RS
和 .RE
命令。 这些会将其中任何文本的当前缩进级别移动四个空格。
.RS This is my first item. .RE

接下来,使用 .IP
. 这是“缩进段落”命令,可将文本的左边距固定为特定宽度。
这 .IP
命令还允许您设置自定义项目符号点以及它与文本之间的空格。 在这种情况下,我将我的项目符号设置为“[1]” 并会给它四个空格。
.RS .IP [1] 4 This is my first item. .RE

现在复制并粘贴你的 .IP
命令创建额外的列表项。
.RS .IP [1] 4 This is my first item. .IP [2] 4 This is my second item. .IP [3] 4 This is my third item. .RE

最后,通过创建自定义宏来自动执行此过程。 为了 example以下摘录限制了我的 .IP
命令 .QW
:
.de QW .IP [-] 4 .. .RS .QW This is my first item. .QW This is my second item. .QW This is my third item. .RE

在 Troff 中使用预处理器创建表
Troff 的一个怪癖是它的大部分功能都作为“预处理器”存在。 大多数情况下,这些是程序之外的二进制文件,它们通过创建“预处理器容器脚本”并将其转换为低级 Troff 代码来工作。

Tbl 很棒 example Troff 预处理器。 它是一个管理文档中表格的程序。 一个基本的 Tbl 容器看起来像这样:
.TS allbox ; c c c. item1 <Tab> item2 <Tab> item3 item4 <Tab> item5 <Tab> item6 .TE
- 这
.TS
和.TE
commands 告诉 Tbl 这是一个它可以读取的环境。 - 第二行告诉程序怎样格式化这个表。
- 第三行是一个空格分隔的字段,它指示列的数量及其在表格中的对齐方式。
- 第四行和第五行是包含表格内容的制表符分隔字段。

使用 Tbl 编译文档与常规 Troff 文件略有不同。 首先,加载你的文件:
tbl my-first-document.ms > preprocessed.ms
接下来,将程序的输出提供给 Troff:
groff -ms -Tpdf ./preprocessed.ms > output.pdf
最后,使用 UNIX 管道自动执行此过程:
tbl my-first-document.ms | groff -ms -Tpdf > output.pdf

很高兴知道: 了解有关 UNIX 管道和使用 sed 进行文件重定向的更多信息。
经常问的问题
是否可以在 Windows 中使用 Troff?
默认情况下,Troff 和 Groff 都没有正式移植到 Windows。 尽管如此,您仍然可以通过安装适用于 Linux 的 Windows 子系统将 Groff 与其他 GNU 实用程序一起使用。
Troff 有书目跟踪功能吗?
是的。 Refer
是一个简单的预处理器,它使用外部参考书目文件自动跟踪 Troff 文档中的引用。 您可以通过运行访问其手册页来了解有关其工作原理的更多信息 man refer
.
编译 Troff 时怎样修复“missing DESC”错误?
此问题很可能是由于系统中缺少依赖项或版本文件不匹配造成的。 要解决此问题,请从您的发行版存储库中安装正确的 groff 包。
图片来源: Simon Hattinga Verscheure 来自 Unsplash. Ramces Red 的所有更改和屏幕截图。
订阅我们的新闻!
我们最新的教程直接发送到您的收件箱
注册所有时事通讯。 注册即表示您同意我们的隐私政策,欧洲用户同意数据传输政策。 我们不会共享您的数据,您可以随时取消订阅。 订阅