我想用随机生成的数据生成一个问题的多个副本,以便上传到Moodle并进行测验。这个问题将包括一个表格,该表格取决于每次生成的数据。如何才能做到这一点?我尝试使用xtable,但将其上传到Moodle时会生成没有边距和格式的表。我还尝试了ggpubr,但无法包含该表。
我读到可以生成一个“ .png”,例如,对于“ .Rnw”使用“ include_supplement”和\ includegraphics,该文件将被导入到文件中。当仅生成一个副本时,此功能很有用,因为导入的文件只有一个。但是,如果必须同时创建具有不同数据的问题的多个副本,会发生什么?
任何帮助将不胜感激。 谢谢。
答案 0 :(得分:2)
无论是从R / LaTeX格式(如您所愿,为Rnw)还是R / Markdown格式(Rmd)开始,Moodle的表格格式都不是那么简单。下面,我展示了您可以做的几种变体,尽管我对所有这些都不满意。在所有情况下,该示例都是静态的,但可以通过将随机数插入相应的表中以“通常”的方式使其变为动态。如果您在使一种解决方案成为动态解决方案时遇到问题,请告诉我。
在Rnw中启动时,通常会手动或通过{tabular}
或xtable
之类的包来生成knitr::kable
对象。这些对象会转换为有效的HTML并导入Moodle,行(水平和/或垂直)的格式不会保留。在Rmd中启动并使用纯Markdown标记对表进行编码(再次手动或通过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:与上面类似,但普通Markdown中的表为:
| Name | Min | Max |
|:-----|----:|----:|
| Foo | 0 | 1 |
| Bar | 0 | 100 |
其他一些学习管理系统(例如OpenOLAT)在其CSS中提供了合适的表类,因此我们可以将生成的HTML中的<table>
调整为<table class="mytable">
(其中"mytable"
类需要在CSS中提供)。我在Moodle的问题编辑器中浏览了一下,但是似乎不支持这种专用的CSS表样式。如果有人对此有更多的了解,我将感谢一些指导。
最好的替代方法可能是从Rmd开始,但是不用在Markdown中编写表,您可以直接使用完整的HTML。这为您手工设置单元格提供了广泛的可能性。也有各种软件包可以帮助您。下面,我使用knitr::kable
和kableExtra::kable_styling
的组合。后者提供的选项比我在下面使用的选项更多。
示例:
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。
示例:
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。
另一个在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 至少有两个优点:)
\begin{tabular}
方式仅适用于 .Rnw 文件。明显的缺点: