如何计算Word文档中段落第一行的左缩进?

时间:2010-12-09 04:00:48

标签: ms-word rtf docx

如果我直接读取DOCX文件,如何确定段落第一行的左缩进?它往往非常奇怪,特别是如果在项目符号列表中。

1 个答案:

答案 0 :(得分:0)

这也发布在Indent Positioning in DOCX(格式比我在这里做的好得多)。

首先,要获得任何属性(包括缩进)的最终状态,我们需要遵循规范§2.7.2中的样式层次结构规则

在那里,它正确地指出直接格式化(p元素下的pPr)取代了列表定义中的版本

由于制表位是附加的,我们只是将它们全部收集起来,我们有完整的制表位

如果存在,则清除该选项卡,不仅不会计为选项卡,还会清除位于相同位置的任何父选项卡(样式,列表)。

现在,我们按如下方式显示列表:

首先,检查numFmt元素§2.9.18以查看列表定义中任何数字的格式。

接下来,将文本放在lvlText元素§2.9.12中最后左缩进的位置。

如果numFmt不是“bullet”,我们需要适当地替换%[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 doc文件,Word 2007+将自动设置选项“不要使用悬挂缩进作为弹出和编号的制表位”,并省略悬挂缩进。

对于在Word 2007+中打开的常规Word 2007+ docx文件,Word 2007+将默认使用悬挂缩进作为项目符号顶部用于项目符号和编号。

对于在Word 2003中打开的常规Word 2007+ docx文件,Word 2003将省略虚拟挂起选项卡,因此可能未对齐文档。 (见KB http://support.microsoft.com/kb/937936

但虚拟悬挂缩进还有另一个警告 - 在RTF / DOC / WordML中(注意此规则不适用于DOCX)使用虚拟悬挂缩进制表符停止 - 当且仅当 - 没有设置制表位在虚拟位置之后的列表,段落或样式(列表/段落样式)中。