在 Rmarkdown 中着色文本失败:color-text.lua 在 RevealJS 中无效

我正在试图通过 r-markdown 制作 revealjs 幻灯片,同时我想使用 lua 过滤器来着色一些文本,使用简单的标注(类似 markdown)方式,如在 R Markdown Cookbook 中建议的 使用 Pandoc Lua 过滤器

然而,生成的幻灯片没有被着色。在下面的幻灯片中,单词 red 应该是红色的,blue 应该是蓝色的,但它们实际上并不是。

enter image description here

此外,简单的标注 [blue]{color="blue"} 反而被意外转换成 <span color="blue">blue</span>,而不是可取的 HTML 代码 <span style="color: blue;">blue</span>

有人能告诉我错了什么吗...?

---
Title: "标题"
输出:
  bookdown::html_document2:
    base_format:"function(..., number_sections) revealjs::revealjs_presentation(...)"
    主题: 月亮
    pandoc_args:
      - "--lua-filter=color-text.lua"
    过渡效果:默认
    背景过渡:缩放
    居中: true
    递增: true
    章节编号: true
    目录: true
    目录深度: 3
    图说明: TRUE
    #dev: cairo_pdf
    self_contained: false
    reveal_plugins: ["zoom", "notes", "menu"] #"search"
    reveal_options:
      slideNumber: true
      previewLinks: true
      margin: 0.1
      menu:
        numbers: true
always_allow_html: yes
link-citations: yes
---

## 第一

我们定义一个 Lua 过滤器,并将其写入文件`color-text.lua`。

```{cat,engine.opts = list(file ="color-text.lua")}
Span = function(span)
  color = span.attributes['color']
  -- 如果没有颜色属性,返回不变
  if color == nil then return span end

  -- 转换为 <span style="color: red;"></span>
  if FORMAT:match'html'then
    -- 删除颜色属性
    span.attributes['color'] = nil
    -- 使用 style 属性代替
    span.attributes['style'] = 'color: ' .. color .. ';'
    -- 返回完整的 span 元素
    return span
  elseif FORMAT:match'latex'then
    -- 删除颜色属性
    span.attributes['color'] = nil
    -- 将其封装在 latex 代码中
    table.insert(
      span.content, 1,
      pandoc.RawInline('latex', '\\textcolor{'..color..'}{')
    )
    table.insert(
      span.content,
      pandoc.RawInline('latex', '}')
    )
    -- 仅返回 span 内容
    return span.content
  else
    -- 对于其他格式,返回不变
    return span
  end
end
```

现在,我们可以使用带有 `color` 属性的括号中的文本来测试过滤器,例如:

> 玫瑰是[红色和**粗体**]{color="red"},
> 紫罗兰是[蓝色]{color="blue"}。
点赞
用户4861321
用户4861321

是的,我能做到,你也可以:你的问题已经有答案了。 你是

正在尝试制作revealjs

因此,当您运行代码时,您的lua过滤器并没有产生任何有趣的东西,仅仅在倒数第二行执行return span而不是所需的更改。

因此,简单的更改就可以解决问题了。

将以下内容替换:

if FORMAT:match 'html' then

替换为

if FORMAT:match 'html' or FORMAT:match 'revealjs' then

这样做,lua过滤器就可以完成任务,我可以得到所需的输出,具有正确的格式。

2020-08-18 21:36:28