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

R/exams含schoice与num的cloze题型容差边界配置异常问题咨询

混合题型cloze容差设置错位解决方案

问题根因

R/exams的\extol参数要求容差向量的长度和全部cloze子题的总数量一致,顺序和子题的先后顺序完全对应,而非仅匹配数值题的顺序。非数值类子题(如schoice单选)的容差会被系统自动忽略,仅需占位即可。

你遇到的错位问题来源于两个错误:

  1. 子题总共有3道(1道单选+2道数值题),但你初始化的tol向量最终长度仅为2位,和子题数量不匹配
  2. 容差的索引对应错误:你想给第二道数值题(总排序第3道子题)设置0.01容差,却赋值给了tol[2],该位置对应总排序第2道子题(第一道数值题),最终生成的容差序列顺序完全颠倒。

修正后代码

R逻辑部分

<<echo=FALSE, results=hide>>=
# 子题类型:1道单选 + 2道数值题,总长度3
type <- c("schoice", "num", "num")
solutions <- explanations <- rep(list(""), 3)

# 各题答案赋值
solutions[[1]] <- c(1, 0, 0)
solutions[[2]] <- 0
solutions[[3]] <- 1/8

# 单选选项处理
explanations[type=="schoice"] <- lapply(solutions[type=="schoice"], function(x) ifelse(x, "True", "False")) 
solutions[type=="schoice"] <- lapply(solutions[type=="schoice"], mchoice2string)

# 关键:tol长度和子题总数一致,按子题先后顺序赋值
# 第1位对应单选占位填0,第2位对应空房人数题容差0,第3位对应1/8计算题容差0.01
tol <- c(0, 0, 0.01)
@

试题和元数据部分

\begin{question}
What is the capital of Italy?  

\begin{answerlist} 
\item Rome 
\item Madrid 
\item Berlin 
\item How many people live in a empty house?  
\item Compute 1/8. (tolerance: \Sexpr{tol[3]}). 
\end{answerlist}
\end{question}

%% META-INFORMATION 
%% \extype{cloze} 
%% \exclozetype{\Sexpr{paste(type, collapse = "|")}} 
%% \exsolution{\Sexpr{paste(solutions, collapse = "|")}} 
%% \exname{prova_tol} 
%% \extol{\Sexpr{paste(tol, collapse = "|")}}

修正效果

生成的Moodle试题将符合预期:

  • 空房居住人数题容差为0:{1:NUMERICAL:=0:0}
  • 1/8计算题容差为0.01:{1:NUMERICAL:=0.125:0.01}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:39:03