上周五,我對友人說,十年后,基于Markdown+R的科技寫作方式將有較大概率成為主流。而這一切,少不了來自一位友人的重要開源貢獻。他給這條生態(tài)鏈補上了最重要的一環(huán)。他,就是yihui。
好了,觀點擺出來了,趨勢來臨之際,人人覺得與自己沒有關系?,F(xiàn)在,讓我講清楚,Markdown+R與你可能有什么關系。小文結構如下:
寫作一般而言,會碰到這么一些難題:
從2009年開始,我拋棄Word寫作,幾年來,幾本書、十萬字以上的長文檔,幾乎只是用Word在最后做個轉(zhuǎn)換與掃尾工作。剛開始是使用google doc,然后當Markdown出現(xiàn)在視線之中后,毫不猶豫轉(zhuǎn)到它上面來了。
它實際上是個非常簡單、非常容易學習的語法。這個語法簡單到每個人都可以在5分鐘以內(nèi)學會。應該是為數(shù)不多,你真的可以徹底學會的語言。
更重要的是,Markdown語法所有要素,是與寫作的習慣一脈相承的,套用句俗語:僅為寫作而生。比如:
習慣是人生最大的指導。
一切就這么簡單。Markdown之所以在被鼓吹之后,越來越流行,不是因為它復雜,而是因為它足夠簡單。
Markdown誕生于互聯(lián)網(wǎng)時代,更是由深諳互聯(lián)網(wǎng)文本之道的John Gruber等人設計。因為Ruby與github圈的極客們的熱捧,以及來自github、Stackoverflow等的大力支持。從一開始,就建立一個完整的生態(tài)鏈。我們可以粗略看看,Markdown如何解決這些難題的。感興趣的朋友可以去讀我的老文:理想的寫作環(huán)境:git+github+markdown+jekyll
Word共享難?我的所有文檔都放在github或者其他支持git版本跟蹤服務的服務器上。所以,可以極其方便的共享文檔寫作過程。看看,最近在與豆瓣友鄰協(xié)作的一本書的截圖:
可以清晰地看到,我的所有寫作過程,github都可以自動記錄下來,從而不再擔心寫廢。另一位豆瓣友鄰的任何改動、編輯的修訂意見,大家都可以實時完成,也具備歷史跟蹤與版本查找功能。
在用Word寫作的時候,經(jīng)常浪費大量時間去思考排版,但是因為Markdown足夠簡單,你無法思考排版,也沒必要思考,所以,逼自己集中精力寫作。Markdown語法因為格式足夠簡單,所以,導致開發(fā)者非常容易生成漂亮的版式,一切既有的CSS都可以簡單修改之后套用,如:css 1 、css 2
這是我在寫的一篇長篇科普文章。大家可以看到,我左邊寫,右邊就是非常漂亮的稿件出來了。同樣,值得驕傲的是,這個寫作軟件,在世界范圍,廣受好評的Mou,也是另一位國人Chen Luo開發(fā)的:D 我們?yōu)檫@個時代,類似于yihui與Chen Luo,這批安靜的創(chuàng)作者而驕傲。
如果你是純文科生,寫的都是豆瓣小酸文或者詩歌之類的,那么,看完上面這一部分就可以打住了。如果你還有寫科技論文的需要,則繼續(xù)往下看。
科技寫作與文藝寫作的不同主要有:
解決這些難題,LaTeX是國際科學界,尤其是偏數(shù)理類的學科的主流方案之一。當然,因為中國盜版office的流行,導致國內(nèi)科技論文Word更盛行,則是另一碼事。Word因為近些年在參考文獻協(xié)作軟件、數(shù)學公式方面的發(fā)力,也逐步成為科技界認同的論文投遞標準之一。
提到LaTeX的人們,常常有兩種口氣。一種是當做大神來敬仰的,當語言、軟件變?yōu)閭髌?,路人皆知它的誕生歷史時,于是,眾多如你我這類文科生,只有抬頭仰望的份了。另一類,則是不屑的口氣,LaTeX那么好學,你怎么都學不會!國際期刊都是用這個寫的,你別混了。。。
于是,我等文科生只好在被鄙視的眼光之下,快快走過LaTeX。。。但是,LaTeX真的符合人們寫作習慣嗎?請記住當時的歷史。那時的計算機,所見即所得,并不像今天這么流行。那時的計算機,處理能力也不像今天這么強大。更別提什么腳本語言了。翻出上一份LaTeX文檔所用的APA模版,大家就知道它有多么坑爹了。。。
使用Lyx,好看多了。問題是,它有坑嗎?你跳過嗎?
每位試圖解決LaTeX的不便,又試圖保留它的優(yōu)點的人們,都走上了一條不歸路。
直到有一天,極其熟悉LaTeX,也熟悉Markdown的yihui同學,意識到了,LaTeX它可以作為最終格式生成。但是,我們中間的寫作過程,完全可以用Markdown這么簡單明了的語法來寫,我們真正需要的,就是一堆數(shù)學公式、圖表與參考文獻而已。前2者,恰恰是R的強項。后者,則留給開源社區(qū),下一步解決。(可參考線索1、線索2、線索 3 )
于是,在他的新作R包knitr中,果斷提供了Markdown支持。并說服R社區(qū)主流編輯器廠家,開源軟件RStudio 提供 Markdown支持,從而使得Rmd這種新格式開始流行。我們有幸看到這個重要格式的誕生,國人的貢獻如此重要。
Rmd 格式更詳細的描述,讀 yihui 的文檔:自動化報告
在這里,讓我簡單說明,如何最快上手Rmd格式。
下載 RStudio 之后,打開配置選項,如下圖所示:
然后,進行如下配置:
新建一個Rmd文檔,如下圖所示:
然后,默認會出來一些內(nèi)容。如果你對Markdown語法有不熟悉的地方,點擊MD按鈕。寫完之后,直接點擊: Knit HTML 按鈕即可發(fā)布。MD按鈕與Knit Html按鈕的位置如下圖所示:
就會預覽成功。你也可以點擊保存,生成相應的圖片、Markdown文檔。
是的,你要的一切圖片都有了!這就是 yihui 所推崇的 文學性編程、可重復研究概念的神奇。
更重要的是,還保留了對LaTeX的無縫兼容。比如,大家可以敲下這段文字:
## The Normal DistributionThe normal distribution is defined as follows:$$latexf(x;\mu,\sigma^2) = \frac{1}{\sigma\sqrt{2\pi}} e^{ -\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2 }$$To generate random draws from a normal distribution we use the **rnorm** function:```{r block1}output <- rnorm(1000, 100, 15);```The normal distribution has the typical bell shape:```{r block2, fig.width=8, fig.height=5}ggplot2::qplot(output)```
其中,這一段,
$$latexf(x;\mu,\sigma^2) = \frac{1}{\sigma\sqrt{2\pi}} e^{ -\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2 }$$
就是直接生成LaTeX格式的數(shù)學公式!
沒有安裝RStudio,或者不熟悉R的朋友,可以在我搭建的一個在線演示APP里面,將上述代碼,粘貼上去,然后看看神奇的效果!
網(wǎng)址是:R Markdown App 效果如下圖所示:
讓我細數(shù)一下:
發(fā)表論文或者審核同事的報告,有個最麻煩的事情,你不知道他的步驟或者計算是否有誤?,F(xiàn)在,代碼嵌在報告正文中,或者附錄在報告末尾。而你,要做的,僅僅是一鍵生成。。。 這就是真正意義上的可重復性研究!
既兼容了LaTeX的既有能力,同時,又廣泛借助于R自身強大的作圖與統(tǒng)計學習能力。
更重要的是,未來,并不是非要用R語言作圖。yihui 同學在前文中的描述已經(jīng)極其清楚了。
真正意義上的云計算,尤其是類似于我們這樣,中小企業(yè)、小型實驗室實戰(zhàn)使用的小型云計算,不同于各類忽悠的云計算。Markdown+R這種方式是最佳方式之一。上述例子中提到的那個APP,就是搭建在云中。同時提供各類REST接口,可以被Ruby程序調(diào)用。
點這里:Pandoc
還有不少有趣的玩法,如Building a beamer presentation with knitr.
好了,回到大家最關心的部分。分成兩部分,先是如何學習Markdown,其次是如何學習R。
文藝青年看這里,
可以看這里:如何學習科學:開放科學工具箱
點擊 RAW 即可看到原始格式。這是一個長文檔的示范。另一個示范是作者寫的一個在線DEMO: