Groff 应用
ominigraffle公式

ominigraffle公式OmniGraffle 是一款功能强大的图形绘制工具,广泛应用于流程图、组织结构图、思维导图等领域。
它提供了丰富的绘图工具和模板,让用户可以轻松地创建出美观、专业的图形。
本文将介绍OmniGraffle 的公式功能,以及如何使用公式来优化工作流程和提高工作效率。
我们来了解一下OmniGraffle 的公式功能。
公式是一种基于逻辑关系的表达方式,可以帮助用户在图形中自动计算数值、生成文本等。
在OmniGraffle 中,用户可以使用公式来设置图形的位置、大小、颜色等属性,以及实现各种复杂的图形交互效果。
公式功能的出现极大地简化了图形设计的过程,使得用户可以更加专注于内容的表达和设计的创意。
在使用OmniGraffle 的公式功能时,我们可以借助一些常用的数学函数和操作符来实现各种复杂的计算。
比如,我们可以使用“+”、“-”、“*”、“/”等操作符来进行加减乘除运算;可以使用“sin”、“cos”、“tan”等数学函数来计算三角函数值;还可以使用“if”、“else”等逻辑函数来实现条件判断。
通过灵活运用这些函数和操作符,我们可以在OmniGraffle 中实现各种复杂的图形效果和交互功能。
除了数学函数和操作符,OmniGraffle 还提供了一些特殊的函数和变量,用于处理图形中的元素和属性。
比如,我们可以使用“connections”函数来获取与某个图形相连的所有线条;可以使用“width”、“height”等变量来获取图形的宽度、高度等属性。
这些特殊的函数和变量使得公式功能更加灵活和强大,可以满足用户各种不同的需求。
在实际应用中,OmniGraffle 的公式功能可以帮助用户快速生成一些常见的图形效果。
比如,我们可以使用公式来实现自适应布局,使得图形能够根据容器的大小自动调整位置和大小;可以使用公式来实现数据驱动的图形,使得图形能够根据数据的变化而动态更新。
这些功能的应用不仅可以提高工作效率,还可以减少错误和重复劳动,使得图形设计更加高效和精确。
量子计算中的Grover算法及其应用

量子计算中的Grover算法及其应用量子计算是一种相对于传统计算机的新兴计算模式,它利用量子特性来实现高效的计算和数据处理。
其中,Grover算法是一种重要的量子算法,被广泛应用于搜索问题的求解。
本文将介绍Grover算法的原理,并探讨其在实际应用中的潜力。
一、Grover算法的原理Grover算法是1996年由美国计算机科学家L. Grover提出的一种搜索算法,其核心思想是通过量子特性来实现快速搜索。
与传统的搜索算法相比,Grover算法具有更快的速度和更高的效率。
Grover算法的基本步骤如下:1. 初始化:将量子比特(qubit)初始化为均匀分布的状态。
假设有N个可能的搜索目标,通过N个量子比特可以表示2^N个状态。
2. 反转操作:通过应用受控反转门(controlled-NOT)来反转搜索空间中目标状态的幅度。
3. 反射操作:对搜索空间中的所有状态进行关于平均值的对称操作。
4. 重复以上两个步骤:进行若干次重复操作,直到找到目标状态。
二、Grover算法的应用1. 数据库搜索Grover算法在数据库搜索中有着广泛的应用。
传统的搜索算法的时间复杂度为O(N),而Grover算法只需O(√N)的时间复杂度。
这使得Grover算法能够更高效地搜索数据库,加快数据检索的速度。
2. 密码破解Grover算法还可以应用于密码学领域。
传统的密码破解方法使用穷举法,时间复杂度极高。
而使用Grover算法,可以在较短的时间内找到密码的正确答案,为密码破解提供了一种新的解决方案。
3. 组合优化问题组合优化问题在实际应用中广泛存在,例如旅行商问题(TSP)和背包问题。
传统的解法需要枚举所有可能的解,时间复杂度较高。
而Grover算法通过量子并行的方式,大幅度提高了求解组合优化问题的效率。
三、Grover算法的挑战与展望虽然Grover算法在搜索问题的求解中具有较高的效率,但其应用仍面临一些挑战。
其中最主要的挑战之一是量子比特的错误率。
omnigraffle 使用方法

