news 2026/7/1 4:54:17

幽冥大陆(六十三) 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/7/1 16:06:56

千匠大宗电商系统:赋能煤炭能源行业产业升级

在全球能源结构转型与数字技术深度融合的时代背景下&#xff0c;能源煤炭行业正迎来一场深刻的供应链变革。传统交易模式中信息不对称、交易链条长、融资难、物流协同效率低等痛点&#xff0c;已成为制约行业高质量发展的关键瓶颈。千匠大宗电商系统致力于为煤炭能源大宗商品交…

作者头像 李华
网站建设 2026/7/1 16:05:46

硬件有限,如何部署“大”模型?AMCT模型压缩工具3步解忧

我们在谈论AI大模型时&#xff0c;一方面会为其在逻辑推理、问题回答等各种任务中的表现出色而惊叹&#xff0c;另一方面也会为其巨大存储和海量计算而“头疼”。模型尺寸的不断增长确实给模型部署带来了极大的挑战&#xff0c;动辄几十GB&#xff0c;上百GB甚至上千GB的存储量…

作者头像 李华
网站建设 2026/7/1 16:04:45

【毕业设计】基于SpringBoot+Vue技术的医院运营管理系统的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/1 16:06:37

Java毕设选题推荐:基于SpringBoot的非遗产品交流销售平台的设计与实现基于springboot的非遗文化传承与推广平台系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/26 0:27:08

学长亲荐8个AI论文平台,本科生毕业论文轻松搞定!

学长亲荐8个AI论文平台&#xff0c;本科生毕业论文轻松搞定&#xff01; 论文写作的“隐形助手”&#xff1a;AI 工具如何改变你的毕业之路 在当今这个信息爆炸的时代&#xff0c;高校学生的论文写作压力与日俱增。无论是选题、大纲搭建&#xff0c;还是内容撰写和查重降重&…

作者头像 李华
网站建设 2026/7/1 16:07:24

当花朵学会组团解题:新型花授粉算法的暴力美学

新授粉方式的花授粉算法 该算法采用惯性权重、两组随机个体差异矢量和Lvy机制构建新的全局搜索策略&#xff0c;提高算法的全局探索能力&#xff1b;利用信息共享机制、FPA/rand/1和FPA/best/2融合的局部搜索策略&#xff0c;增强算法的局部开发能力&#xff1b;运用基于高斯变…

作者头像 李华