0

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

此处的模板 ( http://www.r-exams.org/templates/fruit/ ) 首先将图像定义为由

base64enc::base64encode("file.png")

这看起来很好,但是如果我有十几个图像,我可能只希望一个问题使用随机选择的一个、两个或三个图像进行编程生成的练习,我如何避免包括所有十几个图像的编码每一个练习?

目前我能想到的最好的方法是在可能的问题选项的电子表格中包含用于图形包含的 LaTeX 语法,并在生成练习时,使用正则表达式在\includegraphics{}将包含的命令中查找文件名,将它们编码为base 64 个字符串,并将它们包含在练习文件中,但我想知道是否有一种方法可以做到这一点,而无需编写自己的代码来解析 LaTeX。

4

1 回答 1

1

首先澄清几点:

  • 练习将fruit图像包含为 Base64 字符串,因为三个图标非常小(每个图标 12K),并且在 Rnw/Rmd 练习中包含所有信息很方便,无需单独存储图形文件。这只是我们想要展示的一个漂亮的技巧。

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

  • 每个练习只需要包括它实际使用的补充(而不是从中采样的所有文件)。并且无需手动进行 Base64 编码。如果需要,这由exams2xyz(...)函数自动完成。

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

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}}.

于 2019-01-08T22:29:07.520 回答