我试图让它在 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
也无济于事(我试过了,把整个事情搞砸了……)。有什么办法吗?
原文由 Vizag 发布,翻译遵循 CC BY-SA 4.0 许可协议
有一种方法可以做到这一点,但是您需要做一些额外的工作。目前在 python-docx 中没有用于执行此操作的“本机”接口。每个带项目符号的项目必须是一个单独的段落。运行仅适用于文本字符。
这个想法是列表项目符号或编号由具体的项目符号或编号样式控制,这是指抽象样式。抽象样式决定受影响段落的样式,而具体编号决定抽象序列中的编号/项目符号。这意味着您可以让没有项目符号的段落和散布在项目符号段落之间的编号。同时,您可以随时通过创建新的具体样式重新开始编号/项目符号序列。
所有这些信息都在 Issue #25 中散列(详细但未成功)。我现在没有时间或资源来解决这个问题,但我确实写了一个函数,我在讨论线程的 评论 中留下了它。此函数将根据您想要的缩进级别和段落样式查找抽象样式。然后它将基于该抽象样式创建或检索具体样式并将其分配给您的段落对象:
使用默认内置文档存根中的样式,您可以执行以下操作:
样式不仅会影响段落的制表位和其他显示特征,而且还有助于查找适当的摘要编号方案。当您在对 ---
prev=None
p0
,该函数会创建一个新的具体编号方案。所有剩余的段落将继承相同的方案,因为它们获得了prev
参数。对list_number
的调用不必与对add_paragraph
的调用交织在一起,只要用作prev
的段落的编号是set通话前。您可以在我维护的名为
haggis
的库中找到此函数的实现,可在 GitHub 和 PyPi 上找到:haggis.files.docx.list_number
。