【发布时间】:2012-03-26 01:57:25
【问题描述】:
我有一个 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 doesn't seem to get .Rnw file encoding right),但这似乎不是问题——所有文件都在 us-ascii 中编码:
$ file -bi JMP.Rnw
text/x-tex; charset=us-ascii
$ file -bi intro.tex
text/x-tex; charset=us-ascii
$
真正奇怪的是,我有一个单独的 Sweave 纸张设置,只需将 intro.tex 移动到该目录并将 \SweaveInput{intro.tex} 添加到该主文件即可完美运行(即构建没有任何问题)。这另一篇论文正在使用不同的 LaTeX 模板,但这似乎无关紧要,因为我的理解是 Sweave 基本上会忽略所有这些,直到所有代码块都被识别和执行(尽管我在这里的理解可能是非常错误)。
我在 x86_64-pc-linux-gnu(64 位)机器上运行 R 版本 2.14.2。
更新:调查来自 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 编码的文本。我使用http://billposer.org/Software/uni2ascii.html 将文件转换回ascii,但在运行Sweave 时仍然出现空白错误。但是,当我删除原始的 \SweaveInput{} 行并重新键入它时,问题就消失了(即,它正确构建并且错误消息中的额外空间消失了)。
【问题讨论】:
-
最后一次测试,将
intro.tex移动到工作项目中,肯定会使问题复杂化。 -
是的 - 这让我觉得我最好的选择是尝试创建一个 hello world + 导入 Sweave 论文并尝试重现错误 - 尽管我仍然希望有人只是发现一些疏忽/错误我正在制作。
标签: r character-encoding latex sweave