word中,各种列表编号、图表序号、样式格式等等问题,我已经在 word常规模板设置 中做了比较详细的叙述。博客中我讲解了如何从零开始规范得构建一个word模板,规范的使用方式可以使word作为办公软件的效率大大提升。本文重点想更深入地探讨一下自动编号相关的功能,讲解一下大多数人可能从来没有使用过的高级功能 —— 内嵌编号(inline numbering)。
说明:本文中的截图使用 Mac 版的 Word 2016, 文中涉及的操作在Windows下的Word 2010及以上版本基本是一致的。
功能需求
如果按照 word常规模板设置 中的步骤,平时写文档时候的需求就基本能够满足了。
但是,凡事没有绝对,看一下这个案例:
文本来自Francis Scott Key Fitzgerald《了不起的盖茨比》
现在,你需要像下面这样对文本中的每段话进行编号,以便文章的修订者排列这些句子的顺序,以及必要的时候进行增加、删除等操作。
通常,大家都是一行一行读文本,然后在每一句前面手动加上编号。文本比较短的时候,完全没有问题,反正编号也不多。想象一下,现在文本里面有200个句子……再想象一下,当你终于完成任务时,发现自己漏掉了编号为50的句子……
再来说一个案例:
想象一下,领导说,把第3个附件去掉……
接到这样的任务,我想大家的内心都是崩溃的,我真心祝愿大家永远不要碰上这样的事情。
不过,话说回来,万一要是遇上了怎么办呢?
再说,虽然我这里的案例比较极端,但我想在写文档的时候或多或少会遇上类似的自动编号需求,那么,能不能插入一个数字,让它像列表一样自动进行编号呢?
如何实现
快速回想一下对 word 编号功能已有的知识,在“开始”面板里面,提供了三种常用的编号:
左起第一个是项目符号,用于无序列表。第二个是列表编号,包含各种格式的自动编号项。第三个是多级列表,主要用于对文章不同级别的标题编号。
如果动手实践一下,很快就会发现,这三个编号都是针对段落的。也就是说,它们的列表项都对应着单独的段落,对于想要在文本中间插入这些列表项是行不通的。
要完成这样的任务,就必须要介绍一个 Word 的高级功能 ——“域”。它就像是一段格式化输出的代码,可以在不同的要求下输出不同的格式和内容。
对于程序员来说,对各种自动编号是有强迫症的,一定要它自己依次自加递增。
“域”对于大家来说可能既熟悉,又陌生。好像很多地方都有提到过“域”这个名词,但是究竟可以用它来做什么,可能很多人并不清楚。
我们以一个例子来介绍一下“域”。
首先,我们在页面空白的地方,插入两个题注:
在 Mac 下,这个编号会显示为灰色,而在Windows下,当它的文字被选中的时候,也会显示为灰色。
这时,我们选中这两个数字,并单击鼠标右键,选择“切换域代码”:
就会看到,编号的数字,变成了下面这个样子的文本:
如果再次选择“切换域代码”,又会显示为刚才的数字文本。实际上,这就是“域”,它由格式化的代码来控制文本的显示。上面的例子只是“域”使用的一个简单的情况,事实上,Word 中列表、页码、脚注、目录等等,都是通过“域”功能来实现的,这是一个非常强大的功能。
“域”代码块插入的快捷键是“ctrl(cmd) + F9”,会插入一个花括号包围的区域,同样以灰色底纹的方式显示。当然,更常用的方式应该是通过“插入”面板下的“域”按钮,来插入一个域。
选择“插入域”的按钮后,会弹出一个对话框。(这里 Mac 下的显示方式与 Windows 略有区别,不过功能都是一致的)
可以看到,在类别选项框中,有很多可供选择的域代码类。
本文中,我们主要讲解内嵌编号功能,因此只重点介绍 LISTNUM 和 SEQ 关键字,其余功能大家可以自己测试摸索。
LISTNUM
我们首先以第一个案例为示范。
打开“插入域”对话框后,选择“编号”类别,然后在“域名”列表中,选择 LISTNUM 关键字,并打开它的“选项”窗口。(再次提示,这里 Mac 下的显示方式与 Windows 略有区别,不过功能都是一致的)
从这个关键字的名称就很容易知道,它就是用来为列表编号的。它主要有两个选项类可供配置,分别是“域专用开关”和“列表名称”。“域专用开关”下面有两个选项,分别是:
- “\l”:列表层次(level)
- “\s”:起始编号(start)
而在“列表名称”当中,有三个选项,分别表示不同的编号显示类型:
- LegalDefault
- NumberDefault
- OutlineDefault
我们用一个列表来表示这些选项的作用:
*图片来自《(Automatic) Numbering Using Fields in Word 2010 | Just Another Microsoft Office Blog》
现在,我们来具体说说这个 LISTNUM 域代码怎么使用。
根据上面所列的选项与对应的样式,我们这里需要“1.”这样的形式,因此,level 应该设置为 1 级,“列表名称”设置为“LegalDefault”,(起始编号“\s”这里不必使用,默认是从1开始编号的),如下图:
点击“确定”后,就插入到文本中了。
同样,选中后单击“切换域代码”,会显示刚刚插入的域代码块。
再次,单击“切换域代码”,将它切回数字文本的状态,然后,选中这个数字,“Ctrl(cmd)+C”复制,并选择下一个句子的开头,“Ctrl(cmd)+V”粘贴,就会看到,这个编号自动变成了“2.”。
剩下的不用我说了,就全部复制到合适的位置就好了。
这样有一个好处,当我们对中间的编号做了增加,或者删除以后,这些编号会自动更新。或者我们也可以选择全部编号,鼠标右键,选择“更新域”,或者在 Windows 上可以按“F9”快捷键,来实现手动更新。
如果这样就完了的话,第一次编号时,我们还是要对每个句子手动的“Ctrl(cmd)+V”粘贴,仍然很麻烦(程序员坚决不做机械重复的劳动)。
针对这个案例,讲一个快速简便的方法,那就是使用“查找和替换”功能,查找每一个句号的节点,然后在句号后面加上域代码字符串。唯一需要注意的是要将域代码替换上去,一定要先将域代码复制到剪贴板,然后在替换选项里选择“剪贴板内容”。
最后,再将段落末尾的编号都去掉,更新一下所有编号域就好了。
再想一想文章开始时描述的,现在文本里面有200个句子……当你终于完成任务时,发现自己漏掉了编号为50的句子……
如果用替换功能,根本不会漏掉。真是漏掉了一个,单独粘贴域代码上去,全选,然后按“F9”快捷键更新域,编号就全部自动更新了。是不是免去了很多繁琐的机械重复。
SEQ
然后,我们再来说说本文开始举例的第二个案例。有了上一节的铺垫,这里的介绍会相对概略一些。
由于这个里面,编号的样式后面不应该有“.”这样的符号,这种情况下使用 LISTNUM 是不行的。
SEQ 关键字是由“sequence”来的,意思是序列。实际上,在上文中,我们“插入题注”后,将题注转换为域代码,就已经见到过这个关键字了。
同样,我们选择插入“SEQ”关键字,单击“选项”按钮,弹出“域选项”对话框。可以看到 SEQ 支持的格式有很多,包括数字的样式也都可以设置。
在“域专用开关”里面类似 LISTNUM 的开关,也有一些专用的属性,选择每个属性下面都会出现文字介绍。用法与 LISTNUM 也是类似的,我们就不赘述了。
实际上,大多数情况下使用 SEQ 关键字默认的属性配置就可以了,对我们这里的案例来说,域代码非常简单:
这里在 SEQ 后面跟了 “附件”字符串,实际上,用别的字符串也可以,只是为了区分不同的序列,比如“图”序列、“表”序列等等,它们的编号是分开的。
下面的操作我想就不用我啰嗦了,原则就是能够替换就替换,不好替换光用复制粘贴也行,编号做好了以后,后期即使要修改也完全没有压力。
总结
本文重点针对 Word 的自动编号“域”代码,实现了内嵌编号的功能。主要采用了 LISTNUM 和 SEQ 关键字,并对它们的使用方法进行了大致的讲解。当然,Word 支持的关键字是非常多的,可以实现非常多的功能,提高工作的效率,如果有时间的话,建议大家实际操作了解一下。
再次陈述我的观点,Word 不仅仅是一个文本编辑器,希望大家都能够好好利用它。
感谢阅读,如有错误,望不吝指正!