web-dev-qa-db-ja.com

Pandocを使用してマークダウンリンクをhtmlに変換する

私の新しいプロジェクトには、相互にリンクされた複数のマークダウンファイルがあります。これらのリンクは、元の.mdファイルを参照しています。

例:ファイルREADME.md

...
1. [Development documentation](Development.md)
1. [User documentation](Usage.md)
...

これらのファイルをPandocで変換すると、たとえばhtmlファイルへのリンクは、元の.mdファイルを指しています。私が探しているのは、リンクタイプも変換する方法です。つまり、出力ファイルはHTML、PDF、TeXなどの出力ファイルタイプを参照する必要があります。Pandocで内部リンクタイプを変換する方法はありますか?

私はこれを使用してファイルを変換します:

pandoc -f markdown -t html5 input.md -o output.html
13
P.Tail

すべての link 要素をチェックし、-URLが.mdで終わる場合は.htmlに置き換えるフィルターを作成できます。

panflute パッケージを使用したPythonの例:

import panflute as pf

def action(elem, doc):
    if isinstance(elem, pf.Link) and elem.url.endswith('.md'):
        elem.url = elem.url[:-3] + '.html'
        return elem

if __name__ == '__main__':
    pf.run_filter(action)
8
Sergio Correia

組み込みのLuaフィルター の例:

# links-to-html.lua
function Link(el)
  el.target = string.gsub(el.target, "%.md", ".html")
  return el
end

次に:

pandoc -f markdown -t html5 input.md -o output.html --lua-filter=links-to-html.lua
11
JW.

Webサーバーを介してHTMLページを提供する場合、pandocを介して書き換える代わりに、すべての*.mdURLを*.htmlのものとして解決するのは比較的簡単です。 NGinxの使用:

location ~ \.md$ {
  if (!-f $request_filename) {
    rewrite ^(.*)\.md$ $1 permanent;
  }
}

location / {
  try_files /$uri /$uri.html;
}

または、mdhere から取得)を使用して、すべてのhtmlリンクをsedに置き換えることができます。

すべての内部ファイルのURLを* .mdリンクを指すものから変更し、代わりにローカルの* .htmlファイルを指すようにします

  1. このsedコマンドを再帰的に実行します(プログラムでFILENAMEを置き換えます)

    sed -n -i.bak '/href="\./s/\.md/\.html/' FILENAME.html
    
  2. または、代わりに次のコマンドを実行します(プログラムでFILENAMEを置き換えます)

    sed -e '/href="\./s/\.md/\.html/' FILENAME.html > FILENAME.html.tmp && mv FILENAME.html.tmp FILENAME.html`
    
1
Nick Roz

同様の問題があったので、これを作成しました: https://github.com/MatrixManAtYrService/md_htmldoc

ディレクトリ内のすべての.mdファイルを検索し、すべてのマークダウンがhtmlに変換された別のディレクトリを作成します。

ハイパーリンクを修正します(@Sergio_Correiaの回答に感謝します)。

また、ローカルファイル参照を収集して、画像などへのリンクが引き続き機能するようにします。