Я создаю пакет R, использующий Bookdown для создания PDF-книг из .Rmd
файлов. Я хочу использовать пользовательский шаблон из латекса. Итак, в соответствии с разделом Bookdown do c для шаблонов и Pando c do c для шаблонов , я создал в своем проекте следующую структуру:
myproj/
├── inst/
│ ├── examples/
│ | ├── firstbook/
│ | | ├── index.Rmd
│ | | ├── ...
│ ├── rmarkdown/
│ | ├── templates/
│ | | ├── book_tex/
│ | | | ├── resources/
│ | | | | ├── template.tex
│ | | | ├── skeleton/
│ | | | | ├── monograph.cls
│ | | | | ├── bibliography.bib
│ | | | | ├── skeleton.Rmd
│ | | | ├── template.yaml
├── R/
│ ├── format.R
│ └── render.R
└── DESCRIPTION
Артефакты шаблона
Новый шаблон называется book_tex
, я создал папку с таким именем в inst/rmarkdown/templates
.
шаблон. tex is:
% !TeX program = pdfLaTeX
\documentclass{monograph}
\usepackage{hyperref}
\usepackage{newtxmath} % Times Roman as basic font
\makeindex
\begin{document}
\author{ $for(authors)$ $authors.name$ \and $endfor$ }
\title{$title$}
$if(subtitle)$
\subtitle{$subtitle$}
$endif$
\maketitle
\tableofcontents
$body$
\printindex
\end{document}
template.yaml is:
name: PDF Book
description: >
Template for creating a TEX book
create_dir: true
skeleton.Rmd is:
---
title: Title here
subtitle: Do you have a subtitle? If so, write it here
thanks: |
Grants or other notes about the article that should go on the front
page should be placed here. General acknowledgments should be placed at the
end of the article.
authors:
- name: Author 1
address: Department of YYY, University of XXX
email: abc@def
- name: Author 2
address: Department of ZZZ, University of WWW
email: djf@wef
keywords:
- key
- dictionary
- word
abstract: |
The text of your abstract. 150 -- 250 words.
output: myprojpkg::book_tex
---
# Introduction {#intro}
Your text comes here. Separate text sections with
# Section title {#sec:1}
Some text.
## Subsection title {#sec:2}
Some other text.
Building
Я создал собственный формат, который в основном устанавливает мой пользовательский шаблон в файл format.R
:
book_tex_format <- function(...) {
rmarkdown::pdf_document(..., template = "book_tex")
}
А затем, в render.R
, я вызываю Bookdown из каталога dir моего пакета (рабочий каталог myproj/inst/examples/firstbook
) в RStudio:
bookdown::render_book(".", book_tex_format())
, который выдает ошибку:
"C: / PROGRA ~ 1 / Pandoc / pando c "+ RTS -K512m -RTS _index_merged.utf8.md - в латекс - из уценки + autolink_bare_uris + tex_math_single_backsla sh --output _index_merged.tex - самодостаточный - шаблон book_tex - высокая легкий стиль tan go --pdf-engine pdflatex - lua -filter "C: / Users / me / Documents / R / win-library / 3.5 / rmarkdown / rmd / lua / pagebreak. lua "- lua -filter" C: / Users / me / Documents / R / win-library / 3.5 / rmarkdown / rmd / lua / latex-div. lua "Не удалось найти шаблоны файлов данных \ book_tex.latex
Затем я попытался:
bookdown::render_book(".", rmarkdown::pdf_document(template="../../rmarkdown/templates/book_tex/resources/template.tex"))
, который, казалось, работал, но затем дал мне ошибку:
"C: / PROGRA ~ 1 / Pandoc / pando c "+ RTS -K512m -RTS _index_merged.utf8.md - в латекс - от уценки + autolink_bare_uris + tex_math_single_backsla sh --output _index_merged.tex --self -aged - -template ".... \ rmarkdown \ templates \ book_tex \ resources \ template.tex" --highlight-style tan go --pdf-engine pdflatex - lua -filter "C: / Users / me / Documents / R / win-library / 3.5 / rmarkdown / rmd / lua / pagebreak. lua "- lua -filter" C: / Users / me / Documents / R / win-library / 3.5 /rmarkdown/rmd/lua/latex-div.lua "! Ошибка LaTeX: файл `monograph.cls 'не найден.
Я сымитировал структуру, посмотрев, как работают RMarkdown и Bookdown. Но кажется, что это недостаточно хорошо. Я очень разочарован, эта часть API плохо документирована, и я не понимаю, как я должен заставить его работать.
Как мне вызвать render_book
, чтобы передать шаблон?
bookdown::render_book(".", !!HERE!!)
Еще одна попытка
Я натолкнулся на функцию rmarkdown::draft
, которая кажется рекомендуемым способом использования шаблона. Поэтому я вызвал (рабочий каталог: myproj/inst/examples
):
rmarkdown::draft("mybook2", "book_tex", "myprojpkg", TRUE)
Обратите внимание, что мой пакет называется myprojpkg
(в файле DESCRIPTION
). Эта команда работает нормально и фактически выдает эту папку:
myproj/
├── inst/
│ ├── examples/
│ | ├── firstbook/
│ | ├── mybook2/
│ | | | ├── monograph.cls
│ | | | ├── bibliography.bib
│ | | | ├── mybook.Rmd
│ ├── rmarkdown/
│ | ├── templates/
│ | | ├── book_tex/
│ | | | ├── ...
├── R/
│ ├── ...
└── DESCRIPTION
Где mybook.Rmd
равно skeleton.Rmd
переименовано. Таким образом, команда правильно берет шаблон, который я определил в своем пакете, и создает структуру каталогов, готовую к отправке в bookdown::render_book
, однако проблема заключается в том, что при ее вызове я не получаю никакой ошибки, но не применяю правильный шаблон (template.tex
внутри book_tex
). Здесь команда опирается на содержимое skeleton.Rmd
, где она указывает шаблон для использования в заголовке yaml, но этот шаблон не найден и не применяется: (
(дружественный) Отзыв о Bookdown документация
Я должен сказать, что эта часть пользовательских шаблонов нуждается в лучшем документировании, потому что не сразу разработчик должен структурировать проект так, чтобы все работало с пользовательскими шаблонами.
EDIT Я действительно нашел хорошую документацию по этим темам в функции rmarkdown :: draft . Я бы хотел сделать ее более заметной на страницах справки в разделах о шаблонах. кусок (довольно важный кусок) do c в основном скрыт.