AbstractNum 和 NumberingInstance 的用途

Tek*_*ekz 1 openxml

1)

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

例如:如果我有一个列表如下

  1. 第 1 项
  2. 第 2 项

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

  1. 第 3 项
  2. 第 4 项

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

2)

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

Tho*_*kow 5

关于问题的第一部分,重要的是要了解有时可以使用不同的 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
Run Code Online (Sandbox Code Playgroud)

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

Unnumbered text before first list.
  1. Item 1
  2. Item 2
Unnumbered text before second list.
  1. Item 3 (restarted)
  2. Item 4
Run Code Online (Sandbox Code Playgroud)

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

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

<?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>
Run Code Online (Sandbox Code Playgroud)

您可以看到这仅使用了一个w:abstractNum被两个 `w:num' 元素引用的元素,其中之一通过重新编号来覆盖至少一个级别。

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

  • 不客气。我刚刚通过提供示例 Open XML 标记来修改我的答案,该标记可以实现您正在寻找的内容。 (2认同)