16.9 bookdown で本や長いレポートを書く

bookdown パッケージ (Xie 2021b) は複数の R Markdown 文書で構成される長い文書を作成できるように設計されています. 例えば本を執筆したいなら, 章ごとに別々の Rmd ファイルに書き, bookdown を使ってこれらのファイルを本にコンパイルできます.

RStudio ユーザーにとって最も簡単な始め方は, 図16.5にあるように, IDE 上で File -> New Project -> New Directory -> Book Project using bookdown を選んで bookdown プロジェクトを作成することです.

RStudio を使っていないか, コンソールから作業するのが好きなら, bookdown:::bookdown_skeleton('本のディレクトリ') 関数を呼べば同じものが作れます.

RStudio で bookdown プロジェクトを作成する

図 16.5: RStudio で bookdown プロジェクトを作成する

使用法を実演するために, 同じディレクトリに3つのファイルを含めた最低限の例を用意しました.

directory
  |- index.Rmd
  |- 01-導入.Rmd
  |- 02-分析.Rmd

以下に各ファイルの中身とそれぞれの役目を示します.

  • index.Rmd:

    ---
    title: "最低限の bookdown プロジェクト"
    site: bookdown::bookdown_site
    output: bookdown::gitbook
    ---
    
    # はじめに {-}
    
    なにか書く

最初のファイルは典型的には index.Rmd と呼ばれます. YAML フロントマターを与える唯一の Rmd ファイルとなるべきです. また, 特殊な YAML フィールド, site: bookdown::bookdown_site を含めて, bookdown を使うべきことを rmarkdown に知らせることで, 単一の Rmd ファイルをレンダリングするのではなく, 全ての Rmd ファイルをビルドさせます. bookdown::gitbookbookdown::pdf_bookbookdown::word_document2bookdown::epub_book といったどのような bookdown 出力フォーマットでも使えます.

次の2つの Rmd ファイルは2つの章になります.

  • 01-導入.Rmd:

    # 第1章
    
    これは第1章です.
  • 02-分析.Rmd:

    # 第2章
    
    これは第2章です.

これらの Rmd ファイルをレンダリングするためには, rmarkdown::render() の代わりに bookdown::render_book('index.Rmd') を呼ぶべきです. その内部では, デフォルトで bookdown が全ての Rmd ファイルを1つの Rmd に結合し, コンパイルします. ファイルは名前順に結合されます. 上記の例でファイル名の頭に数字を付けたのはそれが理由です.

bookdown プロジェクトをカスタマイズできる設定は多くあります. bookdown のより包括的な概要として, rmarkdown(Xie, Allaire, and Grolemund 2018) の Chapter 18 を読んでください. 完全なドキュメントは bookdown(Xie 2016) になります.

参考文献

———. 2016. Bookdown: Authoring Books and Technical Documents with R Markdown. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/bookdown.
———. 2021b. Bookdown: Authoring Books and Technical Documents with r Markdown. https://CRAN.R-project.org/package=bookdown.
Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown.