译/桂浮云,2020年2月18日
编号或者级别是用数字、字母和符合单独标记段落的方法。OOXML中,需要先定义一组特别的编号规则。
numbering.xml片段(part)文件中,根元素numbering之下,<w:abstractNum>元素就是用来定义文档需要的这些规则的。定义是“abstract”(即抽象)的,并且并不直接引用到文档之中。相反,需要用<w:num>元素创建抽象编号定义的示例,此元素也是在numbering.xml片段文件内。<w:num>定义的示例可以给出关于抽象定义的精确声明,或者覆盖定义,或者对抽象定义作异常处理。最终,这些实例才能被文档内容所引用。numbering.xml范例如下:
<w:numbering>
<w:abstractNum w:abstractNumId="0">
<w:nsid w:val="099A081C"/>
<w:multiLevelType w:val="hybridMultilevel"/>
<w:lvl w:ilvl="0">
<w:start w:val="1"/>
<w:numFmt w:val="upperLetter"/>
<w:lvlText w:val="%1."/>
<w:lvlJc w:val="start"/>
<w:pPr>
<w:ind w:start="360" w:hanging="360"/>
</w:pPr>
<w:rPr>
<w:rFonts w:ascii="Arial Black" w:hAnsi="Arial Black"/>
<w:color w:val="C00000"/>
<w:sz w:val="28"/>
</w:rPr>
</w:lvl>
</w:abstractNum>
<w:num w:numId="1">
<w:abstractNumId w:val="0"/>
</w:num>
</w:numbering>
以上代码定义了一个层级样式(只有一个层级:<w:lvl w:ilvl="0">);同时创建了一个实例,编号为1(<w:num w:NumId="1">),直接引用了abstractNum,没有任何改变或异常处理。然后,我们把该实例加入到文档之中:
<w:p>
<w:pPr>
<w:pStyle w:val="ListParagraph"/>
<w:numPr>
<w:ilvl w:val="0"/>
<w:numId w:val="1"/>
</w:numPr>
</w:pPr>
<w:r>
<w:t>This is the first numbered paragraph.</w:t>
</w:r>
</w:p>
注意:上例中编号引用包含了一个到层级的直接引用,这是因为<w:numPr>同时包含了倒编号定义(numId)和到层级(level ilvl)的两个引用。其他可以在内容中引用层级的可能方式还可以通过引用段落样式。也就是说,<w:abstractNum>之内附属层级lvl可以包含一个pStyle,其值为ListParagraph的值。在这种情况下,内容仅包含到编号定义实例(numId)的引用,但也引用了段落样式。相同样式将在编号定义引用中找到,并且层级可以用在段落中。

示例效果
编号定义片段文件
根元素为<w:numbering>,子元素(忽略了跟踪变更用的numIdMacAtLeanup)包括:
| 元素 | 描述 |
|---|---|
| abstractNum | 抽象编号定义 |
| num | 指定编号定义的唯一性实例。通过子元素<w:abstractNumId>引用一个已定义的<w:abstractNum>),也因此会继承所引用的<w:abstractNum>属性。这些继承的属性通过<w:lvlOverride>子元素,可以在实例中重写,因此实质上是创建了一个新的编号实例变种。numId属性,指定编号段落对应的唯一ID。子元素包括abstractNumId和lvlOverride。 |
| numPicBullet | 指定编号定义采用符号编号时的图片呈现方式。 |