tutorial the sheet rmarkdown opts_chunk guide false definitive cheat r knitr r-markdown docx pandoc

sheet - r markdown the definitive guide pdf



Knitr y Rmarkdown docx tablas (4)

Cuando use knitr y rmarkdown juntos para crear un documento de Word, puede usar un documento existente para diseñar la salida.

Por ejemplo en mi encabezado yaml:

output: word_document: reference_docx: style.docx fig_caption: TRUE

dentro de este estilo, he creado un estilo de tabla predeterminado; el objetivo aquí es tener la salida de la tabla de kable en el estilo correcto.

Cuando tejo el documento de Word y uso el estilo.docx, las tablas no están estilizadas de acuerdo con la tabla.

El uso del inspector de estilo no ha sido útil hasta ahora, sin saber si el estilo de tabla predeterminado es el estilo incorrecto para modificar.

Código de ejemplo:

```{r kable} n <- 100 x <- rnorm(n) y <- 2*x + rnorm(n) out <- lm(y ~ x) library(knitr) kable(summary(out)$coef, digits=2, caption = "Test Captions") ```

Lamentablemente, no tengo un documento estilizado que pueda cargar para realizar pruebas.

TL; DR: desea estilizar la salida de la tabla de rmarkdown y knitr automáticamente (a través de kable)

Actualización: Hasta ahora he encontrado que cambiar el estilo ''compacto'' en docx alterará automáticamente el contenido del texto de la tabla, pero esto no aborda el estilo general de la tabla, como el color de la celda y la alineación.

Actualización 2: Después de más investigación y creación de estilos, encontré que knitr parece tener problemas para acceder a los estilos de párrafo. Sin embargo, los estilos de tabla no están en esa categoría de estilo y no parecen aplicarse en mis pruebas personales.

Actualización 3: Empeñado con el paquete ReporteRs - aunque fue capaz de producir las tablas como se desea, la sintaxis requerida para hacerlo es laboriosa. Mucho más bien el estilo se aplicará automáticamente.

Actualización 4: No puede cambiar el estilo de TableNormal, ni tampoco funciona un estilo de Table Normal. El enfoque de XML no es lo que estamos buscando. Tengo una macro VBA que hará el truco, solo quiero eliminar ese proceso si es posible.


Esta es esencialmente una combinación de la respuesta que recomienda TableNormal , esta publicación en rmarkdown.rstudio.com y mis propios experimentos para mostrar cómo usar un estilo TableNormal para personalizar tablas como las generadas por kable :

RMD :

--- output: word_document --- ```{r} knitr::kable(cars) ```

  • Haga clic en "Tejer palabra" en RStudio. → El documento se abre en Word, sin ningún estilo personalizado todavía.
  • En ese documento ( no en un documento nuevo), agregue los estilos requeridos. Este artículo explica los conceptos básicos. La clave no es aplicar estilos directos, sino modificar los estilos . Vea este artículo en support.office.com sobre los conceptos básicos de estilo en Word .
  • Específicamente, para estilizar una tabla necesita agregar un estilo de tabla . Mi versión de Word no es en inglés, pero de acuerdo con el artículo vinculado, los estilos de tabla están disponibles a través de "la pestaña Diseño, en la pestaña contextual de Herramientas de tabla".
  • Elija TableNormal como nombre de estilo y defina los estilos deseados. En mis experimentos la mayoría de los estilos funcionaron, sin embargo algunos no lo hicieron. (Agregar un color a la primera columna y hacer que la primera fila aparezca en negrita no fue un problema; se ignoró cada segunda fila). La última captura de pantalla en esta respuesta ilustra este paso.
  • Guarde el documento, por ejemplo, como styles.docx .
  • Modifique el encabezado en el archivo RMD para usar la referencia DOCX (vea here ; no arruine la muesca; me tomó 10 minutos encontrar este error):

    --- output: word_document: reference_docx: styles.docx ---

  • Vuelve a tejer a DOCX, el estilo debe aplicarse ahora.

Siguiendo los pasos que describí anteriormente se obtiene este resultado:

