Можно ли параметрически задать пути CSS / JS в Xaringan YAML? - PullRequest
0 голосов
/ 04 января 2019

Это похоже на Xaringan выпуск № 29 . Я настраиваю шаблон Xaringan для использования на работе и хочу, чтобы все файлы CSS и Javascript находились в одном месте. Я не хочу, чтобы кто-либо копировал одни и те же файлы в каждый каталог презентаций.

Однако , я также не хочу ссылаться на общий корневой каталог. Я мог бы (я думаю) указать на наш внутренний сервер Bitbucket, но я бы предпочел, чтобы аналитики и ученые, работающие с данными, могли получать файлы из своего локального репо (для скорости, а также в случае, если они '). не находятся в сети или вносят свои изменения).

Я тоже не особо зациклен на использовании Infinite Moon Reader. (Это было частью проблемы № 29). Мне достаточно легко вспомнить, чтобы я нажимал Control+Shift+K каждый раз, когда нажимаю Control+S.

Я хотел просто включить параметр xaringan_dir и использовать его в своих списках ресурсов CSS / JS.

На данный момент моей файловой структурой является мой каталог xaringan, в котором у меня есть каталог css для CSS, каталог js для Javascript и company-xaringan-template.Rmd. Это YAML работает:

---
title: 'This is a Title'
subtitle: 'This is a subtitle'
author: 'Benjamin Wolfe'
date: 'January 1, 2019 (revised `r Sys.Date()`)'
output:
  xaringan::moon_reader:
    css: [default, ./css/company-theme.css, ./css/company-theme-fonts.css, ./css/custom-classes.css]
    lib_dir: libs
    nature:
      beforeInit: './js/macros.js'
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
      slideNumberFormat: '%current%'
      ratio: '16:9'
---

Чтобы параметризовать мой YAML, я попробовал это:

---
title: 'This is a Title'
subtitle: 'This is a subtitle'
author: 'Benjamin Wolfe'
date: 'January 1, 2019 (revised `r Sys.Date()`)'
params:
  xaringan_dir: '.'
output:
  xaringan::moon_reader:
    css: [`r paste(c('default', file.path(params$xaringan_dir, 'css', c('company-theme.css', 'company-theme-fonts.css', 'custom-classes.css'))), collapse = ', ')`]
    lib_dir: libs
    nature:
      beforeInit: '`r file.path(params$xaringan_dir, "js", "macros.js")`'
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
      slideNumberFormat: '%current%'
      ratio: '16:9'
---

Я знаю, что могу использовать параметры в моем YAML. Это работает, например:

---
title: 'This is a Title'
author: 'Benjamin Wolfe'
date: 'January 1, 2019 (revised `r Sys.Date()`)'
params:
  xaringan_dir: '.'
  foo_bar: 'This is a subtitle'
subtitle: '`r params$foo_bar`'
output: ...
---

А мои r фрагменты работают сами по себе. Эти строки работают как положено:

params <- list()
params$xaringan_dir <- '.'

paste(c('default', file.path(params$xaringan_dir, 'css', c('esurance.css', 'esurance-fonts.css', 'custom-classes.css'))), collapse = ', ')
file.path(params$xaringan_dir, "js", "macros.js")

Но когда я запускаю свой параметризованный YAML, я получаю эту ошибку:

Error in yaml::yaml.load(..., eval.expr = TRUE) : 
  Scanner error: while scanning for the next token at line 9, column 11 found character that cannot start any token at line 9, column 11
Calls: <Anonymous> ... parse_yaml_front_matter -> yaml_load -> <Anonymous>
Execution halted

Дополнительные примечания:

  • Если я использую мою исходную, не параметризованную строку beforeInit, с новой строкой css, я получаю ту же ошибку.
  • Если я использую мою исходную, не параметризованную строку css, с новой строкой beforeInit, это приведет к вязке документа, но документ не будет отображаться в моем браузере.

Есть идеи? Можно ли это сделать? И / или я должен рассмотреть другой подход?

...