AbstractNum 和 NumberingInstance 的用途

2024-01-06

1)

我在想他的目的AbstractNum是重用编号格式并且NumberingInstance是创建新列表(从 1 重新启动)。但我注意到,如果在 1 处重新启动列表的第二个实例,openxml 文档将具有该列表的精确副本AbstractNum元素(唯一的区别是Nsid) and a NumberingInstance指着那个AbstractNum元素。

前任: 如果我有如下列表

  1. Item 1
  2. Item 2

另一个列表如下,具有完全相同的样式,但从 1 重新开始

  1. Item 3
  2. Item 4

这将产生两个副本AbstractNum(具有相同的定义)和两份副本NumberingInstance。重复定义的目的是什么(AbstractNum) 如果样式相同

2)

如果需要创建副本AbstractNum对于每个NumberingInstance,有人可以告诉我如何生成Nsid值(十六进制)。看起来如果你有两个AbstractNum与相同Nsid也会导致列表编号的延续(而不是从第二个列表的 1 开始)但我不知道如何生成唯一的Nsid


关于问题的第一部分,重要的是要了解有时可以使用不同的 Open XML 标记来实现相同的效果。仅仅因为 Microsoft Word 以某种方式生成标记并不意味着您的方式是错误的,只要您的方式符合标准即可。

增强我原来的答案,这是一个如何在不重复的情况下重新开始编号的示例w:abstractNum元素,大致使用问题中提供的文本:

Unnumbered text before first list.
  1. Item 1
  2. Item 2
Unnumbered text before second list.
  1. Item 3 (restarted)
  2. Item 4

我们看一下对应的主文档部分(document.xml),注意到我已经简化了 Microsoft Word 创建的标记:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:body>
    <w:p>
      <w:r>
        <w:t>Unnumbered text before first list.</w:t>
      </w:r>
    </w:p>
    <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>Item 1</w:t>
      </w:r>
    </w:p>
    <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>Item 2</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:r>
        <w:t>Unnumbered text before second list.</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:pPr>
        <w:pStyle w:val="ListParagraph"/>
        <w:numPr>
          <w:ilvl w:val="0"/>
          <w:numId w:val="2"/>
        </w:numPr>
      </w:pPr>
      <w:r>
        <w:t>Item 3 (restarted)</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:pPr>
        <w:pStyle w:val="ListParagraph"/>
        <w:numPr>
          <w:ilvl w:val="0"/>
          <w:numId w:val="2"/>
        </w:numPr>
      </w:pPr>
      <w:r>
        <w:t>Item 4</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:document>

您会注意到,这两个列表在其列表中引用了两个编号 ID(1 和 2)w:numId元素。

接下来,这是相应的编号定义部分(numbering.xml):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:numbering xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
             xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="w15">

  <!-- This is the only w:abstractNum element in numbering.xml -->
  <w:abstractNum w:abstractNumId="0" w15:restartNumberingAfterBreak="0">
    <w:nsid w:val="23B5103A"/>
    <w:multiLevelType w:val="hybridMultilevel"/>
    <w:tmpl w:val="40963B22"/>

    <!-- The following w:lvl is referenced by w:ilvl with w:val="0" -->
    <w:lvl w:ilvl="0" w:tplc="0409000F">
      <w:start w:val="1"/>
      <w:numFmt w:val="decimal"/>
      <w:lvlText w:val="%1."/>
      <w:lvlJc w:val="left"/>
      <w:pPr>
        <w:ind w:left="720" w:hanging="360"/>
      </w:pPr>
    </w:lvl>

    <!-- Markup for numbering levels 1-7 removed -->

    <w:lvl w:ilvl="8" w:tplc="0409001B" w:tentative="1">
        <!-- Child elements removed -->
    </w:lvl>
  </w:abstractNum>

  <!-- The following w:num is referenced by the w:numId with w:val="1" -->
  <w:num w:numId="1">
    <w:abstractNumId w:val="0"/>
  </w:num>

  <!-- The following w:num is referenced by the w:numId with w:val="2" -->
  <w:num w:numId="2">
    <w:abstractNumId w:val="0"/>

    <!-- The w:lvlOverride with its w:startOverride child restarts numbering -->
    <w:lvlOverride w:ilvl="0">
      <w:startOverride w:val="1"/>
    </w:lvlOverride>

    <!-- You can also override levels 1 to 8 in the same way, if required -->
  </w:num>
</w:numbering>

可以看到这里只使用了一个w:abstractNum由两个“w:num”元素引用,其中之一通过重新开始编号来覆盖至少一层。

关于你问题的第二部分,如果你想模仿 Microsoft Word 的行为,w:nsid元素(抽象编号定义标识符)只是一个以长十六进制数字表示的唯一数字。该标准没有明确说明应该如何创建它。因此,例如,您几乎可以获取任何尚未被任何人使用的数字w:abstractNum元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AbstractNum 和 NumberingInstance 的用途 的相关文章

随机推荐