很高兴能有机会为您撰写关于Omnigraffle的文章。
Omnigraffle是一款功能强大的图形绘制工具,它为用户提供了丰富的功能和灵活的操作方式,极大地提升了图形设计的效率和质量。
在本文中,我将全面评估Omnigraffle的使用方法,深入探讨其功能和操作技巧,以便您能更全面地了解和运用这款工具。
1.了解OmnigraffleOmnigraffle是一款由Omni Group开发的图形绘制应用程序,它可以帮助用户创建各种类型的图形,包括流程图、结构图、组织结构图、线框图等等。
Omnigraffle不仅在Mac评台上有着强大的应用,同时也有适用于iOS设备的版本,用户可以随时随地进行图形设计工作。
2.基本操作和功能在使用Omnigraffle进行图形设计时,首先需要了解其基本操作和功能。
Omnigraffle提供了丰富的绘图工具,包括画笔、形状工具、文本工具等,用户可以根据需要选择合适的工具进行绘制。
Omnigraffle 还支持各种图形对象的编辑和处理,用户可以通过拖拽、调整大小、旋转等操作来对图形进行定制化。
3.高级功能和技巧除了基本的绘图操作外,Omnigraffle还提供了许多高级功能和技巧,以帮助用户更加灵活和高效地进行图形设计。
Omnigraffle支持网格对齐、图形连接线、图层管理等功能,这些功能可以帮助用户更好地控制和管理图形元素。
Omnigraffle还支持导出为不同格式的文件,用户可以方便地将设计的图形导出为PDF、图片、甚至是可编辑的矢量图形文件。
4.个人观点和总结从个人角度来看,我认为Omnigraffle是一款非常实用的图形绘制工具,它不仅功能强大,而且操作简单,非常适合用于各种图形设计工作。
通过本文的介绍,相信您对Omnigraffle的使用方法已有了更加全面的了解,希望您在今后的工作中能够更好地运用这款工具,提升图形设计的效率和质量。
在本文中,我对Omnigraffle的使用方法进行了全面评估,从基础操作到高级功能,希望能够帮助您更全面地了解和运用这款工具。
gprof使用详细介绍

gprof使用详细介绍linux下c/c++编程gprof介绍gprof是GNU profiler工具。
可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。
也可以显示“调用图”,包括函数的调用关系,每个函数调用花费了多少时间。
还可以显示“注释的源代码”,是程序源代码的一个复本,标记有程序中每行代码的执行次数。
基本用法:1.使用-pg选项编译和链接你的应用程序。
2.执行你的应用程序,使之运行完成后生成供gprof分析的数据文件(默认是gmon.out)。
3.使用gprof程序分析你的应用程序生成的数据,例如:gprof a.out gmon.out。
举例gcc -Wall -pg -o test test.c//程序文件名称test.c 编译时使用-pg现在我们可以再次运行test,并使用我们前面使用的测试数据。
这次我们运行的时候,test运行的分析数据会被搜集并保存在'gmon.out'文件中,我们可以通过运行' gprof test '来查看结果。
./testgprof testgprof 实现原理:gprof并不神奇,在编译和链接程序的时候(使用-pg 编译和链接选项),gcc 在你应用程序的每个函数中都加入了一个名为mcount(or“_mcount”, or“__mcount”)的函数,也就是说-pg编译的应用程序里的每一个函数都会调用mcount, 而mcount会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址。
这张调用图也保存了所有与函数相关的调用时间,调用次数等等的所有信息。
程序运行结束后,会在程序退出的路径下生成一个gmon.out文件。
这个文件就是记录并保存下来的监控数据。
可以通过命令行方式的gprof或图形化的Kprof来解读这些数据并对程序的性能进行分析。
另外,如果想查看库函数的profiling,需要在编译是再加入“-lc_p”编译参数代替“-lc”编译参数,这样程序会链接libc_p.a 库,才可以产生库函数的profiling信息。
SAPMRP中文大全

