exams (version 2.1-0)

exams2nops: Generation of Written Exams for Automatic Evaluation

Description

Generation of exams in PDF format that can be printed, scanned, and evaluated automatically.

Usage

exams2nops(file, n = 1L, dir = NULL, name = NULL, language = "en", title = "Exam", course = "", institution = "R University", logo = "Rlogo.png", date = Sys.Date(), replacement = FALSE, intro = NULL, blank = NULL, duplex = TRUE, pages = NULL, usepackage = NULL, header = NULL, encoding = "", startid = 1L, points = NULL, showpoints = FALSE, ...)
make_nops_template(n, replacement = FALSE, intro = NULL, blank = NULL, duplex = TRUE, pages = NULL, file = NULL, nchoice = 5, encoding = "")

Arguments

file
character. A specification of a (list of) exercise files.
n
integer. The number of copies to be compiled from file (in exams2nops) and the number of exercises per exam (in make_nops_template), respectively.
dir
character. The default is either display on the screen or the current working directory.
name
character. A name prefix for resulting exams and RDS file.
language
character. Path to a DCF file with a language specification. Currently, the package ships: English ("en"), Dutch ("nl"), French ("fr"), German ("de"), Italian ("it"), Romanian ("ro"), Portuguese ("pt"), Spanish ("es").
title
character. Title of the exam, e.g., "Introduction to Statistics".
course
character. Optional course number, e.g., "101".
institution
character. Name of the institution at which the exam is conducted.
logo
character. Path to a logo image. If the logo is not found, it is simply omitted.
date
character or "Date" object specifying the date of the exam.
replacement
logical. Should a replacement exam sheet be included?
intro
character with LaTeX code for optional introduction text on the first page of the exam.
blank
integer. Number of blank pages to be added at the end. (Default is chosen to be half of the number of exercises.)
duplex
logical. Should blank pages be added after the title page (for duplex printing)?
pages
character. Path(s) to additional PDF pages to be included at the end of the exam (e.g., formulary or distribution tables).
usepackage
character. Names of additional LaTeX packages to be included.
header
list. A list of further options to be passed to the LaTeX files.
encoding
character, passed to xweave.
startid
integer. Starting ID for the exam numbers (defaults to 1).
points
integer. How many points should be assigned to each exercise? Note that this argument overules any exercise points that are provided within the expoints tags of the exercise files (if any). The vector of points supplied should either have length 1 or the number of exercises in the exam.
showpoints
logical. Should the PDF show the number of points associated with each exercise (if specified in the Rnw/Rmd exercise or in points)?
...
arguments passed on to exams2pdf.
nchoice
character. The number of choice alternatives per exercise.

Value

A list of exams as generated by xexams is returned invisibly.

Details

exams2nops is a convenience interface for exams2pdf with a dynamically generated title page which can be printed, scanned with nops_scan and evaluated automatically by nops_eval. It is originally intended for single- and multiple choice (schoice/mchoice) questions only but has also some limited support for open-ended (string) questions. The exam sheet consists of various sections where information is either printed our filled in by the students. The section with personal data is just for human readers, it is not read automatically. The registration number has to be filled in in digits and also marked with corresponding crosses where only the latter is read automatically. The exam ID/type/scrambling are printed directly into the PDF and read automatically after scanning. Note that the font in the PDF must not be modified for the reading step to work reliably. (A sans-serif font is used and hence the sfmath LaTeX package is also used - if it is installed.) The questions can have up to five alternatives which have to answered by the students. The crosses are read automatically where both empty and completely filled boxes are regarded as not crossed. The examples below show how PDF exams can be generated along with an RDS file with (serialized) R data containing all meta-information about the exam. The PDFs can be printed out for conducting the exam and the exam sheet from the first page then needs to be scanned into PDF or PNG images. Then the information from these scanned images can be read by nops_scan, extracting information about the exam, the participants, and the corresponding answers (as described above). The ZIP file produced by nops_scan along with the RDS of the exam meta-information and a CSV file with participant information can then be used by nops_eval to automatically evaluate the whole exam and producing HTML reports for each participant. See nops_eval for a worked example. Currently, up to three open-ended string questions can also be included. These do not generate boxes on the first exam sheet but instead a second exam sheet is produced for these open-ended questions. It is assumed that a human reader reads these open-ended questions and then assigns points by marking boxes on this separate sheet. Subsequently, this sheet can also be read by nops_scan.

Examples

Run this code
## load package and enforce par(ask = FALSE)
library("exams")
options(device.ask.default = FALSE)

## define an exam (= list of exercises)
myexam <- list(
  "tstat2.Rnw",
  "ttest.Rnw",
  "relfreq.Rnw",
  "anova.Rnw",
  c("boxplots.Rnw", "scatterplot.Rnw"),
  "cholesky.Rnw"
)

if(interactive()) {
## compile a single random exam (displayed on screen)
exams2nops(myexam, duplex = FALSE, language = "de")
}

## create multiple exams on the disk (in a
## temporary directory)
mydir <- tempdir()

## generate NOPS exam in temporary directory
set.seed(403)
ex1 <- exams2nops(myexam, n = 2, dir = mydir)
dir(mydir)

## use a few customization options: different
## university/logo and language/title
## with a replacement sheet but for non-duplex printing
set.seed(403)
ex2 <- exams2nops(myexam, n = 2,
  institution = "Universit\"at Innsbruck",
  name = "uibk", logo = "uibk-logo-bw.png",
  title = "Klausur", language = "de",
  replacement = TRUE, duplex = FALSE)
dir(mydir)

Run the code above in your browser using DataLab