Markdown寫(xiě)作進(jìn)階:Pandoc入門(mén)淺談熟悉Markdown的朋友,不由地奇怪,為什么它不支持表格、數(shù)學(xué)公式以及很多你想要的功能。這一切,與Markdown自身的設(shè)計(jì)哲學(xué)有關(guān)系,提供盡可能少的,用于創(chuàng)作的功能,將對(duì)它的擴(kuò)展,交給各路開(kāi)源愛(ài)好者。于是,我們可以看到github flavored markdown、multimarkdow、maruku等各路擴(kuò)展。 然而,這些擴(kuò)展某種意義上,并不是針對(duì)寫(xiě)作的。開(kāi)源界傳說(shuō)中的高帥富社區(qū),haskell社區(qū)的作品Pandoc給了我們更好的選擇,在多個(gè)方面完敗MMD,參考:Pandoc vs Multimarkdown。 haskell 是什么?一種編程語(yǔ)言。每位資深的開(kāi)發(fā)者學(xué)習(xí)它,都會(huì)有些不知所措,因?yàn)椋木幊趟悸凡煌谕ǔR饬x上類(lèi)似于C#、Python、Java這些流行的編程語(yǔ)言。它來(lái)自一群高智商的開(kāi)發(fā)者的貢獻(xiàn),據(jù)說(shuō)人人有PHD學(xué)位,是函數(shù)式編程語(yǔ)言的典范。當(dāng)然,Pandoc作者John MacFarlane也不例外,他是一位來(lái)自美國(guó)加州大學(xué)伯克利分校的哲學(xué)教授,研究的是認(rèn)識(shí)論這類(lèi)高深議題:D 文本格式轉(zhuǎn)換,每位開(kāi)發(fā)過(guò)這方面程序的技術(shù)青年,都知道它有多么痛苦;開(kāi)發(fā)出的程序有多么丑陋。甚至可以說(shuō),這是個(gè)無(wú)底黑洞。事實(shí)證明,haskell的確是干這臟活、累活的最恰當(dāng)選擇。Pandoc也的確成功了,并已成功在短期內(nèi)構(gòu)建一個(gè)完整的生態(tài)鏈,于是,有了我們這篇小文。 1. Pandoc安裝1.1 最簡(jiǎn)單的安裝辦法(推薦辦法)下載軟件,找到相應(yīng)操作系統(tǒng)對(duì)應(yīng)的文件,然后按照默認(rèn)點(diǎn)擊即可。如果你不需要學(xué)習(xí)Haskell,請(qǐng)使用此種辦法,好處多多。 1.2 更技術(shù)的安裝辦法(學(xué)習(xí)Haskell者使用)一個(gè)通用的安裝方式是,安裝Haskell平臺(tái).然后再通過(guò)Haskell平臺(tái)安裝Pandoc。步驟如下: 1.2.1 安裝Haskell平臺(tái)如果之前,你通過(guò)其它方式,安裝過(guò)Haskell的運(yùn)行平臺(tái),需要卸載,Mac下命令如下:
然后,系統(tǒng)會(huì)找到你之前安裝過(guò)的版本,如7.4.1、7.0.4,運(yùn)行下列命令:
下載Haskell平臺(tái),下載地址是:http://hackage./platform/ 選擇你相應(yīng)的操作系統(tǒng)平臺(tái)即可。 然后下載完之后,一路按照默認(rèn)安裝即可。配置在.bashrc或者修改.zshrc文件。作者使用的是zshrc配置文件。因此,在~/.zshrc文件末尾增加一行:
這樣可以直接通過(guò)shell來(lái)控制Haskell。打開(kāi)終端,如iterm2,輸入:
cabal是類(lèi)似于Ruby下的rubygems一樣的包管理器。cabal程序會(huì)鏈接到服務(wù)器http://hackage./packages/archive/上下載相應(yīng)的包信息。下載時(shí)間會(huì)較長(zhǎng),請(qǐng)耐心等候,并檢查本機(jī)與HaskellDB服務(wù)器的連接速度。 1.2.2 安裝pandoc運(yùn)行:
編譯安裝時(shí)間較漫長(zhǎng),你可以去打個(gè)醬油。在安裝過(guò)程中,我們會(huì)發(fā)現(xiàn)pandoc調(diào)用與使用的一些Haskell擴(kuò)展包,如:
1.2.3 ubuntu下的安裝yanping總結(jié)了ubuntu下pandoc的安裝步驟,如下:
然后再把~/.cabal加到路徑中去,在.bashrc里加上一句
1.2.4 安裝之后的校驗(yàn)打開(kāi)Shell,輸入:
如果安裝無(wú)誤,應(yīng)能看到pandoc相關(guān)的作者、版權(quán)、序列許可等信息。當(dāng)然,更令人震撼的是,能看到Pandoc已經(jīng)支持的語(yǔ)言列表。使用
可以看到pandoc主要支持的輸入與輸出格式:
上述語(yǔ)言的互轉(zhuǎn)關(guān)系,可以看看作者制作的這份壯觀的圖,從中可以看出Pandoc的強(qiáng)大。這年頭,哲學(xué)系教授會(huì)寫(xiě)程序,還是Haskell,傷不起啊:D 2.Pandoc 編輯器2.1 Pandoc 編輯器當(dāng)然,你可以一切操作都在Shell中完成,不過(guò),為了提高效率,總是可以借助于Pandoc社區(qū)既有的積累。如:
更多編輯器、插件請(qǐng)參考:Pandoc-Extras 2.2 Pandoc TextMate Bundle以下以Mac下主要編輯器TextMate為例,說(shuō)明如何安裝。請(qǐng)?zhí)貏e注意,該Textmate Bundle作者并沒(méi)有全部完成所有工作。僅供參考。TextMate2.0之后的bundle位置已經(jīng)變動(dòng)了,現(xiàn)在默認(rèn)位置是:/Applications/TextMate.app/Contents/SharedSupport/Bundles/
安裝完之后,效果如下圖所示, 2.Pandoc Markdown語(yǔ)法特色詳情參見(jiàn):Pandoc 2.1 Pandoc寫(xiě)表格如下所示:
2.2 Pandoc寫(xiě)參考文獻(xiàn)使用[Pandoc Markdown]格式的寫(xiě)法是在文中使用:
然后在文末使用:
如下例所示: 正文中是:
然后在文章末尾寫(xiě)上:
3. Pandoc文檔轉(zhuǎn)換3.1 Markdown轉(zhuǎn)html、word與PDF如下例所示: 轉(zhuǎn)html格式
轉(zhuǎn)word格式
3.2 Markdown轉(zhuǎn)PDF安裝LaTex待補(bǔ)。 轉(zhuǎn)pdf格式
4 Pandoc生成epub、html與在線(xiàn)電子書(shū)4.1 安裝nodejs與grunt、bower下載nodejs安裝包,網(wǎng)址為:http:/// 下載之后,安裝默認(rèn)安裝。安裝完之后,確認(rèn)安裝是否成功。
如果如我一樣,使用的是zsh。在.zshrc文件中添加nodejs的路徑。
在文件末尾添加:
然后,安裝grunt。
安裝bower等。
4.2 使用wbb生成epub、html與在線(xiàn)電子書(shū)示范以著名的progit為例。
然后檢查clone下來(lái)的項(xiàng)目,是否已經(jīng)包含了grunt.js等文件。各項(xiàng)生成代碼寫(xiě)在那里面。 書(shū)稿則寫(xiě)在/test2012/src/chapters 這樣的目錄下面。 寫(xiě)作書(shū)稿時(shí),完全按照正常git流程管理。書(shū)稿預(yù)覽效果,是在test2012的根目錄下面,運(yùn)行:
自定義各項(xiàng)參數(shù),請(qǐng)修改grunt.js文件。 生成的epub、html與moblie在線(xiàn)電子書(shū),在builds目錄下面。同時(shí)可以設(shè)置,與leanpub在線(xiàn)出版網(wǎng)站搭配。 5 Pandoc的科技寫(xiě)作5.1 Pandoc與bibdesk、APA文獻(xiàn)格式的配合5.2 RStudio默認(rèn)使用Pandoc請(qǐng)參考:Customizing Markdown Rendering 還有個(gè)pander的R包。
小結(jié)我目前的觀點(diǎn)是,Pandoc Markdown不是萬(wàn)能的,表格、復(fù)雜公式、多國(guó)語(yǔ)言、上下標(biāo)、交叉引用、圖表對(duì)齊較多的場(chǎng)合,它并不適合。但是需要互動(dòng)、實(shí)時(shí)展現(xiàn)、更快輸出的場(chǎng)合,Pandoc Markdown等值得大力推薦。未來(lái)互聯(lián)網(wǎng)會(huì)逼使寫(xiě)作趨簡(jiǎn)。需要更快發(fā)表、互動(dòng)輸出與交流的場(chǎng)合,也會(huì)越來(lái)越多。比如課堂作業(yè)、企業(yè)內(nèi)部交流、個(gè)人博客。用它節(jié)省的時(shí)間是寫(xiě)作時(shí)比較關(guān)鍵的"創(chuàng)作時(shí)間"而非"排版時(shí)間"。 本作品采用知識(shí)共享署名-非商業(yè)性使用-禁止演繹 3.0 Unported許可協(xié)議進(jìn)行許可。 |
|