wake-up-neo.com

Knitr & Rmarkdown-Docx-Tabellen

Wenn Sie knitr und rmarkdown zusammen verwenden, um ein Word-Dokument zu erstellen, können Sie ein vorhandenes Dokument verwenden, um die Ausgabe zu gestalten.

Zum Beispiel in meinem yaml-Header:

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

innerhalb dieses Stils habe ich einen Standardtabellenstil erstellt. Ziel ist es, die kable-Tabelle im korrekten Stil auszugeben.

Wenn ich das Word-Dokument stricke und die style.docx verwende, werden die Tabellen nicht gemäß der Tabelle stilisiert. 

Die Verwendung des Stilinspektors war bisher nicht hilfreich. Vergewissern Sie sich nicht, ob der Standardtabellenstil der falsche Stil ist, der geändert werden soll.

Beispielcode:

```{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")
```

Ich habe leider kein stilisiertes Dokument, das ich zum Testen hochladen kann.

TL; DR: Sie möchten die Tabellenausgabe von rmarkdown und knitr automatisch formatieren (über kable).

Update: Bisher habe ich festgestellt, dass das Ändern des 'kompakten' Stils in docx den Textinhalt der Tabelle automatisch ändert - dies betrifft jedoch nicht das gesamte Tabellenstyling, wie z. B. Zellenfarbe und Ausrichtung.

Update 2: Nach mehr Recherche und Erstellung von Stilen habe ich festgestellt, dass knitr kein Problem beim Zugriff auf Absatzstile hat. Tabellenstile befinden sich jedoch nicht unter dieser Stilkategorie und scheinen in meinem persönlichen Test nicht zutreffend zu sein.

Update 3: Mit dem ReporteRs-Paket herumgearbeitet - während es in der Lage war, die Tabellen als gewünscht zu erzeugen, ist die dafür erforderliche Syntax mühsam. Vielmehr wird der Stil automatisch angewendet.

Update 4: Sie können den TableNormal-Stil nicht ändern, und Sie können auch keinen Table-Normal-Stil festlegen. Der XML-Ansatz ist nicht das, wonach wir suchen. Ich habe ein VBA-Makro, das den Trick erledigt. Ich möchte diesen Prozess möglichst entfernen.

27
zacdav

Dies ist im Wesentlichen eine Kombination aus der Antwort, die TableNormal , diesen Beitrag auf rmarkdown.rstudio.com und meine eigenen Experimente empfiehlt, um zu zeigen, wie ein TableNormal-Stil verwendet wird, um Tabellen wie die von kable erzeugten anzupassen: 

RMD:

---
output:
  Word_document
---

```{r}
knitr::kable(cars)
```
  • Klicken Sie in RStudio auf "Word stricken". → Das Dokument wird in Word ohne benutzerdefinierte Formatvorlagen geöffnet.
  • Fügen Sie in diesem Dokument (nicht in einem neuen Dokument) die erforderlichen Stile hinzu. Dieser Artikel erklärt die Grundlagen. Der Schlüssel ist nicht direkte Stile anzuwenden, sondern die Stile zu ändern. Siehe diesen Artikel auf support.office.com zu den Grundlagen der Grundlagen in Word .
  • Um eine Tabelle zu formatieren, müssen Sie insbesondere einen Tabellenstil hinzufügen. Meine Version von Word ist nicht englisch, aber gemäß dem oben verlinkten Artikel sind Tabellenstile über die Registerkarte "Design" auf der Kontexttabelle "Table Tools" verfügbar.
  • Wählen Sie als Variablenname TableNormal und definieren Sie die gewünschten Stile. In meinen Experimenten funktionierten die meisten Stile, einige jedoch nicht. (Das Hinzufügen einer Farbe zur ersten Spalte und das Hervorheben der ersten Zeile war kein Problem; das Hervorheben jeder zweiten Zeile wurde ignoriert.) Der letzte Screenshot in dieser Antwort veranschaulicht diesen Schritt.
  • Speichern Sie das Dokument, z. als styles.docx.
  • Ändern Sie den Header in der RMD-Datei, um die Referenz DOCX zu verwenden (siehe hier ; nicht den Einzug verstellen - es dauerte 10 Minuten, bis dieser Fehler gefunden wurde):

    ---
    output:
      Word_document:
        reference_docx: styles.docx
    ---
    
  • Wieder zu DOCX stricken - der Stil sollte jetzt angewendet werden.

Wenn Sie die oben beschriebenen Schritte ausführen, erhalten Sie diese Ausgabe:

 Output

Und hier ein Screenshot des Tabellenstil-Dialogs, der zur Definition von TableNormal verwendet wird. Leider ist es auf Deutsch, aber vielleicht kann jemand eine englische Version davon liefern:

 Table Style


Da dies für die meisten Benutzer (außer mir…) nicht zu funktionieren scheint, schlage ich vor, dies systematisch zu testen. Im Wesentlichen gibt es 4 Schritte, die schief gehen können:

  • Falsche RMD (unwahrscheinlich).
  • Unterschiede im ursprünglich generierten DOCX.
  • Unterschiede, wie der Stil TableNormal im DOCX gespeichert wird.
  • Unterschiede in der Art und Weise, wie der Referenz-DOCX zum Formatieren des endgültigen DOCX verwendet wird.

Ich empfehle daher die Verwendung des gleichen minimalen RMD ( vollständiger Code auf Pastebin ), um herauszufinden, wo die Ergebnisse beginnen:

Die drei Dateien werden auf dem folgenden System generiert: Windows 7/R 3.3.0/RStudio 0.99.896/Pandoc 1.15.2/Office 2010.

Auf einem System mit Windows 7/R 3.2.4/RStudio 0.99.484/pandoc 1.13.1/Office 2010 erhalte ich dieselben Ergebnisse.

Die wahrscheinlichsten Schuldigen sind vermutlich die Pandoc- und die Office-Version. Leider kann ich momentan keine anderen Konfigurationen testen. Nun wäre es interessant zu sehen: Für Benutzer, bei denen es nicht funktioniert, was passiert ... 

  • … Wenn Sie von meiner initial.docx beginnen? 
  • Wenn das nicht funktioniert, was ist, wenn Sie mein reference.docx als Referenzdokument verwenden?
  • Wenn nichts funktioniert, gibt es auffällige Unterschiede in den generierten XML-Dateien (innerhalb des DOCX-Containers)? Bitte teilen Sie Ihre Dateien und die genauen Versionsinformationen.

Bei einer Reihe von Benutzern, die diese Tests ausführen, sollte es möglich sein, herauszufinden, was die Probleme verursacht.

12
CL.

Das war eigentlich ein bekanntes Problem . Glücklicherweise wurde es in v2.0 oder späteren Versionen von pandoc behoben.

Und ich habe die neuere Version getestet und festgestellt, dass es einen neu hinzugefügten versteckten Stil namens "Table" gibt. Die Vorschläge von @ CL. zur Änderung des "Table" -Stils in reference.docx sind nun in Ordnung.

Sehen Sie sich außerdem diesen Eintrag in den Versionshinweisen zu pandoc, Version 2.0, an:

Verwenden Sie Table anstelle von Table Normal für den Tabellenstil ( # 3275 ). Table Normal ist der Standardtabellenstil und kann nicht geändert werden.

4
Liang Zhang

TableNormal funktioniert auch nicht für mich.

In meiner niederländischen Version von Word 2016 (Office 365) habe ich herausgefunden, dass ich Tabellen mit dem Stil Compact markieren kann.

Eingabe (refdoc.docx enthält den Stil 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"
---

Und RMarkdown:

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

Ausgabe:

 img

0
MS Berends

Ich konnte meine Word-Ausgabe abrufen, um einen Standardtabellenstil zu verwenden, den ich in einem Verweis .docx definiert habe.

Anstelle von 'TableNormal' war der Tabellenstil standardmäßig 'Table'.

Ich entdeckte dies, als ich mit einem Kabel ein Rmarkdown strickte. 

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

Dann habe ich mir die XML des generierten Dokuments angesehen, um zu sehen, welchen Stil es standardmäßig hatte.

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

Ich habe den Stil 'Tabelle' definiert, um Farbe und Rahmen in das Referenzdokument einzufügen. Dies funktioniert für einen Standardtabellenstil im gesamten Dokument. Ich habe keine Möglichkeit gefunden, verschiedene Stile im gesamten Dokument zu verwenden.

Dies blieb auch erhalten, nachdem ich das Referenzdokument geöffnet und bearbeitet hatte.

0
Ataraxis