【问题标题】:Make Sweave or knitr put graphics suffix in `\includegraphics{}`使 Sweave 或 knitr 将图形后缀放在 `\includegraphics{}` 中
【发布时间】:2012-08-11 14:04:23
【问题描述】:

我只是遇到了一个(奇怪的)问题,即在向一些 Elsevier 期刊提交 (pdf)LaTeX 手稿时,需要完整的数字文件名才能通过他们的 pdf 构建和检查系统找到,即:

\includegraphics{picture.pdf}

有没有简单方便的方法告诉 Sweave 或 knitr 这样做?

编辑:

  • 我熟悉 sweave 的 include=FALSE 选项
  • 我也觉得很能打补丁utils:::RweaveLatexRuncode

但是,目前我希望有更方便和优雅的东西。

这也是关于分发 .Rnw 文件作为补充材料或插图。从教学的角度来看,我不喜欢这些让新用户阅读源代码变得更加复杂的调整。

(这也是我非常感谢最近在 Sweave 中引入的 print=TRUE 的原因)

【问题讨论】:

  • 你的意思是print=TRUE还是split=TRUE
  • @Yihui:我的意思是print=TRUE,因为 Vignette 中的网格 (lattice,ggplot2) 图形命令看起来就像你输入的一样。只是离开了陷阱“为什么它不能在for loop"... 但人们并不奇怪为什么小插图有print (xyplot (...))
  • 我明白了。您可能已经知道knitr 不需要print(xyplot(...))
  • 我愿意 :) 但也许其他查找帖子的人没有...
  • 我不知道!我通过搜索从 Rstudio 运行的 knitr 没有显示我在 for 循环中调用的 xyplots 的原因来到这里,哈哈。

标签: r latex sweave knitr


【解决方案1】:

你可以稍微修改knitr中的plot钩子来添加文件扩展名:

<<>>=
knit_hooks$set(plot = function(x, options) {
  x = paste(x, collapse = '.') # x is file.ext now instead of c(file, ext)
  paste0('\\end{kframe}', hook_plot_tex(x, options), '\\begin{kframe}')
})
@

有关完整示例,请参阅033-file-extension.Rnw。要了解幕后发生的事情,请参阅 knitr 中的 source code of the default LaTeX hooks

【讨论】:

  • 这个对我来说将是一个重要的钩子......直到现在我一直使用简单的Sweave 来分享我可能与他人分享的一切(knitting 那些我不知道的东西分享.Rnw)但我想我迟早会完全切换到knitr :-)。非常感谢一辉的包裹!
【解决方案2】:

蛮力解决方案是在 R sn-p 中自己显式创建文件。将图形等选项设置为 false,但对代码进行评估以便创建文件,然后让乳胶使用您显示的 \includegraphics{} 调用它们。

我为简单的缓存使用了类似的方案:如果目标文件存在,则跳过代码创建。

【讨论】:

  • 感谢 Dirk,我详细阐述了我想找到“更好”解决方案的原因。 &lt;&lt;include=FALSE&gt;&gt;= 是我所做的...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 2013-10-28
  • 1970-01-01
  • 2012-02-17
  • 2012-01-16
相关资源
最近更新 更多