我正在构建一个文档准备系统,它应该能够渲染相当大的文档。
输入是pandoc风味降价。为了使文档更易于管理,文档的每个部分将有一个markdown文件。例如,文档可能如下所示:
档案:01_introduction.md
Introduction
============
This is the introduction
Section 1.1
-----------
This is a section
Section 1.2
-----------
This is another section
档案:02_functionaldescription.md
Functional Description
======================
Section 2.1
-----------
This is a section
Section 2.2
-----------
This is another section
其中一种输出格式是html。我想为每个部分(对应于输入文件)和一个主目录页面生成一个HTML输出文件。主TOC页面应包含指向其他页面标题的链接。
我没有问题让pandoc生成单独的部分html文件。我甚至可以让它来纠正部分编号,这样它们就像是一个大文件的一部分。使用过滤器我也设法纠正了节间链接。
问题是主目录。如果我将所有单个文件提供给一个命令行,如下所示:
pandoc -f markdown -t html --number-sections --toc -s *.md
然后输出的TOC如下所示:
<ul>
<li><a href="#introduction"><span class="toc-section-number">1</span> Introduction</a><ul>
<li><a href="#section-1.1"><span class="toc-section-number">1.1</span> Section 1.1</a></li>
<li><a href="#section-1.2"><span class="toc-section-number">1.2</span> Section 1.2</a></li>
</ul></li>
<li><a href="#functional-description"><span class="toc-section-number">2</span> Functional Description</a><ul>
<li><a href="#section-2.1"><span class="toc-section-number">2.1</span> Section 2.1</a></li>
<li><a href="#section-2.2"><span class="toc-section-number">2.2</span> Section 2.2</a></li>
</ul></li>
</ul>
href是假设链接目标位于同一文档中的所有片段。我需要它们指向包含标题的实际文件,如下所示:
<a href="introduction.html#section-1.1">
A无法使过滤器可靠地工作 - 当它到达过滤器时,所有文件都被连接在一起,没有显示每个文件开始或结束的位置。
到目前为止,我提出的唯一解决方案是使用除pandoc以外的其他方法来生成toc,或者对toc进行后处理。这些解决方案似乎很复杂,所以我想尽可能避免使用它们。
答案 0 :(得分:4)
到达过滤器时,所有文件都连接在一起,没有显示每个文件开始或结束的位置。
这是正确的,这意味着只有两个选项:
分别处理每个文件,创建单独的TOC。然后,在修复URL的同时组合TOC(非常麻烦..)
利用您发布的TOC中的事实,顶级中的每个列表项对应于不同的文件。然后,我们可以运行一次pandoc来创建一个大文件,然后将一个过滤器应用到大文件中,使我们得到正确的TOC。
下面我将展示如何使用过滤器进行方法#2:
将此过滤器放在您的文件夹中:https://github.com/sergiocorreia/panflute-filters/blob/master/filters/fixtoc.py
运行
pandoc --number-sections --file-scope --toc -s *.md | pandoc -s -f html -o toc.html -F fixtoc.py -M files:"*.md"
这会调用pandoc两次,第一次传递创建TOC时链接不正确,第二次传递修复TOC并删除其他所有内容(根据收到的元数据,包含文件名)。
然后将输出存储在toc.html
(或您设置的任何名称)中,如下所示:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="pandoc" />
<title></title>
<style type="text/css">code{white-space: pre;}</style>
</head>
<body>
<div id="TOC">
<ul>
<li><a href="01_introduction.html#introduction"><span class="toc-section-number">1</span> Introduction</a>
<ul>
<li><a href="01_introduction.html#section-1.1"><span class="toc-section-number">1.1</span> Section 1.1</a></li>
<li><a href="01_introduction.html#remarks"><span class="toc-section-number">1.2</span> Remarks</a></li>
</ul></li>
<li><a href="02_functionaldescription.html#functional-description"><span class="toc-section-number">2</span> Functional Description</a>
<ul>
<li><a href="02_functionaldescription.html#section-2.1"><span class="toc-section-number">2.1</span> Section 2.1</a></li>
<li><a href="02_functionaldescription.html#remarks"><span class="toc-section-number">2.2</span> Remarks</a></li>
</ul></li>
</ul>
</div>
</body>
</html>