Изменение цвета сообщений об ошибках в выводе кода RMarkdown (HTML, PDF)

есть ли способ автоматически сделать цвет текста ошибок красным в R Markdown без ручного редактирования HTML позже.

---
title: ""
---

#### Example 1

```{r e1, error = TRUE}
2 + "A"
```

#### Example 2

```{r e2, error = TRUE}
2 + 2
```

В приведенном выше коде, вывод Example 1 должен быть красный. В настоящее время я редактирую сгенерированный HTML (add style="color:red;" к соответствующему тегу), но мне интересно, есть ли автоматический способ. Предположим, что до вязания неизвестно, будет ли код генерировать ошибку.

2 ответов


1. Используйте крючок knitr

предпочтительным решением является использование выходного крючка для ошибок:

```{r}
knitr::knit_hooks$set(error = function(x, options) {
  paste0("<pre style=\"color: red;\"><code>", x, "</code></pre>")
})
```

выходные крючки в целом позволяют нам контролировать вывод различных частей нашего кода R (весь кусок, исходный код, ошибки, предупреждения, ...). Подробности уточняйте https://yihui.name/knitr/hooks/#output-hooks.

enter image description here


2. Быстрое и грязное решение с использованием JS / jQuery

и это мое "быстрое и грязное" решение с использованием jQuery / Javascript. Просто добавьте его под заголовком YAML. Не может быть пуленепробиваемым, так как он проверяет сообщения об ошибках, используя строку "ошибка", которая может возникнуть и в других приложениях.

<script type="text/javascript">
$(document).ready(function() {
  var $chks = $("pre:not(.r) > code");
  $chks.each(function(key, val) {
    cntnt = $(this).html();
    if (cntnt.indexOf("Error") != -1) {
      $(this).css('color', 'red');
    }
  })
})
</script>

Я споткнулся здесь, потому что у меня был тот же вопрос, но для вывода PDF, а не HTML.

оказывается, комбинируя решение @Martin Schmelzer с некоторыми подсказками от @Yihui Xie found здесь помогает достичь того же поведения в выводе PDF.

добавить \usepackage{xcolor} к вашему заголовку YAML и следующему чанку к вашему .Файл Rmd.

```{r}
color_block = function(color) {
  function(x, options) sprintf('\color{%s}\begin{verbatim}%s\end{verbatim}',
                               color, x)
}
knitr::knit_hooks$set(error = color_block('red'))
```

результат-красные сообщения об ошибках, такие как

enter image description here