Y aquí una captura de pantalla del cuadro de diálogo de estilo de tabla utilizado para definir TableNormal . Desafortunadamente, está en alemán, pero tal vez alguien pueda proporcionar una versión en inglés:

Como esto no parece funcionar para la mayoría de los usuarios (cualquiera excepto yo ...), sugiero que lo probemos sistemáticamente. Esencialmente, hay 4 pasos que pueden salir mal:

  • RMD incorrecta (improbable).
  • Diferencias en el DOCX generado inicialmente.
  • Diferencias en cómo se guarda el estilo TableNormal en el DOCX.
  • Diferencias en cómo se utiliza la referencia DOCX para formatear la DOCX final.

Por lo tanto, sugiero usar el mismo RMD mínimo publicado anteriormente ( código completo en pastebin ) para averiguar dónde comienzan los resultados si difieren:

Los tres archivos se generan en el siguiente sistema: Windows 7 / R 3.3.0 / RStudio 0.99.896 / pandoc 1.15.2 / Office 2010.

Obtengo los mismos resultados en un sistema con Windows 7 / R 3.2.4 / RStudio 0.99.484 / pandoc 1.13.1 / Office 2010.

Supongo que los culpables más probables son las versiones pandoc y Office. Desafortunadamente, no puedo probar otras configuraciones en este momento. Ahora sería interesante ver lo siguiente: Para los usuarios donde no funciona, qué sucede ...

  • ... si empiezas desde mi initial.docx ?
  • Si eso no funciona, ¿qué sucede si utiliza mi reference.docx como documento de referencia?
  • Si nada funciona, ¿hay diferencias llamativas en los archivos XML generados (dentro del contenedor DOCX)? Por favor, comparta sus archivos y la información exacta de la versión.

Con una cantidad de usuarios que ejecutan estas pruebas, debería ser posible averiguar qué está causando los problemas.


Esto fue en realidad un problema conocido . Afortunadamente, se resolvió en v2.0 o versiones posteriores de pandoc .

Y he probado la versión más reciente y he encontrado que hay un estilo oculto recién agregado llamado " Tabla ". Seguir las sugerencias de @ CL. Para cambiar el estilo de "Tabla" en reference.docx estará bien ahora.

Además, vea esta entrada de las notas de la versión v2.0 de pandoc :

Utilice Table lugar de Table Normal para el estilo de tabla ( # 3275 ). Table Normal es el estilo de tabla predeterminado y no se puede modificar.


Pude obtener mi salida de palabras para usar un estilo de tabla predeterminado que definí en una referencia .docx.

En lugar de ''TableNormal'', el estilo de la tabla por defecto era ''Table''.

Descubrí esto haciendo punto un rmarkdown con un kable.

--- date: "December 1, 2017" output: word_document: reference_docx: Template.docx --- `r knitr::kable(source)`

Luego eché un vistazo al XML de ese documento generado para ver qué estilo había predeterminado.

require(XML) docx.file <- "generated_doc.docx" ## unzip the docx converted by Pandoc system(paste("unzip", docx.file, "-d temp_dir")) document.xml <- "temp_dir/word/document.xml" doc <- xmlParse(document.xml) tblStyle <- getNodeSet(xmlRoot(doc), "//w:tblStyle") tblStyle

Definí el estilo ''Tabla'' para poner un poco de color y bordes en la referencia docx. Esto funciona para un estilo de tabla estándar en todo el documento, no he encontrado una forma de usar diferentes estilos en todo el documento.

Esto se mantuvo así incluso después de que abrí el documento de referencia y lo edité.


TableNormal no funciona para mí también.

En mi versión holandesa de Word 2016 (Office 365), descubrí que podía marcar tablas con el estilo Compact .

Entrada ( refdoc.docx contiene el estilo Compact ):

--- title: "Titel" subtitle: "Ondertitel" author: "`r Sys.getenv(''USERNAME'')`" output: word_document: toc: true toc_depth: 2 fig_width: 6.5 fig_height: 3.5 fig_caption: true reference_docx: "refdoc.docx" ---

Y RMarkdown:

# Methoden {#methoden} ```{r} kable(cars) ```

Salida: