Неанглийские специальные символы в вязалке

Я использую вязалку 1.1. в R 3.0.0 и в WinEdt (RWinEdt 2.0). У меня проблемы с распознаванием шведских символов (ä, ö, å) при вязании. Это не проблема с R; эти символы распознаются даже в именах файлов, именах каталогов, объектах и ​​т. д. В Sweave это тоже не было проблемой.

У меня уже есть \usepackage[utf8]{inputenc} в моем документе, но, похоже, Knitr не может обрабатывать специальные символы. После запуска Knitr я получаю следующее сообщение:

Warning in remind_sweave(if (in.file) input) :
It seems you are using the Sweave-specific syntax; you may need Sweave2knitr("deskriptiv 130409.Rnw") to convert it to knitr

processing file: deskriptiv 130409.Rnw

(*) NOTE: I saw chunk options "label=läser_in_data"
please go to http://yihui.name/knitr/options (it is likely that you forgot to 
quote "character" options)

Error in parse(text = str_c("alist(", quote_label(params), ")"), srcfile = NULL) : 
1:15: unexpected input
1: alist(label=lä
                 ^
Calls: knit ... parse_params -> withCallingHandlers -> eval -> parse
Execution halted

Конкретная метка, на которую он жалуется, это label=läser. Изменить метку недостаточно, так как Knitr даже жалуется, если объекты R используют äåö.

Я использовал Sweave2knitr(), так как файл изначально был создан для Sweave, но результат не стал лучше: теперь все äåö были преобразованы в äpåö, как в чанках R, так и в латексном тексте, а Knitr по-прежнему выдает сообщение об ошибке.

Информация о сеансе:

R version 3.0.0 (2013-04-03)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=Swedish_Sweden.1252  LC_CTYPE=Swedish_Sweden.1252           LC_MONETARY=Swedish_Sweden.1252
[4] LC_NUMERIC=C                    LC_TIME=Swedish_Sweden.1252    
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
other attached packages:
[1] knitr_1.1
loaded via a namespace (and not attached):
[1] digest_0.6.3   evaluate_0.4.3 formatR_0.7    stringr_0.6.2  tools_3.0.0   

Как я уже упоминал, есть имена файлов и объекты со шведскими символами (поскольку раньше это не было проблемой), а также текст должен быть на шведском языке.

Спасибо за любую помощь в том, чтобы заставить Knitr работать за пределами английского языка.


person user2266041    schedule 10.04.2013    source источник


Ответы (2)


Я думаю, вам нужно связаться с сопровождающим режимом R-Sweave в WinEdt, если вы используете этот режим для вызова knitr. Проблема в том, что WinEdt должен передать кодировку файла в knit(), если вы не используете родную кодировку вашей ОС. Вы упомянули UTF-8, но это не собственная кодировка для Windows, поэтому вы не должны использовать \usepackage[utf8]{inputenc}, если вы не уверены, что ваш файл закодирован в UTF8.

Здесь намешано несколько проблем, и решить их все одним ответом вряд ли получится.

Первая проблема — это label=läser, которое на самом деле должно быть label='läser', т. е. вы должны заключать в кавычки все метки фрагментов (проверьте другие метки в документе); knitr пытается автоматически заключать ваши метки в кавычки, когда вы пишете <<foo>>= (оно превращается в <<'foo'>>=), но это не работает, когда вы используете <<label=foo>>= (вы должны написать <<label='foo'>>= явно). Но эта проблема здесь, пожалуй, не существенна.

Я думаю, что настоящая проблема здесь заключается в кодировке файлов (что неприятно под Windows). Похоже, вы используете UTF-8 в системе, которая по умолчанию не соблюдает UTF-8. В этом случае у вас есть вызов knit('yourfile.Rnw', encoding = 'UTF-8'), т.е. передать кодировку в knit(). Я не пользуюсь WinEdt, поэтому не знаю, как это сделать. Вы можете жестко закодировать кодировку в конфигурациях, но это не рекомендуется.

Два предложения:

  1. не используйте UTF-8 под Windows; вместо этого используйте родную кодировку вашей системы (я думаю, Windows-1252);
  2. или используйте RStudio вместо WinEdt, который может передать кодировку в knitr;

Кстати, поскольку Sweave2knitr() выскочило, в вашем документе Rnw должны быть другие проблемы. Чтобы диагностировать проблему, можно пойти двумя путями:

  1. если вы используете UTF-8, запустите Sweave2knitr('deskriptiv 130409.Rnw', encoding = 'UTF-8')
  2. если вы используете родную кодировку вашей ОС, просто запустите Sweave2knitr('deskriptiv 130409.Rnw')

Прочтите документацию, если у вас есть вопросы о диагностической информации, распечатанной Sweave2knitr().

person Yihui Xie    schedule 10.04.2013
comment
Спасибо. По крайней мере, теперь я могу запустить в своем файле yarnr(), но проблема со специальными символами все еще остается. Я исправил части Sweave, чтобы они соответствовали функции Knitr(). Текст латекса работает правильно, если указать (в этом порядке): ‹br/› '\usepackage[utf8]{inputenc}' '\usepackage[T1]{fontenc}'. - person user2266041; 15.04.2013
comment
@ user2266041 Если вы уверены, что используете UTF-8, ответ Гилберта должен сработать. - person Yihui Xie; 15.04.2013

R-Sweave вызывает knitr через макрос knitr.edt, который сам использует код в knitrSweave.R для запуска вязания. Команда knit в этом более позднем сценарии находится вверху и читается как res <- knit(filename).

Следуя предложению Yihui, вы можете попробовать заменить эту команду на

res <- knit(filename, encoding = 'UTF-8')

Файлы knitr.edt и knitrSweave.R должны находиться в вашей папке %b\Contrib\R-Sweave, где %b — папка пользователя winEdt (что-то вроде "C:\Users\userA\AppData\Roaming\WinEdt Team\WinEdt 7" в Win 7).

В настоящее время я не знаю, как мы могли бы передать кодировку в качестве аргумента, чтобы избежать этого жесткого решения для кодирования.

Я бы посоветовал избегать расширенных символов в именах файлов, которые могут быть только источниками проблем. Лично я никогда не использую такие имена.

person Gilbert    schedule 13.04.2013
comment
Гилберт: Спасибо за ответ. Я добавил текст, о котором вы упомянули, но у меня все еще есть проблемы с вязанием, принимающим специальные символы в фрагментах R. Имена файлов и объекты R, содержащие äåö, просто не читаются. - person user2266041; 15.04.2013