Как включить R-код в Latex в заголовок YAML для настраиваемого шаблона RMarkdown - PullRequest
1 голос
/ 15 марта 2019

Я создаю R-пакет «mytemplate», содержащий производный формат RMarkdown из rmarkdown::pdf_document (в качестве функции сценария R с отчетом в качестве вывода он вызывает файл header.tex):

report <-  function() {

  ## location of resource files in the package
  header <- system.file("resources/header.tex", package = "mytemplate")

  ## derives the style from default PDF template
  rmarkdown::pdf_document(
    latex_engine = "xelatex", fig_caption = FALSE,
    includes = rmarkdown::includes(in_header = header)
    )
}

В header.tex я использую файл изображения, обнаруженный system.file(), находящийся в папке resources / в каталоге inst / package:

\usepackage{fancyhdr}
  \thispagestyle{fancy}
  \fancyhead[LC]{
    \includegraphics{`r system.file("resources/cover.png", package = "mytemplate")`}
  }

За пределами моего пакета и с полным разделом YAML в файле .Rmd, файл pdf выглядит нормально:

---
title: ""
output:
  pdf_document:
    latex_engine: xelatex
    fig_caption: false
header-includes:
  \usepackage{fancyhdr}
  \thispagestyle{fancy}
  \fancyhead[LC]{
    \includegraphics{`r system.file("resources/cover.png", package = "mytemplate")`}
  }
---

text

Но после установки, когда я использую mytemplate::report в качестве вывода RMarkdown, мне возвращается ошибка:

! Ошибка LaTeX: Файл `` r system.file ("resources / cover.png", package = "mytemp" поздно ")` 'не найдено.

Вызывает ли header.tex в скрипте R причину ошибки, или я должен изменить код header.tex и как?

1 Ответ

2 голосов
/ 15 марта 2019

Вы используете встроенный блок R внутри текстового документа.Это не может работать.

Вместо этого используйте аргумент pandoc_args из pdf_document() для передачи переменных в pandoc.Внутри header.tex вы можете использовать переменную Пандока:

args <- pandoc_variable_arg("cover", system.file("resources/cover.png", package = "mytemplate"))

report <-  function() {

  ## location of resource files in the package
  header <- system.file("resources/header.tex", package = "mytemplate")

  ## derives the style from default PDF template
  rmarkdown::pdf_document(
    latex_engine = "xelatex", fig_caption = FALSE,
    includes = rmarkdown::includes(in_header = header),
    pandoc_args = args  # pass to pandoc
    )
}

И header.tex:

\usepackage{fancyhdr}
  \thispagestyle{fancy}
  \fancyhead[LC]{
    \includegraphics{$cover$}
  }
...