Есть ли способ использовать пакеты LaTeX в exams2canvas R / exams? - PullRequest
2 голосов
/ 05 апреля 2020

Я пытаюсь настроить экзамен, используя R / экзамены, используя функцию exams2canvas(). Мои вопросы содержат код LaTeX, который требует использования некоторых пакетов (в частности, tikz и tikz-qtree и нескольких других tikz библиотек), но я не могу понять, как их импортировать.

Чтобы создать PDF Я вручную изменил шаблон tex (plain.tex) в пакете экзаменов R, добавив следующие две строки:

\usepackage{tikz}
\usepackage{tikz-qtree}

Могу ли я изменить файл холста аналогичным образом? Есть ли другой способ использовать пакеты LaTeX в exams2canvas()?


Минимальный пример:

\begin{question}
\Tree[.S [.NP [.D the ] [.N children ] ] [.VP [.V study ] ]  [.NP [.N books ] ]  ]
\begin{answerlist}
  \item 0.7
  \item 0.2
  \item 0.1
\end{answerlist}
\end{question}

\begin{solution}
\begin{answerlist}
  \item False
  \item False
  \item True
\end{answerlist}
\end{solution}

\exname{Trees}
\extype{schoice}
\exsolution{001}

1 Ответ

3 голосов
/ 08 апреля 2020

Проблема в том, что для вывода Canvas, как и для других HTML форматов, код LaTeX необходимо преобразовать в HTML. И конвертеры HTML, которые мы используем (tth и pandoc), просто поддерживают ограниченное число команд LaTeX, выходящих за рамки базового дистрибутива LaTeX.

Таким образом, вам необходимо скомпилировать tikz графику в LaTeX и затем преобразовать их в графический формат, поддерживаемый HTML, например, векторную графику SVG или альтернативно растровую графику, такую ​​как PNG или JPG. Эта функциональность предоставляется функцией include_tikz() в R / экзаменах.

Я изменил ваше упражнение так, чтобы код tikz включался только как LaTeX для exams2pdf() и exams2nops() - что затем необходимо быть приспособленным для загрузки tikz и tikz-qtree. В противном случае код tikz отображается в SVG, для которого используется magick плюс pdf2svg. В качестве альтернативы вы также можете выполнить рендеринг в PNG, например.

Таким образом, вы можете сделать:

exams2html("tikz_tree.Rnw")

или

exams2nops("tikz_tree.Rnw", usepackage = c("tikz", "tikz-qtree"))

et c.

exams2canvas() будет работать как exams2html(). Модифицированный файл tikz_tree.Rnw включен в конец поста. Некоторые дополнительные указания и подробности (включая версию упражнения R / Markdown) доступны в этом обсуждении на форуме R / экзаменов на R-Forge: https://R-Forge.R-project.org/forum/forum.php?thread_id=33909&forum_id=4377&group_id=1337

Некоторые похожие, но более сложные шаблоны упражнений доступны на веб-странице R / экзаменов:
http://www.R-exams.org/templates/automaton/
http://www.R-exams.org/templates/logic/

tikz_tree.Rnw

<<echo=FALSE, results=hide>>=
## determine the output type depending on exams2xyz interface:
## - plain .tex for exams2pdf, exams2nops which then need to use packages tikz and tikz-qtree
## - .svg for other HTML-based interfaces
typ <- if(match_exams_call() %in% c("exams2pdf", "exams2nops")) "tex" else "svg"

## TikZ code (note that backslashes need to be escaped"
tikz_tree <- "\\Tree[.S [.NP [.D the ] [.N children ] ] [.VP [.V study ] ]  [.NP [.N books ] ]  ]"
@

\begin{question}

<<echo=FALSE, results=tex>>=
include_tikz(tikz_tree, name = "tik_tree", format = typ,
  packages = "tikz-qtree", width = "5cm")
@

\begin{answerlist}
  \item 0.4
  \item 0.2
  \item 0.9
\end{answerlist}
\end{question}

\begin{solution}
\begin{answerlist}
  \item False
  \item False
  \item True
\end{answerlist}
\end{solution}

\exname{Tree}
\extype{schoice}
\exsolution{001}
...