Jim Hall 发布的文章

操作系统的历史是开发人员共同造物的开源软件模型的很好例子。

6 月 29 日是 FreeDOS 25 周年的日子。不管对于哪个开源软件项目来说,这都是一个重要的里程碑,我为过去这 ¼ 个世纪来我们在这方面所做的工作感到自豪。我也为我们如何构建 FreeDOS 感到自豪,因为它是开源软件模型如何工作的一个很好的例子。

在它的那个时代,MS-DOS 是一个功能强大的操作系统。自从我的父母用新的 IBM 机器取代了老化的 Apple II 计算机以来,我已经使用 DOS 多年了。MS-DOS 提供了一个灵活的命令行,我非常喜欢它,它可以方便地操作我的文件。多年来,我学会了如何在 C 中编写自己的实用程序,以进一步扩展其命令行功能。

大约在 1994 年,微软宣布其下一代的 Windows 将取消 MS-DOS。但我喜欢 DOS,即使我已经开始迁移到 Linux,我仍然会启动到 MS-DOS 来运行一些 Linux 尚未拥有的应用程序。

我想,如果我们想留下 DOS,我们需要自己编写一个。FreeDOS 就是这样诞生的。

1994 年 6 月 29 日,我向 Usenet 上的 comp.os.msdos.apps 新闻组发表了关于我的想法的一个小小公告:

PD-DOS 项目公告:

几个月前,我发布了有关启动公共域(PD)版本 DOS 的文章。当时对此的普遍支持很强烈,很多人都赞同:“开始编写吧!”所以,我…

宣布开发 PD-DOS 的首次尝试。我写了一个“清单”来描述这样的一个项目的目标和工作大纲,以及一个“任务列表”,它准确地显示了需要编码开发的内容。我会在这里发布,然后讨论。

虽然我宣布该项目为 PD-DOS(“公共领域”的意思,缩写是为了模仿 IBM 的“PC-DOS”),但我们很快将名称改为 Free-DOS,再后来又改为 FreeDOS。

我马上开始开发它。首先,我分享了我编写的用于扩展 DOS 命令行功能的实用程序。它们中的许多程序都重现了 MS-DOS 功能,包括 CLSDATEDELFINDHELPMORE。有些是我从 Unix 借来的新功能,比如 TEETRCH(Unix 的 tr 的简单实现)。我贡献了十几个 FreeDOS 工具。

通过分享我的实用程序,我给了其他开发人员一个起点。通过在 GNU 通用公共许可证(GNU GPL)下共享我的源代码,我隐含地允许其他人添加新功能并修复错误。

看到 FreeDOS 开始成型的其他开发人员联系了我并希望提供帮助。Tim Norman 是第一个人,Tim 自愿编写命令行 shell(COMMAND.COM,后来命名为 FreeCOM)。其他人贡献了复制或扩展了 DOS 命令行的实用程序。

我们尽快发布了第一个 alpha 版本。在宣布了 FreeDOS 后不到三个月,我们就有了一个集合了我们所编写的功能的 Alpha 1 发行版。当我们发布 Alpha 5 时,FreeDOS 已经拥有了 60 多个实用程序。FreeDOS 包含了 MS-DOS 中从未想过的功能,包括通过 PPP 拨号驱动程序实现的互联网连接,以及使用主 VGA 监视器和辅助单色监视器的双显示器支持。

新的开发人员加入了该项目,我们很欢迎他们。到 1998 年 10 月,感谢 Pat Villani,FreeDOS 有了一个可以工作的内核。FreeDOS 还提供了许多新功能,不仅带来了与 MS-DOS 的同等性,而且超越了 MS-DOS,包括 ANSI 支持和类似 Unix lpr 的打印后台处理程序。

你可能熟悉其他的里程碑版本。我们继续向 1.0 版本迈进,终于在 2006 年 9 月发布了 FreeDOS 1.0,在 2012 年 1 月发布了 FreeDOS 1.1,在 2016 年 12 月发布了 FreeDOS 1.2。而 MS-DOS 很久以前就停止了开发,因此我们在 1.0 发布之后不需要经常更新了。

