2017-03-08 22 views
3

かなり大きな文書をレンダリングできる文書作成システムを構築しています。pandocを使用して複数の入力ファイルをカバーするマスター目次を作成する

入力はpandoc風味のマークダウンです。ドキュメントをより管理しやすくするために、ドキュメントのセクションごとに1つのマークダウンファイルがあります。例えば、文書は次のようになります。

ファイル: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になることです。 1つのセクション(入力ファイルに対応)ごとに1つのHTML出力ファイルと1つのマスター目次ページを生成したいと思います。マスターTOCページには、他のページの見出しへのリンクが含まれている必要があります。

pandocに個々のセクションのhtmlファイルを生成させることに問題はありません。私はセクションナンバリングを修正するためにそれを得ることさえできるので、それはあたかも1つの大きな文書の一部であるかのようにすべて適合します。フィルタを使用して、私はセクション間リンクも修正することができました。

問題はマスターの目次です。私はすべての個々のファイル1本のコマンドラインを、このようにそれを養う場合:

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が確実にフィルタを動作させることができていない - それはフィルタに到達した時点で、すべてのファイルが一緒に連結されています各ファイルの開始位置と終了位置は表示されません。

私がこれまでに思いついた唯一の解決策は、tocを生成するためにpandoc以外のものを使用すること、またはtocを後処理することです。これらのソリューションは複雑に見えるので、可能ならば避けたい。

+0

注意(ファイル名を修正したとしても)接続されたファイルからマスタートークンが削除される –

+1

ところで、私は上記の問題が実際に--file-scopeフラグによって修正されていることに気付いた –

答えて

3

フィルタに到達するまでに、すべてのファイルが連結されており、各ファイルの開始位置と終了位置は何も表示されません。

  1. プロセス個別ファイル、別の目次を作成する:2つだけのオプションがあることを意味正しいだ

、。

  • 投稿した目次に、トップレベルの各リスト項目が別のファイルに対応しているという事実を利用します(これは非常に面倒です)。次に、pandocを一度実行して大きなファイルを作成し、大きなファイルにフィルタを適用して正しいTOCを残します。I以下

  • フィルタとアプローチ#2を実行する方法を示しています。あなたのフォルダ内の

    1. 置き、このフィルタを:https://github.com/sergiocorreia/panflute-filters/blob/master/filters/fixtoc.py

    2. 実行

      pandoc --number-sections --file-scope --toc -s *.md | pandoc -s -f html -o toc.html -F fixtoc.py -M files:"*.md"

    これはpandocを2回呼び出します。最初のパスではリンクが正しくないTOCが作成され、2番目のパスではTOCが固定され、その他のものはすべて削除されます(ファイル名を含むメタデータに基づいています)。

    出力はtoc.html(または任意の名前を設定)に格納され、次のようになりますされています。2つのサブセクションは、その後作成、同じタイトル(これらはまとめ」と呼ばれているなど)を共有する場合は、その

    <!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> 
    
    +0

    興味深い提案。ファイルごとに1つ以上のレベル1の見出しを持つことはできません(これは制限するものではありませんが、意味があります) – harmic

    +0

    実際にそれをmorにすることができます実際のPythonプログラムになるようにフィルタを変更すると、一般的です。 "maketoc.py * .md"のようなものがあり、個々のファイルごとにpandocを呼び出します。 –

    関連する問題