papaja包切换语言特定固定名称遇Lua滤镜报错求助
解决papaja切换德语术语时的报错问题
一、先排查版本兼容问题
报错源于rmdfiltr包的replace_ampersands.lua脚本,大概率是包版本与你的pandoc/R版本不匹配:
- 先更新papaja及依赖包:
install.packages("papaja", dependencies = TRUE) - 检查pandoc版本:打开RStudio「工具→全局选项→Markdown」查看版本,papaja建议使用2.11及以上版本,版本过低的话可通过更新RStudio同步内置pandoc。
二、手动替换德语术语(避开YAML lang设置)
如果不想折腾版本,直接跳过lang触发逻辑,在文档开头的setup代码块里手动覆盖术语:
```{r setup, include=FALSE} library(papaja) # 手动配置德语术语 papaja.terms <- list( abstract = "Zusammenfassung", keywords = "Schlüsselwörter", figures = "Abbildungen", tables = "Tabellen", figure = "Abbildung", table = "Tabelle", corr_author = "Korrespondierender Autor", word_count = "Wortanzahl" # 按需补充其他需要替换的术语 )
这样直接替换术语,无需设置YAML的`lang`,从根源避免触发报错的filter。 ## 三、修复Lua脚本(坚持用YAML lang设置时) 如果一定要通过`lang: german`触发本地化,可修改报错的Lua脚本: 1. 找到脚本路径:`/Library/Frameworks/R.framework/Versions/4.2arm64/Resources/library/rmdfiltr/replace_ampersands.lua` 2. 打开脚本后,找到第13行附近的代码,添加空值判断: ```lua function Inlines (inlines) for i, inline in ipairs(inlines) do if inline.t == "Str" and inline.text == "&" then -- 新增判断避免空值索引 if inline.c then inline.c = "\\&" end end end return inlines end
- 保存后重新knit文档即可。
内容的提问来源于stack exchange,提问作者Skrobbler
相关产品推荐
相关产品推荐