如今,FreeDOS 已经是一个非常现代的 DOS。我们已经超越了“经典 DOS”,现在 FreeDOS 拥有许多开发工具,如编译器、汇编器和调试器。除了普通的 DOS Edit 编辑器之外,我们还有许多编辑器,包括 Fed、Pico、TDE 以及 Emacs 和 Vi 的一个版本。FreeDOS 支持网络,甚至还提供简单的图形 Web 浏览器(Dillo)。我们有大量的新工具,包括许多可以让 Linux 用户感到熟悉的实用工具。

正因为开发人员的共同创造,FreeDOS 才走到如今。本着开源软件的精神,我们通过修复错误和添加新功能为彼此的工作做出了贡献。我们将用户视为共同开发者;我们总能找到方法来吸引贡献者,无论是编写代码还是编写文档。我们基于优点达成共识。如果这听起来很熟悉,那是因为这些是开源软件的核心价值:透明度、协作、尽早发布、经常发布、精英管理和社区。这就是开源方式

我鼓励你下载 FreeDOS 1.2 并尝试一下。

更多资源


via: https://opensource.com/article/19/6/freedos-anniversary

作者:Jim Hall 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这些多能、免费的工具可以满足你撰写、编辑和生成你自己的书籍的全部需求。

我在 1993 年首次使用并贡献了免费和开源软件,从那时起我一直是一名开源软件的开发人员和布道者。尽管我被记住的一个项目是 FreeDOS 项目,这是一个 DOS 操作系统的开源实现,但我已经编写或者贡献了数十个开源软件项目。

我最近写了一本关于 FreeDOS 的书。《使用 FreeDOS》是我庆祝 FreeDOS 出现 24 周年而撰写的。它是关于安装和使用 FreeDOS、关于我最喜欢的 DOS 程序,以及 DOS 命令行和 DOS 批处理编程的快速参考指南的集合。在一位出色的专业编辑的帮助下,我在过去的几个月里一直在编写这本书。

《使用 FreeDOS》 可在知识共享署名(cc-by)国际公共许可证下获得。你可以从 FreeDOS 电子书网站免费下载 EPUB 和 PDF 版本。(我也计划为那些喜欢纸质的人提供印刷版本。)

这本书几乎完全是用开源软件制作的。我想分享一下对用来创建、编辑和生成《使用 FreeDOS》的工具的看法。

Google 文档

Google 文档是我使用的唯一不是开源软件的工具。我将我的第一份草稿上传到 Google 文档,这样我就能与编辑器进行协作。我确信有开源协作工具,但 Google 文档能够让两个人同时编辑同一个文档、发表评论、编辑建议和更改跟踪 —— 更不用说它使用段落样式和能够下载完成的文档 —— 这使其成为编辑过程中有价值的一部分。

LibreOffice

我开始使用的是 LibreOffice 6.0,但我最终使用 LibreOffice 6.1 完成了这本书。我喜欢 LibreOffice 对样式的丰富支持。段落样式可以轻松地为标题、页眉、正文、示例代码和其他文本应用样式。字符样式允许我修改段落中文本的外观,例如内联示例代码或用不同的样式代表文件名。图形样式让我可以将某些样式应用于截图和其他图像。页面样式允许我轻松修改页面的布局和外观。

GIMP

我的书包括很多 DOS 程序截图、网站截图和 FreeDOS 的 logo。我用 GIMP 修改这本书的图像。通常,只是裁剪或调整图像大小,但在我准备本书的印刷版时,我使用 GIMP 创建了一些更适于打印布局的图像。

Inkscape

