RMarkdown - Изменить цвет встроенного кода * без изменения рабочего процесса * - PullRequest
1 голос
/ 29 мая 2019

Я преподаю курс вводной статистики, используя R Markdown в RStudio (Server).У нас есть студенты, связанные с html_notebooks, и они часто используют встроенный код, чтобы сообщать о различных элементах своего статистического анализа.Было бы очень полезно для целей оценки, если бы у нас был результат вывода встроенного кода в другом цвете - таким образом, мы могли бы легко увидеть, действительно ли они использовали встроенный код или скопировали число из своего вывода внеобработанный текст.

Есть пара идей для решений, опубликованных здесь , но в моем случае это не будет суперработой.Это начальные студенты, которые, как правило, с самого начала боятся RStudio, поэтому их попросят сделать что-нибудь сложное с text_spec или sprintf, что может вызвать легкие беспорядки.Мне действительно нужно что-то, что не изменит рабочего процесса студентов вообще.

Интересно, есть ли способ настроить что-либо на бэкенде в RStudio Server (может быть, связавшись с knitr?), Или с помощью какого-либо волшебства <style> впреамбула, чтобы встроенный код печатал результаты другого цвета.

Спасибо!

1 Ответ

1 голос
/ 29 мая 2019

Чтобы добиться этого, не слишком меняя рабочий процесс, можно создать собственный формат (например, html_notebook2), который получен из оригинала, но модифицирует встроенный хук knitr.

Для начала вы можете проверить этот документ .

Основные шаги включают

  1. Создать новый пакет R
  2. В рамках этого проекта запустить usethis::use_rmarkdown_template(). Это создаст структуру папок для вашего нового формата.
  3. Редактировать skeleton.rmd и template.yaml
  4. Определите ваш формат в файле R с тем же именем html_notebook2.R (вид соглашения).

Содержимое файла html_notebook2.R может быть

#'@import knitr
set_hooks <- function() {
  default_hooks  <- knit_hooks$get()
  list(
    inline = function(x) {
      paste0("<span style=\"color: #FF0000;\">", x,"</span>")
  })
}

#' @importFrom rmarkdown output_format knitr_options pandoc_options html_notebook
#' @export
html_notebook2 = function() {
  output_format(
    knitr = knitr_options(knit_hooks = set_hooks()),
    pandoc = pandoc_options(to = "html"),
    clean_supporting = FALSE,
    base_format = html_notebook()
  )
}

В первой части мы определяем новый встроенный хук, который только меняет цвет шрифта. Вторая часть - определение нового формата.

После сборки и установки пакета вы можете создать новый документ rmarkdown и использовать output: packagename::html_notebook2 в качестве выходного формата. Весь вывод встроенного кода будет окрашен красным, используя мой код. Вот пример:

---
title: "Inline"
output: cformat::html_notebook2
---

## R Markdown

`r pi`

enter image description here

Я создал такой пакет, и вы можете найти его на GitHub . Не стесняйтесь копировать и переименовывать его (cformat - довольно слабое рабочее название;)).

Заметьте, однако, что ваши ученики могут изменить цвет вручную, используя HTML / CSS в любом случае. Обходным путем может быть генерация ключей с использованием определенного правила (очевидно, неизвестного учащимся). Для каждого встроенного блока генерируется и внедряется ключ с использованием

paste0("<span code=", key," style=\"color: #FF0000;\">", x,"</span>")

Если введен правильный ключ, выходные данные были сгенерированы с использованием R, а не просто скопированы.

...