Abstract Numbering Definitions

An abstract numbering definition is the basis for all numbering information in a WordprocessingML document, as it defines the appearance and behavior of a specific set of numbered paragraphs in a document, and is defined using the <abstractNum> element. Although abstract numbering definitions contain all of the numbering information for one type of numbering, they cannot be directly referenced by content (hence their abstract designation), they must be inherited by a numbering definition instance, which itself can be referenced by content. A specific abstract numbering definition in WordprocessingML can be divided into two parts:

  • Common numbering properties

  • Numbering levels

The complete definition of all abstract numbering properties can be found in the reference for the <abstractNum> element.

Common numbering properties refer to the properties that can be specified by all abstract numbering definitions regardless of their contents. Examples of common numbering properties include: a numbering ID (which uniquely identifies a numbering definition), the numbering definition type (single level, multi-level, multi-level hybrid), the numbering name, and optional numbering style references, as discussed in detail later in this subclause.

Consider the following example of an abstract numbering definition in a WordprocessingML document:

<w:abstractNum w:abstractNumId="4">
  <w:nsid w:val="1DE04504" />
  <w:multiLevelType w:val="hybridMultilevel" />
  <w:lvl w:ilvl="0" w:tplc="0409000F"></w:lvl>
  <w:lvl w:ilvl="1" w:tplc="04090019"></w:lvl>
  <w:lvl w:ilvl="2" w:tplc="04090019"></w:lvl>
  <w:lvl w:ilvl="3" w:tplc="0409000F"></w:lvl></w:abstractNum>

This numbering definition specifies two common properties: a numbering ID (using the <nsid> element) of 1DE04504, and a list type (using the <multiLevelType> element) of hybridMultilevel, which specifies that this abstract numbering definition is more than one level and contains multiple numbering formats.

The other part of an abstract numbering definition is the specification of one or more numbering levels, each of which defines a unique set of formatting properties for one level in this numbering definition.

Consider three numbered paragraphs that reference the same numbering definition, but each, in turn, reference a different level within that list:

Although the paragraphs each reference the same abstract numbering definition (which is discussed later), each refers to a separate level within that abstract numbering definition, and therefore each has a unique set of paragraph and numbering properties.

It is important to note that the concept of levels in an abstract numbering definition refers to the levels as defined in the file format, and in no way the logical indentation of numbered paragraphs within a WordprocessingML document.

Consider another set of numbered paragraphs in WordprocessingML, where each subsequent paragraph is a different level but references the same abstract numbering definition:

In this example, the properties of each level of the numbering definition is such that the paragraphs for each level are indented arbitrarily. However, this is still a completely valid numbering definition, and the paragraphs each represent subsequent levels of the same numbering definition.

Within an abstract numbering level definition, each numbering level is represented by an <lvl> element that defines a single level of numbering information. Numbering levels specify the following properties: starting number value, a number format presentation code (e.g., 1 vs. the string literal One), an associated paragraph style, which previous level should cause this numbering level to restart, the numbering text, number justification, a paragraph properties indentation for this level, etc. The complete definition of all numbering level properties can be found on the reference for the <lvl> element.

Consider the following numbering level definition in WordprocessingML:

<w:lvl w:ilvl="1">
  <w:start w:val="4"/>
  <w:nfc w:val="3"/>
  <w:pStyle w:val="Heading1"/>
  <w:lvlText w:val="BEFORE %2 AFTER %1 END"/>
  <w:lvlJc w:val="left"/>
  <w:pPr>
    <w:tabs>
      <w:tab w:val="num" w:pos="2880"/>
    </w:tabs>
    <w:ind w:left="288" w:firstLine="1152"/>
  </w:pPr>
</w:lvl>

This particular numbering level defines the following information:

  • This is level 1 (the second level) for this numbering definition

  • Start at number 4

  • Use number format 3 (which translates to 1, 2, 3, and so on)

  • When this level is used, apply the Heading1 style

  • Use the following level text for the number: BEFORE %2 AFTER %1 END

  • Left justify the number

  • Set a left indent of 288 twentieths of a point, and a first line indent of 1152 twentieths of a point

This information is used to display the number for paragraphs of level 1 the reference this numbering definition.

Of particular significance is the <lvlText> element, which defines the content of the number text for each numbering level. Its syntax allows any string literal to be placed in the number (e.g., the ARTICLE in ARTICLE I, ARTICLE II, ARTICLE III, and so on), as well as the current value of the number for this or any previous level in the list.

Referring to the numbering level definition above, the <lvlText> is defined as follows:

<w:lvlText w:val="BEFORE %2 AFTER %1 END"/>

This level text specifies three literal strings (BEFORE, AFTER, END) mixed with the current numbering value from level 1 and level 0 in the document. Therefore, assuming level 0 is just a simple number, when inserted it would read:

1
  BEFORE 1 AFTER 1 END
  BEFORE 2 AFTER 1 END
  BEFORE 3 AFTER 1 END
2
  BEFORE 1 AFTER 2 END
  BEFORE 2 AFTER 2 END
  …

The %1 and %2 values correspond to the value for level 0 and 1 of this list, respectively.