eqn
是 GNU groff
文档排版系统的一部分,用于将嵌入在 troff
输入文件中的数学公式描述转换为 troff
可理解的命令。它通常通过 groff
的 -e
选项调用。
- 输出兼容性:
eqn
的输出必须与GNU troff
配合使用,不可与 Unixtroff
兼容。 - 默认行为:若未指定文件,
eqn
将读取标准输入。文件名-
表示标准输入。 - 配置文件:
eqn
会优先搜索-M
指定的目录,然后是/etc/groff/site-tmac
和/usr/share/groff/1.22.2/tmac
中的eqnrc
文件。-R
选项可禁用此配置文件。
基本语法
eqn [选项] 文件...
文件...
: 包含要格式化的数学公式的文件列表。如果没有指定文件,则从标准输入读取。[选项]
: 可选参数,用来修改eqn
的行为。
选项
-dxy
:指定内联方程式的左右分隔符为 x 和 y-C
:识别后跟非空格或换行符的.EQ
和.EN
-N
:不允许在分隔符内换行-v
:打印版本号-r
:只允许一次大小缩减-mn
:设置最小点大小为 n-Tname
:指定输出设备名称(如 “MathML” 可输出 MathML 标记)-Mdir
:在默认目录前先搜索 dir 中的 eqnrc 文件-R
:不加载 eqnrc 文件-fF
:等同于gfont F
命令-sn
:等同于gsize n
命令(已弃用)-pn
:设置上下标比周围文本小 n 点(已弃用)
主要功能
1. 分隔符控制
delim on
:恢复之前被禁用的分隔符delim off
:禁用分隔符
2. 自动间距
定义方程组件类型以调整间距:
ordinary
:普通字符(如 ‘1’ 或 ‘x’)operator
:大型运算符(如 ‘Σ’)binary
:二元运算符(如 ‘+’)relation
:关系符号(如 ‘=’)opening
:开括号(如 ‘(’)closing
:闭括号(如 ‘)’)punctuation
:标点符号inner
:括号内的子公式suppress
:抑制自动间距调整
3. 新增原语
big e
:放大表达式e1 smallover e2
:类似 over 但缩小 e1 和 e2 大小vcenter e
:使 e 垂直居中于数学轴e1 accent e2
:将 e2 设为 e1 上的重音符号e1 uaccent e2
:将 e2 设为 e1 下的重音符号split "text"
:不进行宏扩展的文本分割nosplit text
:进行宏扩展的文本不分割e opprime
:运算符形式的撇号special text e
:使用 troff 宏构造新对象space n
:设置方程式前后的垂直间距
4. 自定义参数
使用 set p n
设置参数:
minimum_size
:最小点大小(单位:点)fat_offset
:加粗时的水平偏移量over_hang
:分数线的超出长度accent_width
:单字符上的线长度x_height
:小写字母高度(如 ‘x’)axis_height
:基线到字符中心的距离(如 ‘+’)- 等近百个排版参数
文件
/usr/share/groff/1.22.2/tmac/eqnrc
:初始化文件
MathML 模式限制
- eqn 参数无效
- 不支持 special、up、down、fwd 和 back 操作
- 忽略 vcenter 关键字
- 某些字符(如积分符号)可能显示过小
- 行内方程无显式分隔符
用法与高级功能
-
输出格式:
- MathML:通过
-T MathML
生成 MathML 标记,而非troff
命令。 - 默认输出:
ps
(PostScript 兼容设备)。
- MathML:通过
-
自动间距调整:
eqn
根据组件类型自动调整间距,类型包括:ordinary
,operator
,binary
,relation
,opening
,closing
,punctuation
,inner
,suppress
。- 使用
type t e
可手动指定组件类型,例如type "binary" \(mu
。 chartype t text
可修改单个字符的类型,如chartype "punctuation" .,;:
。
-
新原始命令(GNU 扩展):
big e
:放大表达式,类似 CSS 的large
。smallover
:紧凑分数,减小分子分母字号并减少间距。vcenter e
:垂直居中对齐表达式(如求和符号)。accent e2 over e1
:为e1
添加上标符号(如hat
)。uaccent e2 under e1
:为e1
添加下标符号(如utilde
)。split "text"
:处理并自动调整字符间距的文本。nosplit text
:直接输出文本,不调整间距。special text e
:通过宏text
自定义排版,需处理troff
注册表。
示例
-
基本方程排版:
eqn -T ps <<EOF .EQ x over y = {a + b} over {c - d} .EN EOF
输出为
troff
命令,用于生成分式。 -
MathML 输出:
eqn -T MathML <<EOF .EQ sqrt{a^2 + b^2} .EN
生成 MathML 标记:
<math><msqrt><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup></mrow></msqrt></math>
-
自定义宏(特殊符号):
eqn <<EOF .EQ define cancel 'special Ca' .EN .de Ca \Z'\\*(0s'\v'\\n(0du'\D'l \\n(0wu -\\n(0hu-\\n(0du'\v'\\n(0hu' .. cancel {x + y} EOF
使用宏
Ca
在表达式上绘制对角线。
注意事项
-
兼容性限制:
eqn
不支持低分辨率设备(如打印机),仅适用于简单输入。- 与 Unix
eqn
的语法兼容,但输出需通过GNU troff
处理。
-
定界符管理:
- 默认定界符为
.EQ
和.EN
,可通过-d
或delim
命令修改。 delim off
禁用定界符检测,delim on
恢复。
- 默认定界符为
-
字体与字号:
- 使用
chartype
修改字符类型(如letter
或digit
)以调整字体。 -f
和-s
选项分别设置全局字体和字号,但-s
已弃用。
- 使用