使用 Lua 过滤器在 RMarkdown 中为带引用的字体文本添加颜色
2021-11-23 22:44:53
收藏:0
阅读:225
评论:1
我在思考是否可以在 r-markdown
中使用/重新调整 Lua 过滤器来在使用 r-markdown
语法的引用时获取字体颜色。例如,当我尝试复制来自 R Markdown Cookbook 的代码并在 [...] 块中添加引文时,我会得到以下结果:
可以使用以下 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
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
这可能是由于使用的 Pandoc 版本问题,我相信最新版本已经修复了这个问题。
您应该安装更新的 Pandoc 版本并使用https://bookdown.org/yihui/rmarkdown-cookbook/install-pandoc.html
或者使用捆绑有最新版 Pandoc 的 RStudio IDE 的每日版本。