带有R考试的Moodle表格的问题的不同副本

时间:2020-06-05 18:34:00

标签: moodle r-exams

我想用随机生成的数据生成一个问题的多个副本,以便上传到Moodle并进行测验。这个问题将包括一个表格,该表格取决于每次生成的数据。如何才能做到这一点?我尝试使用xtable,但将其上传到Moodle时会生成没有边距和格式的表。我还尝试了ggpubr,但无法包含该表。

我读到可以生成一个“ .png”,例如,对于“ .Rnw”使用“ include_supplement”和\ includegraphics,该文件将被导入到文件中。当仅生成一个副本时,此功能很有用,因为导入的文件只有一个。但是,如果必须同时创建具有不同数据的问题的多个副本,会发生什么?

任何帮助将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:2)

概述

无论是从R / LaTeX格式(如您所愿,为Rnw)还是R / Markdown格式(Rmd)开始,Moodle的表格格式都不是那么简单。下面,我展示了您可以做的几种变体,尽管我对所有这些都不满意。在所有情况下,该示例都是静态的,但可以通过将随机数插入相应的表中以“通常”的方式使其变为动态。如果您在使一种解决方案成为动态解决方案时遇到问题,请告诉我。

普通

在Rnw中启动时,通常会手动或通过{tabular}xtable之类的包来生成knitr::kable对象。这些对象会转换为有效的HTML并导入Moodle,行(水平和/或垂直)的格式不会保留。在Rmd中启动并使用纯Markdown标记对表进行编码(再次手动或通过knitr::kable等)时,也是如此。

示例:

plain table

Rnw:

\begin{question}
Consider the following table:

\begin{tabular}{lrr}
\hline
Name & Min & Max \\
\hline
Foo  & 0   & 1   \\
Bar  & 0   & 100 \\
\hline
\end{tabular}

What is the overall maximum?
\end{question}

\exname{Table}
\extype{num}
\exsolution{100}
\extol{0.01}

Rmd:与上面类似,但普通Markdown中的表为:

| Name | Min | Max |
|:-----|----:|----:|
| Foo  |   0 |   1 |
| Bar  |   0 | 100 |

其他一些学习管理系统(例如OpenOLAT)在其CSS中提供了合适的表类,因此我们可以将生成的HTML中的<table>调整为<table class="mytable">(其中"mytable"类需要在CSS中提供)。我在Moodle的问题编辑器中浏览了一下,但是似乎不支持这种专用的CSS表样式。如果有人对此有更多的了解,我将感谢一些指导。

HTML

最好的替代方法可能是从Rmd开始,但是不用在Markdown中编写表,您可以直接使用完整的HTML。这为您手工设置单元格提供了广泛的可能性。也有各种软件包可以帮助您。下面,我使用knitr::kablekableExtra::kable_styling的组合。后者提供的选项比我在下面使用的选项更多。

示例:

table-kable

Rmd:

Question
========
Consider the following table:

```{r, echo = FALSE, results = "asis"}
d <- data.frame(
  Name = c("Foo", "Bar"),
  Min = c(0, 1),
  Max = c(0, 100)
)
kableExtra::kable_styling(
  knitr::kable(d, format = "html", booktabs = TRUE),
  bootstrap_options = "bordered", full_width = FALSE, position = "left")
```

What is the overall maximum?

Meta-information
================
exname: Table
extype: num
exsolution: 100
extol: 0.01

Rnw:我想在Rnw练习中应该有相同的技巧,即在LaTeX练习中包含HTML,并在通过pandoc转换为HTML时保留该技巧。但是,我没有找到正确的标志。因此,这目前仅适用于Rmd练习。

LaTeX

您还可以使用LaTeX排版表格,并使用pdfLaTeX进行渲染,然后将输出转换为PNG或SVG。 tex2image()软件包中的exams函数支持此功能。可以在Rnw和Rmd练习中使用它,并且必须在练习中包括生成的图像。缺点是表格和主要问题之间的字体等有所不同(并且您必须使用tex2image()中的字体大小和分辨率)。而且,这相对较慢,因为必须在带有此类表的每次练习中运行pdfLaTeX。

示例:

table-latex

Rnw:

\begin{question}
Consider the following table:

<<echo=FALSE, results=hide>>=
tab <- '\\begin{tabular}{lrr}
\\hline
Name & Min & Max \\\\
\\hline
Foo  & 0   & 1   \\\\
Bar  & 0   & 100 \\\\
\\hline
\\end{tabular}'
tex2image(tab, name = "tab", dir = ".", pt = 8, resize = 250)
@
\includegraphics{tab.png}

What is the overall maximum?
\end{question}

\exname{Table}
\extype{num}
\exsolution{100}
\extol{0.01}

Rmd:可以在Rmd中使用生成图像的相同代码块。只需将\includegraphics替换为相应的![]() Markdown。

CSS

另一个在Moodle中呈现表格的方法是插入一个自定义样式表,其中包含要呈现的<table class="...">类。佐藤贤二在他的博客中提供了一个有效的示例:https://www.kenjisato.jp/en/post/2020/07/moodle-bordered-table/。我们计划将其与exams2moodle()中的几个典型类集成在一起,这样就不必在每次练习中都手动插入CSS。但是,我们还没有全面实施这一目标。

答案 1 :(得分:0)

有时我们会使用快速而肮脏的 hack。

$$ 
\begin{matrix}
\text{Name} & \text{Min} & \text{Max} \\
\ldots
\end{matrix}
$$

这个 hack 至少有两个优点:)

  • 它可以应用于每个人都知道乳胶但只有一些人知道 Markdown 的大团队。
  • 它适用于 .Rmd 和 .Rnw 文件。普通的 \begin{tabular} 方式仅适用于 .Rnw 文件。

明显的缺点:

  • 脏了!