SAPMRP中⽂⼤全ContentsPP 物料需求计划 12版本 12版权 12 SAP 联机帮助的惯例 13对 SAP R/3 系统中 MRP 的简介 14后勤链中 MRP 的作⽤ 14 R/3 系统中 MRP 的功能 15总计划和单项计划 15净改变计划和再⽣计划 15物料计划过程(MRP 和基于消耗的计划) 16批量确定过程 17处理订货建议的易使⽤功能 18具有计划订单的装配订单 18覆盖范围(⽇供应) 18不连续的零部件 18使⽤替代和代⽤零部件 19直接采购和直接⽣产(汇总订单) 19评估计划结果的易使⽤功能 19例外消息和计划调整检查 20能⼒计划 20可⽤量检查和拖⽋订单处理 20单层和多层溯源 21销售订单的单项计划 21计划可配套产品 21基于事件的 MRP 21多⼯⼚/ 地点计划 21物料计划过程总览 22物料需求计划 22关于 MRP 过程 22主⽣产计划 22关于 MPS 过程 23基于消耗的计划 24再订货点计划 24关于再订货点计划 25基于预测的计划 26关于基于预测的计划 26计划⽇历 27计划⽇历 27⽤计算规则创建计划⽇历 27不⽤计算规则创建计划⽇历 29更改计划⽇历 29计算新周期 30⼿⼯创建、更改或删除周期 31维护不再有效的⽇历 31保护周期不被⾃动更改 32配额安排 32配额安排:过程 33把每个批分配给⼀个供货源 33计算配额⽐率的例⼦ 33在不同供货源之间分解批 34分解配额的例⼦ 34配额安排中可⽤的功能 35最⼩/ 最⼤批量和配额安排中的取整概要 35最⼤批量的例⼦ 36优先级和每周期的最⼤下达数量 36最⼤下达数量的例⼦ 37维护配额⽂件37 BOM 展开编号(固定关键⽇期) 38创建 BOM 展开编号 38更改 BOM 展开编号 39分配⼀个新码给 BOM 展开编号 39分配新的项⽬科⽬给物料组件 40计划运⾏ - 关于计划运⾏如何⼯作的技术和商务信息 40检查计划⽂件 , pr黤en 41计划运⾏的类型和计划运⾏的范围 41计划⽅式 42低层编码 43显⽰计划⽂件 44在计划⽂件中⼿⼯创建输⼊项 45建⽴计划⽂件 45计划⽂件:⼀致性检查 46净需求计算 46 MRP 净需求计算 47再订货点计划的净需求计算 48基于预测计划的净需求计算 48⽑需求计划 48批量计算 49批对批订货量 49固定批量 50具有分解的固定批量 50补充到最⼤库存⽔平 50周期性批量确定过程 51根据计划⽇历的期段批量 51为周期性批量确定过程确定交货⽇期 51作为交货⽇期的计划⽇历的说明 52计算可⽤⽇期和交货⽇期的例⼦ 52具有分解的期段批量 53最佳批量确定过程 53零部件周期平衡法 54最⼩单位成本过程 54动态的批量创建 55 Groff 再订货过程 56长期批量 57计算废品 58部件废品 58组件废品 59⼯序废品 59计划 60计划:⾃制 61计算基本⽇期 61独⽴于批量的⾃制⽣产时间 62相关于批量的⾃制⽣产时间 62⽤倒排计划计算基本⽇期 63⾃制的倒排计划的例⼦ 63⽤顺排计划计算基本⽇期 64计算⽣产⽇期(提前期计划) 64能⼒需求 65提前期计划:控制 65计划层 66开始提前期计划 67检查计划结果 67产前缓冲时间 67产后缓冲时间 67移动提前期/ 计算组件的供应⽇ 67外部采购计划 68外部采购的倒排计划 69外部采购的倒排计划例⼦ 69外部采购的顺排计划 70外部采购的顺排计划例⼦ 70确定采购元素 70采购类型,特殊采购类型,和配额安排 71确定请购单的供货源72确定交货计划的供货源 73仅确认传送的交货计划 73包含发运通知 74 BOM 展开和确定相关需求 75确定有效 BOM 76 BOM 有效性 76 BOM ⽤途 76 BOM 状态 76与⽣产相关的 BOM 项⽬ 77 BOM 展开号和固定关键⽇期 77多重 BOMs 的替代选择 78通过批量的 BOM 选择 78通过展开⽇期的 BOM 选择 79通过⽣产版本的 BOM 选择 79确定替代 BOM 选择 80计算相关需求⽇期 80后继时间81计划可配套物料 81计划可配套物料 81虚拟部件 82移动库存⽔平 82替代项⽬ 82具有使⽤概率的替代项⽬ 83使⽤概率的例⼦ 83替代项⽬-⽤于信息⽬的 83替代项⽬的领料过帐 83不连续零部件 84不连续零部件- MRP 中的过程 84直接采购 85直接采购的请购单的科⽬分配 85删除或者更改直接采购的请购单 86直接采购的系统定制设置 86直接⽣产 86直接⽣产的计划订单的科⽬分配 87执⾏直接⽣产 87直接⽣产的系统定制设置 88连接版次⾄ MRP 88确定 MRP 中的版次 88当⽇期更改时调整版次 89为何不展开 BOM? 89配额安排 89创建例外消息 90调整计划的检查 90覆盖范围(供应天数) 91计算平均⽇需求量 91计算覆盖范围 91计划安全库存⽔平 92计算安全库存⽔平的例⼦ 92平均安全库存值 93显⽰覆盖范围的数据 93存储地点 MRP 94单独计划存储地点库存 95具有特殊采购的存储地点 MRP 96将存储地点排除在 MRP 外 96多⼯⼚(地点)计划 97库存调拨 97从替代⼯⼚中领料 98在替代⼯⼚中⽣产 99执⾏计划运⾏ 100计划运⾏的控制参数 101单项⽬或总计划 101计划运⾏范围 101计划运⾏的创建指⽰符 102未定期 103初始屏幕中的计划⽅式 103计划指⽰符 103显⽰计划结果104实时统计 104联机执⾏总计划 104以后台⽅式执⾏总计划 105执⾏单项,单层计划 105执⾏单项,多层计划 106计划结果中的功能 107继续有停⽌点的计划 107继续没有停⽌点的计划 108交互计划 108主计划项⽬109执⾏交互计划 109交互计划中的可⽤功能 110多层定制的计划 111执⾏销售订单计划(多层) 111销售订单计划的计划结果中的功能 112并⾏处理 113 MRP 组 113评估计划结果 114 MRP 清单 114 MRP 清单:单独显⽰115 MRP 清单中的功能 115 MRP 清单:汇总显⽰ 119打印 MRP 清单 121当前库存 / 需求清单 122库存 / 需求清单的功能 122⽐较:MRP 清单和库存/ 需求清单 127计划情况 128物料的计划情况 128产品组的计划情况 131多⼯⼚(位置)计划情况 132打印结果 132物料的计划结果 133 MRP 控制者的计划结果 136根据 DRP 的计划情况 137多系统评估(ALE) 138⽐较:计划情况和计划结果 139溯源需求 139访问溯源需求 139溯源需求的例⼦ 140溯源需求的可⽤功能 141状态报表 142层次元素 144主⽣产计划 144如何把⼀个物料标记为主计划项⽬ 145确认类型 145计划时界 145隔开主计划项⽬的计划运⾏146交互 MPS 146 MPS 过程 146处理计划订单 146计划订单的特性 147管理计划订单 147创建计划订单 148更改并显⽰计划订单 149在计划订单中处理组件 149计划订单中的能⼒均衡 152能⼒均衡中的功能 153计划订单中组件的可⽤量检查 155计划订单的汇总显⽰ 156把计划订单转换成请购单 157把计划订单转换成⽣产订单 159确认计划订单和组件 160重组过时的计划订单 161转包 161转包过程 161⼿⼯处理将被提供的组件 162物料需求计划中的可⽤量检查 162可⽤量检查 162可⽤量检查:层次 163补给提前期的说明 164计算 ATP 数量164评估可⽤量检查的结果 166拖⽋订单处理 166邮件连接 167处理拖⽋订单 167PP 物料需求计划对 SAP R/3 系统中 MRP 的简介MRP 的主数据计划运⾏ - 关于计划运⾏如何⼯作的技术和商务信息执⾏计划运⾏评估计划结果主⽣产计划处理计划订单物料需求计划中的可⽤量检查要了解如何使⽤“帮助”,按 F1 键。
Lot Size

