table for Moodle with R-Exams 问题的不同副本

Different copies of question with table for Moodle with R-Exams

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

我读到可以生成一个 '.png',例如,使用 'include_supplement' 和 \includegraphics 作为 .Rnw 文件被导入到文件中。这在只生成一个副本时很有用,因为只有一个文件是导入的文件。但是,当必须同时创建具有不同数据的问题的多个副本时会发生什么?

如有任何帮助,我们将不胜感激。 谢谢。

概述

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

普通

当您开始使用 Rnw 时,您通常会手动或通过 xtableknitr::kable 等包生成 {tabular} 对象。这些对象将转换为有效的 HTML 并导入到 Moodle 中,但不保留带线条的格式(水平 and/or 垂直)。在 Rmd 中开始并使用普通 Markdown 标记对 table 进行编码时也是如此(再次手动或通过 knitr::kable 等)。

示例:

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: 与上面类似,但 table 在普通 Markdown 中为:

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

其他一些学习管理系统(例如 OpenOLAT)在其 CSS 中提供 suitable table classes 以便我们可以调整 <table> 在结果 HTML 到 <table class="mytable"> 中(其中 "mytable" class 需要在 CSS 中提供)。我在 Moodle 的问题编辑器中环顾了一下,但似乎不支持这种专用的 CSS table 样式。如果有人对此有更多了解,我将不胜感激。

HTML

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

示例:

路径:

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 并在转换为 [=106 时保留它=] 与潘多克。但是,我没能找到合适的标志。所以这目前仅适用于 Rmd 练习。

乳胶

您也可以使用 LaTeX 排版 table 并使用 pdfLaTeX 进行渲染,然后将输出转换为 PNG 或 SVG。 exams 包中的 tex2image() 函数支持这一点。这可以在 Rnw 和 Rmd 练习中使用,并且生成的图像必须包含在练习中。缺点是 table 和主要问题之间的字体等不同(并且您必须使用 tex2image() 中的字体大小和分辨率)。此外,这相对较慢,因为 pdfLaTeX 必须在每个练习中使用 运行 table.

示例:

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 的自定义样式表以呈现 <table class="...">。 Kenji Sato 在他的博客中提供了一个可行的示例:https://www.kenjisato.jp/en/post/2020/07/moodle-bordered-table/。我们计划将其与 exams2moodle() 中的几个典型 classes 集成,这样 CSS 就不必手动插入每个练习中。然而,我们还没有抽出时间来实施这个。

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

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

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

  • 可以应用在大家都知道latex而只有少数人知道markdown的大团队中。
  • 它适用于 .Rmd 和 .Rnw 文件。普通 \begin{tabular} 方式仅适用于 .Rnw 文件。

明显的缺点:

  • 脏了!