内容提要
knitr 作者集中清理了积压十余年的 GitHub 问题,修复并合并大量议题。主要改进包括:Quarto 下 current_input() 正确返回 .qmd;purl() 支持 YAML 参数;verbatim 块忽略全局 echo=FALSE;ffmpeg 失败时报错;read_chunk() 改用语法树检测;多设备绘图与 dpi 处理更准确;代码块引用可内联使用。作者还谈及赞助现状并感谢支持者。
延伸解读
积压问题的清理价值
作者用四天时间集中处理了knitr的GitHub问题跟踪器,其中许多是提问、过时报告或早已修复但未关闭的议题。清理这些非 glamorous 的工作让跟踪器更整洁,也使真正开放的问题更容易被识别。这提醒我们,维护开源项目时,定期整理问题列表与修复代码同样重要。
开发版与正式版的发布节奏
文中提到,knitr v1.52已于2026-09-06发布到CRAN,而本次冲刺的改进将进入未来的v1.53。作者建议用户通过r-universe安装开发版进行测试,并指出下一个CRAN版本可能还要几个月,留出了充足的反馈时间。这种节奏平衡了稳定性和新功能的早期验证。
对Quarto用户的具体影响
本次修复中,多个改进直接惠及Quarto用户:current_input()现在正确返回.qmd文件而非中间.rmarkdown;verbatim块不再被全局echo=FALSE隐藏;purl()能处理YAML参数。这些变化解决了Quarto与knitr集成中的常见痛点,提升了文档渲染的准确性和可预测性。
赞助开源维护者的现实
作者公开了赞助收入:约35美元、100元人民币和一个月度5美元的GitHub赞助。他坦言这无法改变财务状况,但强调许多 visibility 更低的维护者处境更艰难。这反映了个人赞助模式的局限性,也呼吁支持那些不为人知但至关重要的开源项目。
Q&A
knitr 作者在四天冲刺中主要做了什么?
作者集中处理了 GitHub 上积压十余年的问题与 PR,修复、合并或关闭了大量议题,并发布了开发版本(未来 v1.53),同时总结了多项改进。
Quarto 下 current_input() 返回错误文件名的问题修复了吗?
已修复。现在 current_input() 会返回原始的 .qmd 文件名,而不是中间生成的 .rmarkdown 文件。
purl() 现在支持 YAML 参数了吗?
支持。purl() 会静态解析 YAML 中的 params,使得代码块选项(如 eval=params$eval)能正确求值,不会因找不到 params 而报错或遗漏代码块。
verbatim 代码块在全局 echo=FALSE 时还会显示内容吗?
会。verbatim 块现在忽略全局 echo=FALSE,始终显示其内容;但块自身设置的 echo=FALSE 仍然有效,可以单独隐藏。
ffmpeg 动画生成失败时 knitr 会如何处理?
现在会直接报错,而不是继续生成指向不存在视频文件的文档,也避免了缓存损坏结果。
read_chunk() 的检测机制有什么改进?
从简单的字符串匹配改为解析代码并检查语法树,因此字符串中的右括号不会导致解析错误,且能正确识别命名空间调用(如 knitr::read_chunk()),也不会误判名称以 read_chunk 结尾的函数。
多设备绘图时 dpi 和 pointsize 等参数还会被忽略吗?
不会。现在记录图形时会使用第一个设备及其 dev.args,因此 pointsize 等参数能正确生效。
代码块引用(<<label>>)现在可以内联使用了吗?
可以。引用不再需要独占一行,可以与其他代码(如管道操作)写在同一行,多行引用的续行也会自动缩进对齐。