Saltar al contenido

¿Cómo resaltar la sintaxis del código R en línea en R Markdown?

Tenemos la mejor solución que hallamos en internet. Nosotros queremos que te sea útil y si quieres aportar algún detalle que nos pueda ayudar a mejorar hazlo con libertad.

Solución:

Aquí hay una solución usando la versión de desarrollo del alto paquete (devtools::install_github('yihui/highr')). Básicamente, solo define sus comandos LaTeX personalizados para resaltar los tokens. highr:::cmd_pandoc_latex es un marco de datos de comandos LaTeX que Pandoc usa para resaltar la sintaxis.

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

Luego puede redefinir el inline gancho de tejer:

---
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
```

solía I() como un marcador conveniente para indicar a las cadenas de caracteres que se resalte la sintaxis de las cadenas de caracteres normales. Es solo una elección arbitraria. Salida PDF:

código en línea resaltado de sintaxis

Sin embargo, esta no es una solución perfecta. Tendrá que modificarlo en algunos casos. Por ejemplo, la mayoría de los caracteres especiales de LaTeX no se escapan, como ~. Es posible que deba procesar el código LaTeX devuelto por hi_pandoc() por gsub().

Personalmente, encuentro que varios colores en la salida en línea distraen, por lo que no lo resaltaría sintaxis, pero esto es un gusto completamente personal.

Hoy en día:

Here is some `plot(cars, main = 'A scatterplot.')`.R inline R code

Bueno, no sé específicamente sobre R y la forma en que lo está usando, pero para la mayoría de los idiomas (pandoc usa el claraboya pkg para hacer esto), puede hacer bloques de código en línea con la sintaxis anterior.

Nos puedes secundar nuestra función dejando un comentario o puntuándolo te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *