sta*_*ant 8 r knitr r-markdown
在编写 rmarkdown 时,html_document我经常会显示连续的代码块,但没有输出。当这种情况发生时,就像当
我希望代码块被“合并”。我知道ref.label = ""并且可以用它来完成,但它会使块标签变得极其复杂/沉重。
是否有一些 javascript、css、选项魔法可以帮助我实现我想要的目标?
例子:
---
title: "Test"
date: '`r Sys.Date()`'
output: html_document
---
# Title 1
Some text
```{r, echo = TRUE, eval = FALSE}
1 + 1 # eval = FALSE so no output
```
```{r, echo = TRUE, results = "hide"}
1 + 2 # results hidden so no output
```
```{r, echo = TRUE}
1 + 3
```
Some other text
```{r, echo = TRUE, eval = FALSE}
1 + 4 # eval = FALSE so no output but text follows
```
Some other text
```{r, echo = TRUE}
1 + 4
```
Run Code Online (Sandbox Code Playgroud)
输出
一种方法是使用Lua 过滤器来合并代码块:
---
title: "Test"
date: '`r Sys.Date()`'
output:
html_document:
pandoc_args:
- '--lua-filter=merge-code-blocks.lua'
---
Run Code Online (Sandbox Code Playgroud)
其中merge-code-blocks.lua包含
local code_block_sep = '\n\n'
function Blocks (blocks)
for i = #blocks, 2, -1 do -- start at end of list
-- Both blocks must be code blocks and share the same primary class
if blocks[i - 1].t == 'CodeBlock' and
blocks[i].t == 'CodeBlock' and
blocks[i - 1].classes[1] == blocks[i].classes[1] then
blocks[i - 1].text = blocks[i - 1].text ..
code_block_sep ..
blocks[i].text
blocks:remove(i)
end
end
return blocks
end
Run Code Online (Sandbox Code Playgroud)
结果文件:
code_block_sep = '\n'如果您不喜欢分隔块的空行,请设置。
这种方法的优点是它不特定于 HTML,即使对于 PDF 或 Word 输出也能继续工作。