Подтвердить что ты не робот

Столы 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, который будет делать трюк, просто захотите удалить этот процесс, если это возможно.

4b9b3361

Ответ 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. Это работает для одного стандартного стиля таблицы во всем документе, я не нашел способ использовать разные стили во всем.

Это оставалось верным даже после того, как я открыл справочный документ и отредактировал его.