Я пытаюсь создать пользовательский шаблон для книги PDF в bookdown , этот пользовательский шаблон необходим, потому что:
- Мне нужно использоватьпользовательский шаблон из латекса, состоящий из нескольких файлов (
.cls
, .sty
и т. д.).
Пакет
Я создал новый пакет:
mytemplate/
|-- DESCRIPTION
|-- inst
| |-- rmarkdown
| | |-- templates
| | | |-- book_tex
| | | | |-- resources
| | | | | |-- template.tex
| | | | |-- skeleton
| | | | | |-- skeleton.Rmd
| | | | | |-- svmono.cls
| | | | | |-- biblio.bib
| | | | |-- template.yaml
|-- man
| |-- book_tex.Rd
|-- R
| |-- book_tex.R
Как видите, моему шаблону нужно развернуть несколько файлов, это не просто один .tex
файл.Поэтому мне нужно убедиться, что все эти файлы скопированы в выходной каталог перед обработкой.Я создал пользовательский формат:
#' Personal book.
#'
#' This format was adapted from the Springer manuscript package for Springer
#' monographs.
#'
#' @inheritParams bookdown::pdf_book
#' @param ... Arguments to \code{bookdown::pdf_book}
#' @return R Markdown output format to pass to \code{\link[bookdown::render_book]{render_book}}
#'
#' @export
book_tex <- function(..., keep_tex = TRUE, citation_package = 'none') {
# locations of resource files in the package
pkg_resource = function(...) {
system.file(..., package = "librarstemplates")
}
tmpl = pkg_resource("rmarkdown", "templates", "book_tex", "resources", "template.tex")
if (tmpl == "") {
stop("Couldn't find pkg resource template")
}
bookdown::pdf_book(..., base_format = rmarkdown::pdf_document, template = tmpl, keep_tex = TRUE)
}
Выполняется
Я создал книгу примеров топоров example.Rmd
, используя этот шаблон:
---
title: Title here
subtitle: Do you have a subtitle? If so, write it here
output: mytemplate::book_tex
---
# Introduction
Your text comes here.
Я установил пакет черезdevtools::install()
и затем в другом сеансе R (в папке, содержащей example.Rmd
) я запускаю:
bookdown::render_book("example.Rmd")
Проблема
Это не копирование всех файлов, потому что, когдакомпилируя файл tex после замены заполнителей в шаблоне, компилятор tex жалуется, что файл .cls
не может быть найден.
Проблема в том, что я не совсем понял, как написать собственный формат.Какой тип возврата он ожидает?Я вижу, что rmarkdown::render
вызовет функцию форматирования в определенный момент.Так какова процедура развертывания моих файлов?
Устранение неполадок
Я думаю, что в моем собственном формате мне нужно позаботиться о развертывании.Я видел, что rmarkdown::draft
- это то, что мне нужно для вызова.Но для этого требуется имя файла, которое я не знаю, как получить: (
В rmarkdown::render
, я вижу:
output_format <- create_output_format(output_format$name,
output_format$options)
input
не передается, у меня нет информации, в моем пользовательском формате, поэтому я не могу позвонить rmarkdown::draft
для развертывания файлов.
Edit
Кажется, я неправильно понялназначение функции draft
. Я думал, что она использовалась для копирования ресурсов, фактически она создаст черновик, то есть для создания исходного черновика будет использоваться файл с именем skeleton
. Я думаю, что в моей пользовательской функции форматаМне нужно будет продублировать логику для перемещения всех ресурсов в новом каталоге, где будет создана книга.
Вопрос Есть ли функция, которую я могу использовать для перемещения всех ресурсов илинужно сделать это вручную?