Groff 应用17页word资料.docx
《Groff 应用17页word资料.docx》由会员分享,可在线阅读,更多相关《Groff 应用17页word资料.docx(20页珍藏版)》请在冰豆网上搜索。
![Groff 应用17页word资料.docx](https://file1.bdocx.com/fileroot1/2023-2/3/9dc66919-8399-416b-8567-ff0aab863283/9dc66919-8399-416b-8567-ff0aab8632831.gif)
Groff应用17页word资料
使用Groff生成独立于设备的文档
其实,任何一门学科都离不开死记硬背,关键是记忆有技巧,“死记”之后会“活用”。
不记住那些基础知识,怎么会向高层次进军?
尤其是语文学科涉猎的范围很广,要真正提高学生的写作水平,单靠分析文章的写作技巧是远远不够的,必须从基础知识抓起,每天挤一点时间让学生“死记”名篇佳句、名言警句,以及丰富的词语、新颖的材料等。
这样,就会在有限的时间、空间里给学生的脑海里注入无限的内容。
日积月累,积少成多,从而收到水滴石穿,绳锯木断的功效。
开始之前
“教书先生”恐怕是市井百姓最为熟悉的一种称呼,从最初的门馆、私塾到晚清的学堂,“教书先生”那一行当怎么说也算是让国人景仰甚或敬畏的一种社会职业。
只是更早的“先生”概念并非源于教书,最初出现的“先生”一词也并非有传授知识那般的含义。
《孟子》中的“先生何为出此言也?
”;《论语》中的“有酒食,先生馔”;《国策》中的“先生坐,何至于此?
”等等,均指“先生”为父兄或有学问、有德行的长辈。
其实《国策》中本身就有“先生长者,有德之称”的说法。
可见“先生”之原意非真正的“教师”之意,倒是与当今“先生”的称呼更接近。
看来,“先生”之本源含义在于礼貌和尊称,并非具学问者的专称。
称“老师”为“先生”的记载,首见于《礼记?
曲礼》,有“从于先生,不越礼而与人言”,其中之“先生”意为“年长、资深之传授知识者”,与教师、老师之意基本一致。
了解本教程中包含的内容和如何最好地利用本教程,以及在使用本教程的过程中您需要完成的工作。
要练说,得练听。
听是说的前提,听得准确,才有条件正确模仿,才能不断地掌握高一级水平的语言。
我在教学中,注意听说结合,训练幼儿听的能力,课堂上,我特别重视教师的语言,我对幼儿说话,注意声音清楚,高低起伏,抑扬有致,富有吸引力,这样能引起幼儿的注意。
当我发现有的幼儿不专心听别人发言时,就随时表扬那些静听的幼儿,或是让他重复别人说过的内容,抓住教育时机,要求他们专心听,用心记。
平时我还通过各种趣味活动,培养幼儿边听边记,边听边想,边听边说的能力,如听词对词,听词句说意思,听句子辩正误,听故事讲述故事,听谜语猜谜底,听智力故事,动脑筋,出主意,听儿歌上句,接儿歌下句等,这样幼儿学得生动活泼,轻松愉快,既训练了听的能力,强化了记忆,又发展了思维,为说打下了基础。
关于本教程
本教程提供了使用Groff(GNUTroff)文档准备系统的简介。
其中介绍了这个系统的工作原理、如何使用Groff命令语言为其编写输入、以及如何从该输入生成各种格式的独立于设备的排版文档。
本教程所涉及的主题包括:
文档准备过程
输入文件格式
语言语法
基本的格式化操作
生成输出
目标
本教程的主要目标是介绍Groff,一种用于文档准备的开放源码系统。
如果您需要在应用程序中构建文档或帮助文件、或为客户和内部使用生成任何类型的打印或屏幕文档(如订单列表、故障单、收据或报表),那么本教程将向您介绍如何开始使用Groff以实现这些任务。
在学习了本教程之后,您应该完全了解Groff的基本知识,包括如何编写和处理基本的Groff输入文件、以及如何从这些文件生成各种输出。
先决条件
本教程的目标读者是入门级到中级水平的UNIX?
开发人员和管理员。
您应该对使用UNIX命令行Shell和文本编辑器有基本的了解。
系统要求
要运行本教程中的示例,您需要访问运行UNIX操作系统并安装了下面这些软件的计算机(请参见本教程的参考资料部分以获取相关链接):
Groff。
Groff分发版中包括groff前端工具、troff后端排版引擎和本教程中使用的各种附属工具。
自由软件基金会将Groff作为其GNUProject中的一部分进行了发布,所发布的源代码符合GNU通用公共许可证(GPL)并得到了广泛的移植,几乎对于所有的UNIX操作系统、以及非UNIX操作系统(如Microsoft?
Windows?
)都有相应的可用版本。
在撰写本教程时,最新的Groff发布版是Version1.19.2,对于学习本教程而言,您至少需要GroffVersion1.17。
gxditview。
从Version1.19.2开始,Groff中包含了这个工具,而在以前的版本中,对其进行了单独的发布。
PostScriptPreviewer,如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绘制一个圆形
.nr00n(.u
.nf
.nr0x1
h'2.000i'
.sp-1D't-1.000p'h'1.000p'
.sp-1h'0.000i'v'1.000i'D'c2.000i'
.sp-1
.sp2.000i+1
.ifn(00.fi
.br
.nr0x0
.lf3
但是如果您使用PIC(Groff附带的一种预处理器语言)来绘制圆形,那么您可以使用清单2中的单个语句来替代这些命令。
清单2.使用Groff和PIC预处理器绘制一个圆形
circlerad1in
要使用预处理器代码,您需要将该代码插入到描述的元素在输入中出现的位置。
这段代码通过开始和结束标记(例如PIC指令,包含在.PS和.PE中,它们分别各占据一行)与其他的文本分隔开来。
所有的预处理器都具有对应的标记,以便将它们的文本与常规的Groff输入区分开来。
当使用pic筛选器发送输入文本时,会将所有在这些标记之间的文本转换为Groff格式化命令,再将经过筛选的文本发送到标准输出。
然后,您可以使用管道将其传输到另一个预处理器或troff。
通过将该内容发送到合适的预处理器并使用管道将其输出到troff,groff前端可以使这个处理过程自动化。
表1列出了Groff附带的或常用的一些预处理器工具。
表1.Groff中常用的预处理器预处理器描述
eqn等式和数学公式
grap图形(单独分发)
grnGREMLIN文件格式的图片
pic图片、图表和线条图
refer参考文献
soelim外部源文件
tbl表格和图表
宏包
宏是具有标识名称的Groff输入片段,并且可以在输入中的任何位置使用该名称来调用它,就像内置的Groff命令。
宏通常用作复杂操作的简略表示。
文档可以包含它们自己的宏,并且可以引用一个外部宏包。
表2列出了Groff安装中附带的主要的宏包。
通常使用这些宏包的其中之一来帮助编写文档,因为它们可以处理复杂的文档结构和格式化,使用一组新的mom宏,即使是非专业的用户也可以使用最少的指令来创建各种文档。
每个宏包都用于某个目的或文档类型,您不能在同一个文档中使用多个宏包或者同时处理需要不同的宏包的多个文件。
表2.Groff中使用的宏包包描述
man这个宏用于系统手册页面,但是也可以用于其他的打印或屏幕文档。
mandoc这个宏根据需要调用man或mdoc包。
mdoc它用于格式化UNIX手册页面。
me由Berkeley实现的me宏,用于格式化科技论文。
mm这个宏是AT&T实现的Documenter'sWorkbenchMemorandum宏。
mom这个新宏是一个称为"maximumoverdrivemacros"的主要宏包。
mom的目标是用作文档一般的、直观的排版的完整解决方案。
ms这个宏是BellLabsManuscript宏的实现,用于打印的手稿,包括信件、报表、文章和书籍。
输出驱动程序
troff工具并不编写任何设备输出,它仅仅输出中间的、独立于排版的描述格式,而这种格式(与Groff输入一样)是纯文本的。
Groff后处理器必须对这种格式进行进一步的处理,以获取针对特定设备的输出。
可以使用管道对其进行传递,并使用相应的UNIX工具对其进行进一步的处理。
Groff输出驱动程序是一些筛选器,它们使用Groff文档描述格式作为其标准输入,并将其转换为特殊的输出格式,然后写到标准输出。
表3列出了Groff附带的输出驱动程序。
表3.Groff中使用的输出驱动程序驱动程序描述
grodvi用于DVI(独立于设备)输出的驱动程序
grohtml用于HTML输出的驱动程序
grolbp用于Canon打印机(CaPSL页面描述格式)输出的驱动程序
grolj4用于HPLaserJet4打印机输出的驱动程序
grops用于PostScript输出的驱动程序
grotty用于终端设备(纯文本输出)的驱动程序
gxditview用于XWindowSystem显示输出的驱动程序
汇总结果
发送到Groff进行处理的输入文本首先经过指定的预处理器的筛选,然后读入指定宏包的内容并由troff排版引擎对文本进行处理。
然后,将Groff文档描述格式的输出传递到指定的输出驱动程序,而输出驱动程序则生成最终的输出格式并将其发送到标准输出。
您可以将其发送到一个文件(包括打印系统的后台处理器)、外部查看器应用程序或命令管道中的其他某个程序。
该过程如图3所示,这是图2的详细的版本。
图3.Groff文档准备过程的详细视图
为Groff编写输入
Groff输入文件包含文档的文本,并使用指定请求的特性或控制的Groff语言命令进行标记。
既然您已经安装了Groff,并且了解了它的处理过程,那么这一部分将向您介绍如何编写Groff输入。
下面的示例使用了带-X选项的groff前端工具,该选项将输出通过管道传递到gxditview,以便在XWindow中进行预览。
因为在没有指定文件的情况下,groff从标准输入进行读取,所以您可以使用Shell重定向操作符建立一个多行字符串文档,以进行输入并测试小规模输入示例的结果。
编写有格式的文本
输入中所编写的文档文本是没有标记的纯文本。
因为Groff语言独特的格式,所以建议用户在输入文件中编写由若干行组成的句子,使用标点符号进行分隔。
要对行或段落进行缩进,可以在它的前面使用空白字符,或者使用缩进命令,在本部分后面的内容中将对缩进命令进行描述。
要了解在Groff中所进行的缺省工作,需要完成的第一件事情是尝试通过Groff运行一些文本。
首先,尝试一些具有格式化信息的文本,但是其中没有命令或标记。
在Shell中输入下面的内容:
$groff-XENDSalesteam:
Weneedtocheckinventoryatalllocations,
evenbeforeplacinganyorders.
Thisisthenewpolicy--
effectiveimmediately.
ThebossEND
当您在进行这项工作的时候,groff命令将您所输入的文本发送到troff引擎,以便对其进行处理。
并将输出发送到gxditview,这将在新的窗口中对其进行显示。
它应该与图4所示类似。
图4.Groff对文本输入进行处理
尽管在输入中没有指定字体,但它对文本进行了字体设置。
缺省情况下,文档文本被设置为10磅TimesRoman,gxditview将使用X服务器中可用的字体。
您还可以看到,一些输出行中的内容来自于多个输入行。
出现这种情况是因为troff按行读取其输入文本,从左空白页边到右空白页边收集足够填充一行输出的内容,缺省行长度为6.5英寸(troff还会添加分页符,缺省情况下,页面长度为11英寸)。
您可以对所有这些缺省值进行配置。
理解填充、调整和分隔
您注意到如何将多行输入合并到输出中吗?
但是使用空白字符作为开头的那些行都是新行。
这个示例演示了Groff中的三个重要的概念。
连续地读取输入,直到读取了足够填充输出中一行的单词。
然后,对该行中的文本进行调整:
对其内部的单词间距进行处理,以使文本适合于左右空白页边之间的距离(这是缺省的行为,关于其他类型的填充和调整,将在本部分后面的内容中描述)。
如果某一行以空格作为开始,那么它将产生分隔,troff停止为当前输出行收集单词,输出当前行,而不对其进行任何填充,然后为下一行输出读取输入文本。
(在新的输出行的开始处,输出该空格,不对其填充进行调整。
)
空行也会导致分隔。
通常,在每个文件中至少有一个分隔,即文件末尾。
使用制表符并设置间距
还应该认识到其他的一些文本缺省值:
.、?
和!
字符都被认为是句子的结束字符,并且对它们的间距进行相应的调整。
如果需要,可以对单词进行断字。
缺省情况下,将制表位设置为整行长度中的半英寸长。
请尝试这个示例:
$groff-XENDWehaveexcessinventory!
Hereisalist.Thesenumbersareforourtwomostpopularlocations.However,someadditionaldataisavailable.
Gadgets2318Gizmos101397END
在输出中您可以看到,对句子之间的间距进行了调整,并且比单词之间的间距要大。
应该对一行末尾的单词使用连字符号连接(取决于您的字体服务器),并且制表位处的数字都是左对齐的。
为特殊的字符和功能使用转义序列
通常,您不能在文档中使用纯文本指定所有的字符,例如,项目符号和希腊字母则必须使用其他的方式进行输入。
您可以在输入中包含转义序列以指定这些特殊的字符、书写下标和上标、指定其他的功能(包括字体变更、行和页面中的移动)。
转义可能发生在输入文本中的任何位置,并且它在其出现之处生效。
在编写转义序列时,使用反斜杠字符(称为转义字符,可以对其进行自定义),然后紧跟用来表示特殊转义功能的字符。
e转义将打印当前的转义字符,所以您可以使用它在文档文本中打印一个反斜杠字符。
现在,请尝试下面的代码:
$groff-XENDThereportisstoredineusrelocaleinv.
END
您可以看到,转义的前后不需要空格,常规文档文本可以直接出现在它的前后。
但是一些转义功能需要相应的参数,这些参数以下列方式之一紧跟在功能符号后面:
单个字符、左圆括号后紧跟两个字符、一个用引号括起来的字符串、或一个用中括号括起来的字符串。
例如,f转义用来选择字体,它通常接受一个参数,紧跟其后的单个字符指定了字体属性,包括B表示黑体或P表示前面使用的字体。
您可以使用这个转义在一行中的任何位置更改字体的属性。
尝试下面的代码:
$groff-XENDThisisafBboldfPwordEND
您将在输出窗口中看到"Thisisaboldword"。
表4列出了一些最常用的转义功能。
表4.常用的Groff转义转义描述
&插入一个空字符。
这是停止缺省行为的一种很好的办法,例如,要删除Groff通常插入到句子末尾的额外的间隔,可以在句子最后的标点符号后使用这个转义。
"注释标记。
troff将删除这个转义及该行中位于它右边的所有内容(整行的注释将变成空白行,从而在输出中产生分隔)。
(ch插入一个字符,其中ch可以指定要打印的字符的名称:
em表示长划线、bu表示项目符号、lq和rq分别表示左引号和右引号。
您可以在groff_charman页面中找到字符名称的完整列表。
-插入减号。
e打印当前的转义字符。
fX选择字体,其中,X可以是下列之一:
B表示黑体、R表示Roman、I表示斜体或P表示前面的字体。
h'e'根据用引号括起来的参数e,从当前位置进行水平移动。
缺省的单位是em。
l从当前位置绘制一条水平的线条。
通过用引号括起来的参数指定其长度。
例如,l'1i'绘制一条长度为1英寸的线条。
缺省的单位是em。
L从当前位置绘制一条垂直的线条。
通过用引号括起来的参数指定其长度。
缺省的单位是em。
o'STRING'重印标记。
打印用引号括起来的参数STRING,并且不增加字符之间的垂直量。
(要包括用单引号括起来的字符作为STRING,可以使用其他某个字符将该参数括起来。
)
s选择磅值。
可以使用下列方式之一指定该数值:
直接使用数值参数(范围为4-39)、或使用以(字符开头的两位数参数(范围为01-99)、或使用以+或-开头的一位数(表示相对于当前大小进行增加或减小)。
在没有提供参数时,这个转义返回到前面的磅值。
实现命令请求
在Groff用语中,进行排版的命令称为请求。
它们可以指示排版引擎执行某种格式化任务或者以某种方式工作。
请求可以完成下列任务中的一种:
更改紧随其后的文本的格式、更改页面布局、更改整个文档的布局或其他特性。
转义可以出现在文本行中的任何位置,而与转义不同,请求根本不能出现在文本行中,通常它们会使用单独的一行。
这样就可以从文档文本中区分出请求,它们通常以一个控制字符开头。
点号字符(.)是用来实现请求的常用控制字符。
但是对于一些请求,其正常操作将在文本中产生分隔,如果您不希望出现分隔,您可以使用非分隔的控制字符来进行请求,它将禁止产生分隔。
单引号字符(')是常用的非分隔请求字符(可以对这两种控制字符进行配置)。
要使用这些控制字符其中之一来开始文档中的一行,可以在输入行的前面加上&转义。
请求可能需要相应的参数,这时您应该在请求的后面加上一个空格,然后给出相应的参数,使用空格进行分隔。
(如果参数包含空格,那么应该将该参数括起来。
)
例如,尝试使用sp请求,它用来插入垂直间隔:
$groff-XENDITEMSNOWINSTOCK
.sp1inACROSSALLWAREHOUSES(ALLFIGURESINTABLECURRENTASOFTODAY)
END
这个示例中的输入包含了插入1英寸垂直间隔的请求。
sp请求通常是一个分隔请求,在该请求出现之处,为当前输出行读取的任何文本都立即写入到输出,无论它是否填满了该行。
然后,对请求进行处理(在本示例中,添加1英寸垂直间距),并继续处理一行新的输出。
请参考下面的图5中的输出。
图5.分隔请求
如果您使用非分隔控制字符实现相同的请求,那么它不会产生分隔,在进行请求后依然保存为当前输出行读取的文本。
现在,请尝试下面的代码:
$groff-XENDITEMSNOWINSTOCK
'sp1inACROSSALLWAREHOUSES(ALLFIGURESINTABLECURRENTASOFTODAY)
END
其结果显示在图6中,其输出与前面不同:
在输出文本ITEMSNOWINSTOCK之前,进行了向下移动1英寸的请求,因为该文本没有填满一整行。
将保存该文本直到进行请求,并且在输入文本填满了一整行后,才将其发送到输出。
图6.非分隔请求
某些请求总是会产生分隔,如用于行间距的那些请求。
可以对用来指定请求的控制字符进行配置,并将其更改为其他的字符。
如果请求是未知的,那么将忽略它。
通常,需要参数的请求在没有给定参数时具有其缺省行为,如将一个属性恢复为以前的值或使用值1。
例如,ce请求用来使后面的行居中,如果您没有提供参数,那么ce假设其值为1,并仅将后面的第一行文本居中。
表5描述了一些最常用的请求及其缺省行为。
表5.常用的Groff请求名称描述
adX根据给定的参数调整填充:
参数描述
l填充至左空白页边(右边未对齐)。
r填充至右空白页边(左边未对齐)。
c居中填充。
b填充至两侧空白页边(等同于fi请求,这是它的缺省行为)。
n与b相同。
在没有参数的情况下,将填充设置为在上一次af请求中使用的值。
bp分页。
对文本进行分隔,并开始新的输出页面。
br请求分隔,因此开始一行新的输出(如果使用非分隔控制字符进行请求,那么它将不执行任何操作)。
ceX居中文本。
分隔文本,并使后面的X行文本在页面中水平居中。
在没有参数的情况下,仅对下一行进行居中。
当参数为0时,则关闭居中功能。
fi填充行至两侧空白页边(缺省请求)。
hyX请求断字。
通过添加所需的特性来构建数值参数:
值描述
1始终断字(缺省行为)。
2不对页面或分栏中最后一个单词进行断字。
4不对一个单词中最后的两个字符进行断字。
8不对一个单词中开头的两个字符进行断字。
可以使用下列选项来构建有效的断字请求:
1、2、4、6、8、10、12和14。
inX将缩进设置为X。
这是左空白页边和文本之间的间距。
(缺省情况下,没有间距。
)缺省单位为em。
在没有参数的情况下,将缩进设置为以前的值。
llX将行长度(左右空白页边之间的间距长度)设置为X。
缺省的行长度为6.5英寸,缺省单位为em。
在没有参数的情况下,该请求将行长度设置为上一个ll请求之前的值。
lsX更改文档的行间距:
在每行后输出X-1空行。
要使文档变为双倍行距,可以使用2作为参数。
在没有参数的情况下,使用上一次调用该请求之前的值。
缺省情况下,行间距设置为1。
na不进行调整。
禁止调整填充。
nh不进行断字。
nf不进行填充。
输出文本与它在输入中的显示相同,不对空白页边进行任何填充。
ns没有间距。
禁止使用空行或者sp请求调整间距。
poX将页面偏移设置为X。
这是纸张左边缘和左空白页边之间的间距。
(缺省的页面偏移为1英寸。
)在没有参数的情况下,将页面偏移设置为上一次使用po请求之前的值。
psX将磅值更改为X。
在没有参数的情况下,将磅值更改为以前的大小。
在参数之前使用+或-操作符,以便相对于当前大小更改磅值。
rs回车间距。
禁止ns请求。
spX将垂直间距移动所请求的大小。
如果没有指定具体的大小,缺省情况为向下移动一行。
负值表示向上移动,以|开头的数值表示相对于页面顶端进行移动。
ta设置制