web-dev-qa-db-ja.com

Knitr&Rmarkdown docxテーブル

knitrrmarkdownを一緒に使用してWord文書を作成する場合、既存の文書を使用して出力のスタイルを設定できます。

たとえば、私のyamlヘッダーで:

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

このスタイル内で、デフォルトのテーブルスタイルを作成しました。ここでの目標は、kableテーブルを正しいスタイルで出力することです。

Word文書を編んで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の 'compact'スタイルを変更すると、テーブルのテキストコンテンツが自動的に変更されることがわかりました。

更新2:スタイルをさらに調査して作成した後、knitrが段落スタイルにアクセスするのに問題がないようだとわかりました。ただし、テーブルスタイルはそのスタイルカテゴリの下にはなく、個人的なテストでは適用されないようです。

更新3:ReporteRsパッケージに手を出しました-必要に応じてテーブルを作成できましたが、そのために必要な構文は面倒です。むしろ、スタイルが自動的に適用されます。

更新4: TableNormalスタイルを変更することも、Table Normalスタイルを設定することもできません。 XMLアプローチは、私たちが探しているものではありません。トリックを実行するVBAマクロがあり、可能であればそのプロセスを削除したいだけです。

30
zacdav

これは、基本的に TableNormalを推奨する答えrmarkdown.rstudio.comのこの投稿 と、TableNormalスタイルは、kableによって生成されるようなテーブルをカスタマイズします。

[〜#〜] rmd [〜#〜]

---
output:
  Word_document
---

```{r}
knitr::kable(cars)
```
  • RStudioで「Knit Word」をクリックします。 →ドキュメントはWordで開きますが、カスタムスタイルはまだありません。
  • そのドキュメント(新しいドキュメントでは(not)に、必要なスタイルを追加します。 この記事 は基本を説明しています。重要なのは、直接スタイルを適用することではなく、スタイルを変更することです。 Wordのスタイルの基本に関するsupport.office.comのこの記事 を参照してください。
  • 具体的には、テーブルのスタイルを設定するには、tableスタイルを追加する必要があります。私のバージョンのWordは英語ではありませんが、上記のリンクされた記事によると、テーブルスタイルは「デザインツール、テーブルツールのコンテキストタブ」から利用できます。
  • スタイル名としてTableNormalを選択し、目的のスタイルを定義します。私の実験ではほとんどのスタイルが機能しましたが、一部のスタイルは機能しませんでした。 (最初の列に色を追加し、最初の行を太字にすることは問題ありません。2行ごとに強調表示することは無視されました。)この回答の最後のスクリーンショットはこの手順を示しています。
  • 文書を保存します。 styles.docx
  • 参照DOCXを使用するようにRMDファイルのヘッダーを変更します( here を参照してください;インデントを台無しにしないでください-この間違いを見つけるのに10分かかりました)。

    ---
    output:
      Word_document:
        reference_docx: styles.docx
    ---
    
  • 再びDOCXに編む–スタイルが適用されます。

上記の手順に従うと、この出力が得られます。

Output

そして、TableNormalを定義するために使用されるテーブルスタイルダイアログのスクリーンショット。残念ながら、それはドイツ語ですが、おそらく誰かがそれの英語版を提供することができます:

Table Style


これはほとんどのユーザー(私以外のユーザー)には機能しないようですので、これを体系的にテストすることをお勧めします。基本的に、間違っている可能性のある4つのステップがあります。

  • 間違ったRMD(可能性は低い)。
  • 最初に生成されたDOCXの違い。
  • TableNormalスタイルがDOCXに保存される方法の違い。
  • 参照DOCXを使用して最終DOCXをフォーマットする方法の違い。

したがって、上記の同じ最小限のRMD( Pastebinの完全なコード )を使用して、結果の開始位置がどこで異なるかを調べることをお勧めします。

次のシステムで3つのファイルが生成されます: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コンテナー内)に人目を引く違いはありますか?ファイルと正確なバージョン情報を共有してください。

多くのユーザーがこれらのテストを実行することで、問題の原因を見つけることができるはずです。

14
CL.

これは実際には 既知の問題 でした。幸いなことに、それはpandocのv2.0以降のリリースで解決されました。

そして、私は新しいバージョンをテストし、「Table」と呼ばれる新しく追加された隠しスタイルがあることを発見しました。 reference.docxの「テーブル」スタイルを変更する@CL。の提案に従ってください。

さらに、pandocのv2.0リリースノートの次のエントリを参照してください。

テーブルスタイルにはTable NormalではなくTableを使用します( #3275 )。 Table Normalはデフォルトのテーブルスタイルであり、変更できません。

4
Liang Zhang

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

1
MS Berends

参照.docxで定義したデフォルトのテーブルスタイルを使用するようにWordの出力を取得できました。

「TableNormal」の代わりに、デフォルトのテーブルスタイルは「Table」でした。

ケールでrmarkdownを編むことでこれを発見しました。

---
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に色と境界線を配置しました。これはドキュメント全体で1つの標準的なテーブルスタイルに対して機能しますが、全体を通して異なるスタイルを使用する方法は見つかりませんでした。

これは、リファレンスドキュメントを開いて編集した後もそのままでした。

0
Ataraxis