news 2026/4/16 11:56:39

幽冥大陆(六十三) roff 语言:核心用途与使用指南—东方仙盟筑基期

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
幽冥大陆(六十三) roff 语言:核心用途与使用指南—东方仙盟筑基期

roff(全称 Runoff)是一套经典的文本排版标记语言,起源于 Unix 早期(1970 年代由 Joe Ossanna 开发),核心包含troff(排版输出)、nroff(终端 / 纯文本输出)等工具,是 Unix/Linux 系统中手册页(man page)的默认排版引擎,至今仍在系统文档、技术手册、纯文本书籍排版中广泛使用。


一、roff 的核心用途

1. 系统文档排版(最核心)

Unix/Linux 下的man手册页(如man ls看到的内容)几乎全部由man宏包(基于 roff)编写,roff 负责将标记化的文本转换为终端可读的格式(nroff)或打印格式(troff)。

2. 纯文本 / 打印文档排版

  • 生成技术手册、论文、书籍(支持分页、字体、缩进、列表、表格、数学公式等);
  • 输出格式灵活:可直接输出到终端、PostScript/PDF、打印机,或转换为 HTML/TeX 等。

3. 自动化文档生成

结合脚本(Shell/Python)批量生成标准化文档(如 API 手册、系统说明),适合需要 “文本源文件 + 排版规则” 分离的场景。

4. 小众但不可替代的场景

  • 嵌入式系统 / 极简环境:仅依赖系统自带的 roff 工具(无需复杂排版软件);
  • 历史系统兼容:老 Unix 文档的维护与渲染。

二、roff 的基础使用

1. 核心工具与环境

roff 不是单一程序,而是工具链,核心组件:

