Похоже, что Sweave неправильно понимает файл .Rnw - PullRequest
3 голосов
/ 22 сентября 2011

Этот вопрос возник из следующего вопроса на tex.sx: Sweave, генерирующий неверный LaTeX . Кажется, проблема в том, что Sweave не распознает кодировку файла, несмотря на то, что языковой стандарт установлен на UTF-8, а файл .Rnw сохраняется как UTF-8. Конечным результатом является то, что любой файл .Rnw, который содержит символы не ASCII, в конечном итоге создает NA в результирующем файле .tex. Как вы можете прочитать в комментариях к этому вопросу, другой пользователь не показывает проблему с тем, что, по-видимому, идентично. (R 2.13.1 на Mac) Вот минимальный документ, который выходит из строя.

Обновление

Основываясь на предложениях Аарона, я добавил sessionInfo в файл .Rnw, и теперь настоящая проблема проявляется. Когда Sweave обрабатывает файл, он, кажется, меняет локаль.

.Rnw файл

\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
Some non-ascii text: éüáî
<<>>=
sessionInfo()
@ 
\end{document}

Выполнение этого через Sweave, создает следующий .tex файл. Строка, содержащая символы не ASCII, была преобразована в NA на Sweave. Кажется также, что локаль была изменена:

Результирующий .tex файл

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{Sweave}
\begin{document}
NA
\begin{Schunk}
\begin{Sinput}
> sessionInfo()
\end{Sinput}
\begin{Soutput}
R version 2.13.1 (2011-07-08)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] C

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

loaded via a namespace (and not attached):
[1] tools_2.13.1
\end{Soutput}
\end{Schunk}
\end{document}

sessionInfo() изнутри R.app возвращает:

> sessionInfo()
R version 2.13.1 (2011-07-08)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8

Обновление (Ответ Аарону)

> text <- readLines("sweave-enc-test.Rnw", warn = FALSE)
> enc <- tools:::.getVignetteEncoding(text, convert = TRUE)
> 
> text
[1] "\\documentclass{article}"     "\\usepackage[utf8]{inputenc}" "\\begin{document}"           
[4] "Some non-ascii text: éüáî"    "\\end{document}"             
> enc
[1] "UTF-8"
> iconv(text, enc, "")
[1] "\\documentclass{article}"     "\\usepackage[utf8]{inputenc}" "\\begin{document}"           
[4] "Some non-ascii text: éüáî"    "\\end{document}"      

(Это вывод из консоли R в R.app.)

1 Ответ

2 голосов
/ 22 сентября 2011

Потенциальное исправление:

Попробуйте поставить

export LANG=en_US.UTF-8

в вашем скрипте TeXShop.

(Оригинальная идея была в файле ~/.bashrc, но, видимо, TeXShop не загружает это.)

РАНЕЕ:

Что происходит, когда вы помещаете sessionInfo() в файл Rnw?

\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
Some non-ascii text: éüáî
<<>>=
sessionInfo()
@ 
\end{document}
...