PAYATHON 2026

如何让 r-exams 的 cloze 题在 Canvas 中始终显示 Solution?

数据小许

升级到 exams 2.4-4 或更新版本,再重新导出并导入测验,即可解决这一已知问题。该版本修复了 exams2canvas(..., solutionswitch = TRUE) 在部分答对时不显示 Solution 的情况。solutionswitch 的默认值就是 TRUE。exams 更新记录

为什么部分答对时看不到解释?

你提供的结果表明,解题说明已经进入导出文件,但 Canvas 并非在所有作答状态下都会显示它。

原来的 XML 将同一份 Solution 分别放进了 correct_fb 和 general_incorrect_fb。全部答对或全部答错时能显示,部分答对时却不能显示,由此可以判断问题与反馈字段的映射有关。将说明放进 general_fb 后恢复显示,也支持这一判断。

Canvas 显示的正确答案和题目 Solution 中编写的解题说明是两种不同的内容。正确答案可见,仍不能说明 Solution 的反馈映射正常。

更新包并重新生成 ZIP

先查看当前安装的版本:

packageVersion("exams")

如果版本低于 2.4-4,更新包:

install.packages("exams", repos = "https://cloud.r-project.org")

更新后重启 R 会话,确认实际使用的版本,再导出:

library(exams)

stopifnot(
  packageVersion("exams") >= package_version("2.4-4")
)

exams2canvas(
  "vowels.Rmd",
  n = 1,
  dir = ".",
  name = "vowels_feedback",
  solutionswitch = TRUE
)

这里显式写出 solutionswitch = TRUE,是为了让脚本的意图更清楚。在包含该修复的版本中,即使省略这个参数,也会使用默认值 TRUE,不需要额外修改本地默认配置。

如果更新后版本仍然偏旧,检查安装输出和包的加载路径:

.libPaths()
find.package("exams")
packageVersion("exams")

重新导入后如何验证?

更新包不会修改之前生成的 ZIP,也不会修改已经导入 Canvas 的题目。需要用更新后的包重新生成文件,再导入 Canvas。建议先导入一个新的测试测验,以免与旧题目混淆。

分别提交以下答案组合,检查是否出现自己编写的 Solution:

  • 全部留空。
  • 全部答对。
  • 全部答错。
  • 部分答对,其余答错。
  • 部分答对,其余留空。

这些步骤需要在目标 Canvas 环境中执行,不代表已经替你完成了平台测试。

无法升级时怎么办?

可以暂时沿用你已经验证有效的 XML 修改方式,将它纳入“导出 ZIP、修改题目 XML、重新打包”的流程。自动处理时,应按题目解析 XML,确认合并的是同一份 Solution,避免直接合并内容不同的正确反馈和错误反馈。

如果文件中存在指向旧反馈标识的 displayfeedback 引用,也需要一并检查。重新打包时应保持原有目录和资源路径,不能只保留修改后的题目 XML。

如果环境允许升级,使用包含修复的版本会更省维护工作。上述结论针对问题中的 Canvas Classic Quizzes 场景;其他测验引擎仍需单独验证。

备注:内容仅供参考。