- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
1)
我在想他 AbstractNum
的目的是重用编号格式,NumberingInstance
是创建新列表(从 1 重新开始)。但我注意到,如果在 1 处重新启动列表的第二个实例,openxml 文档将具有 AbstractNum
元素的精确副本(唯一的区别是 Nsid
)并且指向该 AbstractNum
元素的 NumberingInstance
。
例如:如果我有如下列表
和下面的另一个列表具有完全相同的样式,但从 1 开始
这将产生两个 AbstractNum
副本(具有相同的定义)和两个 NumberingInstance
副本。如果样式相同,那么重复定义 (AbstractNum
) 的目的是什么
2)
如果需要为每个 NumberingInstance
创建重复的 AbstractNum
,谁能告诉我如何生成 Nsid
值(十六进制)。看起来如果你有两个具有相同 Nsid
的 AbstractNum
也会导致列表编号的继续(而不是第二个列表从 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>
您会注意到,这两个列表在它们的 w:numId
元素中引用了两个编号 ID(1 和 2)。
接下来是对应的编号定义部分(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
元素使用的任何数字。
关于openxml - AbstractNum 和 NumberingInstance 的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58622437/
1) 我在想他 AbstractNum 的目的是重用编号格式,NumberingInstance 是创建新列表(从 1 重新开始)。但我注意到,如果在 1 处重新启动列表的第二个实例,openxml
我是一名优秀的程序员,十分优秀!