在 R/exams 的 exams2canvas 中有没有办法使用 LaTeX 包?

Is there a way to use LaTeX packages in the exams2canvas of R/exams?

我正在尝试使用函数 exams2canvas() 使用 R/exams 设置考试。我的问题包含需要使用某些包(特别是 tikztikz-qtree 以及其他一些 tikz 库)的 LaTeX 代码,但我不知道如何导入它们。

为了创建 pdf,我手动修改了 R 的考试包中的 tex 模板 (plain.tex),添加了以下两行:

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

我可以用类似的方式修改 canvas 文件吗?还有其他方法可以在 exams2canvas() 中使用 LaTeX 包吗?


最小示例:

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

问题是对于 Canvas 输出,就像其他基于 HTML 的格式一样,LaTeX 代码需要转换为 HTML。我们使用的 HTML 转换器(tthpandoc)都只支持超出基本 LaTeX 发行版的有限数量的 LaTeX 命令。

因此,您需要在 LaTeX 中编译 tikz 个图形,然后将它们转换为 HTML 支持的图形格式,例如 SVG 矢量图形或 PNG 或 JPG 等光栅图形。此功能由 R/exams 中的 include_tikz() 函数提供。

我已经修改了你的练习,因此 tikz 代码仅包含为 exams2pdf()exams2nops() 的 LaTeX - 然后需要对其进行调整以加载 tikztikz-qtree。否则,tikz 代码将呈现为使用 magickpdf2svg 的 SVG。或者,您也可以渲染为 PNG,例如。

所以你可以这样做:

exams2html("tikz_tree.Rnw")

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

等等

exams2canvas() 将像 exams2html() 一样工作。修改后的 tikz_tree.Rnw 文件包含在 post 的末尾。在 R-Forge 的 R/exams 论坛的讨论中可以找到一些进一步的指示和细节(包括 R/Markdown 版本的练习):https://R-Forge.R-project.org/forum/forum.php?thread_id=33909&forum_id=4377&group_id=1337

R/exams 网页上提供了一些类似但更详细的练习模板:
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}