Linux系统之eqn详解

eqn 是 GNU groff 文档排版系统的一部分,用于将嵌入在 troff 输入文件中的数学公式描述转换为 troff 可理解的命令。它通常通过 groff-e 选项调用。

  • 输出兼容性eqn 的输出必须与 GNU troff 配合使用,不可与 Unix troff 兼容。
  • 默认行为:若未指定文件,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 模式限制

  1. eqn 参数无效
  2. 不支持 special、up、down、fwd 和 back 操作
  3. 忽略 vcenter 关键字
  4. 某些字符(如积分符号)可能显示过小
  5. 行内方程无显式分隔符

用法与高级功能

  1. 输出格式

    • MathML:通过 -T MathML 生成 MathML 标记,而非 troff 命令。
    • 默认输出ps(PostScript 兼容设备)。
  2. 自动间距调整
    eqn 根据组件类型自动调整间距,类型包括:

    • ordinary, operator, binary, relation, opening, closing, punctuation, inner, suppress
    • 使用 type t e 可手动指定组件类型,例如 type "binary" \(mu
    • chartype t text 可修改单个字符的类型,如 chartype "punctuation" .,;:
  3. 新原始命令(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 注册表。

示例

  1. 基本方程排版

    eqn -T ps <<EOF
    .EQ
    x over y = {a + b} over {c - d}
    .EN
    EOF
    

    输出为 troff 命令,用于生成分式。

  2. 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>
    
  3. 自定义宏(特殊符号)

    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 在表达式上绘制对角线。

注意事项

  1. 兼容性限制

    • eqn 不支持低分辨率设备(如打印机),仅适用于简单输入。
    • 与 Unix eqn 的语法兼容,但输出需通过 GNU troff 处理。
  2. 定界符管理

    • 默认定界符为 .EQ.EN,可通过 -ddelim 命令修改。
    • delim off 禁用定界符检测,delim on 恢复。
  3. 字体与字号

    • 使用 chartype 修改字符类型(如 letterdigit)以调整字体。
    • -f-s 选项分别设置全局字体和字号,但 -s 已弃用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值