Linux系统之pic详解
pic
是 groff 文档格式化系统的一部分,用于将嵌入在 troff 或 TeX 输入文件中的图片描述编译成 TeX 或 troff 能理解的命令。每个图片以 .PS
开头的行开始,以 .PE
开头的行结束。.PS
和 .PE
之外的内容会原样传递。
基本语法
pic [ -nvCSU ] [ filename ... ]
pic -t [ -cvzCSU ] [ filename ... ]
选项详解
通用选项
选项 | 说明 |
---|---|
-C | 识别 .PS 和 .PE ,即使它们后接非空格或换行符(如 .PS: )。 |
-S | 安全模式:禁用执行 sh 命令(默认启用)。适用于处理不可信输入。 |
-U | 不安全模式:关闭 -S 的默认行为,允许执行 sh 命令。 |
-n | 不使用 groff 对 troff 绘图命令的扩展。适用于不支持这些扩展的后处理器。 |
-t | TeX 模式:启用 TeX 支持。 |
-c | 兼容 tpic:启用 TeX 模式(隐含 -t )。处理特殊规则:- 以 \ 开头的行透明传递,但添加 % 避免多余空格。- 以 . 开头的行转换为 \. (即 . 转义为 \ )。- .ps 行可指定笔画粗细(单位:毫英寸)。 |
-v | 打印版本号并退出。 |
-z | 在 TeX 模式下使用零长度线段绘制点。 |
被忽略的选项
选项 | 说明 |
---|---|
-D | 强制使用 \D 转义序列绘制所有线条(pic 默认始终如此)。 |
-T dev | 生成适用于 troff 设备 dev 的输出(无需指定,因 pic 输出本身设备无关)。 |
使用示例
1. 基本用法
pic input.pic -o output.troff
- 说明:将
input.pic
中的图片描述编译为troff
命令,并输出到output.troff
。
2. TeX 模式
pic -t input.tex -o output.tex
- 说明:将
input.tex
中的图片描述编译为 TeX 命令,结果保存到output.tex
。
3. 使用宏定义
pic -mpic input.pic > output.troff
- 说明:使用
-mpic
提供的默认宏定义(居中图片),将input.pic
编译为troff
命令。
4. 安全模式
pic -S input.pic
- 说明:在安全模式下编译图片描述,防止执行潜在危险的
sh
命令。
TeX 模式详解
生成 vbox
- 默认行为:每个图片生成一个名为
\graph
的vbox
。 - 自定义名称:使用
figname "newname"
修改vbox
名称。 - 显示图片:需手动调用
\box\graph
,但默认vbox
高度为 0,可能导致垂直间距问题。
调整垂直间距
\centerline{\raise 1em\box\graph}
- 说明:通过
\raise
调整vbox
位置,避免上下间距不一致。
宏定义优化
\def\gpicbox#1{%\vbox{\unvbox\csname #1\endcsname\kern 0pt}}
- 说明:定义宏
\gpicbox{graph}
以生成正高且深度为 0 的vbox
,兼容 LaTeX 的graphics.sty
。
透明传递 TeX 命令
- 规则:以
\
开头的行透明传递,末尾自动添加%
。 - 示例:
\PS \font\myfont=cmr10 at 12pt \myfont circle at (0,0) \PE
- 说明:设置字体后绘制圆形,
\
开头的行直接传递给 TeX。
- 说明:设置字体后绘制圆形,
命令与编程结构
循环结构
for i = 1 to 5 docircle at (i, i)
- 说明:从
i=1
到i=5
,在坐标(i,i)
绘制圆形。
条件判断
if x > 5 thenbox at (x, y)
elsearrow from (x, y) to (0, 0)
- 说明:根据
x
的值决定绘制矩形或箭头。
执行 Shell 命令
sh % echo "Drawing image..." %
- 说明:在安全模式下(
-S
)禁用,否则执行echo
命令。
文件包含
copy "shapes.pic"
- 说明:将
shapes.pic
文件内容插入当前图片描述中。
变量重置
reset scale
- 说明:将
scale
变量重置为默认值,并同步更新其他尺寸相关变量。
表达式与函数
数学运算
函数 | 说明 |
---|---|
x ^ y | 幂运算(x 的 y 次方)。 |
sin(x), cos(x), atan2(y, x) | 三角函数。 |
log(x) | 以 10 为底的对数。 |
exp(x) | 10 的 x 次方。 |
sqrt(x) | 平方根。 |
int(x) | 取整数部分。 |
rand() | 生成 0 到 1 的随机数。 |
max(e1, e2), min(e1, e2) | 返回最大值或最小值。 |
逻辑运算
运算符 | 说明 |
---|---|
!e | 逻辑非。 |
e1 && e2 | 逻辑与。 |
e1 || e2 | 逻辑或。 |
e1 == e2, e1 != e2 | 相等/不等比较。 |
e1 >= e2, e1 > e2, e1 < e2 | 大于/小于比较。 |
注意事项
- 宏定义:确保
.PS
和.PE
宏已正确定义,否则图片无法正确显示。 - 安全模式:处理不可信输入时启用
-S
,禁用sh
命令执行。 - TeX 驱动:使用支持
tpic
特性的 TeX 驱动(版本 2+)。 - 兼容性:
-n
选项适用于不支持groff
扩展的后处理器。 - 调试:通过
print
命令输出调试信息到标准错误。