TL;博士
exams2nops()
不支持这一点,也不会向这个方向扩展,因为它的重点是生成用于打印/扫描/等的 PDF 考试。
exams2pdf()
可以自定义使用不同的 LaTeX 模板,您可以尝试使用该{hyperref}
包设置合适的模板。
- PDF 查看器对生成的 PDF 表单的支持差异很大,通常只有 Acrobat Reader 是唯一一个支持得体的。
- 我对学生系统的异构性以及通过电子邮件发送解决方案的个人经验是,这不是一个非常可靠的解决方案,但会成为很多问题的根源。就个人而言,我会避免走这条路。
- 如果您的大学拥有 Moodle 系统,我建议您通过
exams2moodle()
. 至少系统稳定性的责任在于大学。
细节:
通过使用该{hyperref}
包,您可以使用带有 、 等命令的环境{Form}
。此处给出了简要概述:https ://tex.stackexchange.com/questions/14842/creating-fillable-pdfs\CheckBox{}
\TextEntry{}
更详细的工作示例可在以下网址获得:https ://martin-thoma.com/creating-pdf-forms-with-latex/
基于这些,我调整了exam.tex
R/exams 包中提供的模板并设置了一个form.tex
模板。完整的 LaTeX 代码包含在下面。这会尝试执行以下操作:
- 设置完成后可以通过电子邮件提交的表单。
- 该表格由姓名和学生 ID 的“固定”字段组成。
- 然后它设置命令
\exnum
,\exstring
等exmchoice
可供exams2pdf()
. 详见第 3 节vignette("exams", package = "exams")
。因此,对于给定的检查,这些命令会根据需要重复多次。
- 最后有“提交”或“清除”表格的按钮。
为了说明,请尝试:
exams2pdf(
c("deriv.Rmd", "swisscapital.Rmd", "boxplots.Rmd", "ttest.Rmd", "function.Rmd", "lm.Rmd"),
template = "form.tex"
)
从form.tex
下面需要在您当前的工作目录中。
结果form1.pdf
会自动显示在您的默认 PDF 查看器中(请参阅 参考资料options(pdfviewer = ...)
)。或者,您还可以添加一个参数dir = "."
以将文件存储在当前工作目录中。
对我来说,使用 TeXLive 的 Debian GNU/Linux 可以工作并生成一个 PDF 文件,可以使用 Evince PDF 查看器查看和填写。但是,“提交”和“清除”都不起作用。
当我在 Windows 10 中的 Acrobat Reader 下打开同一个文件时,只有名称/ID 的 TextEntry 字段有效,其他字段无效。复选框有效,但 (a) 的所有复选框都已链接,所有 (b) 等也是如此。
我的印象是,{Form}
像这样即时撰写对 Acrobat Reader 不起作用。但我会很感激如何解决这个问题的指针。另一种方法是准确编码特定考试所需的表格,并name
在所有表格元素等中使用唯一标签。
奖金说明:
下面的模板还激活了{attachfile}
LaTeX 包,该包可用于将文件(例如,数据集)嵌入到 PDF 中。这对我有用,但仅在 Acrobat Reader 下有效。为了自动将所有\url{}
命令(如为lm
练习创建的,上面使用的)转换为\attachfile{}
命令,开发版本exams2pdf()
获得了一个attachfile = FALSE
可以设置为TRUE
. 有关更多详细信息,请参阅 R-Forge 上的 R/exams 论坛中的此线程:
https ://R-Forge.R-project.org/forum/forum.php?thread_id=32091&forum_id=4377&group_id=1337
乳胶模板: form.tex
\documentclass[10pt,a4paper]{article}
%% packages
\usepackage[utf8]{inputenc}
\usepackage{a4wide,color,verbatim,Sweave,url,xargs,amsmath,booktabs,longtable,eurosym}
%%% %% optionally: two-column layout for exercise form
%%% \usepackage{multicol}
%% embed supplementary data files etc.
\usepackage{attachfile}
\attachfilesetup{color=0.5 0 0}
%% support PDF forms
\usepackage{hyperref}
%% new environments
\newenvironment{question}{\item}{}
\newenvironment{solution}{\comment}{\endcomment}
\newenvironment{answerlist}{\renewcommand{\labelenumi}{(\alph{enumi})}\begin{enumerate}}{\end{enumerate}}
%% paragraphs
\setlength{\parskip}{0.7ex plus0.1ex minus0.1ex}
\setlength{\parindent}{0em}
%% compatibility with pandoc
\providecommand{\tightlist}{\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setkeys{Gin}{keepaspectratio}
%% fonts: Helvetica
\usepackage{helvet}
\IfFileExists{sfmath.sty}{
\RequirePackage[helvet]{sfmath}
}{}
\renewcommand{\sfdefault}{phv}
\renewcommand{\rmdefault}{phv}
\newcommandx{\exmchoice}[9][2=-,3=-,4=-,5=-,6=-,7=-,8=-,9=-]{%
\CheckBox[name=a, width=1em]{(a)}~~%
\if #2- \else \CheckBox[name=b, width=1em]{(b)}~~ \fi%
\if #3- \else \CheckBox[name=c, width=1em]{(c)}~~ \fi%
\if #4- \else \CheckBox[name=d, width=1em]{(d)}~~ \fi%
\if #5- \else \CheckBox[name=e, width=1em]{(e)}~~ \fi%
\if #6- \else \CheckBox[name=f, width=1em]{(f)}~~ \fi%
\if #7- \else \CheckBox[name=g, width=1em]{(g)}~~ \fi%
\if #8- \else \CheckBox[name=h, width=1em]{(h)}~~ \fi%
\if #9- \else \CheckBox[name=i, width=1em]{(i)}~~ \fi%
}
\newcommandx{\exclozechoice}[9][2=-,3=-,4=-,5=-,6=-,7=-,8=-,9=-]{\setcounter{enumiii}{1}%
\CheckBox[name=ca, width=1em]{\roman{enumiii}.} \stepcounter{enumiii}%
\if #2- \else \CheckBox[name=cb, width=1em]{\roman{enumiii}.} \stepcounter{enumiii} \fi%
\if #3- \else \CheckBox[name=cc, width=1em]{\roman{enumiii}.} \stepcounter{enumiii} \fi%
\if #4- \else \CheckBox[name=cd, width=1em]{\roman{enumiii}.} \stepcounter{enumiii} \fi%
\if #5- \else \CheckBox[name=ce, width=1em]{\roman{enumiii}.} \stepcounter{enumiii} \fi%
\if #6- \else \CheckBox[name=cf, width=1em]{\roman{enumiii}.} \stepcounter{enumiii} \fi%
\if #7- \else \CheckBox[name=cg, width=1em]{\roman{enumiii}.} \stepcounter{enumiii} \fi%
\if #8- \else \CheckBox[name=ch, width=1em]{\roman{enumiii}.} \stepcounter{enumiii} \fi%
\if #9- \else \CheckBox[name=ci, width=1em]{\roman{enumiii}.} \fi%
}
\newcommand{\exnum}[9]{\TextField[name=num, width=4cm]{}}
\newcommand{\exstring}[1]{\TextField[name=string, width=4cm]{}}
%% new commands
\makeatletter
\newcommand{\ID}[1]{\def\@ID{#1}}
\newcommand{\Date}[1]{\def\@Date{#1}}
\ID{00001}
\Date{YYYY-MM-DD}
%% \exinput{header}
\newcommand{\myID}{\@ID}
\newcommand{\myDate}{\@Date}
\makeatother
%% headings
\markboth{\textnormal{\bf \large Statistics Exam: \myID}}%
{\textnormal{\bf \large Statistics Exam: \myID}}
\pagestyle{myheadings}
\begin{document}
%% title page
\thispagestyle{empty}
{\sf
\textbf{\LARGE{R University}}
\textbf{\large{Statistics Exam \myDate \hfill Exam ID \myID}}
\vspace*{2cm}
\begin{Form}[action=mailto:info@example.com,encoding=html,method=post]
\begin{tabular}{ll}
\textbf{Name} & \TextField[name=Name, width=10cm]{}\\
\textbf{Student ID} & \TextField[name=ID, width=10cm]{}\\
\end{tabular}
\vspace*{1cm}
%%% \begin{multicols}{2}
%% \exinput{questionnaire}
%%% \end{multicols}
\Submit{Submit} ~~ \Reset{Clear}
\end{Form}
}
\newpage
\begin{enumerate}
%% \exinput{exercises}
\end{enumerate}
\end{document}