gpt4 book ai didi

r - Brew 和 knit 一份 PDF 报告由带有特殊字符的变量分割 (å æ ø) - 编码问题

转载 作者:行者123 更新时间:2023-12-04 15:45:35 25 4
gpt4 key购买 nike

我尝试使用 brew 生成一个基于分组变量的分割部分的 PDF 报告。和 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 .函数生成模板latex文件 xxx.rnw到新 .rnw文件 xxx_out.rnw ,每个循环的项目/组都有一个部分。 xxx_out.rnw来自 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 代码

为了模仿我的真实数据,我将 iris 数据中的 Species 名称替换为(无意义的)名称而不是包含变音符号。
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)。

结果

这是迄今为止四次尝试的总结;使用不带或带变音的数据集,并在 .rnw 文件中使用不同的编码包。
  • R 数据:iris_tbl 用非变音物种准备
  • .rnw 文件:\title{ } 中的变音符号, \usepackage[utf8]{inputenc}

  • 输出 标题中的变音 OK
  • R 数据:iris_tbl 用变音版本的 Species 准备
  • .rnw 文件:\title{ } 中的变音符号, \usepackage[utf8]{inputenc}

  • 输出

    Error: running 'texi2dvi' on 'iris_umlaut_tbl_out.tex' failed LaTeX errors: ...Package inputenc Error: Unicode char \u8:æve not set up for use with LaTeX.


  • R 数据:iris_tbl 用变音版本的 Species 准备
  • .rnw 文件:umlauts in \title{ } , \usepackage[T1]{fontenc} , \usepackage[utf8]{inputenc}

  • 输出

    Error: running 'texi2dvi' on 'iris_umlaut_tbl_out.tex' failed LaTeX errors: ...Package inputenc Error: Unicode char \u8:æve not set up for use with LaTeX.


  • R 数据:iris_tbl 用变音版本的 Species 准备
  • .rnw 文件:\title{ } 中的变音符号, \usepackage[T1]{fontenc}

  • 输出

    标题中的变音不OK,分组变量中的变音OK

    任何人都可以指出我正确的方向以在标题和分组变量中正确编码吗?非常感谢您抽出宝贵时间。

    session 信息

    我的 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 没有将 Options 中设置的默认编码(我按照 Yihui 的建议更改)应用于脚本文件。但这只是一种猜测。

    最佳答案

    由于您使用的是 UTF-8 ,这不是您操作系统的 native 编码,您需要明确告诉 knitr输入文档的编码。例如,您必须调用

    knit2pdf(brew_out, encoding = "UTF-8")

    但我不确定 brew可以处理非本地字符编码。如果没有,我建议您使用系统默认编码(在这种情况下应该是 ISO8859-1),并且
    \usepackage[latin9]{inputenc}

    或者在 knitr中做所有事情如果您必须使用 UTF-8 (这也使您可以单击按钮来编译文档);见 075-knit-expand.Rnw举个例子。

    关于r - Brew 和 knit 一份 PDF 报告由带有特殊字符的变量分割 (å æ ø) - 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173199/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com