无法创建书本自定义模板的格式功能

时间:2019-03-03 10:44:47

标签: r rstudio r-markdown bookdown

我正在尝试为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的文件来创建初始草稿。我认为在我的自定义格式功能中,我将需要复制将所有资源移动到将要创建书籍的新目录中的逻辑。

问题?我可以使用某个功能来移动所有资源吗?还是需要手动执行此操作?

0 个答案:

没有答案