Lorsque vous utilisez knitr
et rmarkdown
ensemble pour créer un document Word, vous pouvez utiliser un document existant pour styliser la sortie.
Par exemple dans mon en-tête yaml:
output:
Word_document:
reference_docx: style.docx
fig_caption: TRUE
dans ce style, j'ai créé un style de tableau par défaut. Le but ici est d'obtenir la sortie de la table kable
dans le style correct.
Lorsque je tricote le document Word et que j'utilise style.docx, les tableaux ne sont pas stylisés en fonction du tableau.
L'utilisation de l'inspecteur de style n'a pas été utile jusqu'à présent, ne sachant pas si le style de tableau par défaut est le style incorrect à modifier.
Exemple de code:
```{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")
```
Je n'ai malheureusement pas de document stylisé que je puisse télécharger pour le tester.
TL; DR: Vous voulez styliser la sortie de table à partir de rmarkdown et knitr automatiquement (via kable)
Mise à jour: Jusqu'à présent, j'ai constaté que changer le style 'compact' dans le docx modifierait automatiquement le contenu textuel du tableau - mais cela ne concerne pas le style général du tableau, comme la couleur et l'alignement des cellules.
Mise à jour 2: Après plus de recherches et de création de styles, j'ai constaté que knitr
ne semble avoir aucun problème à accéder aux styles de paragraphe. Cependant, les styles de table ne font pas partie de cette catégorie et ne semblent pas s'appliquer dans mes tests personnels.
Mise à jour 3: Dabbled avec le paquetage ReporteRs
- alors qu'il était capable de produire les tableaux à volonté, la syntaxe requise pour le faire est laborieuse. Le style doit être appliqué automatiquement.
Mise à jour 4: Vous ne pouvez pas modifier le style TableNormal, et la définition d'un style Table Normal ne fonctionne pas. L’approche XML n’est pas ce que nous recherchons. J'ai une macro VBA qui fera l'affaire, je veux juste supprimer ce processus si possible.
Ceci est essentiellement une combinaison de la réponse qui recommande TableNormal
, ce post sur rmarkdown.rstudio.com et mes propres expériences pour montrer comment utiliser un style TableNormal
pour personnaliser des tableaux comme ceux générés par kable
:
RMD:
---
output:
Word_document
---
```{r}
knitr::kable(cars)
```
TableNormal
comme nom de style et définissez les styles souhaités. Dans mes expériences, la plupart des styles ont fonctionné, mais pas tous. (Ajouter une couleur à la première colonne et mettre en gras la première ligne ne posait pas de problème; la mise en surbrillance de la deuxième ligne était ignorée.) La dernière capture d'écran de cette réponse illustre cette étape.styles.docx
.Modifier l'en-tête dans le fichier RMD pour utiliser la référence DOCX (voir ici ; ne bousillez pas l'indentation - m'a pris 10 minutes pour trouver cette erreur):
---
output:
Word_document:
reference_docx: styles.docx
---
Tricotez à nouveau vers DOCX - le style devrait maintenant être appliqué.
En suivant les étapes décrites ci-dessus, vous obtenez ce résultat:
Et voici une capture d'écran de la boîte de dialogue de style de tableau utilisée pour définir TableNormal
. Malheureusement, il est en allemand, mais quelqu'un peut peut-être en fournir une version anglaise:
Comme cela ne semble pas fonctionner pour la plupart des utilisateurs (personne d'autre que moi…), je suggère que nous testions cela systématiquement. En gros, il y a 4 étapes qui peuvent aller mal:
TableNormal
est enregistré dans le fichier DOCX.Je suggère donc d’utiliser le même MDM minimal affiché ci-dessus ( le code complet sur Pastebin ) pour savoir où les résultats commencent diffèrent:
TableNormal
ajouté: reference.docxLes trois fichiers sont générés sur le système suivant: Windows 7/R 3.3.0/RStudio 0.99.896/pandoc 1.15.2/Office 2010.
J'obtiens les mêmes résultats sur un système fonctionnant sous Windows 7/R 3.2.4/RStudio 0.99.484/pandoc 1.13.1/Office 2010.
Je suppose que les coupables les plus probables sont les versions pandoc et Office. Malheureusement, je ne peux pas tester d'autres configurations pour le moment. Maintenant, il serait intéressant de voir ce qui suit: Pour les utilisateurs où cela ne fonctionne pas, que se passe-t-il…
Avec un certain nombre d'utilisateurs exécutant ces tests, il devrait être possible de déterminer la cause des problèmes.
C’était en fait un problème connu . Heureusement, cela a été résolu dans les versions 2.0 ou ultérieures de pandoc
.
Et j’ai testé la nouvelle version et découvert qu’un nouveau style caché, appelé "Table", avait été ajouté. Suivre les suggestions de @ CL. Pour changer le style "Table" dans reference.docx
sera correct maintenant.
En outre, consultez cette entrée des notes de publication de la version 2.0 de pandoc
:
Utilisez
Table
plutôt queTable Normal
pour le style de table ( # 3275 ).Table Normal
est le style de tableau par défaut et ne peut pas être modifié.
TableNormal
ne fonctionne pas pour moi aussi.
Sur ma version néerlandaise de Word 2016 (Office 365), j'ai découvert que je pouvais baliser des tables avec le style Compact
.
Entrée (refdoc.docx
contient le style 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"
---
Et RMarkdown:
# Methoden {#methoden}
```{r}
kable(cars)
```
Sortie:
J'ai pu obtenir que ma sortie Word utilise un style de tableau par défaut que j'ai défini dans un fichier de référence .docx.
Au lieu de 'TableNormal', le style de table par défaut était 'Table'.
J'ai découvert cela en tricotant une réduction avec un kable.
---
date: "December 1, 2017"
output:
Word_document:
reference_docx: Template.docx
---
`r knitr::kable(source)`
Ensuite, j'ai jeté un coup d'œil au XML de ce document généré pour voir quel style il avait utilisé par défaut.
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
J'ai défini le style 'Table' pour mettre de la couleur et des bordures dans le docx de référence. Cela fonctionne pour un style de tableau standard dans tout le document. Je n'ai pas trouvé de moyen d'utiliser différents styles.
Cela est resté vrai même après avoir ouvert le document de référence et l'avoir édité.