Столы Knitr & Rmarkdown docx
При использовании knitr
и rmarkdown
вместе для создания словарного документа вы можете использовать существующий документ для стилирования вывода.
Например, в моем заголовке yaml:
output:
word_document:
reference_docx: style.docx
fig_caption: TRUE
в этом стиле я создал стиль таблицы по умолчанию - цель здесь состоит в том, чтобы выводить таблицу kable
в правильном стиле.
Когда я вставляю документ слова и использую style.docx, таблицы не стилизованы в соответствии с таблицей.
Использование инспектора стиля пока не помогло, не уверены, что стиль таблицы по умолчанию - это неправильный стиль для изменения.
Пример кода:
```{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")
```
У меня нет стилизованного документа, который я могу загрузить для тестирования, к сожалению.
TL; DR: хотите стилизовать вывод таблицы из rmarkdown и knitr автоматически (через kable)
Обновление: До сих пор я обнаружил, что изменение "компактного" стиля в docx автоматически изменяет текстовое содержимое таблицы, но это не относится к общему стилю таблицы, например, к цвету ячейки и выравнивание.
Обновление 2: После дополнительных исследований и создания стилей я обнаружил, что knitr
, похоже, не имеет проблем с доступом к стилям абзаца. Однако стили таблиц не относятся к этой категории стилей и, похоже, не применяются в моем личном тестировании.
Обновление 3:. Помещено с пакетом ReporteRs
, в то время как он смог создать таблицы в качестве желаемого. Синтаксис, необходимый для этого, является трудоемким. Скорее стиль будет применен автоматически.
Обновление 4: Вы не можете изменить стиль TableNormal, а также не выполнять настройку стиля Table Normal. Подход XML не является тем, что мы ищем. У меня есть макрос VBA, который будет делать трюк, просто захотите удалить этот процесс, если это возможно.
Ответы
Ответ 1
Это, по сути, комбинация ответа, который рекомендует TableNormal
, этот пост на rmarkdown.rstudio.com и мои собственные эксперименты, чтобы показать, как использовать стиль TableNormal
для настройки таблиц, подобных тем, которые сгенерированы kable
:
RMD
---
output:
word_document
---
```{r}
knitr::kable(cars)
```
- Нажмите "Вязать слово" в RStudio. → Документ открывается в Word без каких-либо пользовательских стилей.
- В этом документе (а не в новом документе) добавьте необходимые стили. Эта статья объясняет основы. Ключ не применять прямые стили, а изменять стили. См. в этой статье о support.office.com о стилях в Word.
- В частности, для стилизации таблицы вам нужно добавить стиль таблицы. Моя версия Word не является английским, но в соответствии со статьей, указанной выше, стили таблицы доступны через вкладку "Дизайн" на вкладке "Инструменты контекстного меню".
- Выберите
TableNormal
как имя стиля и определите нужные стили. В моих экспериментах работали большинство стилей, однако некоторые не делали этого. (Добавление цвета в первый столбец и создание первой строки жирным шрифтом не было проблемой, выделение каждой второй строки было проигнорировано.) Последний скриншот в этом ответе иллюстрирует этот шаг.
- Сохраните документ, например. как
styles.docx
.
-
Измените заголовок в файле RMD, чтобы использовать ссылку DOCX (см. здесь; не испортите отступы - взял меня на 10 минут, нахожу эту ошибку):
---
output:
word_document:
reference_docx: styles.docx
---
-
Вязание для DOCX снова - теперь должен применяться стиль.
Следуя описанным выше шагам, вы получите этот результат:
![Вывод]()
И вот скриншот диалога стиля таблицы, используемого для определения TableNormal
. К сожалению, это на немецком языке, но, возможно, кто-то может предоставить английскую версию:
![Стиль таблицы]()
Поскольку это не работает для большинства пользователей (кто-то, кроме меня...), я предлагаю проверить это систематически. По существу, есть 4 шага, которые могут пойти не так:
- Неверный RMD (маловероятно).
- Различия в первоначально сгенерированном DOCX.
- Различия в том, как стиль
TableNormal
сохраняется в DOCX.
- Различия в том, как ссылка DOCX используется для форматирования окончательного DOCX.
Поэтому я предлагаю использовать тот же минимальный RMD, опубликованный выше (полный код на pastebin), чтобы узнать, где начинаются результаты:
Три файла создаются в следующей системе: Windows 7/R 3.3.0/RStudio 0.99.896/pandoc 1.15.2/Office 2010.
Я получаю те же результаты в системе с Windows 7/R 3.2.4/RStudio 0.99.484/pandoc 1.13.1/Office 2010.
Я полагаю, что наиболее вероятными виновниками являются версии pandoc и Office. К сожалению, я не могу проверить другие конфигурации на данный момент. Теперь было бы интересно увидеть следующее: для пользователей, где это не работает, что происходит...
- ... если вы начинаете с моего initial.docx?
- Если это не сработает, что делать, если вы используете reference.docx в качестве справочного документа?
- Если ничего не работает, есть ли привлекательные различия в сгенерированных XML файлах (внутри контейнера DOCX)? Пожалуйста, поделитесь своими файлами и информацией о точной версии.
С рядом пользователей, выполняющих эти тесты, должно быть возможно выяснить, что вызывает проблемы.
Ответ 2
Это фактически известная проблема. К счастью, он решен в версиях версии 2.0 или более pandoc
.
И я тестировал новую версию, и обнаружил, что есть новый добавленный стиль hiden под названием "Таблица". После MS Berends предложения по изменению стиля "Таблица" reference.docx
теперь будут в порядке.
Кроме того, посмотрите на эту запись pandoc
v2.0:
Используйте Table
, а не Table Normal
для стиля таблицы (# 3275). Table Normal
- стиль таблицы по умолчанию и не может быть изменен.
Ответ 3
TableNormal
тоже не работает для меня.
На моей голландской версии Word 2016 (Office 365) я узнал, что я могу разметки таблиц стилем Compact
.
Вход (refdoc.docx
содержит стиль 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"
---
И RMarkdown:
# Methoden {#methoden}
```{r}
kable(cars)
```
Вывод:
![img]()
Ответ 4
Мне удалось получить вывод моего слова, чтобы использовать стиль таблицы по умолчанию, который я определил в ссылке .docx.
Вместо "TableNormal" стиль таблицы по умолчанию был "Таблица".
Я открыл это, вставив rmarkdown с kable.
---
date: "December 1, 2017"
output:
word_document:
reference_docx: Template.docx
---
`r knitr::kable(source)`
Затем я взглянул на этот сгенерированный XML-документ документа, чтобы узнать, к какому стилю он по умолчанию отказался.
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
Я определил стиль "Таблица", чтобы поместить некоторый цвет и границы в ссылку docx. Это работает для одного стандартного стиля таблицы во всем документе, я не нашел способ использовать разные стили во всем.
Это оставалось верным даже после того, как я открыл справочный документ и отредактировал его.