2016-10-26 4 views
7

이 질문은 consistent code html inline and in chunks with knitr과 유사합니다. .Rhtml 문서 대신에 `r "plot(cars, main = 'A scatterplot.')"`rmarkdown을 통해 컴파일 된 후 plot과 같은 토큰을 강조 표시해야하는 등 R Markdown 문서에서 인라인 R 코드를 강조 표시하려고합니다. 기본적으로 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 version높은 패키지 (devtools::install_github('yihui/highr'))를 사용하는 한 가지 해결책이 있습니다. 기본적으로 사용자 정의 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'와 같은 주석이 강조 표시되지 않습니다). –

관련 문제