\ SweaveInput {} сообщение об ошибке, утверждающее, что отсутствуют файлы, которые присутствуют - PullRequest
3 голосов
/ 26 марта 2012

У меня есть файл Sweave, JMP.Rnw, который вводит несколько других файлов в тот же каталог.Соответствующая выдержка из JMP.Rnw (в разделе «Введение»):

\SweaveInput{intro.tex} 

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

> Sweave("JMP.Rnw")
Error in SweaveReadFile(c(ifile, file), syntax, encoding = encoding) : 
 no Sweave file with name ‘./intro.tex ’ found
> 

Тем не менее, файл определенно существует:

$ find . -name intro.tex
./intro.tex
$ 

Этот вход, кажется, работает для других входных файлов, но я не могу обнаружить шаблон, который объясняет, почему некоторые могут быть импортированыа другие не могут.По-видимому, существует ряд проблем с Sweave и кодировкой файлов (см. Похоже, что Sweave не получает правильную кодировку файлов .Rnw ), но здесь, похоже, это не проблема ---все файлы закодированы в us-ascii:

$ file -bi JMP.Rnw
text/x-tex; charset=us-ascii
$ file -bi intro.tex
text/x-tex; charset=us-ascii
$ 

Действительно странная вещь заключается в том, что у меня есть отдельная настройка Sweave paper, и я просто перемещаю intro.tex в этот каталог и добавляю \ SweaveInput {intro.tex}к этому мастер-файл работает отлично (то есть, сборки без каких-либо проблем).Этот другой документ использует другой шаблон LaTeX, но это может показаться неуместным, так как я понимаю, что Sweave в основном игнорирует все это, пока все блоки кода не будут идентифицированы и выполнены (хотя мое понимание здесь может быть оченьнеправильно).

Я работаю с версией R 2.14.2 на компьютере x86_64-pc-linux-gnu (64-bit).

Обновление : исследуя ответ от https://stackoverflow.com/users/210673/aaron, я обнаружил, что в моей альтернативной статье, где \ SweaveInput {} работает, сообщение об ошибке, сгенерированное при попытке вызватьнесуществующий файл не содержит дополнительный пробел, т. е.

> Sweave("allocating_visibility.Rnw")
Error in SweaveReadFile(c(ifile, file), syntax, encoding = encoding) : 
 no Sweave file with name ‘./nothere.Rnw’ found
> 

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

Обновление II : Так что я думаю, что это все-таки проблема с кодировкой.Когда я изначально создал свой основной файл .Rnw, я вставил в него какой-то текст в кодировке utf-8.Я преобразовал файл обратно в ascii, используя http://billposer.org/Software/uni2ascii.html, и все еще получил ошибку пробела при запуске Sweave.Однако, когда я удалил исходную строку \ SweaveInput {} и набрал ее заново, проблема исчезла (т. Е. Она создается правильно и лишнее пространство в сообщении об ошибке исчезло).

1 Ответ

3 голосов
/ 26 марта 2012

Я думаю, что вы могли бы \SweaveInput{intro.tex } вместо \SweaveInput{intro.tex} поскольку ваше сообщение об ошибке содержит лишний пробел перед заключительной кавычкой.

Для отладки вы также можете отредактировать команду SweaveReadFile в пакете utils, чтобы она выводила имя искомых файлов, например так.

SweaveReadFileNew <- function(file, syntax, encoding = "") {
  message(gettextf("looking for Sweave file with name %s", sQuote(file[1L])), domain = NA)
  SweaveReadFileOrig(file, syntax, encoding)
}
SweaveReadFileOrig <- utils:::SweaveReadFile
assignInNamespace("SweaveReadFile", SweaveReadFileNew, ns="utils")
...