如何处理R考试中随机选择的图形文件以导出到qti和moodle?

时间:2019-01-08 17:20:37

标签: r latex r-exams

我有一个试题电子表格,我想使用它来使用R exams生成测验和考试,并且我想在某些问题中包含图形。

此处的模板(http://www.r-exams.org/templates/fruit/)首先将图像定义为由...生成的长base 64编码字符串。

base64enc::base64encode("file.png")

这似乎很好,但是如果我有一打左右的图像,我可能只想让问题使用随机选择的一幅,两幅或三幅图像进行编程生成的练习,那么如何避免包括所有图像的编码一次锻炼就能打出十二张图像?

目前,我能想到的最好的办法是在包含可能的问题选项的电子表格中包括LaTeX语法,以将图形包含在图形中,并在生成练习时,使用正则表达式在\includegraphics{}命令中查找文件名。将会包含在内,将其编码为基本64位字符串,并将其包含在练习文件中,但是我想知道是否存在一种无需编写自己的代码即可解析LaTeX的方法。

1 个答案:

答案 0 :(得分:1)

首先要澄清:

  • fruit练习将图像包括为Base64字符串,因为这三个图标非常小(每个图标12K),并且在Rnw / Rmd练习中无需存储即可方便地获取所有信息图形文件分开。这只是一个妙招,我们想证明。

  • 对于更多和更大的图像,一个可以进行相同的操作,但可能不太方便。为了说明如何将静态图像包括在练习中,可以使用以下模板:http://www.R-exams.org/templates/Rlogo/它使用include_supplement()函数声明某个文件作为练习的补充。如果这是一个图形,则可以通过Rnw练习中的\includegraphics{...}和Rmd练习中的![...](...)将其集成到练习中。

  • 每个练习仅需包含其实际使用的补充(而不是从中抽取所有文件的文件)。无需手动进行Base64编码。如果需要,可以通过exams2xyz(...)函数自动完成此操作。

现在为您描述的场景。假设您有一个练习foo.Rmd,其中要显示三个静态图像foo-1.pngfoo-2.pngfoo-3.png中的一个,并提出有关问题。然后您的R代码可能会执行以下操作:

i <- sample(1:3, 1)
img <- paste0("foo-", i, ".png")
include_supplement(img)

随机选择三个文件之一,并将其​​声明为附件。然后在问题文本中,您可以通过类似以下方式添加图片:

![](`r img`)

注意事项:

  • 上面的代码假定PNG图像与Rmd练习本身位于同一目录中。如果位于子目录bar/中,则需要include_supplement(img, dir = "bar")等。

  • 如果将此练习呈现为HTML,则原始文件名(foo-1.pngfoo-2.pngfoo-3.png)将在HTML源代码中可见。这可能会(或可能不会)为学生提供正确答案的提示。如果是这样,最好包含一个中性名称的文件,例如include_supplement(img, target = "foo.png")

  • 在Rnw练习中,包含图形的代码类似于:\includegraphics{\Sexpr{img}}