当前位置: 首页 > web >正文

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不使用 grofftroff 绘图命令的扩展。适用于不支持这些扩展的后处理器。
-tTeX 模式:启用 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
  • 默认行为:每个图片生成一个名为 \graphvbox
  • 自定义名称:使用 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=1i=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大于/小于比较。

注意事项

  1. 宏定义:确保 .PS.PE 宏已正确定义,否则图片无法正确显示。
  2. 安全模式:处理不可信输入时启用 -S,禁用 sh 命令执行。
  3. TeX 驱动:使用支持 tpic 特性的 TeX 驱动(版本 2+)。
  4. 兼容性-n 选项适用于不支持 groff 扩展的后处理器。
  5. 调试:通过 print 命令输出调试信息到标准错误。
http://www.xdnf.cn/news/14239.html

相关文章:

  • Redis集群模式之Redis Cluster(3)
  • TC3xx中PFLASH缓存对XCP标定常量的影响
  • Fast API 中的用户认证:深入理解 JWT(JSON Web Tokens)
  • 软死锁的检测--看门狗
  • JavaSE超详细笔记-网络编程篇-基于黑马
  • 数据库连接池深度研究分析报告
  • rt-thread的红外遥控开源库使用(裸机版本)记录.
  • 暑期车辆违停治理:视觉算法的实践路径
  • 【C语言】图书管理系统(文件存储版)丨源码+详解
  • 提的缺陷开发不改,测试该怎么办?
  • 《Gulp与SCSS:解构前端样式开发的底层逻辑与实战智慧》
  • QT集成Boost库
  • PyCharm 中更改缓存和插件目录
  • 【华为开发者学堂】HarmonyOS
  • 以MNIST数据集为例进行单机多卡训练(DP和DDP)
  • 每日算法刷题Day31 6.14:leetcode二分答案2道题,结束二分答案,开始枚举技巧,用时1h10min
  • 【生活系列】金刚经
  • 使用 FastMCP 实现 Word 文档与 JSON 数据互转的 Python 服务
  • PHP、Apache环境中部署sqli-labs
  • 【构建】C++包管理器介绍
  • 从0开始学习语言模型--Day01--亲自构筑语言模型的重要性
  • python中的异常处理try-except - else - finally与自定义异常处理
  • R语言文本探索与预处理:入门指南
  • PH热榜 | 2025-06-14
  • C++开源协程库async_simple有栈协程源码分析
  • SQL Server 窗口函数详解:窗口行数控制的原理、关键字与应用场景
  • 计算机网络-自顶向下—第五章数据链路层重点复习笔记
  • Thread的join方法
  • python+django/flask+uniapp宠物中心信息管理系统app
  • Java开发中避免NullPointerException的全面指南