大多数 FreeDOS 的 logo 和小鱼吉祥物都是 SVG 格式,我使用 Inkscape 来调整它们。在准备电子书的 PDF 版本时,我想在页面顶部放置一个简单的蓝色横幅,角落里有 FreeDOS 的 logo。实验后,我发现在 Inkscape 中创建一个我想要的横幅 SVG 图案更容易,然后我将其粘贴到页眉中。

ImageMagick

虽然使用 GIMP 来完成这项工作也很好,但有时在一组图像上运行 ImageMagick 命令会更快,例如转换为 PNG 格式或调整图像大小。

Sigil

LibreOffice 可以直接导出到 EPUB 格式,但它不是个好的转换器。我没有尝试使用 LibreOffice 6.1 创建 EPUB,但在 LibreOffice 6.0 中没有包含我的图像。它还以奇怪的方式添加了样式。我使用 Sigil 来调整 EPUB 并使一切看起来正常。Sigil 甚至还有预览功能,因此你可以看到 EPUB 的样子。

QEMU

因为本书是关于安装和运行 FreeDOS 的,所以我需要实际运行 FreeDOS。你可以在任何 PC 模拟器中启动 FreeDOS,包括 VirtualBox、QEMU、GNOME Boxes、PCem 和 Bochs。但我喜欢 QEMU 的简单性。QEMU 控制台允许你以 PPM 格式转储屏幕,这非常适合抓取截图来包含在书中。

当然,我不得不提到在 Linux 上运行 GNOME。我使用 Linux 的 Fedora 发行版。


via: https://opensource.com/article/18/9/writing-book-open-source-tools

作者:Jim Hall 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

学习如何穿行于 C:\ 提示符下,就像上世纪 90 年代的 DOS 高手一样。

FreeDOS 是一个古老的操作系统,但是对于多数人而言它又是陌生的。在 1994 年,我和几个开发者一起 开发了 FreeDOS —— 这是一个完整、自由、兼容 DOS 的操作系统,你可以用它来玩经典的 DOS 游戏、运行过时的商业软件或者开发嵌入式系统。任何在 MS-DOS 下工作的程序在 FreeDOS 下也可以运行。

在 1994 年,任何一个曾经使用过微软的商业版 MS-DOS 的人都会迅速地熟悉 FreeDOS。这是设计而为之的;FreeDOS 尽可能地去模仿 MS-DOS。结果,1990 年代的 DOS 用户能够直接转换到 FreeDOS。但是,时代变了。今天,开源的开发者们对于 Linux 命令行更熟悉,或者他们可能倾向于像 GNOME 一样的图形桌面环境,这导致 FreeDOS 命令行界面最初看起来像个异类。

新的用户通常会问,“我已经安装了 FreeDOS,但是如何使用呢?”。如果你之前并没有使用过 DOS,那么闪烁的 C:\> DOS 提示符看起来会有点不太友好,而且可能有点吓人。这份 FreeDOS 的简单介绍将带你起步。它只提供了基础:如何浏览以及如何查看文件。如果你想了解比这里提及的更多的知识,访问 FreeDOS 维基

DOS 提示符

首先,让我们看一下空的提示符以及它的含义。

DOS 是在个人电脑从软盘运行时期创建的一个“ 磁盘操作系统 disk operating system ”。甚至当电脑支持硬盘了,在 1980 年代和 1990 年代,频繁地在不同的驱动器之间切换也是很普遍的。举例来说,你可能想将最重要的文件都备份一份拷贝到软盘中。

DOS 使用一个字母来指代每个驱动器。早期的电脑仅拥有两个软盘驱动器,他们被分配了 A:B: 盘符。硬盘上的第一个分区盘符是 C: ,然后其它的盘符依次这样分配下去。提示符中的 C: 表示你正在使用第一个硬盘的第一个分区。

从 1983 年的 PC-DOS 2.0 开始,DOS 也支持目录和子目录,非常类似 Linux 文件系统中的目录和子目录。但是跟 Linux 不一样的是,DOS 目录名由 \ 分隔而不是 /。将这个与驱动器字母合起来看,提示符中的 C:\ 表示你正在 C: 盘的顶端或者“根”目录。

