周末了,早上起來(lái)外邊還在下小雨,站在陽(yáng)臺(tái)上看了會(huì)雨。陽(yáng)臺(tái)前邊就是一個(gè)很大的公園, 早起的鳥兒已經(jīng)開始忙碌了,我竟然在窗口那棵樹上看到了一只彩色的小鸚鵡,非常漂亮。 中午吃過(guò)飯做城鐵來(lái)到辦公室,手邊一杯咖啡,開始想要把這幾天困擾我的一個(gè)問(wèn)題解決掉。 一直在用LaTeX寫論文,很好很強(qiáng)大,對(duì)數(shù)學(xué)公式的支持幾乎可以用完美來(lái)形容。但是只有一個(gè)問(wèn)題,每次當(dāng)我寫好東西想要發(fā)給導(dǎo)師或者同事開始協(xié)同寫作的時(shí)候,LaTeX到PDF然后到Word文檔的轉(zhuǎn)換成了一個(gè)比較麻煩的事情。當(dāng)我從PDF中拷貝粘貼文本到Word的時(shí)候,格式全亂掉,數(shù)學(xué)公式一團(tuán)糟。之后手動(dòng)調(diào)整格式的過(guò)程讓使用LaTeX寫作的優(yōu)勢(shì)看起來(lái)似乎抵消掉。 我不打算也知道很難勸說(shuō)導(dǎo)師和周圍的人都使用LaTeX,實(shí)話說(shuō),LaTeX的好處用過(guò)的都知道。但是,當(dāng)科學(xué)寫作更多的需要協(xié)作的時(shí)候,除非周圍的人都使用LaTeX,否則每次轉(zhuǎn)換格式都會(huì)浪費(fèi)許多時(shí)間,而且也容易出錯(cuò)。 于是想要尋找一個(gè)LaTeX的替代解決方案,并非完全要放棄LaTeX。因?yàn)榭萍颊撐膶懽?br/> 不可避免要有許多數(shù)學(xué)符號(hào)和公式。而且許多期刊都提供了LaTeX模板,因此如果這種 替代方案需要讓我完全放棄LaTeX,我也會(huì)有些猶豫的。 好在發(fā)現(xiàn)了Markdown,更確切的說(shuō),是發(fā)現(xiàn)了Markdown+Pandoc的組合。 什么是Markdown? ------------------------- 簡(jiǎn)單一句話就是:用純文本寫作,同時(shí)用直觀的輕量級(jí)標(biāo)記來(lái)格式化文檔。 為什么要使用純文本創(chuàng)作? ------------------------------------- 我的哲學(xué)是,任何基于字符的創(chuàng)作都應(yīng)該是內(nèi)容至上(除了書法)。這包括寫小說(shuō),寫 論文,或者是寫代碼。在創(chuàng)作過(guò)程中,尤其是前期創(chuàng)作中,任何格式都是一種多余。這 一點(diǎn)大家可以想像一下作家用紙筆寫小說(shuō),紙上總不能高亮或者加粗吧?用內(nèi)容說(shuō)話才 是王道。 什么是Pandoc? ---------------------- Markdown本身是為了方便輸出到HTML格式的??墒呛髞?lái)大家不局限于只是生成HTML 網(wǎng)頁(yè),而Pandoc就是為了解決這種需要。通過(guò)Pandoc,原始的Markdown文本可以順利 的轉(zhuǎn)換成Word文檔(.docx),OpenOffice文檔(.odt),或者是TeX文檔(.tex)。 為什么Markdown+Pandoc的組合讓我動(dòng)心? -------------------------------------------------------------- 1. 輕量、簡(jiǎn)單易學(xué)、上手容易。實(shí)話說(shuō)學(xué)LaTeX已經(jīng)花了不少功夫,我不想再學(xué)習(xí)另一種 復(fù)雜的語(yǔ)言,只是為了寫作文章。Markdown符合需求。 2. 能夠順利轉(zhuǎn)換成Word文檔。畢竟周圍的人用Word還是不少,能夠順利和他們分享文檔 也是我的基本需求之一。這點(diǎn)Pandoc可以解決。 3. 能夠轉(zhuǎn)成TeX文檔。這個(gè)對(duì)我來(lái)說(shuō)也是必須的,目前為止Markdown對(duì)數(shù)學(xué)和表格的支持 還是有些弱。Pandoc可以將Markdown轉(zhuǎn)到TeX文件,這一點(diǎn)對(duì)我來(lái)說(shuō)吸引力非常大。 如何配置Mardown+Pandoc? ---------------------------------------- 幾乎不需要配置。下載Pandoc安裝就行。五分鐘就可以搞定上手。 MD的介紹可以看這里:[維基百科Markdown](http://zh./wiki/Markdown) Pandoc的介紹可以看這里:[Pandoc用戶指南](http://www./article/746) 我現(xiàn)在的寫作流程 -------------------------- 1. Vim中寫作MD原始文本 2. 需要分享時(shí)通過(guò)Pandoc轉(zhuǎn)換為.docx 3. 需要發(fā)表到學(xué)術(shù)期刊時(shí),通過(guò)pandoc轉(zhuǎn)為TeX,然后調(diào)用期刊的LaTeX模板,生成PDF。 這樣,既避免了轉(zhuǎn)到另一種更復(fù)雜的解決方案,同時(shí)能夠保證和同事之間的分享。而且最重要 的是沒(méi)有放棄LaTeX,保留了后期轉(zhuǎn)到LaTeX的靈活性。 有哪些問(wèn)題? ------------------------------ 當(dāng)然,這種解決方案并非完美,目前來(lái)看問(wèn)題主要有: 1. 數(shù)學(xué)公式。Pandoc雖然可以把LaTeX math渲染成很漂亮的HTML公式,但是目前來(lái)看 似乎無(wú)法很好的渲染到.docx文檔中。也有可能是因?yàn)槲译娔X上沒(méi)有裝Office,而是用蘋果 的Pages,所以不支持MOMML(Microsoft's Office Math Markup Language)語(yǔ)言?好吧, 看來(lái)又是一個(gè)編輯器專用的東西。那么數(shù)學(xué)公式怎么辦呢?我現(xiàn)在的辦法是,依然用TeX Math直接在Markdown中寫數(shù)學(xué)公式,轉(zhuǎn)好DOCX文件之后,\begin{equation}和\end{equation} 之間的部分不會(huì)輸出,我再用LaTeX it?。ㄒ粋€(gè)小工具,轉(zhuǎn)LaTeX數(shù)學(xué)公式到PDF或者圖片, 非常簡(jiǎn)單,拷貝粘貼就行)插入到DOCX文檔中。我不是搞數(shù)學(xué)或者物理的,文章中公式并 不是很多,因此,這并不是太大的問(wèn)題。 2. 參考文獻(xiàn)。用Markdown+Pandoc的話,當(dāng)然可以直接使用Pandoc的文獻(xiàn)插入格式。但是 這里有一個(gè)問(wèn)題,因?yàn)槲倚枰笃谵D(zhuǎn)到TeX文檔,現(xiàn)在看來(lái)Pandoc在把MD轉(zhuǎn)到TeX之后, 仍然保留的Pandoc的cite key{author:year},而不是LaTeX的cite key (\cite{author:year})。 但是,這個(gè)世界總是有很多辦法的。我的辦法就是,直接插入Papers2(文獻(xiàn)管理軟件)的 cite key,對(duì)于上邊那篇文獻(xiàn),Papers2的cite key長(zhǎng)這個(gè)樣子:{author:year}。當(dāng)我生成DOCX 之后,{author:year}依然保留在DOCX文件中,然后我只需要很簡(jiǎn)單的用Papers2格式化一下 文檔就行(超級(jí)簡(jiǎn)單)。那么轉(zhuǎn)到TeX中呢,{author:year}依然保留,不過(guò)變成這個(gè)樣子了: \{author:year}。大家可以看到,這里和LaTeX的cite key唯一不同的地方就是,\{author:year\} 之間少了個(gè)cite,然后第二個(gè)大括號(hào)的前邊多了一個(gè)“\”。哈哈,有辦法了。直接用Vim的查找 替換。首先,替換前邊的"\{"為"\cite{":在Vim中輸入::%s/\\{/\\cite{/g 。然后替換后邊的"\}" 為"}"::%s/\\}/}/g 。經(jīng)過(guò)這兩步,本來(lái)還是\{author:year\}的cite key就變成了LaTeX的cite key \cite{author:year}了。 搞定!Perfect! 好了,現(xiàn)在可以放心的用Markdown+Pandoc的組合來(lái)寫論文了,插數(shù)學(xué)公式或者參考文獻(xiàn) 都沒(méi)有問(wèn)題。同時(shí)既保留了Markdown的輕量,同時(shí)可以無(wú)縫轉(zhuǎn)換到其它文檔格式,最關(guān)鍵 的是,和LaTeX也有非常完美的結(jié)合。 下一步,就是怎么想辦法誘惑周圍的人(包括導(dǎo)師和同事)也開始放棄Word,來(lái)使用Markdown 寫論文了。更大的理想是,通過(guò)使用純文本寫作,再結(jié)合GitHub進(jìn)行協(xié)作,實(shí)行版本控制, commit, push, pull。。。你懂的。。。。 原文:http://www.douban.com/note/245109923/ |
|
來(lái)自: dinghj > 《信息技術(shù)》