使用 Lua 过滤器在 RMarkdown 中为带引用的字体文本添加颜色

我在思考是否可以在 r-markdown 中使用/重新调整 Lua 过滤器来在使用 r-markdown 语法的引用时获取字体颜色。例如,当我尝试复制来自 R Markdown Cookbook 的代码并在 [...] 块中添加引文时,我会得到以下结果:

enter image description here

可以使用以下 R 代码来复制相同的 PDF 文档:

# packages
library(rmarkdown)

# 创建一个引文文件
my_bib <- file.path(tempdir(), "my-bib.bib")
cit_R <- "
@Manual{R,
  title = {R: A Language and Environment for Statistical Computing},
  author = {{R Core Team}},
  organization = {R Foundation for Statistical Computing},
  address = {Vienna, Austria},
  year = {2021},
  url = {https://www.R-project.org/},
}
"
writeLines(cit_R, my_bib)

# 使用引文创建一个 Rmd 文件
my_Rmd <- file.path(tempdir(), "my-Rmd.Rmd")
text_Rmd <- '
---
title: "使用 Lua 过滤器为文本添加颜色"
output:
  pdf_document:
    pandoc_args: ["--lua-filter=color-text.lua"]
bibliography: my-bib.bib
---

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

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

玫瑰是 [红色和 **加粗的**]{color="red"}

引用:@R 中的 ABC

颜色 + 引用:[ABC in @R]{color="red"}

# 引用

<div id="refs"></div>
'
writeLines(text_Rmd, my_Rmd)

# render it
render(
  input = my_Rmd,
  output_file = file.path(tempdir(), "test1.pdf")
)
browseURL(file.path(tempdir(), "test1.pdf"))

原文链接 https://stackoverflow.com/questions/70088747

点赞
stackoverflow用户3436535
stackoverflow用户3436535

这可能是由于使用的 Pandoc 版本问题,我相信最新版本已经修复了这个问题。

您应该安装更新的 Pandoc 版本并使用https://bookdown.org/yihui/rmarkdown-cookbook/install-pandoc.html

或者使用捆绑有最新版 Pandoc 的 RStudio IDE 的每日版本。

2021-12-16 11:16:13