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.
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)
```
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.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:
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:
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:
TableNormal
im DOCX gespeichert wird.Ich empfehle daher die Verwendung des gleichen minimalen RMD ( vollständiger Code auf Pastebin ), um herauszufinden, wo die Ergebnisse beginnen:
TableNormal
hinzugefügt: reference.docxDie 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 ...
Bei einer Reihe von Benutzern, die diese Tests ausführen, sollte es möglich sein, herauszufinden, was die Probleme verursacht.
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 vonTable Normal
für den Tabellenstil ( # 3275 ).Table Normal
ist der Standardtabellenstil und kann nicht geändert werden.
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:
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.