web-dev-qa-db-fra.com

Tables docx Knitr & Rmarkdown

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.

27
zacdav

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)
```
  • Cliquez sur "Knit Word" dans RStudio. → Le document s'ouvre dans Word, sans encore de styles personnalisés.
  • Dans ce document (not dans un nouveau document), ajoutez les styles requis. Cet article explique les bases. La clé n’est pas d’appliquer styles directs mais de modifier le styles. Voir cet article sur support.office.com sur les bases du style dans Word .
  • Plus précisément, pour attribuer un style à une table, vous devez ajouter un style de table. Ma version de Word n'est pas l'anglais, mais selon l'article lié ci-dessus, les styles de tableau sont disponibles via "l'onglet Conception, dans l'onglet contextuel Outils de table".
  • Choisissez 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.
  • Enregistrez le document, par exemple comme 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:

 Output

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:

 Table Style


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:

  • Mauvais RMD (improbable).
  • Différences dans le fichier DOCX généré initialement.
  • Différences dans la façon dont le style TableNormal est enregistré dans le fichier DOCX.
  • Différences dans la manière dont la référence DOCX est utilisée pour formater le DOCX final.

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:

Les 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… 

  • … Si vous commencez par mon initial.docx
  • Si cela ne fonctionne pas, si vous utilisez my reference.docx comme document de référence?
  • Si rien ne fonctionne, existe-t-il des différences frappantes dans les fichiers XML générés (à l'intérieur du conteneur DOCX)? Veuillez partager vos fichiers et les informations de version exactes.

Avec un certain nombre d'utilisateurs exécutant ces tests, il devrait être possible de déterminer la cause des problèmes.

12
CL.

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 que Table Normal pour le style de table ( # 3275 ). Table Normal est le style de tableau par défaut et ne peut pas être modifié.

4
Liang Zhang

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:

 img

0
MS Berends

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é.

0
Ataraxis