工具用途
nroff终端 / 纯文本输出(如 man 手册)
troff排版输出(打印、PostScript/PDF)
groffGNU 实现的 roff(主流,Linux 默认)
man基于 groff/nroff 的手册页渲染工具
宏包简化排版(如manmsmemm

前置条件:Linux/macOS 自带 groff(如无则安装:sudo apt install groff/brew install groff)。

2. 基本语法规则

roff 文本由普通文本+控制命令组成,命令以.(点)开头(宏命令)或\(反斜杠)开头(转义命令),区分大小写。

核心概念:
  • 宏(Macro):预定义的排版指令(如.SH定义章节标题),不同宏包(man/ms)语法不同;
  • 请求(Request):基础排版指令(如.br换行、.sp空行);
  • 转义序列:行内格式控制(如\fB粗体、\fI斜体)。

3. 入门示例:编写简单的 roff 文档

示例 1:man 宏包(手册页风格)

创建文件demo.1

roff

.TH MYTOOL 1 "2025-12-24" "V1.0" "User Commands" .SH NAME mytool - a demo tool for roff example .SH SYNOPSIS .B mytool [\-h] [\-v] <file> .SH DESCRIPTION This is a \fIdemo\fR of roff/man syntax: .RS - \fB\-h\fR: Show help message - \fB\-v\fR: Show version .RE .SH AUTHOR Your Name <your@email.com>

渲染与查看

bash

运行

# 方式1:用 nroff 渲染为终端格式 nroff -man demo.1 | less # 方式2:生成 PostScript(可转 PDF) groff -man -Tps demo.1 > demo.ps ps2pdf demo.ps demo.pdf # 转 PDF(需安装 ghostscript) # 方式3:模拟 man 手册查看 man ./demo.1 # 直接以手册页形式打开
示例 2:ms 宏包(通用文档风格)

创建文件doc.ms

roff

.TL Title of My Document .AU Author Name .AB Abstract: This is a simple roff document with ms macros. .AE .SH Introduction This is the first section. .PP A new paragraph with \fBbold\fR and \fIitalic\fR text. .SH Conclusion End of document.

渲染

bash

运行

# 终端输出 nroff -ms doc.ms | less # 生成 PDF groff -ms -Tps doc.ms | ps2pdf - doc.pdf

4. 常用 roff 命令 / 转义序列(man 宏包)

命令 / 序列用途示例
.TH定义手册页标题.TH MYTOOL 1 "2025" "V1.0"
.SH一级章节标题.SH DESCRIPTION
.SS二级章节标题.SS Options
.B粗体文本.B \-h
.I斜体文本.I filename
.RS/.RE缩进 / 结束缩进用于列表
.PP新段落
\fB行内粗体开始\fBbold\fR
\fI行内斜体开始\fIitalic\fR
\fR恢复默认字体
.br强制换行
.sp空行(.sp 2 空 2 行).sp 1

三、进阶使用

1. 自定义宏

可在 roff 文档中定义自定义宏,简化重复排版:

roff

.de MYLIST # 定义名为 MYLIST 的宏 .IP \- 4 # 列表项缩进4个字符 .. # 结束宏定义 .MYLIST First item .MYLIST Second item

2. 数学公式(eqn)

roff 配合eqn工具支持数学公式排版:

roff

.EQ E = mc^2 .EN

渲染时需加-e参数:groff -ms -e -Tps doc.ms > doc.ps

3. 表格(tbl)

配合tbl工具制作表格:

roff

.TS center,box; c c c; l l l. Header1 Header2 Header3 Row1 Col2 Col3 Row2 Col2 Col3 .TE

渲染时需加-t参数:groff -ms -t -Tps doc.ms > doc.ps


四、学习资源与工具

  1. 官方手册
    • man groff:GNU roff 总览;
    • man man-pages:man 手册页编写规范;
    • man 7 groff_man:man 宏包详细说明。
  2. 在线教程
    • GNU Groff 手册:https://www.gnu.org/software/groff/manual/
    • 《Unix Text Processing》(经典书籍,涵盖 roff/troff)。
  3. 工具
    • groff:核心排版工具;
    • ps2pdf:PostScript 转 PDF;
    • vim/emacs:编辑器(有 roff 语法高亮)。

阿雪技术观


让我们积极投身于技术共享的浪潮中,不仅仅是作为受益者,更要成为贡献者。无论是分享自己的代码、撰写技术博客,还是参与开源项目的维护和改进,每一个小小的举动都可能成为推动技术进步的巨大力量

Embrace open source and sharing, witness the miracle of technological progress, and enjoy the happy times of humanity! Let's actively join the wave of technology sharing. Not only as beneficiaries, but also as contributors. Whether sharing our own code, writing technical blogs, or participating in the maintenance and improvement of open source projects, every small action may become a huge force driving technological progrss.

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:17:46

微信小程序uniapp+vue课堂交互系统学生作业批改系统课堂交流ap

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万…

作者头像 李华
网站建设 2026/4/16 10:16:53

【技术报告解读】DeepSeek-OCR: Contexts Optical Compression

Abstract 我们提出了 DeepSeek-OCR&#xff0c;作为通过光学二维映射压缩长上下文可行性的初步探索。DeepSeek-OCR 由两个组件构成&#xff1a;DeepEncoder 和作为解码器的 DeepSeek3B-MoE-A570M。具体而言&#xff0c;DeepEncoder 作为核心引擎&#xff0c;旨在在高分辨率输入…

作者头像 李华
网站建设 2026/4/16 9:26:28

探索 COMSOL 激光熔覆模型在同轴送粉中的应用

COMSOL激光熔覆模型同样适合同轴送粉&#xff0c;各种参数可改&#xff0c; 含制作教程视频。最近在研究激光熔覆技术&#xff0c;发现了一个超棒的 COMSOL 激光熔覆模型&#xff0c;它竟然同样适用于同轴送粉&#xff0c;而且各种参数都可以进行修改&#xff0c;简直太实用啦&…

作者头像 李华
网站建设 2026/4/13 8:39:32

Windows系统文件Search.ProtocolHandler.MAPI2.dll损坏 下载修复方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/15 11:43:50

(新卷,100分)- 单词加密(Java JS Python)

(新卷,100分)- 单词加密&#xff08;Java & JS & Python&#xff09;题目描述1、输入一个英文句子&#xff0c;句子中包含若干个单词&#xff0c;每个单词间有一个空格&#xff1b;2、需要将句子中的每个单词按照要求加密输出。要求&#xff1a;1&#xff09;单词中包括…

作者头像 李华