7

brewと を使用して、グループ化変数に基づいてセクションに分割された 1 つの PDF レポートを作成しようとしていますknitr。グループ化変数には、å æ ø などの特殊文字 (ウムラウト) が含まれている場合があります。

ドキュメント タイトルのウムラウトのみが適切に処理されます\usepackage[utf8]{inputenc}(以下の例を参照)。ただし、グループ化変数のウムラウトは、エラーを生成します\usepackage[utf8]{inputenc}

一方、試してみると\usepackage[T1]{fontenc}、グループ化変数のウムラウトは適切に処理されます。しかし、タイトルが正しくエンコードされていません。

タイトルとグループ化変数の両方でエンコーディングを正しく行うのに苦労しています。

これは、アヤメのデータセットの種ごとの要約統計のサブセクションを含む 1 つの PDF レポートを作成しようとする例です。それが私の問題を説明してくれることを願っています。

ウムラウトなしでデータを準備する R コード

library(plyr)
library(xtable)
library(knitr)
library(brew)
library(stringr)

組み込みのデータセットで種ごとに要約テーブルを作成しますiris。まず、Speciesウムラウトなしで元の名前を使用します。ドキュメントのみのウムラウト(テンプレート ファイル\titleのコードを参照)。.rnw集計テーブルをリストに格納します。

 data(iris)
 iris_tbl <- dlply(.data = iris, .variables = .(Species), function(x) xtable(summary(x)))

関数を定義しますbrew_knit_pdf。この関数は、テンプレート ラテックス ファイルxxx.rnwを新しい.rnwファイルxxx_out.rnwに作成します。このファイルには、ループされるアイテム/グループごとに 1 つのセクションがあります。次にxxx_out.rnw、frombrewが入力ファイルとして使用されknit2pdf、PDF に変換されます。

brew_knit_pdf <- function(template, ...){
  brew_out <- str_replace(string = template, pattern = ".rnw", replacement = "_out.rnw")
  brew(file = template, output = brew_out)
  knit2pdf(input = brew_out, ...)
}

brew_knit_pdf("iris_umlaut_tbl.rnw")

.rnw テンプレート ファイルのコード

この例では、次のコードのテンプレート ファイルに名前を付けましたiris_umlaut_tbl.rnw。このファイルはbrew_knit_pdf、R スクリプトの関数の入力として使用されます。

\documentclass{article}

% \usepackage[T1]{fontenc}    
\usepackage[utf8]{inputenc}

\usepackage{geometry}
\geometry{tmargin=2.5cm,bmargin=2.5cm,lmargin=2.5cm,rmargin=2.5cm}

\begin{document}

\begin{titlepage}

\title{Using brew and knitr to produce one PDF report split by a grouping variable.\\Problem with å æ ø in grouping variable}

\clearpage\maketitle
\thispagestyle{empty}

\tableofcontents

\end{titlepage}
\newpage


\section{Summary statistics for each species}

% R code loop wrapped in brew syntax, which brews the template file xxx.rnw to a new .rnw file xxx_out.rnw, which has one section for each group that is looped over, i.e. the names of the list iris_tbl produced in the R script.

<% for (Sp in names(iris_tbl)) { -%>

\subsection{<%= Sp %>}
<<sum-<%= Sp %>, echo=FALSE, results='asis'>>=
print(iris_tbl[["<%= Sp %>"]])
@
\newpage
<% } %>

\end{document}

ウムラウト付きのデータを準備する R コード

私の実際のデータを模倣するために、アイリス データの種の名前を、ウムラウトを含む (無意味な) 名前に置き換えます。

data(iris)
iris$Species <- as.character(iris$Species)

iris$Species[iris$Species == "setosa"] <- "åsetosa"
iris$Species[iris$Species == "versicolor"] <- "æversicolor"
iris$Species[iris$Species == "virginica"] <- "øvirginica"

# create a summary table for each species
iris_tbl <- dlply(.data = iris, .variables = .(Species), function(x) xtable(summary(x)))

iris_tbl の「ウムラウト バージョン」が準備されたら、異なるエンコーディング パッケージ (inputenc および/または fontenc) を使用することを除いて、上記と同じ .rnw ファイルで brew_knit_pdf 関数を実行します。

