5.6 コードチャンクをそのまま (verbatim) 表示
典型的には, 私達がコードチャンクとインラインコードを書くときには knitr によってパースされ評価してほしいと思って書きます. しかし knitr を使ったチュートリアルを書きたいなら, knitr にパースされないコードチャンクやインラインコードを生成する必要があり, そしてチャンクヘッダの中身も掲載したいということもあるでしょう.
残念なことにコードチャンクをさらに別のバッククオートのレイヤで囲むことは出来ませんので, 代わりにチャンクヘッダに `r ''`
を挿入して, ソースコード内でコードチャンクを無効化しなければなりません. これは knitr によって, 空の文字列のインラインコードであるものと評価されます. 次のソース文書の中にある「コードチャンク」
```{r, eval=TRUE}`r ''`
1 + 1
```
は出力時にはこのようにレンダリングされます.
```{r, eval=TRUE}
1 + 1
```
空の文字列で置き換えられるため, インラインコードは消え去ります. しかしこれは第1歩にすぎません. 出力時になんらかの無加工のコードを表示するには, Markdown の構文はコードブロックで包まれているべきです (スペース4つ分のインデントかバッククオートによる囲みで). 上記の出力を見たいとき, 実際のソースは以下のようになります.
````
```{r, eval=TRUE}`r ''`
1 + 1
```
````
なぜバッククオートが4つなのでしょうか. これは N 個のバッククオートを包むには, 少なくとも N+1 個のバッククオートを使わなければならないからです.
5.6.1 インライン R コードをそのまま表示
行内のコードをそのまま表示する方法はいくつかあります. 最初の方法は `r
の直後でインラインコードを改行することです. 例えばこのように.
` `r
これは出力時にインライン R コードをそのまま表示します ` 1+1` ``.
これが出力文書ではこうなっているはずです.
これは出力時にインライン R コードをそのまま表示します
`r 1+1`
.
この小ワザは2つの理由で動作します. (1) Markdown パーサはしばしば単独の改行文字を単なるスペース1つとして扱う (2連続の改行は新しい段落を始めることと比べてみてください) ということと, (2) knitr は `r
をパースするのに直後にスペース1つを要求する, つまりここにスペースがないとインラインコードとして扱われないということです.
インライン R コードをそのまま表示する別の方法は, R コードを knitr::inline_expr()
で包むことです. 例えば.
これで出力時にインライン R コードがそのまま表示されます` `r knitr::inline_expr("1+1")` ``. `
私 (Yihui) は2つ目の方法をお薦めします. 1つ目の方法は多かれ少なかれ Markdown 構文と knitr パーサに対するハック的なものだからです.