如果我直接读取 DOCX 文件,如何确定段落第一行的左缩进?它往往很奇怪,尤其是在项目符号列表中。
1 回答
这也发布在 DOCX 中的缩进定位中(它的格式比我在这里可以做的要好得多)。
首先,要获得任何属性(包括缩进)的最终状态,我们需要遵循规范第 2.7.2 节中的样式层次规则
在那里,它正确地指出直接格式(p 元素下的 pPr)取代了列表定义中的版本
由于制表位是附加的,我们只需将它们全部收集起来,我们就有了完整的制表位
如果有,则该选项卡被清除,不仅不计为选项卡,而且清除位于同一位置的所有父选项卡(样式、列表)。
现在,我们将列表显示如下:
首先,检查 numFmt 元素 §2.9.18 以查看列表定义中任何数字的格式。
接下来,将文本放置在 lvlText 元素 §2.9.12 中最后左缩进的位置。
如果 numFmt 不是“子弹”,我们需要适当地替换 %[1-9] 语法。
现在,查看 suff 元素 §2.9.30 以了解项目符号与文本的区别。
如果是空格或什么都没有,请添加一个空格或什么都不加。
如果是选项卡,请添加一个选项卡。(注意:如果没有设置 suff,这是默认设置!)
然后我们只需要知道下一个制表位是什么。
为此,显示的级别文本结束后的任何制表位都是有效的:
使用选项卡元素设置的选项卡
任何悬挂缩进(只要未设置 doNotUseIndentAsNumberingTabStop 元素 §2.15.3.2)
默认制表位在 defaultTabStop 元素 §2.15.1.24 设置的距离处
最后,我们证明了结果的合理性——从关卡文本的开头到行尾。你现在证明它总是相对于相同的制表位。
还有一件事 - 使用悬挂选项卡仅出现在 Word 2007+(即 2007、2010 及更高版本)中 - 它是 2007+ 中的默认设置,这有点奇怪:
对于 Word xml 文件,Word 2003 和 2007+ 的默认行为是省略虚拟悬挂选项卡(如果 Word 2007+,我们可以选择让 Word 启用悬挂选项卡)
对于在 Word 2003 中打开的普通 Word 2003 doc 文件,始终省略虚拟悬挂选项卡。
对于在 Word 2007+ 中打开的普通 Word 2003 文档文件,Word 2007+ 将自动设置选项“不使用悬挂缩进作为项目符号和编号的制表位”,并省略悬挂缩进。
对于在 Word 2007+ 中打开的普通 Word 2007+ docx 文件,Word 2007+ 将默认使用悬挂缩进作为项目符号和编号的选项卡顶部。
对于在 Word 2003 中打开的普通 Word 2007+ docx 文件,Word 2003 将省略虚拟悬挂选项卡,因此可能会使文档错位。(参见知识库http://support.microsoft.com/kb/937936)
但是关于虚拟悬挂缩进还有另一个警告 - 在 RTF/DOC/WordML 中(注意此规则不适用于 DOCX)使用虚拟悬挂缩进制表位 - 当且仅当 - 列表中没有设置制表位,段落,或虚拟位置之后的样式(列表/段落样式)。