結果

これまでの 4 回の試みの概要を以下に示します。ウムラウトなしまたはウムラウト付きのデータセットを使用し、.rnw ファイルで異なるエンコーディング パッケージを使用します。

    • R データ: 非ウムラウト種で準備された iris_tbl
    • .rnw ファイル: のウムラウト\title{ }\usepackage[utf8]{inputenc}

タイトルにウムラウトを出力OK

    • R データ: Species のウムラウト バージョンで準備された iris_tbl
    • .rnw ファイル: のウムラウト\title{ }\usepackage[utf8]{inputenc}

出力

エラー: 'iris_umlaut_tbl_out.tex' で 'texi2dvi' を実行すると、LaTeX エラーが失敗しました: ...Package inputenc エラー: Unicode char \u8:æve が LaTeX で使用するように設定されていません。

    • R データ: Species のウムラウト バージョンで準備された iris_tbl
    • .rnw ファイル: umlauts in \title{ }, \usepackage[T1]{fontenc},\usepackage[utf8]{inputenc}

出力

エラー: 'iris_umlaut_tbl_out.tex' で 'texi2dvi' を実行すると、LaTeX エラーが失敗しました: ...Package inputenc エラー: Unicode char \u8:æve が LaTeX で使用するように設定されていません。

    • R データ: Species のウムラウト バージョンで準備された iris_tbl
    • .rnw ファイル: のウムラウト\title{ }\usepackage[T1]{fontenc}

出力

タイトルのウムラウトは不可、グループ化変数のウムラウトはOK


タイトルグループ化変数の両方でエンコーディングを正しくするために、誰かが私を正しい方向に向けることができますか? お時間を割いていただきありがとうございます。


セッション情報

私のR Studio 0.97.336のデフォルトのテキストエンコーディング: UTF-8

> sessionInfo()

R version 3.0.0 (2013-04-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=Norwegian (Bokmål)_Norway.1252  LC_CTYPE=Norwegian (Bokmål)_Norway.1252   
[3] LC_MONETARY=Norwegian (Bokmål)_Norway.1252 LC_NUMERIC=C                              
[5] LC_TIME=Norwegian (Bokmål)_Norway.1252    

attached base packages:
[1] splines   stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] Hmisc_3.10-1               survival_2.37-4            pastecs_1.3-13             boot_1.3-9                
 [5] pspline_1.0-15             ggplot2_0.9.3.1            lubridate_1.2.0            stringr_0.6.2             
 [9] brew_1.0-6                 knitr_1.1                  xtable_1.7-1               plyr_1.8                  
[13] PerformanceAnalytics_1.1.0 xts_0.9-3                  zoo_1.7-9                  gdata_2.12.0.2            

loaded via a namespace (and not attached):
 [1] cluster_1.14.4     colorspace_1.2-2   dichromat_2.0-0    digest_0.6.3       evaluate_0.4.3     formatR_0.7       
 [7] grid_3.0.0         gtable_0.1.2       gtools_2.7.1       labeling_0.1       lattice_0.20-15    MASS_7.3-26       
[13] memoise_0.1        munsell_0.4        proto_0.3-10       RColorBrewer_1.0-5 reshape2_1.2.2     scales_0.2.3      
[19] tools_3.0.0

> getOption("encoding")

[1] "native.enc"

アップデート:

brew パッケージのメンテナーである Jeffrey Horner からの「off-SO」の意見にとても感謝しています。私のスクリプトを Ubuntu とコマンドライン R で実行したとき、彼はエンコーディングの問題を抱えていませんでした。自分で Ubuntu を実行する機会はありませんが、今日、RStudio (0.97.449) を更新し、デフォルトのエンコーディングを ISO8859-1 に設定しました (Yihui に感謝します!)。特殊文字は、タイトルと\usepackage[latin1]{inputenc}.rnw ファイルのグループ化変数の両方で正しくエンコードされるようになりました。また、\usepackage[ansinew]{inputenc}動作します。最初の試みで何がうまくいかなかったのかわかりません。おそらく、RStudio は [オプション] で設定されたデフォルトのエンコーディング セットをスクリプト ファイルに適用しなかった可能性があります。しかし、それは単なる憶測です。

4

1 に答える 1