2016-12-06 94 views
6

在我的新項目中,我有多個相互鏈接的降價文件。 這些鏈接指的是原始文件.md使用Pandoc將markdown鏈接轉換爲html

例如: 文件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 
+0

你可以給文件名稱和鏈接的例子還收集了任何本地文件引用? – mb21

+0

在說明中添加了示例。 –

回答

5

您可以創建一個過濾器檢查每一個link元素 - 如果該URL結束與.md.html --replaces它。

與Python的例子,使用panflute包:

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

謝謝,太好了!我只是想知道使用Pandoc選項是否沒有簡單的方法? –

+2

@ P.Tail不,沒有現成的方式來做到這一點。 Markdown認爲你的鏈接已經指向呈現的HTML文檔,並且不會改變你的URL。實際上,任何URL的改變都是一個錯誤。當然,使用各種Markdown解析器可以使用定製的插件(如此處所示)。但它必須是定製的,因爲只有你知道你的具體需求,沒有單一的解決方案才能滿足大多數(更不用說所有用戶)的需求。 – Waylan

0

假設你要爲你服務通過Web服務器HTML頁面是比較簡單的解決所有*.md網址作爲*.html的人,而不是通過pandoc重寫他們,例如使用nginx的:從指向

更改所有的內部文件URL * .MD鏈接,而是點:

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

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

或者,你可以使用sed html替換所有md環節(從here拍攝)到本地* .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` 
    
相關問題