\ SweaveInput {}错误消息声明存在的文件不存在

时间:2012-03-26 01:57:25

标签: r character-encoding latex sweave

我有一个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 {}行并重新输入时,问题就消失了(即,它正确构建并且错误消息中的额外空间消失了)。

1 个答案:

答案 0 :(得分:3)

我想你可能有\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")