1

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

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

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

4

2 回答 2

2

概述

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

清楚的

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

例子:

普通桌子

:

\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 中提供合适的表格类,以便我们可以<table>将生成的 HTML 调整为<table class="mytable">"mytable"需要在 CSS 中提供类的位置)。我在 Moodle 的问题编辑器中查看了一下,但似乎不支持这种专用的 CSS 表格样式。如果有人对此了解更多,我将不胜感激。

HTML

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

例子:

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

例子:

表乳胶

:

\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。但是,我们还没有采取行动来实施这一点。

于 2020-06-05T22:01:20.657 回答
0

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

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

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

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

明显的缺点:

  • 这个不干净!
于 2021-06-27T11:26:22.387 回答