我尝试使用基于分组变量的部分来生成一份 PDF 报告brew
and knitr
。我的分组变量可能包含特殊字符(元音变音),例如 å æ ø。
仅文档标题中的变音符号可以很好地处理\usepackage[utf8]{inputenc}
(参见下面的示例)。但是,分组变量中的变音符号会生成错误\usepackage[utf8]{inputenc}
.
另一方面,当我尝试时\usepackage[T1]{fontenc}
,分组变量中的变音符号得到正确处理。但现在标题编码不正确。
我正在努力在标题和分组变量中正确编码。
下面是一个示例,我尝试生成一份 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
file xxx_out.rnw
,其中每个循环的项目/组都有一个部分。这xxx_out.rnw
from brew
然后用作输入文件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 的“元音变音版本”准备好后,我在与上面相同的 .rnw 文件上运行brew_knit_pdf 函数,只是我使用不同的编码包(inputenc 和/或 fontenc)。
Result
以下是迄今为止四次尝试的总结;使用不带或带变音符号的数据集,并在 .rnw 文件中使用不同的编码包。
- R 数据:用非元音变音物种准备的 iris_tbl
- .rnw 文件:元音变音
\title{ }
, \usepackage[utf8]{inputenc}
Output标题中的变音符号 OK
- R 数据:iris_tbl 使用 Species 的元音变音版本准备
- .rnw 文件:元音变音
\title{ }
, \usepackage[utf8]{inputenc}
Output
错误:在“iris_umlaut_tbl_out.tex”上运行“texi2dvi”失败
LaTeX 错误:...Package inputenc 错误:Unicode char \u8:æve 未设置用于 LaTeX。
- R 数据:iris_tbl 使用 Species 的元音变音版本准备
- .rnw 文件:
umlauts in \title{ }
, \usepackage[T1]{fontenc}
, \usepackage[utf8]{inputenc}
Output
错误:在“iris_umlaut_tbl_out.tex”上运行“texi2dvi”失败
LaTeX 错误:...Package inputenc 错误:Unicode char \u8:æve 未设置用于 LaTeX。
- R 数据:iris_tbl 使用 Species 的元音变音版本准备
- .rnw 文件:元音变音
\title{ }
, \usepackage[T1]{fontenc}
Output
标题中的变音符号不正确,分组变量中的变音符号正常
谁能指出正确的方向以正确编码both title and分组变量?预先非常感谢您抽出时间。
会议信息
我的 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"
Update:
我非常感谢来自brew包维护者Jeffrey Horner的“off-SO”输入。当使用 Ubuntu 和命令行 R 运行我的脚本时,他没有遇到编码问题。这给了我新的希望。我没有机会自己运行Ubuntu,但今天我更新了RStudio(0.97.449)并将默认编码设置为ISO8859-1(感谢Yihui!)。现在,标题和分组变量中的特殊字符都已正确编码\usepackage[latin1]{inputenc}
在 .rnw 文件中。还\usepackage[ansinew]{inputenc}
作品。我不确定我最初的尝试出了什么问题。当我重新打开脚本文件时,可能是 RStudio 没有将选项中设置的默认编码应用到脚本文件中,我按照 Yihui 的建议更改了这些默认编码。但这只是猜测。