Как обработать случайно выбранные графические файлы на экзаменах R для экспорта в qti и moodle? - PullRequest
0 голосов
/ 08 января 2019

У меня есть таблица экзаменационных вопросов, которую я хочу использовать для создания тестов и экзаменов с использованием R exams, и я хотел бы включить графику в некоторые из вопросов.

Шаблон здесь (http://www.r -exams.org / templates / fruit / ) начинается с определения изображений в виде длинных 64-кодированных строк, генерируемых

base64enc::base64encode("file.png")

Это выглядит нормально, но если у меня есть дюжина или около того изображений, из которых мне может потребоваться вопрос, чтобы использовать одно, два или три изображения, выбранные случайным образом для программно сгенерированных упражнений, как я могу избежать включения кодировки для всех дюжина изображений с каждым упражнением?

Лучшее, что я могу придумать на данный момент, - это включить синтаксис LaTeX для включения графики в электронную таблицу возможных вариантов вопросов, и по мере генерирования упражнений использовать регулярные выражения для поиска имен файлов внутри команд \includegraphics{}, которые будут быть включенным, закодировать их как строки base 64 и включить их в файл упражнения, но мне интересно, есть ли способ сделать это без написания собственного кода для разбора LaTeX.

1 Ответ

0 голосов
/ 09 января 2019

Сначала несколько уточнений:

  • Упражнения fruit включают изображения в виде строк Base64, поскольку три иконки довольно малы (12 КБ на значок), и удобно хранить всю информацию в упражнении Rnw / Rmd без необходимости хранить графические файлы по отдельности. Это всего лишь одна хитрость, которая может быть изящной и которую мы хотели продемонстрировать.

  • Для больших и больших изображений один может сделать то же самое, но это, вероятно, менее удобно. Чтобы проиллюстрировать, как статические изображения могут быть включены в упражнение, доступен следующий шаблон: http://www.R -exams.org / templates / Rlogo / Используется функция include_supplement() для объявления определенного файла как дополнение к упражнениям. Если это график, его можно включить в упражнения с помощью \includegraphics{...} в упражнениях Rnw и с помощью ![...](...) в упражнениях 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)

, который случайным образом выбирает один из трех файлов и объявляет его вложенным. Затем в тексте вопроса вы бы включили изображение через что-то вроде:

![](`r 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}}.

...