首页 > 解决方案 > 为什么从 r-exams 生成的表格没有出现在 Moodle 中?

问题描述

我已经定义了在 RMarkdown 中生成频率表所需的变量和数据,以使用 R-exams 将其导出到 Moodle:

xsubio<-c(sample(5:35,5))
xsubi<-sort(xsubio)
frecuencias<-sample(0:30 ,5)

tabla<-data.frame(xsubi,frecuencias)
colnames(tabla)<-c(" Edades" ,"Personas")

通过块我生成表:

```{r, eval=TRUE,echo=FALSE,results='asis',warning=FALSE,message=FALSE,error=FALSE}
   library(exams)
   print(xtable(tabla), include.rownames=FALSE)
```

导出为 PDF 时,使用exams2pdf,表格完美显示:

在此处输入图像描述

但是,当使用exams2moodle 导出到Moodle 时,表格消失了:

在此处输入图像描述

我该怎么做才能让它出现?

标签: moodler-exams

解决方案


问题:您在 Markdown 中进行了格式化练习,并用于xtable()在 LaTeX 中插入表格。在将练习转换为 PDF 时,这种 Markdown+LaTeX 的混合是没有问题的。在内部,这会保留 LaTeX 表,并且在将 LaTeX 渲染为 PDF 之前也将 Markdown 部分转换为 LaTeX。但是,在将 Markdown 练习转换为 Moodle 的 HTML 时,无法自动执行相同的操作。然后转换器不会自动分离 LaTeX 部分以将其转换为 HTML。

简而言之:不同的标记必须充分同步。用于 PDF 输出的 Markdown+LaTeX 标记和用于 HTML 输出的 Markdown+HTML。但更好的是让标记完全同步,即 LaTeX+LaTeX 或 Markdown+Markdown。然后可以将此类练习自动呈现为 PDF 或 HTML。

可能的解决方案:

  1. Markdown+Markdown:R/Markdown (Rmd) 练习中的 Markdown 表标记
    我建议您简单地通过 Markdown 生成表,knitr::kable()而不是xtable::xtable(). 因此,表的代码块简单地变成

    knitr::kable(tabla, format = "markdown")
    

    然后表格以 PDF 和基于 HTML 的格式(如 Moodle)正确呈现。

  2. LaTeX+LaTeX:R/LaTeX (Rnw) 练习中的 LaTeX 表格标记
    如果您希望继续使用xtable()另一条路线生成 LaTeX 表格,请将 R/exams 练习的标记更改为 Rnw (R/LaTeX)。有关如何执行此操作,请参阅R/exams 网页上的第一步教程。

  3. Markdown+Adaptive:根据输出格式选择正确的表格标记
    使用该match_exams_call()功能,您可以在运行练习中确定使用哪个exams2xyz()接口来处理它。所以你可以做

    type <- if(match_exams_call() %in% c("exams2pdf", "exams2nops")) "latex" else "html"
    print(xtable(tabla), type = type, ...)
    

    然后 LaTeX 或 HTML 格式由xtable().

这三种解决方案原则上都有效,但我认为解决方案 1 ( kable()) 在您的情况下是最好的和最强大的。

额外说明:如果您使用的是 R/exams 2.4-0(撰写本文时的当前开发版本),您可以用来exams2moodle(...,table = TRUE)在 Moodle 中获得更好的表格格式。


推荐阅读