Kanter Wang
2
最大库存为 30PC RUN MRP 结果
从中可以看出,如果需求数小于最小库存数,SAP 先产生 30 的 procurement ,然后再去 cover 需 求
Kanter Wang
3
如果需求数大于最大库存数,则应该产生多少就产生多少 这两种设定意思都是 在 covering requirement 之前先计算最大库存,对应于后台之设定
需求 数量
1000 1000 1000 1000
批量
1000 2000 3000 4000
批量 独立成本
100
仓储 成本
0 38,36
76,71 115,07
最佳
在所选的例子中,当用动态批量创建时最佳批量是 3000 件,因为 7 月 27 日的 1000 件附加 需求意味着批量独立成本将被超过。
而在 PLANNING RUN 的时候,SAP 又区分为 short term setting(for MRP, MPS ) and long term setting (for Long term planning )
对于 Static lot size (静态批量大小)又分为以下几个 Lot for Lot (EX) 意指 批对批,即如果你有某需求为 100PC,则只会产生 100PC 的获取数量(procurement qty ), 但是有点需要特别指明,如果你使用 make to stock 的话,则这个 EX 就等于 BY DAY,即每天的 需求合为同一个 procurement qty ,如在 12 月 13 号,有两个需求,一为 100PC,另一为 50PC,则如 果你用 EX 的话,则只会产生 150PC 的,而不会产生两张,原因是因为他们在同一天.如下图
SAP+物料需求计划

