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 时,您通常会手动或通过 xtable
或 knitr::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::kable
和 kableExtra::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 文件。
明显的缺点:
- 脏了!
我想用随机生成的数据生成多个问题副本,以便上传到 Moodle 并进行测验。这个问题会包含一个 table ,这取决于每次生成的数据。如何才能做到这一点?我尝试使用 xtable 但它在上传到 Moodle 时生成了一个没有边距和格式的 table。我也试过 ggpubr 但无法包含 table.
我读到可以生成一个 '.png',例如,使用 'include_supplement' 和 \includegraphics 作为 .Rnw 文件被导入到文件中。这在只生成一个副本时很有用,因为只有一个文件是导入的文件。但是,当必须同时创建具有不同数据的问题的多个副本时会发生什么?
如有任何帮助,我们将不胜感激。 谢谢。
概述
Table 格式对于 Moodle 来说并不是那么简单,无论是从 R/LaTeX 格式(Rnw,如您所见)或 R/Markdown 格式(Rmd)的练习开始。下面我展示了您可以做的一些变体,尽管我对所有变体都不是 100% 满意。在所有情况下,该示例都是静态的,但可以通过将随机数插入相应的 table 以“通常”的方式使其动态化。如果您在使其中一种解决方案动态化时遇到问题,请告诉我。
普通
当您开始使用 Rnw 时,您通常会手动或通过 xtable
或 knitr::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::kable
和 kableExtra::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 文件。
明显的缺点:
- 脏了!