Изменение цвета сообщений об ошибках в выводе кода 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.
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'))
```
результат-красные сообщения об ошибках, такие как