版本 版权 SAP 联 机 帮 助 的 惯 例
版本
R/3 3.0 版 本 1996 年 四 月
版权
1996 SAP AG。版 权 所 有 , 保 留 一 切 权 利 。 没 有 SAP AG 的 允 许 , 不 得 对 本 文 档 资 料 或 其 中 任 何 部 分 以 任 何形式借助任何手段进行复制或翻译成任何语言。 SAP AG 对 本 文 档 的 内 容 不 作 任 何 保 证 或 声 明 , 并 且 特 别 否 认 可 能 出 于 特 殊 目 的 而 暗 示 的 对 销 售 或 适 应 性 的 保 证 。SAP AG 不 对本文档中可能出现的错误负责。本文档的内容若有更改, 恕 不 另 行 通 知 。SAP AG 保 留 着 进 行 这 种 修 改 而 不 通 知 他 人 的 权 利 。 SAP AG 也 不 承 担 更 新 本 文 档 信 息 的 义 务 。 SAP 是 SAP AG 的 注 册 商 标 。
Page 3 of 3
34
34 35 35
36 36
37 37 38 38 39 39 40
40 41 41 42 43 44 45 45 46 46 47 48
PPMRP.rtf
PP Material Requirements Planning
基于预测计划的净需求计算 毛需求计划 批量计算 批对批订货量 固定批量 具有分解的固定批量 补充到最大库存水平 周期性批量确定过程 根据计划日历的期段批量 为周期性批量确定过程确定交货日期 作为交货日期的计划日历的说明
具 有 特 殊 采 购 的 存 储 地 点 MRP 将 存 储 地 点 排 除 在 MRP 外 多 工 厂( 地 点 ) 计 划 库存调拨 从替代工厂中领料 在替代工厂中生产
【疾病名】丙型病毒性肝炎【英文名】viralhepatitistypeC【缩写】【别名】C

