Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

この記事の目的

私が大好きな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はすごくたくさんのテンプレートがあるんですけどね…。 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away