LoginSignup
14
11

More than 5 years have passed since last update.

R Markdownでコードハイライトのテーマ設定

Posted at

この記事の目的

私が大好きなRMarkdownについて、Tipsを集中的に連載しようという思いつきの企画です。あと自分の中で進めている別企画のメモという位置づけでもあります。なので大した中身はありません

R Markdownとは

Markdown記法をベースに、チャンクという形でRのコードを記述して評価・出力することができるものです。RStudioのクイックリファレンスでは以下のように説明してあります:

R Markdown is an easy-to-write plain text format for creating dynamic documents and reports.

コードハイライトのテーマ

R Markdownを使っていると、コードハイライトの色がどれも同じで「あ、これRmdの色だね」とすぐにわかります。でもたまにはこのテーマをスイッチしてみたいと思うこともありますね。実は簡単にテーマを変更することが可能です。例えば、Rmdファイル冒頭のyaml領域を以下のように変更すると変化します:

---
title: "hogehoge"
output:
  html_document:
    highlight: "tango"
---

これで青っぽいテーマに変わるかと思います。

R Markdownでコードハイライトのテーマ設定

R Markdownで使用できるコードハイライトのテーマは、rmarkdown reference(pdf)によると以下のように記述があります。

Syntax highlighting style (e.g. "tango", "pygments", "kate", "zenburn", and "textmate") includes.

したがって、上述のhighlight: "tango"のところをhighlight: "pygments"のように指定すると変更できます。どんな感じになるかは、実際に試して確認してみてください。なお使用できるテーマは以下のとおりです:

  • default(標準のテーマ)
  • tango
  • pygments
  • kate
  • monochrome
  • espresso
  • zenburn
  • haddock
  • textmate

補足: 標準の値とこまかい話

以前書いた、「RStudioの"knit HTML"でPandocに送っている内容」のこの箇所で、デフォルト値はこのようになってました:

 --no-highlight
 --variable highlightjs=/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rmarkdown/rmd/h/highlight 

この内容について説明します1

まず最初の行の--no-highlightは、pandocのユーザーガイドによれば「強調表示をなしにする」というオプションです。つまりこれが指定してあることで、pandoc本体が内包してるコードハイライト機能がOFFになります。

そして次の行では--variable highlightjs=...とありますが、これは{rmarkdown}内にあるhighlightjsへのパスとなっています。{rmarkdown}は内部にhighlightjsを内包しており、こちらを利用するように設定されているのでしょう。

この二つのエンジンはキーワードの見つけ方などが異なります。そのためデフォルトのhighlightjsでは強調されなかったものがテーマ設定をすると強調されるようになる、といったことが起こります2。割とめんどくさいです。

なお、highlightjs側のテーマはdefaulttextmateで、残りは全てpandoc内のエンジンを使用するテーマとなります3。またどうしても他のハイライトテーマを使用したい場合は、オンラインにあるhighlightjsをソースとして当てる方法がありますが、ここでは省略します。

Enjoy!


  1. なお以下の説明は、pandocのユーザーガイドの内容、{rmarkdown}内に含まれるファイルのコード、そして出力されたhtmlのソースを比較して、多分こうなってるんだろうと私が推測したものです。これが当たってて内容を読んだところで、普通にRmdを使う分には全く影響しないと思います。 

  2. たとえばsummaryは、highlightjsエンジンではspan.identifierになりますがpandoc内のエンジンではspan.kwとなります。強調やカラーリングがあたるかどうかはcss(テーマ)次第です。 

  3. 本来のhighlightjsはすごくたくさんのテンプレートがあるんですけどね…。 

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11