司存友 朱寅非 罗俐雅
(1.江苏省水文水资源勘测局,江苏 南京 210029;2.南京城市职业学院,江苏 南京 210038)
《苏北供水计量关键技术》共计12章,由十多位作者参与编写,每章近100 页,整个文档近1000 页。汇总上来的文档,排版格式五花八门,由三位工作人员采用手工方式参与第一版稿件的排版,花了近5 个工作日。整个文章编写改稿约6 次,每次排版工作量巨大,非常考验工作人员的耐心、细心和恒心。所以,采用批量格式替换操作和程序辅助排版,显得非常必要和迫切。
笔者主要针对工程技术长文档,应用Word 模板、VBA 宏、正则表达式以及高级查找和替换等技术,对文档的各级标题、正文、题注、图表等样式进行快速统一排版,极大地减轻人力劳动,提高排版的效率。
由于没有事先做好文档排版格式要求和约定,也没有进行相关Word排版培训工作,故收集上来的文稿排版格式较为混乱,特点如下:
(1)大部分章节具有大纲级别,但各大纲级别(包括各段落正文)格式不一。如:同样的大纲2 级(标题2),字体有宋体、仿宋,字号有四号、三号等;段落前后行间距不统一;多级列表编号有自动的,也有手工编制的。
(2)个别文档,没有大纲级别。完全手工进行段落层次编号,如:编号“第一章”“1.1”“1.1.1”等。
(3)图的格式不统一,有嵌入式、文字环绕式(上下型、浮于文字、四周型)等。
(4)图表的题注编号不统一,有按大纲2 级编号的,也有按大纲1 级编号的,而且基本是手工编号,不能随章节调整而自动更新。
(5)页眉、页脚格式不统一。页码格式也是各式各样,而且存在页码不连续情况。
(6)上下标问题,不少km2、m3/s中的2、3 上标格式丢失。
(7)单位问题,如:有的用中文单位厘米,有的用英文单位cm;有的用立方米,有的用m3。
(8)引用编号错误问题,由于章节调整,正文中出现“见图x.x-x”“见表x.x-x”等,与排版后的编号不一致。
(9)无用的空白行较多。
排版的总体目标,就是达到使收集上来的文档按所有章节的大纲1(标题1)至大纲6(标题6)、正文、图、表、公式、页眉页脚等样式进行统一编排,确保整个文章排版风格整齐、统一、规范。所有标题的多级列表编号自动化,方便章节间顺序的调整;所有图表题注规范化;排版后的主要样式具备可修改性,便于通篇文章的格式调整。
为了达到上述目标,并针对提出的问题,笔者主要采用Word 模板、VBA 宏、正则表达式、域、自定义快捷键、高级查找与替换等技术,对文档进行快速排版,最终达到通篇文档排版的规范化、自动化,提高排版效率,减轻工作人员负担。
Word 样式是指某一段落文字的表现形式,对于VBA 宏来说就是一组参数的集合,如:字体类型、字体大小、字体颜色、对齐方式、制表位、段前段后行间距、各种编号格式等。一旦用户创建了某种段落样式,就可以选定某些段落使用该样式。
Word 模板是一种特殊Word 文档,包括:各级大纲标题、正文、题注、页眉页脚、目录等各类样式的集合。除了样式之外,模板还可以包含其他元素,比如:宏、自动图文集、自定义工具栏等。自定义模板的样式可以通过文档模板管理器进行导入,并可进行增加、删除等操作。
《苏北供水计量关键技术》是一个典型的工程技术文档,主要以文字为主,辅以一定量的图片、报表和公式等。为此建立了模板文件“模板——供水计量.dotx”,定义了排版所需的标题1 至标题6、段落正文、表内文字、图题注、表题注等样式(见图1)。样式主要包括:字体、字号、段落行间距、首行是否缩进、快捷键以及按大纲等级进行自动编号等内容。模板中的各个样式可以根据需要随时重新调整。
下面举例说明多级列表样式与标题关联的设置方法:
图1 模板样式设置
(1)多级编号设置。在【开始】→【段落】→【多级列表】中,单击【定义新的列表样式】菜单,命名多级列表样式为“样式—供水”。再点击【格式】→【编号】,设置各级编号格式,并将级别链接到相应级别的标题样式,编号和文字之间设置空格符连接。一般习惯将1 级编号设为“第一章”,2 级编号设为“1.1”等形式。可以通过勾选【正规形式编号】按钮,将其余编号改为全数字形式。
(2)标题样式设置。以标题3 为例,设置如下:在【开始】→【样式】中,点击下拉箭头出现【样式】对话框,找到“标题3”样式,右键单击【修改】进行设置。将样式名称改为“标题3,供水”,单击【格式】出现【字体】、【段落】、【快捷键】等子项,可以逐一对字体类型、字体大小、首行缩进2 个字符、段落行间距、段前是否分页、快捷键等进行一系列的格式设置。
3.4.1 样式管理
(1)样式加载和删除。单击【开发工具】中的【文档模板】按钮,出现【模板和加载项】对话框,点击【选用】按钮,加载自定义的“模板—供水计量.dotx”模板。如果模板样式发生修改,可以勾选“自动更新文档样式”,以更新当前文档相关样式。可以点击【管理器】对当前文档的样式进行添加、删除、改名等操作,也可以将模板样式覆盖到当前文档中。
(2)样式修改。在模板文档中,单击【开始】中的【样式】右下侧的下拉箭头,出现【样式】管理界面,可以对其中的任何样式通过点击鼠标右键进行修改。
3.4.2 样式使用
对于所需排版的文档,加载模板后,选中某几个段落,按相应的快捷键,可以快速设置段落样式,也可以通过VBA 宏使用样式。
4.1.1 对于有大纲级别的文档
尽管这些文档具备大纲级别,但各级大纲的文字格式、段落样式却不统一。VBA 宏的代码思路,就是逐段循环,按段落大纲级别自动匹配模板中相对应的多级列表标题样式。这样既保留了大纲层次,又给相应大纲级别设置了自动多级列表编号。代码主要部分如下:
4.1.2 对于手工编号的文档
个别文档,以“第十二章”或“第12章”、“12.1”、“12.3.1”、“12.4.3.1”等形式表示段落层次,而未设置大纲(标题)级别。本文程序主要采用正则表达式技术来查找段落首句开始为“第X章”、“12.3.1”等字样的段落,并设置相应大纲级别或标题样式。
“第十二章”或“第12章”的正则表达式匹配模式为:“第[u4E00-u9FA5]+章|第d+章”。而“12.1”、“12.3.1”、“12.4.3.1”等段落层次的匹配模式为:“(d+.){1,5}”,其 中,“d+”表示1 个数字以上,“.”表示小数点,“(d+.)”表示类似“12.1”的列表编号,“{1,5}”表示至少重复1 至5次。代码主要如下:
4.2.1 表题注自动编号
题注编号主要采用CaptionLabels的NumberStyle、ChapterStyleLevel 等属性值进行设置。表题注自动编号代码如下,图题注编号与下述代码类似。
4.2.2 表头首行加粗
文档中所有表头的首行加粗,主要采用Rows、Font 等属性进行设置,主要代码如下:
4.2.3 所有图片居中
尽管图片有CAD、JPG 等格式,但在Word 中VBA 却只分为两类:嵌入型(InLIneShape)和文字环绕型(Shape)。由于Shape 型图片似乎不支持居中属性,故将所有环绕型图片转嵌入型图片处理。
由于篇幅有限,表格内文字样式统一,一次性替换平方公里、立方米及上下标等代码暂略。
“选择和替换”的功能是非常多的。本文排版主要用到以下功能:
(1)通过查找大纲级别,分别设置其标题样式。在【查找和替换】→【格式】→【段落】中,设置查找的段落为大纲1 级,然后按模板定义的快捷键“Ctrl+1”,这样所有大纲1 级的样式都被设置成模板中的“标题1,供水”样式。大纲2 至大纲6 以及正文段落均可以进行类似操作。
(2)批量设置嵌入式图片居中。对于嵌入式的图片,直接打开“查找和替换”对话框,先将“查找内容”设置为“^g”,然后将光标定位到“替换”的文本框中,单击“更多”按钮,此时可以看到搜索选项、格式、特殊格式等内容,从格式的下拉菜单中选择“图文框”,将水平位置设置为居中,再返回“查找和替换”对话框,单击“全部替换”按钮后即可生效。
(3)一次性修改所有图片的题注格式。先为一个图片添加题注,然后选中那个题注按“Alt+F9”,切换到域代码状态,按“Ctrl+C”复制这个域代码,包括域代码的大括号。打开查找替换框,在查找处输入“^g”、替换处输入“^&^p^c”全部替换。“Ctrl+A”全选,按“F9”刷新,然后按“Alt+F9”切换回域值状态。
(4)批量将“m3”替换为“m3”。这里采用剪贴板的方法,在【查找和替换】处输入m3,在【替换为】输入“^c”,“^c”为刚才Copy 的剪贴板内容,然后全部替换即可。“km2”改为“km2”,可以类似操作。
Word 只能使用部分正则表达式,本文排版中主要运用如下:
(1)将文档中所有类似5.68 厘米、25 厘米等一次性替换成5.68 cm、25 cm。在查找处输入:“([0-9]{1,2})厘米”,在替换处输入:“1cm”。注:必须勾选【使用通配符】按钮,下同。
(2)将手工段落层次编号替换为无。如:12.3.4.1,可在查找处输入:“[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}”,在替换处不需输任何字符。
(3)一次性删除所有连续的空白段落。在查找处输入:“(^13)1@”,在替换处输入:“^p”。
“节”是文档格式化的最大单位(排版格式范围),分节符是一个“节”的结束符号,分节符只控制它前面文字的格式。若需要在一页之内或多页之间采用不同的版面布局,需插入“分节符”将文档分成几“节”,然后根据需要设置每“节”的格式。
通常用分节符来设置封面、目录、正文、页面横排等分节格式控制和页脚编号格式等。双击页码,点击“链接到前一条页脚”,这样页脚编码可以重新编码或连续编码。
域是Word 中的一种特殊命令,它由花括号、域名(域代码)及选项开关构成。本文主要用来实现自动更新图、表、公式题注的自动编号、插入目录等功能。在图、表或标题等编号处插入书签并命名,在正文中插入交叉引用刚才的书签名。这样,“见图X.X-X”等样式,在章节段落等次序调整时,通过“F9”更新域即可实现编号的自动更新,大大节省了人工排版工作量。
之所以要使用主控文档,主要在于主文档中进行的格式设置、修改、修订等内容都能自动同步到对应子文档中,这一点对于需要进行重复修改、拆分、合并操作特别重要。本文所涉及的子文档过多过大,通过主控文档合成后的终稿长达千页,若再进行各种排版,Word 运行和保存速度异常缓慢甚至崩溃。建议按各章节单独排版,然后利用主控文档技术进行合成。
笔者总结了对超长文档进行事后排版的经验,主要采用模板与VBA相结合的方式进行程序辅助排版,以及通过高级查找和替换功能进行一次性替换操作排版。由于模板样式的使用,能使各种样式形象可见,同时简化了大量样式、格式的程序编码工作,使程序设计更加清晰简洁。经过测试,一般100 多页的文档,程序排版仅需10 min 左右,而人工操作约需1 d 时间,大大提高了效益。
总的来说,对于超长技术文档,应事先对排版要求进行培训和约定,规划设计好各大纲级别样式、正文样式、相关图表样式,事先做好相关图、表、公式编号的标签和交叉引用等,这样可减轻通篇文档的排版工作量,也便于各章节之间相互调整。