当错误消息被修改为以红色打印时,将错误消息折叠成一个块
Collapse error message into a single block when the error message is modified to print in red
当错误消息本身被修改为以红色打印时,如何让 RMarkdown 中打印的错误消息折叠成一个块?
在此示例中,collapse = T
按预期工作。
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, collapse = TRUE)
```
```{r error=T}
x <- c(1,2,3,4,5)
x * 10
X * 10
```
在此示例中,我将错误消息修改为红色格式(基于此)。但是它并没有和其他的一起崩溃:
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, collapse = TRUE)
knitr::knit_hooks$set(error = function(x, options) {
paste0("<pre style=\"color: red;\"><code>", x, "</code></pre>")
})
```
```{r error=T}
x <- c(1,2,3,4,5)
x * 10
X * 10
```
我试图在特定代码块中再次指定 collapse = T
,但这也不起作用:
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, collapse = TRUE)
knitr::knit_hooks$set(error = function(x, options) {
paste0("<pre style=\"color: red;\"><code>", x, "</code></pre>")
})
```
```{r error=T, collapse = T}
x <- c(1,2,3,4,5)
x * 10
X * 10
```
编织到HTML时,突出显示是在最后一步生成站点时完成的。块的折叠在此之前完成。
使问题复杂化的是,错误就像字符串一样被突出显示,无法与实际的字符串输出区分开来。
通过更改钩子(如 ```{.myClass} ...source code... ```
)添加 classes 对我们没有帮助,因为这会破坏块折叠机制,即使我解决了这个问题(可以通过简单地更改来完成块挂钩内的底层正则表达式)当网站呈现时,class 不再存在。
所以最后我只想到了以下。
---
title: "test"
output: html_document
---
<script>
$(document).ready(function() {
window.setTimeout(function() {
$(".hljs-comment:contains('####')").css("color", "red");
var tmp = $(".hljs-comment:contains('####')").text();
$(".hljs-comment:contains('####')").text(tmp.replace("####", "##"));
}, 15);
});
</script>
# Header 1
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, collapse = T)
default_hook <- knitr::knit_hooks$get("error")
knitr::knit_hooks$set(error = function(x, options) {
x <- paste0("##", x)
default_hook(x, options)
})
```
```{r error=T}
x <- c(1,2,3,4,5)
x * 10
X * 10
```
这里我们更改了错误挂钩,在输出前添加了两个额外的哈希值。然后在 Javascript 片段中查找这些行,将字体颜色更改为红色并再次删除散列。这是通过 15 毫秒的延迟完成的。为什么?如果我们立即执行代码,携带 highligh.js 生成的 classes 的元素还不存在。所以我们得慢一点。
与当前development version of knitr (remotes::install_github('yihui/knitr')
), you can specify the CSS class for error messages。这是一个例子:
```{r setup, include=FALSE}
knitr::opts_chunk$set(collapse = TRUE)
```
```{css, echo=FALSE}
.red {
color: red;
padding-top: 0;
margin-top: -15px;
border-top-color: #f5f5f5;
}
```
```{r error=T, class.error='red'}
x <- c(1,2,3,4,5)
x * 10
X * 10
```
输出:
当错误消息本身被修改为以红色打印时,如何让 RMarkdown 中打印的错误消息折叠成一个块?
在此示例中,collapse = T
按预期工作。
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, collapse = TRUE)
```
```{r error=T}
x <- c(1,2,3,4,5)
x * 10
X * 10
```
在此示例中,我将错误消息修改为红色格式(基于此
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, collapse = TRUE)
knitr::knit_hooks$set(error = function(x, options) {
paste0("<pre style=\"color: red;\"><code>", x, "</code></pre>")
})
```
```{r error=T}
x <- c(1,2,3,4,5)
x * 10
X * 10
```
我试图在特定代码块中再次指定 collapse = T
,但这也不起作用:
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, collapse = TRUE)
knitr::knit_hooks$set(error = function(x, options) {
paste0("<pre style=\"color: red;\"><code>", x, "</code></pre>")
})
```
```{r error=T, collapse = T}
x <- c(1,2,3,4,5)
x * 10
X * 10
```
编织到HTML时,突出显示是在最后一步生成站点时完成的。块的折叠在此之前完成。
使问题复杂化的是,错误就像字符串一样被突出显示,无法与实际的字符串输出区分开来。
通过更改钩子(如 ```{.myClass} ...source code... ```
)添加 classes 对我们没有帮助,因为这会破坏块折叠机制,即使我解决了这个问题(可以通过简单地更改来完成块挂钩内的底层正则表达式)当网站呈现时,class 不再存在。
所以最后我只想到了以下。
---
title: "test"
output: html_document
---
<script>
$(document).ready(function() {
window.setTimeout(function() {
$(".hljs-comment:contains('####')").css("color", "red");
var tmp = $(".hljs-comment:contains('####')").text();
$(".hljs-comment:contains('####')").text(tmp.replace("####", "##"));
}, 15);
});
</script>
# Header 1
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, collapse = T)
default_hook <- knitr::knit_hooks$get("error")
knitr::knit_hooks$set(error = function(x, options) {
x <- paste0("##", x)
default_hook(x, options)
})
```
```{r error=T}
x <- c(1,2,3,4,5)
x * 10
X * 10
```
这里我们更改了错误挂钩,在输出前添加了两个额外的哈希值。然后在 Javascript 片段中查找这些行,将字体颜色更改为红色并再次删除散列。这是通过 15 毫秒的延迟完成的。为什么?如果我们立即执行代码,携带 highligh.js 生成的 classes 的元素还不存在。所以我们得慢一点。
与当前development version of knitr (remotes::install_github('yihui/knitr')
), you can specify the CSS class for error messages。这是一个例子:
```{r setup, include=FALSE}
knitr::opts_chunk$set(collapse = TRUE)
```
```{css, echo=FALSE}
.red {
color: red;
padding-top: 0;
margin-top: -15px;
border-top-color: #f5f5f5;
}
```
```{r error=T, class.error='red'}
x <- c(1,2,3,4,5)
x * 10
X * 10
```
输出: