我唯一能想到的就是渲染两个单独的 html 对象,然后将它们组合起来。
这正是你需要做的。提醒一下,Markdown 无论如何都不会呈现完整的 HTML 文档。你只会得到一个 HTML 片段。例如一个简单的 Markdown 文档:
A simple Markdown document.
呈现为以下 HTML 片段:
<p>A simple Markdown document.</p>
但是,对于一个完整、有效的 HTML 文档,您需要(至少)以下内容:
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<p>A simple Markdown document.</p>
</body>
</html>
考虑到无论如何您都需要生成所有这些,那么分别获取 TOC 和 body 有多“混乱”?
事实上,在更复杂的系统中,TOC 可能位于侧边栏或其他东西中。因此,使用模板系统,TOC 无论如何都可以单独传递给模板,然后将其放置在一个容器中,该容器将其与文档正文分开,以便通过 CSS 进行定位和样式设置。
确切的模板语法可能会因您使用的工具而异,但可能是这样的:
<!DOCTYPE html>
<html>
<head>
<title>{{ page.title }}</title>
</head>
<body>
<aside>
{{ page.toc }}
</aside>
<div id="body">
{{ page.body }}
</div>
</body>
</html>
当然,您不必使用模板,但肯定是一种“干净”的方式来生成文档。