生成 HTML 目录

Asciidoctor 的 HTML5 转换器有一个内置方法用于生成 HTML TOC。此 TOC 生成器也可作为通用 API 使用。此逻辑可通过 HTML5 转换器上的 convert_outline 方法(即 outline 节点的 convert 方法)获得。

用法

convert_outline 方法接受一个 Document 对象和一个可选的 Options Hash,并返回 HTML。可以使用以下代码片段将其解析并调用为通用方法:

document = Asciidoctor.load_file 'document-with-sections.adoc', safe: :safe
html_toc = (Asciidoctor::Converter.create 'html5').convert_outline document
puts html_toc

以下是此方法生成内容的示例:

<ul class="sectlevel1">
<li><a href="#_section_a">Section A</a></li>
<li><a href="#_section_b">Section B</a>
<ul class="sectlevel2">
<li><a href="#_subsection">Subsection</a></li>
</ul>
</li>
<li><a href="#_section_c">Section C</a></li>
</ul>

您还可以通过 Document API 访问转换器实例上的 convert_outline 方法:

document = Asciidoctor.load_file 'document-with-sections.adoc', safe: :safe
html_toc = document.converter.convert_outline document

如果您使用的是复合转换器,则可以使用通用的 convert 方法来确保调用通过转换器链运行。为此,请调用 convert 方法并传入 Document 对象和节点名称 outline。这将依次调用链中响应此方法的转换器上的 convert_outline

document = Asciidoctor.load_file 'document-with-sections.adoc', safe: :safe
html_doc = document.converter.convert document, 'outline'

您还可以将此方法用于任何转换器模板(例如 Slim、Haml 或 ERB)中,以生成和嵌入 TOC:

= converter.convert document, 'outline'

选项

convert_outline 方法接受以下选项:

sectnumlevels

要对节进行编号的级别数(默认为 sectnumlevels 属性的值)。

toclevels

TOC 的深度(默认为 toclevels 属性的值)。

以下是如何为先前加载的文档生成 HTML TOC,并将深度限制为 1 的示例:

html_toc = document.converter.convert_outline document, toclevels: 1