Bookdown平臺分享了哪些書籍凿叠,如何使用Bookdown分享書籍

歡迎關(guān)注天下博客:http://blog.genesino.com/2016/11/bookdown-usage/
Jump to...

  1. 基本使用
    1. 安裝必須軟件
    2. Demo示例
    3. 編譯成書
  2. Customize our bookdown
    1. 準備Rmd文件
      1. 基本規(guī)則
      2. 插入并引用圖片(外部圖片)
      3. 插入并引用表格(外部表格)
      4. 插入并引用表格(內(nèi)部表格)
      5. 插入腳注
      6. 插入引文
    2. 準備YML配置文件
      1. _bookdown.yml
      2. _output.yml
    3. 其它定制
  3. 預覽生成的WEB文件
  4. References

bookdown是著名R包作者謝益輝開發(fā)的厘擂,支持采用Rmarkdown (R代碼可以運行)或普通markdown編寫文檔昆淡,然后編譯成HTML, WORD, PDF, Epub等格式。樣式清新刽严,使用簡單昂灵,值得擁有。

在Bookdown的官網(wǎng)舞萄,有很多免費的用bookdown寫的R書籍倔既,如Hadley Wickham等撰寫的《R for Data Science》,Roger D. Peng撰寫的《R Programming for Data Science》, 陳總的《液體活檢口袋書》鹏氧,益輝的《R語言忍者秘笈》渤涌,《單細胞數(shù)據(jù)整體分析流程》https://hemberg-lab.github.io/scRNA.seq.course/index.html (初學單細胞分析可以完全照著這個,在學習過程中改進)把还。

還有很多基于Bookdown的教程实蓬,一時也想不起來,歡迎大家補充吊履。我們前面轉(zhuǎn)錄組R培訓的教案也是用bookdown寫作的安皱,后續(xù)再調(diào)整下格式,出一批電子書和紙質(zhì)書艇炎,有意向和需求的歡迎聯(lián)系酌伊。

下面分2步講述,自己如何構(gòu)建一個Bookdown書籍缀踪,第一部分是通過bookdown示例了解其基本功能和使用居砖,第二部分是個人在使用過程中碰到的問題和解決方式。

基本使用

安裝必須軟件

RstudioPandoc二選一, bookdown必須安裝驴娃。

  • Install Rstudio (version>1.0.0) (安裝和使用見Rstudio)

  • Install Pandoc (version>1.17.0.2)或者參照here奏候。如果系統(tǒng)新,可以直接使用系統(tǒng)自帶的yumapt-get唇敞;如果沒有權(quán)限或系統(tǒng)比較老蔗草,Pandoc的安裝可以使用conda,具體配置見Conda配置疆柔,配置好運行conda install -c conda-forge pandoc即可安裝咒精。

  • In R install.packages("bookdown")

Demo示例

克隆或下載https://github.com/rstudio/bookdown-demo示例文件,編譯成功后旷档,依葫蘆畫葫蘆修改.

編譯成書

運行下載的示例中的bash _build.sh模叙,_book目錄下就是成書.

The content of _build.sh is:

#!/bin/sh
Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::gitbook')"
# 生成pdf需要安裝好latex,如果不需要可以注釋掉
Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::pdf_book')"

<mark style="box-sizing: border-box;">在前面的內(nèi)容運轉(zhuǎn)起來后彬犯,再看后面的內(nèi)容向楼。</mark>

Customize our bookdown

準備Rmd文件

基本規(guī)則
  • 一個典型的bookdown文檔包含多個章節(jié)查吊,每個章節(jié)在一個R Markdown文件里面 (文件的語法可以是pandoc支持的markdown語法,但后綴必須為Rmd)湖蜕。

  • 每一個章節(jié)都必須以# Chapter title開頭逻卖。后面可以跟一段概括性語句,概述本章的內(nèi)容昭抒,方便理解评也,同時也防止二級標題出現(xiàn)在這一頁。默認系統(tǒng)會按照文件名的順序合并Rmd文件灭返。

  • 另外章節(jié)的順序也可在_bookdown.yml文件中通過rmd_files:["file1.Rmd", "file2.Rmd", ..]指定盗迟。

  • 如果有index.Rmdindex.Rmd總是出現(xiàn)在第一個位置熙含。通常index.Rmd里面也需要有一章節(jié)罚缕,如果不需要對這一章節(jié)編號的話,可以寫作# Preface {-}, 關(guān)鍵是{-}怎静。

  • 在第一個出現(xiàn)的Rmd文件中 (通常是index.Rmd)邮弹,可以定義Pandoc相關(guān)的YAML metadata, 比如標題、作者蚓聘、日期等 (去掉#及其后的內(nèi)容)腌乡。

    title: "My book"
    author: #可以寫多行信息,都會被當做Author處理

    如果需要引用參考文獻夜牡,則添加下面三行內(nèi)容

    bibliography: [database.bib] #指定存儲參考文獻的bib文件与纽,endote或zotero都可以導出這種引文格式
    biblio-style: apalike #設(shè)定參考文獻顯示類型
    link-citations: yes

    
    ```{r setup, include=FALSE}
    knitr::opts_chunk$set(echo = FALSE, fig.align="center", out.width="95%", fig.pos='H')
    knitr::opts_chunk$set(cache = FALSE, autodep=TRUE)
    set.seed(0304)
    
    
    
插入并引用圖片(外部圖片)

插入圖片最好使用knitr::include_graphics,可以同時適配HTML和PDF輸出塘装。另外當目錄下同時存在name1.pngname1.pdf文件時急迂,會自動選擇在HTML展示name1.png文件,在PDF輸出中引入name1.pdf格式的文件氢哮。

圖的標簽為fig-name(不能有下劃線)袋毙,在引用時需使用如下格式\@ref(fig:fig-name),且fig.cap也要設(shè)置內(nèi)容冗尤。

多張圖可以同時展示,圖的名字以vector形式傳給include_graphics胀溺,需要設(shè)置out.width=1/number-picsfig.show="hold"裂七。

Insert a single pic and refer as Figure \@ref(fig:fig-name). `echo=FALSE` will hide the code block and display the output of `r` command only. These options can be set globally as indicated below.

```{r fig-name, fig.cap="Markdown supported string as caption", fig.align="center", echo=FALSE}
knitr::include_graphics("images/1.png")

Suppose we have 3 pictures in images folder with names as Fig1_a, Fig1_b, Fig1_c, we can refer to them using Figure @ref(fig:fig1).

fig1 = list.files("images", pattern="Fig1_.*", full.names=T)
knitr::include_graphics(fig1)

Another way of including two pics.

knitr::include_graphics(c("images/1.png", "images/2.png"))

如果圖或表的標題中有Markdown語法,輸出為HTML時是可以正確解析的仓坞,但是輸出為PDF時卻不可以背零。這時可以使用`Text Reference`。當圖或表的標題太長時无埃,也可以使用`Text Reference`引用一段話作為圖和表的標題徙瓶。

Here is normal text.

(ref:pic-label) This line can be referred in fig.cap and markdown syntax is supported for both HTML and PDF output.

knitr::include_graphics("images/1.png")

輸出PDF時不支持使用在線圖片毛雇,可以加一個判斷。

if (!file.exists(cover_file <- 'cover.jpg')){
  download.file(url,  cover_file,  mode = 'wb')
}
knitr::include_graphics(if (identical(knitr:::pandoc_to(),  'html')) url else cover_file)

##### 插入并引用表格(外部表格)

外部表格的名字中必須包含`tab:`, 然后是表格的實際名字侦镇,格式為`(\#tab:table-name)`; 引用時使用`Table \@ref(tab:table-name)`灵疮。 表格名字中不能有下劃線。

Check Table @ref(tab:seq-sum) for detail.

Table: (#tab:seq-sum) Summary of sequencing reads 測序量總結(jié) (對于雙端測序, _1 表示左端reads, _2 表示右端reads)


Sample Total reads Total bases Sequence length (nt) GC content (%) Encoding


T8_1 37,106,941 5,566,036,721 138-150 47 Sanger / Illumina 1.9

T8_2 37,106,941 5,566,034,285 138-150 47 Sanger / Illumina 1.9


##### 插入并引用表格(內(nèi)部表格)

插入表格推薦使用`knitr::kable`壳繁,只要提供數(shù)據(jù)矩陣震捣,用`r`讀取就可以了。

Check Table @ref(tab:table-id) for detail.

a <- as.data.frame(matrix(rnorm(20), nrow=4))
knitr::kable(a, caption="Test table",  booktabs=TRUE)

##### 插入腳注

`text^[footnote]` is used to get the footnote.

where type may be article, book, manual, and so on.^[The type name is case-insensitive, so it does not matter if it is manual, Manual, or MANUAL.]


##### 插入引文

假如我們的`bib`文件中內(nèi)容如下闹炉,如果我們要引用這個文章蒿赢,只要寫 `[@chen_m6a_2015]`就可以了。

@article{chen_m6a_2015,
title = {m6A {RNA} {Methylation} {Is} {Regulated} by {MicroRNAs} and {Promotes} {Reprogramming} to {Pluripotency}},
volume = {16},
issn = {1934-5909, 1875-9777},
url = {http://www.cell.com/cell-stem-cell/abstract/S1934-5909(15)00017-X},
doi = {10.1016/j.stem.2015.01.016},
language = {English},
number = {3},
urldate = {2016-12-08},
journal = {Cell Stem Cell},
author = {Chen, Tong and Hao, Ya-Juan and Zhang, Ying and Li, Miao-Miao and Wang, Meng and Han, Weifang and Wu, Yongsheng and Lv, Ying and Hao, Jie and Wang, Libin and Li, Ang and Yang, Ying and Jin, Kang-Xuan and Zhao, Xu and Li, Yuhuan and Ping, Xiao-Li and Lai, Wei-Yi and Wu, Li-Gang and Jiang, Guibin and Wang, Hai-Lin and Sang, Lisi and Wang, Xiu-Jie and Yang, Yun-Gui and Zhou, Qi},
month = mar,
year = {2015},
pmid = {25683224},
pages = {289--301},
}


#### 準備YML配置文件

##### _bookdown.yml

配置輸入和輸出文件參數(shù)渣触。

book_filename: "輸出文件的名字"
output_dir: "輸出目錄的名字羡棵,默認_book"
language:
ui:
chapter_name: ""


##### _output.yml

配置產(chǎn)生輸出文件的命令行參數(shù)。

bookdown::pdf_book:
template: ehbio.tex #使用自己定制的pandoc latex模板
includes: # or only customize part latex module
in_header: preamble.tex
before_body: latex/before_body.tex
after_body: latex/after_body.tex
latex_engine: xelatex
citation_package: natbib
keep_tex: yes
pandoc_args: --chapters
toc_depth: 3
toc_unnumbered: no
toc_appendix: yes
quote_footer: ["\VA{", "}{}"]
bookdown::epub_book:
stylesheet: css/style.css
bookdown::gitbook:
css: style.css
split_by: section
config:
toc:
collapse: none
before: | #設(shè)置toc開頭和結(jié)尾的鏈接
<li><a ><img src="ehbio_logo.png" width="100%"></a></li>
after: |
<li><a href="mailto:ct@ehbio.com" target="blank">ct@ehbio.com</a></li>
download: [pdf, epub, mobi]
edit: https://github.com/rstudio/bookdown/edit/master/inst/examples/%s
sharing:
twitter: no
github: no
facebook: no


#### 其它定制

*   不同的文件分別用于`html`和`pdf`輸出

    ```
    # in _bookdown.yml 
    rmd_files:
      html: ["index.Rmd", "file2.Rmd"]
      latex: ["index_pdf.Rmd", "file3.Rmd"]

    # Different render way
    #!/bin/sh
    Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::gitbook')"
    Rscript -e "bookdown::render_book('index_pdf.Rmd', 'bookdown::pdf_book')"

    ```

*   配置全局變量自適應`HTML`和`PDF`輸出

    ```
    ```{r setup, include=FALSE}
    library(knitr)
    output <- opts_knit$get("rmarkdown.pandoc.to")
    html = FALSE
    latex = FALSE
    opts_chunk$set(echo = FALSE, fig.align="center", fig.show="hold")
    if (output=="html") {
        html = TRUE
    }
    if (output=="latex") {
        opts_chunk$set(out.width="95%", out.height='0.7\\textheight', out.extra='keepaspectratio', fig.pos='H')
        latex = TRUE
    }
    #knitr::opts_chunk$set(cache = FALSE,  autodep=TRUE)
    set.seed(0304)
    ```

    Below text will only appear in HTML output.

    ```{asis, echo=html}

    # EHBIO Gene Technology {-}

    ```

    Below command will only be executed and displayed in HTML output.

    ```{r cover, eval=html, out.width="99%"}
    knitr::include_graphics("ehbio/cover.png")
    ```

    ```

*   保留生成的markdown文件

    ```
    # add below lines to last Rmd file
    ```{r, include=FALSE}
    file.rename(from="bookdown_file_name.md",  to="bookdown_file_name.saved.md")
    ```

    ```

*   包含子文件 (subfile.txt)

    ```
    ```{r child="subfile.txt"}
    ```

    ```

*   cahce external file [ref](https://github.com/yihui/knitr/issues/238)

    ```
    ```{r mtime-func}
    mtime <- function(files){
      lapply(Sys.glob(files), function(x) file.info(x)$mtime)
    }
    ```

    ```{r mtime-usage, cache=T, cache.extra=mtime(c("file1", "file2", file3))}
    file3 <- paste0(dir, '/', name)
    data1 <- read.table("file1")
    data2 <- read.table("file2")
    ```

    ```

### 預覽生成的WEB文件

如果沒有安裝Rstudio嗅钻,可以在生成的book目錄(有`index.html`的目錄)下運行`python -m SimpleHTTPServer 11521` (11521為端口號晾腔,一般選較大值避免沖突), 然后就可以在瀏覽器輸入網(wǎng)址`http://server-ip:11521`來訪問了。

### References

*   [https://bookdown.org/yihui/bookdown/get-started.html](https://bookdown.org/yihui/bookdown/get-started.html)
*   [https://github.com/rstudio/bookdown/tree/master/inst/examples](https://github.com/rstudio/bookdown/tree/master/inst/examples)
*   [http://stackoverflow.com/questions/25236850/how-to-set-different-global-options-in-knitr-and-rstudio-for-word-and-html](http://stackoverflow.com/questions/25236850/how-to-set-different-global-options-in-knitr-and-rstudio-for-word-and-html)
*   Multiple output with different configs [https://github.com/yihui/knitr/issues/1145](https://github.com/yihui/knitr/issues/1145)
*   Multiple output with different configs [https://github.com/yihui/knitr/issues/114://github.com/rstudio/rmarkdown/issues/614](https://github.com/yihui/knitr/issues/114://github.com/rstudio/rmarkdown/issues/614)
*   Citation style [http://rmarkdown.rstudio.com/authoring_bibliographies_and_citations.html](http://rmarkdown.rstudio.com/authoring_bibliographies_and_citations.html)
*   Save markdown [http://stackoverflow.com/questions/19989325/knit-rmd-file-to-md-and-save-the-md-file-one-level-up-with-a-different-name](http://stackoverflow.com/questions/19989325/knit-rmd-file-to-md-and-save-the-md-file-one-level-up-with-a-different-name)
*   PDF online pic [http://www.pzhao.org/zh/post/bookdown-tips/](http://www.pzhao.org/zh/post/bookdown-tips/)

<footer class="entry-meta" style="box-sizing: border-box; display: block; font-size: 0.75rem; text-transform: uppercase; color: rgba(187, 187, 187, 0.8); margin: 50px 30px 30px; text-align: center; font-family: Lato, Calibri, Arial, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">[BOOKDOWN](http://blog.genesino.com/tags#bookdown "Pages tagged bookdown")CHENTONG 
版權(quán)聲明:本文為博主原創(chuàng)文章啊犬,轉(zhuǎn)載請注明出處灼擂。 

![alipay.png](http://upload-images.jianshu.io/upload_images/7071112-57379e41a56e560f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![WeChatPay.png](http://upload-images.jianshu.io/upload_images/7071112-a4f1708f9375dc76.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

</footer>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市觉至,隨后出現(xiàn)的幾起案子剔应,更是在濱河造成了極大的恐慌,老刑警劉巖语御,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峻贮,死亡現(xiàn)場離奇詭異,居然都是意外死亡应闯,警方通過查閱死者的電腦和手機纤控,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碉纺,“玉大人船万,你說我怎么就攤上這事娜膘±跏” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵回懦,是天一觀的道長态贤。 經(jīng)常有香客問我舱呻,道長,這世上最難降的妖魔是什么悠汽? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任箱吕,我火速辦了婚禮芥驳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茬高。我一直安慰自己兆旬,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布雅采。 她就那樣靜靜地躺著爵憎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪婚瓜。 梳的紋絲不亂的頭發(fā)上宝鼓,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音巴刻,去河邊找鬼愚铡。 笑死,一個胖子當著我的面吹牛胡陪,可吹牛的內(nèi)容都是我干的沥寥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼柠座,長吁一口氣:“原來是場噩夢啊……” “哼邑雅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妈经,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤淮野,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吹泡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骤星,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年爆哑,在試婚紗的時候發(fā)現(xiàn)自己被綠了洞难。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡揭朝,死狀恐怖队贱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萝勤,我是刑警寧澤露筒,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站敌卓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伶氢。R本人自食惡果不足惜趟径,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一瘪吏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜗巧,春花似錦掌眠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至望拖,卻和暖如春渺尘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背说敏。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工鸥跟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盔沫。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓医咨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親架诞。 傳聞我的和親對象是個殘疾皇子拟淮,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 古代雜交事件為慈鯛科魚類的適應輻射提供動力 Ancient hybridization fuels rapid c...
    智取鳥氨酸閱讀 4,582評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)谴忧,斷路器很泊,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 原文地址之前的博客有寫到過Markdown輕量級標記語言,也提到過RStudio俏蛮,還有神奇的Pandoc撑蚌。今天就介...
    趙禾禾閱讀 6,866評論 0 14
  • title: "My Jumble of Computer Vision"category: "Computer ...
    joshua_1988閱讀 3,226評論 0 3
  • 人生的奇妙物語--永遠不會再重來的這一刻。很像大巴上行駛在法蘭克福郊外的高速上面那么奇妙搏屑。
    丘鴨Kris閱讀 212評論 0 1