【问题标题】:\SweaveInput{} error message claiming files not present that are present\SweaveInput{} 错误消息声称文件不存在但存在
【发布时间】: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


【解决方案1】:

我想你可能有\SweaveInput{intro.tex } 而不是\SweaveInput{intro.tex} 因为您的错误消息在结束引号之前有一个额外的空格。

要进行调试,您还可以编辑 utils 包中的 SweaveReadFile 命令,使其输出它正在查找的文件的名称,如下所示。

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")

【讨论】:

  • 所以我想知道这一点——但我的主文件中肯定有后者(即,没有额外的空间)。我查看了 emacs 24 和 gedit 中的文件 - 没有多余的空格。
  • 不过,该错误消息中不应有空格。请参阅编辑以获取打印它尝试查找的文件名的方法。
猜你喜欢
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 2021-11-08
相关资源
最近更新 更多