> 符号是提示你输入 DOS 命令的地方,就像众多 Linux shell 的 $> 前面的部分告诉你当前的工作目录,然后你在 > 提示符这输入命令。

在 DOS 中找到你的使用方式

在 DOS 中浏览目录的基本方式和你在 Linux 命令行下的步骤非常相似。你仅需要记住少数的命令。

显示一个目录

当你想要查看当前目录的内容时,使用 DIR 命令。因为 DOS 命令是大小写不敏感的,你也可以输入 dir。默认地,DOS 会显示每个文件和子目录的细节,包括了名字、扩展类型、大小以及最后一次更改的日期和时间。

如果你不想显示单个文件大小的额外细节,你可以在 DIR 命令中使用 /w 选项来显示一个“宽”的目录列表。注意,Linux 用户使用连字号(-)或者双连字号(--)来开始命令行选项,而 DOS 使用斜线字符(/)。

你可以将特定子目录的路径名作为参数传递给 DIR 命令来查看它。此外,另一个与 Linux 系统的区别是 Linux 文件和目录是大小写敏感的,而 DOS 下的名称是大小写不敏感的。DOS 通常将文件和目录使用全部大写的方式显示,不过你可以等同地用小写格式来使用它们。

切换当前工作目录

一旦你能够查看一个目录的内容,你就能够“移动到”任何其它的目录。在 DOS 上,使用 CHDIR 命令来切换工作目录,也可以简写为 CD。你可以使用类似 CD CHOICE 的命令进入到一个子目录或者使用 CD \FDOS\DOC\CHOICE 进入到一个新的路径。

就像在 Linux 命令行,DOS 使用 . 来表示当前目录,而 .. 表示父目录(当前目录的上一级)。你可以将这些组合起来使用。比如,CD .. 进入到父目录,然后 CD ..\.. 由当前目录做两个“向上”目录级别的操作。

FreeDOS 也从 Linux 那借鉴了一些特性:你可以使用 CD - 跳转回之前的工作目录。在你进入一个新的路径做完一件事之后,想要回退到之前工作状态的情况下,这会很方便。

切换当前工作盘符

在 Linux 下,“磁盘”的概念是隐藏的。在 Linux 和其它 Unix 系统中,你“挂载”磁盘到一个目录,例如 /backup,或者系统自动帮你完成,比如 /var/run/media/user/flashdrive。但是 DOS 是一个相对简单的系统。使用 DOS,你必须自行更改工作磁盘。

记住 DOS 分配第一块硬盘的第一个分区为 C: 盘,然后这样依次分配其它盘符。在现代系统中,人们很少将硬盘分割成多个 DOS 分区;他们简单地使用整个磁盘或者尽可能多地分配给 DOS。如今 C: 通常是第一块硬盘,而 D: 通常是另一块硬盘或者 CD-ROM 驱动器。其它的网络磁盘驱动器也可以被映射到别的盘符,比如 E: 或者 Z: 或者任何你想要的组织方式。

在 DOS 下切换磁盘很容易。只要在命令行输入盘符后附加一个冒号(:),然后 DOS 就会切换到该工作磁盘。举例来说,在我的 QEMU 系统上,我将 D: 设置到我的 Linux 主目录下的一个共享目录,那里存放了各种我想测试的 DOS 应用程序和游戏的安装文件。

小心不要尝试切换到一个不存在的磁盘。DOS 可能会将它设置为工作磁盘,但是如果你尝试在那做任何事,你将会遇到略微臭名昭著的“ 退出、重试、失败 Abort, Retry, Fail ” DOS 错误信息。

其它可以尝试的事情

