2016-10-26 8 views
7

この質問はconsistent code html inline and in chunks with knitrに似ています。 .Rhtmlドキュメントの代わりに、R MarkdownドキュメントのインラインRコードを強調表示したいとします。たとえば`r "plot(cars, main = 'A scatterplot.')"`rmarkdownでコンパイルした後、plotのようなトークンを強調表示する必要があります。デフォルトでは、Rコードチャンクはシンタックスハイライトされていますが、インラインRコードをハイライト表示する方法はありません。R MarkdownのインラインRコードをシンタックスする方法を教えてください。

+0

も参照してください。http://stackoverflow.com/questions/16405536/knitr-inline-chunk-options-no-evaluation-or-just-render-highlighted-code/16406120#16406120 – baptiste

答えて

16

development versionhighrパッケージ(devtools::install_github('yihui/highr'))を使用する1つのソリューションがあります。基本的には、独自のLaTeXコマンドを定義してトークンを強調表示するだけです。 highr:::cmd_pandoc_latexは、Pandocが構文ハイライトを行うために使用するLaTeXコマンドのデータフレームです。

head(highr:::cmd_pandoc_latex) 
##     cmd1 cmd2 
## COMMENT \\CommentTok{ } 
## FUNCTION \\NormalTok{ } 
## IF  \\NormalTok{ } 
## ELSE  \\NormalTok{ } 
## WHILE  \\NormalTok{ } 
## FOR  \\NormalTok{ } 

その後、knitrinlineフック再定義することができます。

--- 
output: 
    pdf_document: 
    keep_tex: yes 
--- 

```{r include=FALSE} 
local({ 
    hi_pandoc = function(code) { 
    if (knitr:::pandoc_to() != 'latex') return(code) 
    if (packageVersion('highr') < '0.6.1') stop('highr >= 0.6.1 is required') 
    res = highr::hi_latex(code, markup = highr:::cmd_pandoc_latex) 
    sprintf('\\texttt{%s}', res) 
    } 
    hook_inline = knitr::knit_hooks$get('inline') 
    knitr::knit_hooks$set(inline = function(x) { 
    if (is.character(x) && inherits(x, 'AsIs')) hi_pandoc(x) else hook_inline(x) 
    }) 
}) 
``` 

Test inline R code: `r I("plot(cars, main = 'A scatterplot.')")`. 
Normal inline code `r pi`. 

A code block: 

```r 
plot(cars, main = 'A scatterplot.') 
1 + 2 # a comment 
``` 

を私は構文する文字列を伝えるために便利なマーカーとしてI()を使用し、通常の文字列から強調しました。それは単なる任意の選択です。 PDF出力:

syntax highlighted inline code

これはしかし、完璧なソリューションではありません。場合によってはそれを微調整する必要があります。たとえば、ほとんどの特殊なLaTeX文字はエスケープされません(~など)。 hi_pandoc()によって返されたLaTeXコードをgsub()で処理する必要があるかもしれません。

個人的に私はインライン出力が気に散るので、それを強調表示しませんが、これは完全に個人的な味です。

+0

これは、同様の方法でテキスト内で構文の強調表示を行うのではなく、灰色の背景色を簡単に実装することができます。私はしばしば、インラインコードでテキストを読む学生は、フォントが似ているので、実際にはRコードが何であるかを選ぶことが難しいと感じることがよくあります。灰色の背景を持つと、より明確になります。同様に、githubの答えのようなhtml出力に似ています。 – jamieRowen

+0

ニースのソリューション!私がインラインコード 'i %% 5'をどのように強調表示できるかの提案はありますか?パーセンテージ記号はエスケープされず、エラーをスローします( '#Comment'のようなコメントを強調表示することもできません)。 –

関連する問題