Использование аргумента заголовка YAML в knitr

Я делаю набор слайдов, используя rmarkdown и вариант LaTeX для вывода его в beamer,

У меня есть два шаблона, которые я использую в своих слайдах - один для опций LaTeX и один шаблон pandoc, который я изменил, чтобы учесть некоторые дополнительные функции моих слайдов.

Я определил опцию в заголовке YAML под названием to_print это логическое значение ИСТИНА / ЛОЖЬ, которое я передаю шаблону pandoc, который говорит ему добавить пакет и очистить слайды для печати.

Я также хочу использовать эту переменную для определения имени файлов. Основная идея в том, что я хочу иметь один .rmd файл для моих слайдов, а затем просто изменив эту опцию, чтобы показать, что она предназначена для печати студентами, или для меня, чтобы представить.

Я понял, что могу передать render функция с использованием knit параметр в заголовке YAML, но я должен указать to_print = TRUE и установите условие в ifelse() утверждение в выходной_файл соответственно.

В настоящее время у меня есть:

---
title: "Introduction to R"
subtitle: "Reading and saving data in R"
date: '`r format(Sys.Date())`'
output:
  beamer_presentation:
    fonttheme: professionalfonts
    highlight: tango
    includes:
      in_header: "../../templatefiles/beamer_header.tex"
    template: "../../templatefiles/beamer_template.tex"
    incremental: no
    keep_tex: yes
    slide_level: 3
    theme: Warsaw
    toc: yes
fontsize: 10pt
fontenc: T1
to_print: TRUE
knit: (function(inputFile, encoding) { rmarkdown::render(inputFile, encoding = encoding, 
       output_file = file.path(ifelse(TRUE,
                                      gsub("\\..*","_handout.pdf", inputFile), 
                                      gsub("\\..*", ".pdf", inputFile)))) })
---

Я хотел бы указать только один параметр, который затем используется для обозначения, если это раздаточный материал для печати:

Псевдо-код:

to_print: TRUE
knit: (function(inputFile, encoding) {rmarkdown::render(inputFile, encoding = encoding, 
       output_file = file.path(ifelse(YAML_PARAM$to_print,
                                      gsub("\\..*","_handout.pdf", inputFile), 
                                      gsub("\\..*", ".pdf", inputFile)))) })

Это возможно, или что-то эквивалентное, что позволило бы мне иметь один .rmd файл с логическим значением для переключения презентации и печати?

0 ответов

Вы можете использовать rmarkdown::yaml_front_matter() функция:

---
title: "Introduction to R"
subtitle: "Reading and saving data in R"
date: '`r format(Sys.Date())`'
output:
  beamer_presentation:
    fonttheme: professionalfonts
    highlight: tango
    includes:
      in_header: "../../templatefiles/beamer_header.tex"
    template: "../../templatefiles/beamer_template.tex"
    incremental: no
    keep_tex: yes
    slide_level: 3
    theme: Warsaw
    toc: yes
fontsize: 10pt
fontenc: T1
to_print: TRUE
knit: (function(inputFile, encoding) { rmarkdown::render(inputFile, encoding = encoding, 
       output_file = file.path(ifelse(rmarkdown::yaml_front_matter(inputFile)$to_print,
                                      gsub("\\..*","_handout.pdf", inputFile), 
                                      gsub("\\..*", ".pdf", inputFile)))) })
---
Другие вопросы по тегам