Сделайте Sweave или knitr помещен графический суффикс в `\ includegraphics {}`

Я просто столкнулся с (любопытной) проблемой: при отправке (pdf) LaTeX-рукописи в какой-то журнал Elsevier имена файлов должны быть полными, чтобы найти их по построению и проверке pdf, т.е.

\includegraphics{picture.pdf}

Есть ли простой и удобный способ сказать Sweave или knitr сделать это?

Edit:

  • Я знаком с опцией sweave include=FALSE
  • Я также чувствую себя вполне способным исправлять utils:::RweaveLatexRuncode

Однако на данный момент я надеюсь, что там что-то более удобное и элегантное.

Это также о раздаче файлов .Rnw в качестве дополнительного материала или виньет. С дидактической точки зрения мне не нравятся эти настройки, которые делают исходный код намного более сложным для новых пользователей, которых я надеюсь, что они его прочитали.

(Вот почему я действительно ценю недавно введенный print=TRUE в Sweave)

Ответ 1

Вы можете немного изменить привязку plot в knitr, чтобы добавить расширение файла:

<<>>=
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. Чтобы понять, что происходит за сценой, см. исходный код хостов LaTeX по умолчанию в knitr.

Ответ 2

Решение грубой силы должно явно создавать файлы самостоятельно в фрагменте R. Установите параметр для графики и т.д. На значение false, но оцените код так, чтобы файл был создан, а затем латекс вызовет их с помощью самого вызова \includegraphics{}, который вы показываете.

Я использовал аналогичные схемы для простого кэширования: если целевой файл существует, пропустите создание кода.