Сделайте 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{}
, который вы показываете.
Я использовал аналогичные схемы для простого кэширования: если целевой файл существует, пропустите создание кода.