Html 使用pandoc制作包含多个单独输入文件的主目录

Html 使用pandoc制作包含多个单独输入文件的主目录,html,pandoc,Html,Pandoc,我正在构建一个文档准备系统,它应该能够呈现相当大的文档 输入为pandoc风味降价。为了使文档更易于管理,文档的每个部分将有一个标记文件。例如,文档可能如下所示: pandoc -f markdown -t html --number-sections --toc -s *.md <ul> <li><a href="#introduction"><span class="toc-section-number">1</span> Int

我正在构建一个文档准备系统,它应该能够呈现相当大的文档

输入为pandoc风味降价。为了使文档更易于管理,文档的每个部分将有一个标记文件。例如,文档可能如下所示:

pandoc -f markdown -t html --number-sections --toc -s *.md
<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>
<a href="introduction.html#section-1.1">
<!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>
文件:
01_introduction.md

Introduction
============

This is the introduction

Section 1.1
-----------

This is a section

Section 1.2
-----------

This is another section
Functional Description
======================

Section 2.1
-----------

This is a section

Section 2.2
-----------

This is another section
文件:
02\u functionaldescription.md

Introduction
============

This is the introduction

Section 1.1
-----------

This is a section

Section 1.2
-----------

This is another section
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
<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>
<a href="introduction.html#section-1.1">
<!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>
然后作为输出的TOC如下所示:

pandoc -f markdown -t html --number-sections --toc -s *.md
<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>
<a href="introduction.html#section-1.1">
<!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>
href是假定链接目标位于同一文档中的所有片段。我需要他们指向包含标题的实际文件,如下所示:

pandoc -f markdown -t html --number-sections --toc -s *.md
<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>
<a href="introduction.html#section-1.1">
<!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>

A无法使筛选器可靠地工作-当它到达筛选器时,所有文件都已连接在一起,没有显示每个文件的开始或结束位置

到目前为止,我提出的唯一解决方案是使用pandoc以外的工具来生成toc,或者对toc进行后处理。这些解决方案似乎很复杂,因此如果可能的话,我希望避免使用它们

当它到达过滤器时,所有文件都已连接在一起,没有显示每个文件的开始或结束位置

没错,这意味着只有两种选择:

  • 分别处理每个文件,创建单独的目录。然后,在修复URL的同时合并TOC(相当麻烦)

  • 利用以下事实:在您发布的TOC中,顶级中的每个列表项对应于不同的文件。然后,我们可以运行一次pandoc来创建一个大文件,然后对这个大文件应用一个过滤器,从而为我们留下正确的TOC

  • 下面我将演示如何使用过滤器执行方法#2:

  • 将此筛选器放在您的文件夹中:

  • pandoc--number sections--file scope--toc-s*.md | pandoc-s-f html-o toc.html-f fixtoc.py-M文件:“*.md”

  • 这会调用pandoc两次,第一次调用使用不正确的链接创建TOC,第二次调用修复TOC并删除所有其他内容(基于它接收到的包含文件名的元数据)

    然后,输出存储在
    toc.html
    (或您设置的任何名称)中,如下所示:

    pandoc -f markdown -t html --number-sections --toc -s *.md
    
    <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>
    
    <a href="introduction.html#section-1.1">
    
    <!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>
    
    
    代码{空白:pre;}
    

    请注意,如果两个子部分共享相同的标题(例如,它们被称为摘要),那么从ContactEnabled文件创建主toc将破坏HREF(即使我们修复了文件名)顺便说一句,我注意到上面的问题实际上是由--file scope FlagInterest提案解决的。一个问题是,每个文件不能有多个级别1标题(这不是我本来打算设置的限制,但也许这是有意义的)如果您将过滤器修改为一个实际的python程序,实际上可以使其更加通用。类似于“maketoc.py*.md”,它会为每个单独的文件调用pandoc。