相当于在四开版中为 Revealjs 幻灯片输出的“代码行号”

use*_*808 5 pandoc r-markdown reveal.js quarto

我正在使用 Quarto 使用 RStudio 制作一些 Revealjs 幻灯片,并一直在使用该code-line-numbers选项来选择性地突出显示代码行。例如:

```{r, echo = TRUE}
#| code-line-numbers: "1|3"
x <- 1
y <- 2
x + y
x * y
```
Run Code Online (Sandbox Code Playgroud)

允许我突出显示演示文稿中的第一行和第三行代码。

我还希望能够突出显示输出中的某些行。例如,如果我只想突出显示x+y但不突出显示结果x*y,有没有办法这样做?我想知道是否有一个选项output-line-number或类似的选项可以达到预期的效果,但找不到这样的东西。

任何指示表示赞赏!

sha*_*fee 5

一种可能的方法是使用pandoc Lua 过滤器

在这里,我创建了一个块选项output-line-numbers来指定要突出显示哪些输出行(与code-line-numbers块选项一样工作),但请注意,您必须使用class-output: highlight该选项才能在块输出上获得该行的特定突出显示。

---
title: "Output Line highlight"
format: revealjs
filters:
  - output-line-highlight.lua
---

```{r, echo = TRUE}
#| code-line-numbers: "1"
#| class-output: highlight
#| output-line-numbers: "2"

for (i in 1:3) {
  print("This is some random line")
}
```
Run Code Online (Sandbox Code Playgroud)

输出行突出显示.lua

function highlight(line_number)
  local highlighter = {
    CodeBlock = function(block)
      if block.classes:includes('highlight') then
        block.classes:insert('has-line-highlights')
        block.attributes["code-line-numbers"] = line_number
        return block
      end
  end
  }
  return highlighter
end


function Div(el)
  if FORMAT == 'revealjs' then
    if el.classes:includes('cell') then
      line_number = tostring(el.attributes["output-line-numbers"])
      return el:walk(highlight(line_number))
    end
  end
end

Run Code Online (Sandbox Code Playgroud)

Revealjs 的输出行突出显示