编辑:我现在认为您尝试做的事情是不可能的,但我有几个建议
如果您不关心精确的#.# 格式,您可以使用多个seq 标记来完成此操作。要轻松使用多个seq 标签,请以seqOrder 开头。这有一个很好的属性,即每当您使用更高级别的 seq 标记时,较低级别都会重置。为了使您的关卡看起来与众不同,我建议对每个关卡进行不同的格式化。
contents.add(Paragraph( ('<seqChain order="lev1 lev2"/>'
'<seqFormat id="lev1" value="1">'
'<seqFormat id="lev2" value="a">'
'<seq id="levelOne"/>. Level 1 Header'), h1))
contents.add(Paragraph('<seq id="levelTwo"/> Level 2 Header', h2))
contents.add(Paragraph('<seq id="levelOne"/>. Level 1 Header', h1))
#We didn't have to reset the level 2 tag because chain takes care of it
contents.add(Paragraph('<seq id="levelTwo"/> Level 2 Header', h2))
我发现ReportLab's RML userguide 的第 47 页在这里很有帮助。我尝试使用<name\> 标签存储当前上层的值,但在使用 1 次后,似乎无法重新分配 <name\> 标签。我考虑过在 python 中跟踪这一点的其他编程方法,但此时您几乎是在自己编写列表。一个例子是
level1 = 1
contents.add(Paragraph('{0}. Level 1 Header'.format(level1), h1))
level2 = 1
contents.add(Paragraph('{0}.{1} Level 2 Header'.format(level1,level2), h2))
#Now we have to automatically increment level1
level1 += 1
contents.add(Paragraph('{0}. Level 1 Header'.format(level1), h1))
#and manually reset level 2
level2 = 1
contents.add(Paragraph('{0}.{1} Level 2 Header'.format(level1,level2), h2))
尽管您可以定义一个函数来为您附加一个段落并手动迭代/重置适当的级别值。
我不确定您是否在 python 中执行此操作 - 我知道 RML 是 reportlab 商业版本的一部分,而且我从未通过添加 RML 标签来构建文档。但是,如果您使用的是 python,您可能希望查看使用 Flowables 构建文档,并且有一个 ListFlowable 来创建这些类型的列表。您仍然无法使用所需格式的标签创建列表,因为ListFlowable 只是这些 RML 标签的接口。您可以在第 86 页的ReportLab User Guide 中了解有关Flowables 的更多信息