我有一个试题电子表格,我想使用它来使用R exams
生成测验和考试,并且我想在某些问题中包含图形。
此处的模板(http://www.r-exams.org/templates/fruit/)首先将图像定义为由...生成的长base 64编码字符串。
base64enc::base64encode("file.png")
这似乎很好,但是如果我有一打左右的图像,我可能只想让问题使用随机选择的一幅,两幅或三幅图像进行编程生成的练习,那么如何避免包括所有图像的编码一次锻炼就能打出十二张图像?
目前,我能想到的最好的办法是在包含可能的问题选项的电子表格中包括LaTeX语法,以将图形包含在图形中,并在生成练习时,使用正则表达式在\includegraphics{}
命令中查找文件名。将会包含在内,将其编码为基本64位字符串,并将其包含在练习文件中,但是我想知道是否存在一种无需编写自己的代码即可解析LaTeX的方法。
答案 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.png
,foo-2.png
,foo-3.png
中的一个,并提出有关问题。然后您的R代码可能会执行以下操作:
i <- sample(1:3, 1)
img <- paste0("foo-", i, ".png")
include_supplement(img)
随机选择三个文件之一,并将其声明为附件。然后在问题文本中,您可以通过类似以下方式添加图片:

注意事项:
上面的代码假定PNG图像与Rmd练习本身位于同一目录中。如果位于子目录bar/
中,则需要include_supplement(img, dir = "bar")
等。
如果将此练习呈现为HTML,则原始文件名(foo-1.png
或foo-2.png
或foo-3.png
)将在HTML源代码中可见。这可能会(或可能不会)为学生提供正确答案的提示。如果是这样,最好包含一个中性名称的文件,例如include_supplement(img, target = "foo.png")
。
在Rnw练习中,包含图形的代码类似于:\includegraphics{\Sexpr{img}}
。