xaringanthemerパッケージのライトな解説

たまたま最近NARUTOを読み返す機会があって、その流れでxaringanパッケージを使い始めてみたら気に入ったので、これからもたまに使っていこうかと思っています。

一応説明しておくと...xaringanとは、Yihui Xie氏により作られた、RMarkdownでHTMLスライドを生成するためのパッケージです。 詳しくは、氏の著書「R Markdown: The Definitive Guide」をご参照ください。

RMarkdownでHTMLスライドを生成するには、デフォルトのioslidesSlidyを使うという手もあるのですが、拡張性の高さやちょっとした小技が使えるのが、xaringanの魅力かと思います。

例えばこちらのスライドはxaringanで作成されていますが、このスライドを開きながら、キーボードの「m」を押すと、ちょっとした忍術が使えます。


さて、xaringanパッケージによりHTMLスライドが生成できるわけなので、見栄えを色々と変更するには、CSSをいじればいいということになります。xaringanにはデフォルトのテーマ(theme)が設定されていますが、このテーマを変更する、いくつかのテンプレートが用意されています。例えばmetropolisというテーマを選択すると、こちらのページのようにスライドの見栄えが変わります。詳しくは「R Markdown: The Definitive Guide」をご参照ください。


ところが! xaringanthemerというパッケージを見つけてしまいました。その名の通り、xaringanで作成するHTMLスライドのテーマ(theme)を、ユーザが任意に操作しやすくするためのパッケージです。CSSよくわかんないや...という人でも、手軽にスライドの見栄えを調整できるようになります。

あまりの便利さに驚いたんですが、僕が調べた限りでは、xaringanthemerパッケージに関する日本語の解説記事は見つからなかったので、備忘録がてら記事にまとめました。

と言っても使い方は簡単で、とりあえずパッケージをインストールしたあとで...

# install.packages("devtools")
devtools::install_github("gadenbuie/xaringanthemer")

新規.Rmdファイルを立ち上げる際に、Ninja Themed Presentationを選択するだけです。 f:id:das_Kino:20180905204020p:plain

詳しくはREADMEのところを読めばわかりますが、xaringanthemerも様々なテーマのテンプレートを用意しています。そしてそのテンプレート(これ自体が関数)は、様々な「見栄え」に関する引数を持っています。文字の色からフォントから見出しのサイズから...引数の多さにびっくりします。

例えばこちらの記事に埋め込んだスライドはmono_light()というテンプレートを使用しているため、緑を基調とした色合いになっていますが、下のように任意に設定を変更していました。必要なことは、.Rmdファイル冒頭で適当なRチャンクを作り、その中に以下を記述するだけです。

library(xaringanthemer)

mono_light(
  base_color = "#1c5253",
  text_font_size = "30px",
  code_font_size = "20px",
  padding = "1em 1em 1em 1em",#margin
  header_h1_font_size = "45px",
  header_h2_font_size = "40px",
  header_h3_font_size = "35px",
  header_color = "midnightblue",
  header_font_google = google_font("Song Myung"),
  text_font_google   = google_font("Song Myung", "400", "400i"),
  code_font_google   = google_font("Song Myung"),
  link_color = "chocolate"
)

また、任意のCSSextra_cssという引数に与え、カスタマイズすることもできます。例えば以下の例では、指定した文字の色を赤にしたり、フォントサイズをデフォルトの50%にしたりするための準備をしています。

extra_css <- list(
  ".red"   = list(color = "red"),
  ".small" = list("font-size" = "50%"),
  ".full-width" = list(
    display = "flex",
    width   = "100%",
    flex    = "1 1 auto"
  )
)

mono_light(
 extra_css = extra_css
)

あとはMarkdown記法でドキュメントを執筆する際に、

買い物しようと街まで出かけたら、.red[財布忘れちゃったよ!] あーあ、ツイてない。.small[トホホ...]

などと書いてレンダリングすれば、「財布忘れちゃったよ」の部分が赤く、「トホホ...」の部分のフォントサイズが半分になって表示されます。

f:id:das_Kino:20180905210331p:plain


僕自身、xaringanを使い始めたばかりで、まだよくわかっていない部分も多いのですが、お役に立てば幸いです。

Enjoy!!