使用 CDDIR 命令,你就拥有了基础的浏览 DOS 能力。这些命令允许你查找 DOS 目录并查看其他子目录和文件的存在。一旦你熟悉基础浏览操作,你还可以尝试其它的这些基础 DOS 命令:

  • MKDIRMD 创建新的目录
  • RMDIRRD 删除目录
  • TREE 以树状格式显示目录和子目录列表
  • TYPEMORE 显示文件内容
  • RENAMEREN 重命名文件
  • DELERASE 删除文件
  • EDIT 编辑文件
  • CLS 清除屏幕

如果这些还不够,你可以在 FreeDOS 维基上面找到所有 DOS 命令的清单。

在 FreeDOS 下,针对每个命令你都能够使用 /? 参数来获取简要的说明。举例来说,EDIT /? 会告诉你编辑器的用法和选项。或者你可以输入 HELP 来使用交互式帮助系统。

像任何一个 DOS 一样,FreeDOS 被认为是一个简单的操作系统。仅使用一些基本命令就可以轻松浏览 DOS 文件系统。那么,启动一个 QEMU 会话,安装 FreeDOS,然后尝试一下 DOS 命令行界面吧。也许它现在看起来就没那么吓人了。


via: https://opensource.com/article/18/4/gentle-introduction-freedos

作者:Jim Hall 选题:lujun9972 译者:icecoobe 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

得到我的 awk 秘籍。

我管理着一个个人网站,用手工编辑网站上的网页。由于网站上的页面并不多,这种方法对我很适合,可以让我对网站代码的细节一清二楚。

最近我升级了网站的设计样式,我决定把所有的普通引号都转换成“花引号”,即在打印材料中使用的那种引号:用 “” 来代替 ""。

手工修改所有的引号太耗时了,因此我决定将这个转换所有 HTML 文件中引号的过程自动化。不过通过程序或脚本来实现该功能需要费点劲。这个脚本需要知道何时将普通引号转换成花引号,并决定使用哪种引号(LCTT 译注:左引号还是右引号,单引号还是双引号)。

有多种方法可以转换引号。Greg Pittman 写过一个 Python 脚本 来修正文本中的花引号。而我自己使用 GNU awk (gawk) 来实现。

下载我的 awk 秘籍。免费下载

开始之前,我写了一个简单的 gawk 函数来评估单个字符。若该字符是一个引号,这该函数判断是输出普通引号还是花引号。函数查看前一个字符;若前一个字符是空格,则函数输出左花引号。否则函数输出右花引号。脚本对单引号的处理方式也一样。

function smartquote (char, prevchar) {
        # print smart quotes depending on the previous character
        # otherwise just print the character as-is

        if (prevchar ~ /\s/) {
                # prev char is a space
                if (char == "'") {
                        printf("‘");
                }
                else if (char == "\"") {
                        printf("“");
                }
                else {
                        printf("%c", char);
                }
        }
        else {
                # prev char is not a space
                if (char == "'") {
                        printf("’");
                }
                else if (char == "\"") {
                        printf("”");
                }
                else {
                        printf("%c", char);
                }
        }
}

这个 gawk 脚本的主体部分通过该函数处理 HTML 输入文件的一个个字符。该脚本在 HTML 标签内部逐字原样输出所有内容(比如,<html lang="en">)。在 HTML 标签外,脚本使用 smartquote() 函数来输出文本。smartquote() 函数来评估是输出普通引号还是花引号。

function smartquote (char, prevchar) {
        ...
}

BEGIN {htmltag = 0}

{
        # for each line, scan one letter at a time:

        linelen = length($0);

        prev = "\n";

        for (i = 1; i <= linelen; i++) {
                char = substr($0, i, 1);

                if (char == "<") {
                        htmltag = 1;
                }

                if (htmltag == 1) {
                        printf("%c", char);
                }
                else {
                        smartquote(char, prev);
                        prev = char;
                }

                if (char == ">") {
                        htmltag = 0;
                }
        }

        # add trailing newline at end of each line
        printf ("\n");
}

下面是一个例子:

gawk -f quotes.awk test.html > test2.html

其输入为:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Test page</title>
  <link rel="stylesheet" type="text/css" href="/test.css" />
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width" />
</head>
<body>
  <h1><a href="/"><img src="logo.png" alt="Website logo" /></a></h1>
  <p>"Hi there!"</p>
  <p>It's and its.</p>
</body>
</html>

其输出为:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Test page</title>
  <link rel="stylesheet" type="text/css" href="/test.css" />
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width" />
</head>
<body>
  <h1><a href="/"><img src="logo.png" alt="Website logo" /></a></h1>
  <p>&ldquo;Hi there!&rdquo;</p>
  <p>It&rsquo;s and its.</p>
</body>
</html>

via: https://opensource.com/article/18/8/gawk-script-convert-smart-quotes

作者:Jim Hall 选题:lujun9972 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如何在崩溃的局面中集中精力寻找解决方案。

如果你在 IT 领域工作,你知道事情永远不会像你想象的那样完好。在某些时候,你会遇到错误或出现问题,你最终必须解决问题。这就是系统管理员的工作。

作为人类,我们都会犯错误。我们不是已经犯错,就是即将犯错。结果,我们最终还必须解决自己的错误。总是这样。我们都会失误、敲错字母或犯错。

作为一名年轻的系统管理员,我艰难地学到了这一课。我犯了一个大错。但是多亏了上级的指导,我学会了不去纠缠于我的错误,而是制定一个“错误策略”来做正确的事情。从错误中吸取教训。克服它,继续前进。

我的第一份工作是一家小公司的 Unix 系统管理员。真的,我是一名生嫩的系统管理员,但我大部分时间都独自工作。我们是一个小型 IT 团队,只有我们三个人。我是 20 或 30 台 Unix 工作站和服务器的唯一系统管理员。另外两个支持 Windows 服务器和桌面。

任何阅读这篇文章的系统管理员都不会对此感到意外,作为一个不成熟的初级系统管理员,我最终在错误的目录中运行了 rm 命令——作为 root 用户。我以为我正在为我们的某个程序删除一些陈旧的缓存文件。相反,我错误地清除了 /etc 目录中的所有文件。糟糕。

我意识到犯了错误是看到了一条错误消息,“rm 无法删除某些子目录”。但缓存目录应该只包含文件!我立即停止了 rm 命令,看看我做了什么。然后我惊慌失措。一下子,无数个想法涌入了我的脑中。我刚刚销毁了一台重要的服务器吗?系统会怎么样?我会被解雇吗?

幸运的是,我运行的是 rm * 而不是 rm -rf *,因此我只删除了文件。子目录仍在那里。但这并没有让我感觉更好。

我立刻去找我的主管告诉她我做了什么。她看到我对自己的错误感到愚蠢,但这是我犯的。尽管紧迫,她花了几分钟时间跟我做了一些指导。 她说:“你不是第一个这样做的人,在你这种情况下,别人会怎么做?”这帮助我平静下来并专注。我开始更少考虑我刚刚做的愚蠢事情,而更多地考虑我接下来要做的事情。

我做了一个简单的策略:不要重启服务器。使用相同的系统作为模板,并重建 /etc 目录。

制定了行动计划后,剩下的就很容易了。只需运行正确的命令即可从另一台服务器复制 /etc 文件并编辑配置,使其与系统匹配。多亏了我对所有东西都做记录的习惯,我使用已有的文档进行最后的调整。我避免了完全恢复服务器,这意味着一个巨大的宕机事件。

可以肯定的是,我从这个错误中吸取了教训。在接下来作为系统管理员的日子中,我总是在运行任何命令之前确认我所在的目录。

我还学习了构建“错误策略”的价值。当事情出错时,恐慌并思考接下来可能发生的所有坏事是很自然的。这是人性。但是制定一个“错误策略”可以帮助我不再担心出了什么问题,而是专注于让事情变得更好。我仍然会想一下,但是知道我接下来的步骤可以让我“克服它”。


via: https://opensource.com/article/18/7/my-first-sysadmin-mistake

作者:Jim Hall 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

学习用简单的宏为你的课程论文添加脚注、引用、子标题及其它格式。

当我在 1993 年发现 Linux 时,我还是一名本科生。我很兴奋在我的宿舍里拥有 Unix 系统的强大功能,但是尽管它有很多功能,但 Linux 却缺乏应用程序。像 LibreOffice 和 OpenOffice 这样的文字处理程序还需要几年的时间才出现。如果你想使用文字处理器,你可能会将你的系统引导到 MS-DOS 中,并使用 WordPerfect、共享软件 GalaxyWrite 或类似的程序。

这就是我的方法,因为我需要为我的课程写论文,但我更喜欢呆在 Linux 中。我从我们的 “大 Unix” 校园计算机实验室得知,Unix 系统提供了一组文本格式化的程序 nrofftroff ,它们是同一系统的不同接口:nroff 生成纯文本输出,适用于屏幕或行式打印机,而 troff 产生非常优美的输出,通常用于在激光打印机上打印。

在 Linux 上,nrofftroff 被合并为 GNU troff,通常被称为 groff。 我很高兴看到早期的 Linux 发行版中包含了某个版本的 groff,因此我着手学习如何使用它来编写课程论文。 我学到的第一个宏集是 -me 宏包,一个简单易学的宏集。

关于 groff ,首先要了解的是它根据一组宏来处理和格式化文本。宏通常是个两个字符的命令,它自己设置在一行上,并带有一个引导点。宏可能包含一个或多个选项。当 groff 在处理文档时遇到这些宏中的一个时,它会自动对文本进行格式化。

下面,我将分享使用 groff -me 编写课程论文等简单文档的基础知识。 我不会深入细节进行讨论,比如如何创建嵌套列表,保存和显示,以及使用表格和数字。

段落

让我们从一个简单的例子开始,在几乎所有类型的文档中都可以看到:段落。段落可以格式化为首行缩进或不缩进(即,与左边齐平)。 包括学术论文,杂志,期刊和书籍在内的许多印刷文档都使用了这两种类型的组合,其中文档或章节中的第一个(主要)段落左侧对齐,而所有其他(常规)的段落缩进。 在 groff -me中,您可以使用两种段落类型:前导段落(.lp)和常规段落(.pp)。

.lp
This is the first paragraph.
.pp
This is a standard paragraph.

文本格式

用粗体格式化文本的宏是 .b,斜体格式是 .i 。 如果您将 .b.i 放在一行上,则后面的所有文本将以粗体或斜体显示。 但更有可能你只是想用粗体或斜体来表示一个或几个词。 要将一个词加粗或斜体,将该单词放在与 .b.i 相同的行上作为选项。 要用粗体或斜体格式化多个单词,请将文字用引号引起来。

.pp
You can do basic formatting such as
.i italics
or
.b "bold text."

在上面的例子中,粗体文本结尾的句点也是粗体。 在大多数情况下,这不是你想要的。 只要文字是粗体字,而不是后面的句点也是粗体字。 要获得您想要的效果,您可以向 .b.i 添加第二个参数,以指示以粗体或斜体显示的文本后面跟着的任意文本以正常类型显示。 您可以这样做,以确保尾随句点不会以粗体显示。

.pp
You can do basic formatting such as
.i italics
or
.b "bold text" .

列表

使用 groff -me,您可以创建两种类型的列表:无序列表(.bu)和有序列表(.np)。

.pp
Bullet lists are easy to make:
.bu
Apple
.bu
Banana
.bu
Pineapple
.pp
Numbered lists are as easy as:
.np
One
.np
Two
.np
Three
.pp
Note that numbered lists will reset at the next pp or lp.

副标题

如果你正在写一篇长论文,你可能想把你的内容分成几部分。使用 groff -me,您可以创建编号的标题(.sh) 和未编号的标题 (.uh)。在这两种方法中,将节标题作为参数括起来。对于编号的标题,您还需要提供标题级别 :1 将给出一个一级标题(例如,1)。同样,23 将给出第二和第三级标题,如 2.13.1.1

.uh Introduction
.pp
Provide one or two paragraphs to describe the work
and why it is important.
.sh 1 "Method and Tools"
.pp
Provide a few paragraphs to describe how you
did the research, including what equipment you used

智能引号和块引号

在任何学术论文中,引用他人的工作作为证据都是正常的。如果你引用一个简短的引用来突出一个关键信息,你可以在你的文本周围键入引号。但是 groff 不会自动将你的引用转换成现代文字处理系统所使用的“智能”或“卷曲”引用。要在 groff -me 中创建它们,插入一个内联宏来创建左引号(\*(lq)和右引号(\*(rq)。

.pp
Christine Peterson coined the phrase \*(lqopen source.\*(rq

groff -me 中还有一个快捷方式来创建这些引号(.q),我发现它更易于使用。

.pp
Christine Peterson coined the phrase
.q "open source."

如果引用的是跨越几行的较长的引用,则需要使用一个块引用。为此,在引用的开头和结尾插入块引用宏(.(q)。

.pp
Christine Peterson recently wrote about open source:
.(q
On April 7, 1998, Tim O'Reilly held a meeting of key
leaders in the field. Announced in advance as the first
.q "Freeware Summit,"
by April 14 it was referred to as the first
.q "Open Source Summit."
.)q

脚注

要插入脚注,请在脚注文本前后添加脚注宏(.(f),并使用内联宏(\**)添加脚注标记。脚注标记应出现在文本中和脚注中。

.pp
Christine Peterson recently wrote about open source:\**
.(f
\**Christine Peterson.
.q "How I coined the term open source."
.i "OpenSource.com."
1 Feb 2018.
.)f
.(q
On April 7, 1998, Tim O'Reilly held a meeting of key
leaders in the field. Announced in advance as the first
.q "Freeware Summit,"
by April 14 it was referred to as the first
.q "Open Source Summit."
.)q

封面

大多数课程论文都需要一个包含论文标题,姓名和日期的封面。 在 groff -me 中创建封面需要一些组件。 我发现最简单的方法是使用居中的文本块并在标题、名字和日期之间添加额外的行。 (我倾向于在每一行之间使用两个空行)。在文章顶部,从标题页(.tp)宏开始,插入五个空白行(.sp 5),然后添加居中文本(.(c) 和额外的空白行(.sp 2)。

.tp
.sp 5
.(c
.b "Writing Class Papers with groff -me"
.)c
.sp 2
.(c
Jim Hall
.)c
.sp 2
.(c
February XX, 2018
.)c
.bp

最后一个宏(.bp)告诉 groff 在标题页后添加一个分页符。

更多内容

这些是用 groff-me 写一份专业的论文非常基础的东西,包括前导和缩进段落,粗体和斜体,有序和无需列表,编号和不编号的章节标题,块引用以及脚注。

我已经包含一个示例 groff 文件来演示所有这些格式。 将 lorem-ipsum.me 文件保存到您的系统并通过 groff 运行。 -Tps 选项将输出类型设置为 PostScript ,以便您可以将文档发送到打印机或使用 ps2pdf 程序将其转换为 PDF 文件

groff -Tps -me lorem-ipsum.me > lorem-ipsum.me.ps
ps2pdf lorem-ipsum.me.ps lorem-ipsum.me.pdf

如果你想使用 groff -me 的更多高级功能,请参阅 Eric Allman 所著的 “使用 Groff -me 来写论文”,你可以在你系统的 groff 的 doc 目录下找到一个名叫 meintro.me 的文件。这份文档非常完美的说明了如何使用 groff-me 宏来格式化你的论文。


via: https://opensource.com/article/18/2/how-format-academic-papers-linux-groff-me

作者:Jim Hall 译者:amwps290 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出