You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
  1. 保存后重新knit文档即可。

内容的提问来源于stack exchange,提问作者Skrobbler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:43:12