我正试图让它在python-docx
中工作:
我可以使用这个项目符号列表:
from docx import Document
doc = Document()
p = doc.add_paragraph()
p.style = 'List Bullet'
r = p.add_run()
r.add_text("Item 1")
# Something's gotta come here to get the Sub-Item 1
r = p.add_run()
r.add_text("Item 2")
# Something's gotta come here to get the Sub-Item 2
我想,在中间添加另一个段落不会有帮助,因为这基本上意味着我正在制作另一个List Bullet
,格式与其父格式相同,而不是我想要的子格式。另外,在同一段落中添加另一个run
也没有帮助(我试过了,把整个事情搞砸了)。有办法吗?
有一种方法可以做到这一点,但这需要你做一些额外的工作。python docx中目前没有用于此操作的“本机”接口。每个项目符号必须是单独的段落。运行仅适用于文本字符。
其思想是列表项目符号或编号由具体的项目符号或编号样式控制,该样式指的是抽象样式。抽象样式决定了受影响段落的样式,而具体的编号决定了抽象序列中的数字/项目符号。这意味着您可以在项目符号段落之间插入没有项目符号和编号的段落。同时,通过创建新的具体样式,可以在任意点重新启动编号/项目符号序列。
所有这些信息都在Issue #25中散列出来(详细但不成功)。我现在没有时间和资源来解决这个问题,但我确实在讨论线程的comment中编写了一个函数。此函数将根据所需的缩进级别和段落样式查找抽象样式。然后,它将基于该抽象样式创建或检索具体样式,并将其分配给段落对象:
使用默认内置文档存根中的样式,可以执行以下操作:
样式不仅会影响制表位和段落的其他显示特性,而且还会帮助查找适当的抽象编号方案。当在调用
p0
时隐式设置prev=None
时,函数将创建一个新的具体编号方案。其余的所有段落将继承相同的方案,因为它们得到一个prev
参数。对list_number
的调用不必与对add_paragraph
的调用交叉,只要在调用之前设置用作prev
的段落的编号。相关问题 更多 >
编程相关推荐