Не удается создать функцию форматирования пользовательского шаблона для закладки - PullRequest
0 голосов
/ 03 марта 2019

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

Вопрос Есть ли функция, которую я могу использовать для перемещения всех ресурсов илинужно сделать это вручную?

...