Przygotuj jeden raport PDF podzielony według zmiennych ze znakami specjalnymi (å æ ø) - problem z kodowaniem

Próbuję stworzyć jeden raport PDF podzielony na sekcje w oparciu o zmienną grupującą, używającbrew iknitr. Moja zmienna grupująca może zawierać znaki specjalne (umlauty), takie jak å æ ø.

Umlauty w tytule dokumentu są dobrze obsługiwane\usepackage[utf8]{inputenc} (patrz przykłady poniżej). Jednak umlauty w zmiennej grupującej powodują błąd\usepackage[utf8]{inputenc}.

Z drugiej strony, kiedy próbowałem\usepackage[T1]{fontenc}, umlauty w zmiennej grupującej są obsługiwane poprawnie. Ale teraz tytuł nie jest poprawnie zakodowany.

Staram się uzyskać kodowanie zarówno w tytule, jak i zmiennej grupującej.

Oto przykład, w którym próbuję stworzyć jeden raport PDF z podsekcjami statystyk podsumowujących na gatunek w zbiorze danych tęczówki. Mam nadzieję, że może to zilustrować mój problem.

Kod R do przygotowania danych bez umlautów
library(plyr)
library(xtable)
library(knitr)
library(brew)
library(stringr)

Utwórz tabelę podsumowującą dla każdego gatunku na wbudowanymiris zestaw danych. Najpierw użyj oryginałuSpecies imiona, bez umlautów. Umlaut w dokumencie\title tylko (zobacz kod dla.rnw plik szablonu). Przechowuj tabele podsumowań na liście.

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

Zdefiniuj funkcjębrew_knit_pdf. Funkcja tworzy plik lateksowy szablonuxxx.rnw do nowego.rnw plikxxx_out.rnw, która ma jedną sekcję dla każdego elementu / grupy, która jest zapętlona. Thexxx_out.rnw zbrew jest następnie używany jako plik wejściowy wknit2pdf i jest konwertowany do formatu 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")
Kod pliku szablonu .rnw

W moim przykładzie nazwa pliku szablonu została podana dla następującego koduiris_umlaut_tbl.rnw. Ten plik jest używany jako wejście wbrew_knit_pdf funkcja w skrypcie 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}
Kod R do przygotowania danych z umlautami

Aby naśladować moje prawdziwe dane, zastępuję nazwy gatunków w danych tęczówki nazwami (nie sensycznymi) niż zawiera umlauty.

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)))

Po przygotowaniu „wersji umlaut” iris_tbl uruchamiam funkcję brew_knit_pdf na tym samym pliku .rnw, jak powyżej, z tym wyjątkiem, że używam różnych pakietów kodowania (inputenc i / lub fontenc).

Wynik

Oto podsumowanie czterech prób do tej pory; korzystanie z zestawów danych bez lub z umlautami i używanie różnych pakietów kodowania w pliku .rnw.

Dane R: iris_tbl przygotowane z gatunkami innymi niż umlautPlik .rnw: umlauty w\title{ }, \usepackage[utf8]{inputenc}

Wydajność umlauty w tytule OK

Dane R: iris_tbl przygotowane z umlaut wersji gatunkówPlik .rnw: umlauty w\title{ }, \usepackage[utf8]{inputenc}

Wydajność

Błąd: uruchomienie 'texi2dvi' w nieudanym błędzie 'iris_umlaut_tbl_out.tex' LaTeX: ... Inputenc pakietu Błąd: znak Unicode 8: æve nie skonfigurowany do użycia z LaTeX.

Dane R: iris_tbl przygotowane z umlaut wersji gatunkówPlik .rnw:umlauts in \title{ }, \usepackage[T1]{fontenc}, \usepackage[utf8]{inputenc}

Wydajność

Błąd: uruchomienie 'texi2dvi' w nieudanym błędzie 'iris_umlaut_tbl_out.tex' LaTeX: ... Inputenc pakietu Błąd: znak Unicode 8: æve nie skonfigurowany do użycia z LaTeX.

Dane R: iris_tbl przygotowane z umlaut wersji gatunkówPlik .rnw: umlauty w\title{ }, \usepackage[T1]{fontenc}

Wydajność

umlauty w tytule nie są w porządku, umlauty w zmiennej grupującej OK

Czy ktoś może wskazać mi właściwy kierunek, aby uzyskać kodowanieobie tytułi zmienna grupująca? Z góry dziękuję za poświęcenie czasu.

Informacje o sesji

Domyślne kodowanie tekstu w moim 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"
Aktualizacja:

Jestem bardzo wdzięczny za wkład „off-SO” ​​ze strony opiekuna pakietu browarniczego Jeffreya Hornera. Nie miał problemów z kodowaniem przy uruchamianiu mojego skryptu z Ubuntu i wiersza poleceń R. To dało mi nową nadzieję. Nie mam możliwości samodzielnego uruchomienia Ubuntu, ale dzisiaj zaktualizowałem RStudio (0.97.449) i ustawiłem domyślne kodowanie na ISO8859-1 (dzięki Yihui!). Teraz znaki specjalne są zakodowane poprawnie zarówno w tytule, jak iw zmiennej grupującej za pomocą\usepackage[latin1]{inputenc} w pliku .rnw. Również\usepackage[ansinew]{inputenc} Prace. Nie jestem pewien, co poszło źle w mojej pierwotnej próbie. Prawdopodobnie RStudio nie zastosowało domyślnego kodowania ustawionego w Opcjach, które zmieniłem po radach Yihui, na pliki skryptów po ich ponownym otwarciu. Ale to tylko spekulacja.

questionAnswers(1)

yourAnswerToTheQuestion