Этот вопрос возник из следующего вопроса на 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
.)