我想用随机生成的数据生成一个问题的多个副本,以便上传到Moodle并进行测验。这个问题将包括一个表格,该表格取决于每次生成的数据。如何才能做到这一点?我尝试使用xtable,但将其上传到Moodle时会生成没有边距和格式的表。我也尝试了ggpubr,但无法包含该表。
例如,我可以生成一个'.png',并使用'include_supplement'和\ includegraphics作为.Rnw文件被导入到文件中。当仅生成一个副本时,此功能很有用,因为导入的文件只有一个。但是,如果必须一次创建具有不同数据的问题的多个副本,会发生什么?
任何帮助将不胜感激。谢谢。
对于Moodle,表格格式并不是那么简单,无论是从R / LaTeX格式(如您所愿,为Rnw)开始练习还是以R / Markdown格式(Rmd)为起点。下面,我展示了您可以做的几种变体,尽管我对所有这些都不满意。在所有情况下,该示例都是静态的,但可以通过将随机数插入相应的表中以“通常”的方式使其变为动态。如果您在使一种解决方案成为动态解决方案时遇到问题,请告诉我。
[在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:
\\开始{question}考虑下表:
<<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
替换为相应的![]()
降价。