如何从 TOC 中排除一些条目
How to exclude some entries from TOC
我正在使用 wkhtmltopdf 创建一些需要目录的文档;这是使用 Hx 标签完成的,它可以正常工作(包括修改后的 XSL 文件)。输入 HTML 是由我自己的代码生成的,所以我可以完全控制它。
现在,我需要排除某些特定级别的条目,但不是所有条目,如下例所示
<h1>First</h1>
<h2>First of first</h2> <- exclude
<h2>Second of first</h2> <- exclude
<h1>Second</h1>
<h2>First of second</h2>
<h2>Second of second</h2>
文档说明了如何自定义 XSL;所以我生成了文档的大纲并查看了 XML 文件。
如手册中所述,它包含具有四个属性的元素:标题、页面、link 和 backLink。
<outline xmlns="http://wkhtmltopdf.org/outline">
<item title="First" page="0" link="__WKANCHOR_0" backLink="__WKANCHOR_1">
<item title="First of first" page="1" link="__WKANCHOR_2" backLink="__WKANCHOR_3"/>
<item title="Second of first" page="1" link="__WKANCHOR_4" backLink="__WKANCHOR_5">
... and so on
我想,为了得到想要的结果,可能有两种方法:
- 改变大纲的创建方式,或者
- 改变大纲的处理方式
我找不到实现第一个选项的方法,大纲文件没有足够的信息在 XSL 文件中使用。
一些注意事项:
我知道我可以按标题属性排除,但文档可能有很多,所以按标题排除不是一个真正的选择。
无法完成的另一个原因是我可能会排除某个位置的条目,但需要在其他地方包含具有相同标题的条目。
显然我不能通过页面名称排除,因为我不可能提前知道页面会在哪里中断。
将这些条目放在文档大纲中而不是目录中会很好,因此实现此目的的第二种方法可能是正确的方法。
...所以任何帮助表示赞赏。谢谢
经过一番努力,这里有一个解决方案。
由于我无法在不进入 wkhtmltopdf 的源文件的情况下更改大纲文件或创建方法,因此我试图找到一种方法,根据唯一可用的属性来区分我想要的 TOC 条目和我不想要的 TOC 条目;我选择了title
,因为它最容易控制。
输入 "zero-width non-joiner" : ‌
我将这个特殊字符添加为我不想要的 TOC 条目的第一个元素,然后在 TOC XSL 文件中使用了以下测试。
<xsl:if test="not(starts-with(@title, '‌'))">
这个简单的技巧似乎可以很好地完成工作。
我正在使用 wkhtmltopdf 创建一些需要目录的文档;这是使用 Hx 标签完成的,它可以正常工作(包括修改后的 XSL 文件)。输入 HTML 是由我自己的代码生成的,所以我可以完全控制它。
现在,我需要排除某些特定级别的条目,但不是所有条目,如下例所示
<h1>First</h1>
<h2>First of first</h2> <- exclude
<h2>Second of first</h2> <- exclude
<h1>Second</h1>
<h2>First of second</h2>
<h2>Second of second</h2>
文档说明了如何自定义 XSL;所以我生成了文档的大纲并查看了 XML 文件。
如手册中所述,它包含具有四个属性的元素:标题、页面、link 和 backLink。
<outline xmlns="http://wkhtmltopdf.org/outline">
<item title="First" page="0" link="__WKANCHOR_0" backLink="__WKANCHOR_1">
<item title="First of first" page="1" link="__WKANCHOR_2" backLink="__WKANCHOR_3"/>
<item title="Second of first" page="1" link="__WKANCHOR_4" backLink="__WKANCHOR_5">
... and so on
我想,为了得到想要的结果,可能有两种方法:
- 改变大纲的创建方式,或者
- 改变大纲的处理方式
我找不到实现第一个选项的方法,大纲文件没有足够的信息在 XSL 文件中使用。
一些注意事项:
我知道我可以按标题属性排除,但文档可能有很多,所以按标题排除不是一个真正的选择。
无法完成的另一个原因是我可能会排除某个位置的条目,但需要在其他地方包含具有相同标题的条目。
显然我不能通过页面名称排除,因为我不可能提前知道页面会在哪里中断。
将这些条目放在文档大纲中而不是目录中会很好,因此实现此目的的第二种方法可能是正确的方法。
...所以任何帮助表示赞赏。谢谢
经过一番努力,这里有一个解决方案。
由于我无法在不进入 wkhtmltopdf 的源文件的情况下更改大纲文件或创建方法,因此我试图找到一种方法,根据唯一可用的属性来区分我想要的 TOC 条目和我不想要的 TOC 条目;我选择了title
,因为它最容易控制。
输入 "zero-width non-joiner" : ‌
我将这个特殊字符添加为我不想要的 TOC 条目的第一个元素,然后在 TOC XSL 文件中使用了以下测试。
<xsl:if test="not(starts-with(@title, '‌'))">
这个简单的技巧似乎可以很好地完成工作。