Bu soru consistent code html inline and in chunks with knitr benzer. Bunun yerine .Rhtml belgeler, I `r "plot(cars, main = 'A scatterplot.')"`
rmarkdown yoluyla derlenmiş sonra, örneğin R Markdown belgelerinde içi R kodu, vurgulamak istiyoruz plot
gibi belirteçleri vurgulanır. Varsayılan olarak, R kod parçaları, sözdizimi vurgulanır, ancak satır içi R kodunu vurgulamanın bir yolu yoktur.Sözdizimi vurgulama R işaretlemede satır içi R kodu nasıl?
cevap
Burada içki, paketi (devtools::install_github('yihui/highr')
) arasında development version kullanılarak bir çözümdür. Temel olarak, belirteçleri vurgulamak için özel LaTeX komutlarınızı tanımlarsınız. highr:::cmd_pandoc_latex
Latex'in bir veri çerçevesi Pandoc dizim yapmak için kullandığı komutları olup.
head(highr:::cmd_pandoc_latex)
## cmd1 cmd2
## COMMENT \\CommentTok{ }
## FUNCTION \\NormalTok{ }
## IF \\NormalTok{ }
## ELSE \\NormalTok{ }
## WHILE \\NormalTok{ }
## FOR \\NormalTok{ }
Sonra
knitr ait
inline
kanca yeniden tanımlayabilirsiniz:
---
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
```
Ben sözdizimi, normal karakter dizeleri vurgulanan olmaya karakter dizeleri anlatmak için uygun bir işaretleyici olarak
I()
kullandı. Bu sadece keyfi bir seçimdir. PDF çıkışı:
Bu da, mükemmel bir çözüm değildir. Bazı durumlarda onu düzeltmeniz gerekecek. Örneğin, en özel LaTeX karakterler böyle ~
olarak, çıkışı yapılmaz. Sen gsub()
tarafından hi_pandoc()
tarafından döndürülen LaTeX kodunu işlemek gerekebilir.
Şahsen ben rahatsız edici inline çıkışında birden çok renk bulmak, bu yüzden vurgulayarak sözdizimi olmaz, ama bu tamamen kişisel tadı.
Daha sonra göreceli olarak, metinde sözdizimi vurgulamak yerine gri arka plan rengini de aynı şekilde uygulamak kolaydır. Çoğu zaman, inline kodlu metinleri okuyan öğrencilerin, fontlar çok benzer olduğu için aslında R kodunun ne olduğunu bulmakta zorlandığını görüyorum. Gri arkaplanın daha net hale gelmesi, benzer şekilde, örneğin github cevabındaki html çıktısını tahmin ediyorum. – jamieRowen
Güzel çözüm! "I %% 5" satır içi kodunu nasıl vurgulayabileceğime dair herhangi bir öneriniz var mı? Yüzde işaretleri bir hata fırlatmaz (aynı zamanda '# Yorum' gibi bir yorumu vurgulamayan satır içi çizgi). –
ayrıca bkz. Http://stackoverflow.com/questions/16405536/knitr-inline-chunk-options-no-evaluation-or-just-render-highlighted-code/16406120#16406120 – baptiste