怎样在 Linux 中使用 Troff 格式化 PDF 文档

Troff 是用于 Linux 系统的最小但功能强大的文档文本处理器。 它允许您通过从命令行编译源文件来轻松创建可打印文档。 与 LaTeX 不同,Troff 非常轻巧,并且预装在大多数 Linux 系统上。 本教程向您展示怎样在 Ubuntu 中使用 Troff 格式化 PDF 文档。

内容

什么是 Troff 以及为什么要使用它

从基本意义上说, 特罗夫 是一个文本处理程序,可以将类似代码的脚本转换为可打印的文档。 与文字处理器不同,Troff 不依赖于“所见即所得”范式。 相反,它要求您使用特定类型的代码来处理格式设置。

这种方法的最大优点之一是简单。 Troff 的基本安装将包含创建文档所需的一切。 此外,它没有图形用户界面,这意味着您甚至可以通过 SSH 创建文档。

运行 Troff 的远程 OpenBSD 会话。

提示: 了解怎样在 Linux 中通过 SSH 转发 GUI 应用程序。

安装 Troff

大多数 Linux 发行版中通常默认捆绑了 Troff。 您可以通过运行它来检查您的系统中是否有它 -h 旗帜。 这将显示您的 Troff 安装接受的所有标志的简短列表。

troff -h
在 Troff 中运行 -h 标志的终端屏幕。

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

为 groff 运行 apt info 命令的终端窗口。

这是 GNU 项目对 Troff 和 Nroff 程序的重新实现,其中包括许多新的和现代的功能。

您可以使用以下命令在 Ubuntu 中安装 groff:

sudo apt install groff
显示 groff 的 apt install 命令的终端窗口。

创建您的第一个 Troff 文档

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

显示复杂 Troff 宏的终端窗口屏幕。

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

怎样在 Linux 中使用 Troff 格式化 PDF 文档 1

您将在 Troff 中使用的最常见的宏之一是“ms”。 它将以文章样式创建文档。 您可以使用以下命令创建 ms 文档 touch 命令:

touch my-first-document.ms

由于所有 Troff 文档都是文本,因此您可以使用文本编辑器打开文档。 就我而言,我使用的是 vim。 或者,您可以使用这些适用于 Linux 的文本编辑器中的任何一个。

vim my-first-document.ms
显示新 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 文档的终端窗口。

从这里,通过将您的文件传递给 Troff 程序来创建您的文档。

groff -ms -Tpdf ./my-first-document.ms > output.pdf
基本 Troff 文档的 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 可以恢复到以前的风格。

Troff 文档的 PDF 输出,以粗体显示单个单词。

重要的是要注意,您始终需要添加 .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. [...]
Troff 文档的 PDF 输出,以斜体显示大部分正文。

创建新文档部分

与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 文档的 PDF 输出。

默认情况下,每个 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 文档的 PDF 输出,显示带有编号嵌套标题的页面。

除了常规编号的标题外,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.
显示未编号的嵌套标题的 Troff 文档的 PDF 输出。

提示:了解怎样在 Google 文档中更改页边距。

在 Troff 中创建列表

Troff 的简单性还允许您根据需要改变其行为。 为了 example, Troff 或 ms 宏默认不提供列表。 尽管如此,您仍然可以通过组合几个 ms 命令来创建列表。

Troff 中的每个列表都由三部分组成:缩进、项目符号和内容。 要创建缩进,请使用 .RS.RE 命令。 这些会将其中任何文本的当前缩进级别移动四个空格。

.RS
This is my first item.
.RE
显示简单列表项的 Troff 文档的 PDF 输出。

接下来,使用 .IP. 这是“缩进段落”命令,可将文本的左边距固定为特定宽度。

.IP 命令还允许您设置自定义项目符号点以及它与文本之间的空格。 在这种情况下,我将我的项目符号设置为“[1]” 并会给它四个空格。

.RS
.IP [1] 4
This is my first item.
.RE
Troff 文档的 PDF 输出,显示带有项目符号的单个列表项。

现在复制并粘贴你的 .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
Troff 文档的 PDF 输出,其中显示了三个带有项目符号的基本列表项。

最后,通过创建自定义宏来自动执行此过程。 为了 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 代码来工作。

显示从预处理器转换的 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 预处理器脚本的终端窗口。

使用 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
显示基本表的 Troff 文档的 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 的所有更改和屏幕截图。

订阅我们的新闻!

我们最新的教程直接发送到您的收件箱

注册所有时事通讯。 注册即表示您同意我们的隐私政策,欧洲用户同意数据传输政策。 我们不会共享您的数据,您可以随时取消订阅。 订阅