如果我直接读取DOCX文件,如何确定段落第一行的左缩进?它往往非常奇怪,特别是如果在项目符号列表中。
答案 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)使用虚拟悬挂缩进制表符停止 - 当且仅当 - 没有设置制表位在虚拟位置之后的列表,段落或样式(列表/段落样式)中。