我正在尝试为custom template中的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
将在特定点调用format函数。那么,如何部署我的文件?
我认为以我的自定义格式,我需要照顾部署。我已经看到rmarkdown::draft
是我需要调用的。但这需要我不知道如何获取的文件名:(
在rmarkdown::render
中,我可以看到:
output_format <- create_output_format(output_format$name,
output_format$options)
input
未通过,我没有自定义格式的信息,因此无法调用rmarkdown::draft
来部署文件。
似乎我误解了draft
函数的用途。我以为它是用来复制资源的,实际上它会创建一个草稿,这意味着它将使用名为skeleton
的文件来创建初始草稿。我认为在我的自定义格式功能中,我将需要复制将所有资源移动到将要创建书籍的新目录中的逻辑。
问题?我可以使用某个功能来移动所有资源吗?还是需要手动执行此操作?