2016-09-26 3 views
1

У меня есть файл foo.Rnw, который использует пакет extrafont для создания фигур с текстовыми элементами, использующими нестандартные семейства шрифтов. После того, как knitr вызывает pdflatex в моем документе, я хочу запустить extrafont::embed_fonts в результирующем файле foo.pdf.Knitr hook to postprocess pdf output?

Я могу сделать это вручную, но есть ли способ сделать это изнутри? (Например, некоторые опции knitr пакета можно установить автоматический вызов extrafont::embed_fonts после того, как вяжет мой файл и запускает его через pdflatex)

+0

Как вы вязать свой документ? С помощью кнопки «Скомпилировать PDF» в RStudio? –

+0

Да. Вот как я это делаю. – jgilligan

ответ

2

Как объяснены в this answer, можно изменить поведение кнопки «Compile PDF» в RStudio установив опцию YAML knit. Это позволяет запускать произвольный код при нажатии кнопки «Вязание». Обратите внимание, что код должен быть отформатирован как однострочный, и вам нужно использовать одинарные кавычки для символьных данных (двойные кавычки не будут работать).

Я не знаю пакет extrafont, так что вот пример, который посещает сгенерированный PDF-файл. Вызов extrafont::embed_fonts должен работать аналогично:

--- 
knit: (function(inputFile, encoding) { rmarkdown::render(input = inputFile, encoding = encoding); knitr::plot_crop(paste0(basename(tools::file_path_sans_ext(inputFile)), '.pdf')) }) 
output: pdf_document 
--- 

```{r} 
print("Hello world!") 
``` 

Это на самом деле довольно просто; самая сложная часть составляет имя выходного файла: (paste0(basename(tools::file_path_sans_ext(inputFile)), '.pdf') (см. here).

+0

Приятно для .Rmd. Есть ли что-то сопоставимое для .Rnw, у которого нет заголовков YAML? – jgilligan

+0

@jgilligan О, извините, я пропустил тег 'rnw' на ваш вопрос. На данный момент я не знаю, как применить это к RNW, но я буду держать его затылок. –