早就想把使用Markdown&pandoc的事情歸納、總結(jié)和梳理一下,但一直沒有時間。放假一天多,邊做事情邊喘氣兒的空隙,整理了一下。
Markdown是個好東西,LaTeX也是個好東西。以下的一些說法只是屬于個人觀點(diǎn),還不一定正確,可視為吐槽,亦可視為一個人的電腦操作習(xí)慣。
把目錄放前面:
一如果熟悉LaTeX,沒必要入Markdown的坑
二 Markdown并非一無是處,pandoc讓Markdown神通廣大
2.1 關(guān)于md→doc&docx
2.2 關(guān)于md→epub&mobi&azw&6寸pdf
三借助pandoc轉(zhuǎn)化LaTeX為doc&docx
把結(jié)論也放前面:
1 Markdown非常適合隨寫隨用的小文檔,特別是有數(shù)學(xué)、物理背景的小文檔
2 不必?fù)?dān)心用Markdown平日里積累的小素材,日后難于整合,LaTeX+pandoc可以把散碎的Md文件串聯(lián)到一起,并輸出成任何你想要的格式
3 如果內(nèi)心早已有大型規(guī)劃與設(shè)計(jì),建議還是直接上LaTeX,畢竟專業(yè)
4 Markdown和LaTeX借助pandoc的支持力量,使得制作專業(yè)電子書文檔更現(xiàn)實(shí)
關(guān)于Markdown、RMarkdown、pandoc、LaTeX、Typora、ML標(biāo)記語言和epub、mobi等電子書格式,不贅述。
一 如果熟悉LaTeX,沒必要入Markdown的坑
最近聽信了一些介紹,走向了Markdown的坑,使用的是Typora和RMarkdown。Markdown有它的優(yōu)勢,比如憑空起一篇文稿,不用再去記憶一些文檔模板命令了,比如\documentclass和一堆堆的\begin、\end、\section、\subsection、\emph{}、\textbf{}等等,要么被徹底省略了,要么被#和##、*和**所取代。
相對LaTeX,Markdown簡化之處甚多。當(dāng)然Markdown的出現(xiàn),絕對不是為簡化LaTeX,原來的時候它們沒什么聯(lián)系的,只是因?yàn)槎咛焐际怯脴?biāo)記語言來排版文檔。
Markdown的好處,便是語法太簡單,而且部分語法與html語法兼容,比LaTeX的學(xué)習(xí)與熟練的臺階,不知道要降低了多少。如果恰好在RStudio里面使用R語言,那RMarkdown應(yīng)該是使用者唯一的文檔編輯器的選擇,因?yàn)?/span>R代碼能夠把執(zhí)行結(jié)果放在文檔里,這種功能再沒有第二個編輯器能做到了。
Markdown似乎只是適合寫些小文檔的場合,比如讀書筆記,并不太適合寫長篇。估計(jì)Markdown主打的就是短小精悍。Typora和pandoc加在一起才100M多點(diǎn)兒,與動耽1G的Office相比,簡直是瑞士軍刀,相當(dāng)犀利。
但是,Markdown也有諸多不便:
⑴插圖尺寸的調(diào)整。比如我習(xí)慣把圖像分辨率按600dpi來輸出,這樣一旦打印,會相當(dāng)清晰。但是如果這樣的圖像直接插入到markdown,圖像就會非常大,解決的辦法是寫成
<img src="C:\3.jpg"style="zoom:40" div />
或者
<img src="C:\3.jpg"style=“width:200px height:200px” />
要特別注意上面那個zoom,實(shí)際是縮小60%的意思。下面的寫法里height可以省略。
此外,在RMarkdown里,以插入的圖像,默認(rèn)是以Base64序列化字符串內(nèi)嵌入到輸出的html文件里面的,即使未來原始圖像丟失,我們?nèi)匀豢梢酝ㄟ^輸出后的html文件還原一個圖像出來——這使RMarkdown生成的文檔比較大,這可能是為了保存R語言的執(zhí)行結(jié)果的原因;當(dāng)使用html語法插入圖像時,圖像文件并不總是包含在輸出的html文件里。但無論以哪種方式插入圖像,Typora總不會把文件包含在html文件里。這比較怪。
⑵單行公式、圖像等的居中顯示。Markdown里,圖像不設(shè)置位置,是左對齊,寫成
<divalign="center"></div>
在RMarkdown里輸出后才能居中顯示,在typora直接顯示為居中。
在插入單行公式時,typora使用$$eqn$$并不顯示為居中,在RMarkdown里則顯示為居中;輸出后,二者均顯示居中。
⑶字體大小。通篇設(shè)置字體大小
<fontsize=3><!--設(shè)置字體大小為3倍,置文檔最前-->
內(nèi)容</font><!—chrunk,置文檔最后-->
一些稍麻煩的設(shè)置,不得不借助html語法和css樣式。若對文檔細(xì)節(jié)有要求,反倒不如LaTeX方便了,因?yàn)?/span>LaTeX有浩如煙海的極豐富的宏包加持。
二 Markdown并非一無是處,pandoc讓Markdown神通廣大
安裝了Typora,或者在RStudio里面安裝了RMarkdown之后,md文檔通過pandoc可以在諸多文檔格式之間轉(zhuǎn)換:Word、pdf、html、rtf、LaTeX、epub、OPML以及圖像(png&jpg)及相關(guān)格式。
我們關(guān)心的,是兩件有趣的事:
⑴markdown向word格式的轉(zhuǎn)換,即md→doc&docx。
⑵pdf、epub、mobi、azw3等電子書的制作,即md→epub。
2.1 關(guān)于md→doc&docx
先說向Word的格式轉(zhuǎn)換。
因?yàn)樵谥袑W(xué)里使用Markdown或LaTeX的人太少了,基本沒有可能用md或tex格式與他人文稿溝通,但是你不可能不面對每天要寫不少文稿,所以,Word(doc&docx)格式是不得不考慮的轉(zhuǎn)換。
事實(shí)上,Word的doc&docx格式是相當(dāng)糟糕的文檔格式,壞文件和不明原因的文件損壞經(jīng)常發(fā)生,然而這種事情在md或tex文檔格式上是絕無可能發(fā)生的。
無論是Typora,還是RMarkdown,直接輸出Word格式就可以了。
有兩個事情值得一提。
一個是,如果在md文件里以$$或$$$$輸入了公式,在導(dǎo)出為docx時,會被自動轉(zhuǎn)化成word的ML公式,就是在word 2007以上版本的ALT+=輸入的公式。如果輸出的是doc格式,這些公式根本就不會被轉(zhuǎn)化,甚至Typora編輯器徹底就不讓你隨便玩doc格式——沒有這個選項(xiàng)。
另一個與doc&docx無關(guān)的話題,是Typora默認(rèn)就支持輸出pdf,而RMarkdown則需要一通復(fù)雜的設(shè)置,但總還都能實(shí)現(xiàn)我們需要的功能。特別是有人提出在RMarkdown里如何輸出中文Beamer的問題,事實(shí)上,借助rticles宏包提供的CTex Documents模板,輸出為Article再簡單修改一下即可轉(zhuǎn)換為Beamer幻燈片,絕對比在RMarkdown里靈活得多。Markdown的出現(xiàn),并不能替代LaTeX,Markdown控制功能太弱了。
2.2 關(guān)于md→epub&mobi&azw&6寸pdf
再說電子書文檔。
現(xiàn)在全社會都在搞花式閱讀,手機(jī)以及移動的閱讀器、電子書和電紙書等已經(jīng)很普及了。我們用Markdown借助pandoc就可以方便的生成epub格式,再借助Calibre轉(zhuǎn)成mobi&azw&6寸pdf格式。
為什么不是直接md格式轉(zhuǎn)換到pdf呢?頁面尺寸和適于手機(jī)閱讀的行距等,Calibre做得比其他工具出色得多。只此一點(diǎn)足夠作為理由。
導(dǎo)出電子文檔在手機(jī)閱讀器里的表現(xiàn):
總之,Markdown讓我們把文檔轉(zhuǎn)換成其它格式提供了太多太多的方便。
三借助pandoc轉(zhuǎn)化LaTeX為doc&docx
之所以要把LaTeX轉(zhuǎn)換成Word格式,就是因?yàn)橹辽僭谥袑W(xué)階段里,使用LaTeX的人太過稀少。若干年前,LaTeX轉(zhuǎn)Word,一般是使用Tex2Word軟件,但是它收費(fèi);另一個辦法是使用TTH(http://hutchinson.belmont.ma.us/tth/),經(jīng)由html轉(zhuǎn)到word,其中的LaTeX公式會轉(zhuǎn)化成圖片格式而不能被再次編輯。
現(xiàn)在Markdown標(biāo)記語言排版經(jīng)由pandoc的轉(zhuǎn)化,提示我們,可以通過pandoc轉(zhuǎn)化tex到Word格式去。嘗試之后,發(fā)現(xiàn)效果可以接受,只需注意到⑴pdf圖像問題、⑵beamer的\only<presentation>{}和⑶UTF8編碼問題。
Pandoc轉(zhuǎn)化word是以cmd命令進(jìn)行的,以下為CTRL+R運(yùn)行在cmd窗口中的情況形,注釋為后期添加,以#領(lǐng)起。
Microsoft Windows [版本 10.0.17134.523]
(c) 2018 MicrosoftCorporation。保留所有權(quán)利。
C:\Users\Administrator>pandocC:\Example\da.tex -o C:\elec.doc
Unknown writer: doc
# pandoc命令只在正常安裝了pandoc才能正常執(zhí)行,否則會提示錯誤命令
# 失敗,不能直接輸出為doc格式
C:\Users\Administrator>cdc:\example
c:\Example>pandocda.tex -o d:\e.docx
pandoc: Cannot decodebyte '\xb1': Data.Text.Internal.Encoding.decodeUtf8: Invalid UTF-8 stream
# 錯誤提示的意思是tex文件不是UTF8格式的
# 使用記事本打開,然后保存成UTF8格式
c:\Example>pandocda.tex -o d:\e.docx
# 正常執(zhí)行,得到e.docx文件
c:\Example>cd c:\22
# 進(jìn)入另一目錄,實(shí)驗(yàn)其他功能
c:\22>pandoc 22.tex-o 22.docx
# 正常執(zhí)行
c:\22>pandoc 22.tex-o 22.doc
Unknown writer: doc
# 不能直接轉(zhuǎn)doc
c:\22>pandoc 22.tex-o 22.rtf
[WARNING] Could notfetch resource '0.pdf': image is not a jpeg or png
[WARNING] Could notfetch resource 'pgf1.pdf': image is not a jpeg or png
[WARNING] Could notfetch resource 'pgf3.pdf': image is not a jpeg or png
[WARNING] Could notfetch resource '1.pdf': image is not a jpeg or png
[WARNING] Could notfetch resource '2.pdf': image is not a jpeg or png
[WARNING] Could notfetch resource '3.pdf': image is not a jpeg or png
[WARNING] Could notfetch resource '6.pdf': image is not a jpeg or png
[WARNING] Could notfetch resource '7.pdf': image is not a jpeg or png
[WARNING] Could notconvert TeX math '\sqrt{\frac{13}{17}}', rendering as TeX
# 轉(zhuǎn)rtf格式時會提示pandoc不能轉(zhuǎn)pdf格式圖像,只能轉(zhuǎn)jpg和png
# 轉(zhuǎn)rtf時不能轉(zhuǎn)LaTeX數(shù)學(xué)公式
# 實(shí)際測試,對使用的外來宏包,都能正常轉(zhuǎn)換
c:\22>pandoc 22.tex-o 22.html
[WARNING] Could notconvert TeX math '\sqrt{\frac{13}{17}}', rendering as TeX
# 轉(zhuǎn)html也不能轉(zhuǎn)換LaTeX公式,但保留的原始標(biāo)記語言信息并不丟失
c:\22>rem “OK!OVER!”
c:\22>