【疾病名】丙型病毒性肝炎【英文名】viral hepatitis type C【缩写】【别名】C hepatitis;丙型肝炎;肠道外传播性非早非乙型病毒性肝炎 【ICD号】B17.1【概述】丙型病毒性肝炎(viral hepatitis type C,HC简称丙型肝炎),系丙型肝炎病毒(HCV)感染所引起的疾病,主要经血源性传播。
临床表现有发热、消化道症状及肝功能异常等。
与乙型肝炎类似,但较轻。
多数病例呈亚临床型,慢性化程度较为严重,也可导致暴发性肝衰竭。
多见于与其他病毒合并感染者。
【流行病学】HCV呈世界性分布,但不平衡。
南欧、中东、南美和部分亚洲国家人群抗-HCV阳性率较高,西欧、北美诸国和澳大利亚人群抗-HCV阳性率较低。
据估计,目前全世界至少有一亿HCV携带者,每年新发病例在美国和西欧各为17万,日本为35万,并有上升趋势。
我国1992~1995年全国30个省、市、自治区调查结果,丙肝流行率为3.2%,其中辽宁省最高(5.1%),上海最低(0.9%)。
高峰区集中在15岁以上年龄段。
丙型病毒性肝炎的传染源是病人和无症状病毒携带者,携带HCV的供全血与供血浆人员的传染源作用尤其重要。
HCV的传播途径主要有以下几方面:1.经血传播 HCV主要经血液或血液制品传播。
输血后HCV感染率国内外报告差异较大,可能与血源、输血量、人群HCV携带率等因素有关。
HCV经血液制品传播也屡见不鲜。
我国曾发生因单采血浆回输红细胞过程中,血液交叉污染引起HCV的传播及输入美国进口的Ⅷ因子引起的丙型肝炎暴发。
经常暴露血液者,如血友病患者、妇产科、外科医生、手术者、胸外手术体外循环患者、肾移植血液透析患者及肿瘤患者,输入大量库血或多次输血均极易感染丙型肝炎。
静脉毒瘾者亦是HCV感染的高危人群。
据云南昆明441名药瘾者分析,抗-HCV阳性率为60.54%。
2.性接触传播 关于丙型肝炎的性接触传播说法不尽相同,但比较倾向性的意见仍认为HCV的性接触传播不容忽视。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用Groff 生成独立于设备的文档开始之前了解本教程中包含的内容和如何最好地利用本教程,以及在使用本教程的过程中您需要完成的工作。
关于本教程本教程提供了使用Groff(GNU Troff)文档准备系统的简介。
其中介绍了这个系统的工作原理、如何使用Groff命令语言为其编写输入、以及如何从该输入生成各种格式的独立于设备的排版文档。
本教程所涉及的主题包括:文档准备过程输入文件格式语言语法基本的格式化操作生成输出目标本教程的主要目标是介绍Groff,一种用于文档准备的开放源码系统。
如果您需要在应用程序中构建文档或帮助文件、或为客户和内部使用生成任何类型的打印或屏幕文档(如订单列表、故障单、收据或报表),那么本教程将向您介绍如何开始使用Groff以实现这些任务。
在学习了本教程之后,您应该完全了解Groff的基本知识,包括如何编写和处理基本的Groff输入文件、以及如何从这些文件生成各种输出。
先决条件本教程的目标读者是入门级到中级水平的UNIX?开发人员和管理员。
您应该对使用UNIX命令行Shell和文本编辑器有基本的了解。
系统要求要运行本教程中的示例,您需要访问运行UNIX操作系统并安装了下面这些软件的计算机(请参见本教程的参考资料部分以获取相关链接):Groff。
Groff分发版中包括groff前端工具、troff后端排版引擎和本教程中使用的各种附属工具。
自由软件基金会将Groff作为其GNU Project中的一部分进行了发布,所发布的源代码符合GNU通用公共许可证(GPL)并得到了广泛的移植,几乎对于所有的UNIX操作系统、以及非UNIX操作系统(如Microsoft?Windows?)都有相应的可用版本。
在撰写本教程时,最新的Groff发布版是Version 1.19.2,对于学习本教程而言,您至少需要Groff Version 1.17。
gxditview。
从Version 1.19.2开始,Groff中包含了这个工具,而在以前的版本中,对其进行了单独的发布。
PostScript Previewer,如ghostview、gv或showpage。
如果您是从源代码安装Groff,那么请参考Groff源代码分发版中的自述文件,其中列举了所需的任何额外的软件,而在编译和安装Groff时可能需要使用这些软件。
介绍Groff用户通常在字处理软件、桌面发布套件和文本布局应用程序等应用程序环境中创建文档,而在这些环境中,最终将对文档进行打印或导出为另一种格式。
整个文档准备过程,从创建到最后的输出,都发生在单个应用程序中。
文档通常由用户通过一段时间的交互生成,使用应用程序中可用的功能来创建和操作文档,以完成最终的设计。
图1对这个过程进行了说明。
图1.典型的文档准备过程Groff是一种用于准备文档的编程语言。
它由一套工具组成,而不是单个的应用程序,groff工具是使用这些工具的前端。
其中包括处理特殊的输入文本的预处理器、用于处理输入的称为troff的主排版引擎、以及将troff的输出转换为打印和屏幕输出的各种格式的后处理器。
您可以在文本编辑器中编写输入或者从程序生成输入,无论采用哪种方式,文档的编写过程都发生在Groff系统之外。
文档使用纯文本进行编写并使用Groff语言进行标记,后者指定了文档的格式和外观(请参见为Groff编写输入部分)。
然后将该输入文本发送到Groff,以便对其进行处理从而获得所需的输出。
图2说明了这个处理过程。
图2.Groff文档准备过程本部分中余下的内容将详细介绍这个过程。
输入文本格式Groff可以接受下列编码方式的纯文本输入,cp1047、latin-1、latin-2或latin-9。
可以使用应用程序生成或在任何文本编辑器中编写输入,甚至可以在字处理器中编写输入,只要您在结束后将文档导出为纯文本即可。
输入包括文档文本、标记以及Groff语言的命令。
在本教程的下一部分(为Groff编写输入)中,您将开始编写输入。
预处理器语言并非所有的输入都直接使用Groff语言编写。
有许多高级描述语言可以用来帮助编写文档元素,如果使用低级的Groff命令语言将会很不方便而且很笨拙,比如当您在编写图片、表格和复杂的公式时。
例如,可以使用Groff来绘制图形,清单1介绍了在当前位置绘制半径为1英寸的简单圆形的Groff语言命令。
清单1.使用Groff绘制一个圆形.nr 00 n(.u.nf.nr 0x 1h'2.000i'.sp-1 D't-1.000p'h'1.000p'.sp-1 h'0.000i'v'1.000i'D'c2.000i'.sp-1.sp 2.000i+1.if n(00.fi.br.nr 0x 0.lf 3但是如果您使用PIC(Groff附带的一种预处理器语言)来绘制圆形,那么您可以使用清单2中的单个语句来替代这些命令。
清单2.使用Groff和PIC预处理器绘制一个圆形circle rad 1in要使用预处理器代码,您需要将该代码插入到描述的元素在输入中出现的位置。
这段代码通过开始和结束标记(例如PIC指令,包含在.PS和.PE中,它们分别各占据一行)与其他的文本分隔开来。
所有的预处理器都具有对应的标记,以便将它们的文本与常规的Groff输入区分开来。
当使用pic筛选器发送输入文本时,会将所有在这些标记之间的文本转换为Groff格式化命令,再将经过筛选的文本发送到标准输出。
然后,您可以使用管道将其传输到另一个预处理器或troff。
通过将该内容发送到合适的预处理器并使用管道将其输出到troff,groff前端可以使这个处理过程自动化。
表1列出了Groff附带的或常用的一些预处理器工具。
表1.Groff中常用的预处理器预处理器描述eqn等式和数学公式grap图形(单独分发)grn GREMLIN文件格式的图片pic图片、图表和线条图refer参考文献soelim外部源文件tbl表格和图表宏包宏是具有标识名称的Groff输入片段,并且可以在输入中的任何位置使用该名称来调用它,就像内置的Groff命令。
宏通常用作复杂操作的简略表示。
文档可以包含它们自己的宏,并且可以引用一个外部宏包。
表2列出了Groff安装中附带的主要的宏包。
通常使用这些宏包的其中之一来帮助编写文档,因为它们可以处理复杂的文档结构和格式化,使用一组新的mom宏,即使是非专业的用户也可以使用最少的指令来创建各种文档。
每个宏包都用于某个目的或文档类型,您不能在同一个文档中使用多个宏包或者同时处理需要不同的宏包的多个文件。
表2.Groff中使用的宏包包描述man这个宏用于系统手册页面,但是也可以用于其他的打印或屏幕文档。
mandoc这个宏根据需要调用man或mdoc包。
mdoc它用于格式化UNIX手册页面。
me由Berkeley实现的me宏,用于格式化科技论文。
mm这个宏是AT&T实现的Documenter's Workbench Memorandum宏。
mom这个新宏是一个称为"maximum overdrive macros"的主要宏包。
mom的目标是用作文档一般的、直观的排版的完整解决方案。
ms这个宏是Bell Labs Manuscript宏的实现,用于打印的手稿,包括信件、报表、文章和书籍。
输出驱动程序troff工具并不编写任何设备输出,它仅仅输出中间的、独立于排版的描述格式,而这种格式(与Groff输入一样)是纯文本的。
Groff后处理器必须对这种格式进行进一步的处理,以获取针对特定设备的输出。
可以使用管道对其进行传递,并使用相应的UNIX工具对其进行进一步的处理。
Groff输出驱动程序是一些筛选器,它们使用Groff文档描述格式作为其标准输入,并将其转换为特殊的输出格式,然后写到标准输出。
表3列出了Groff附带的输出驱动程序。
表3.Groff中使用的输出驱动程序驱动程序描述grodvi用于DVI(独立于设备)输出的驱动程序grohtml用于HTML输出的驱动程序grolbp用于Canon打印机(CaPSL页面描述格式)输出的驱动程序grolj4用于HP LaserJet 4打印机输出的驱动程序grops用于PostScript输出的驱动程序grotty用于终端设备(纯文本输出)的驱动程序gxditview用于X Window System显示输出的驱动程序汇总结果发送到Groff进行处理的输入文本首先经过指定的预处理器的筛选,然后读入指定宏包的内容并由troff排版引擎对文本进行处理。
然后,将Groff文档描述格式的输出传递到指定的输出驱动程序,而输出驱动程序则生成最终的输出格式并将其发送到标准输出。
您可以将其发送到一个文件(包括打印系统的后台处理器)、外部查看器应用程序或命令管道中的其他某个程序。
该过程如图3所示,这是图2的详细的版本。
图3.Groff文档准备过程的详细视图为Groff编写输入Groff输入文件包含文档的文本,并使用指定请求的特性或控制的Groff语言命令进行标记。
既然您已经安装了Groff,并且了解了它的处理过程,那么这一部分将向您介绍如何编写Groff输入。
下面的示例使用了带-X选项的groff前端工具,该选项将输出通过管道传递到gxditview,以便在X Window中进行预览。
因为在没有指定文件的情况下,groff从标准输入进行读取,所以您可以使用Shell重定向操作符建立一个多行字符串文档,以进行输入并测试小规模输入示例的结果。
编写有格式的文本输入中所编写的文档文本是没有标记的纯文本。
因为Groff语言独特的格式,所以建议用户在输入文件中编写由若干行组成的句子,使用标点符号进行分隔。
要对行或段落进行缩进,可以在它的前面使用空白字符,或者使用缩进命令,在本部分后面的内容中将对缩进命令进行描述。
要了解在Groff中所进行的缺省工作,需要完成的第一件事情是尝试通过Groff运行一些文本。
首先,尝试一些具有格式化信息的文本,但是其中没有命令或标记。
在Shell中输入下面的内容:$groff-X END Sales team:We need to check inventory at all locations,even before placing any orders.This is the new policy--effective immediately.The boss END当您在进行这项工作的时候,groff命令将您所输入的文本发送到troff 引擎,以便对其进行处理。
并将输出发送到gxditview,这将在新的窗口中对其进行显示。