-
New function
nops_fix()
that can be applied to the ZIP file resulting fromnops_scan()
. By default it goes through all rows of the scanned data and interactively prompts for updates to fields from the scanned exam sheets that need updating. Optionally, the user can specify the rows of the scanned data and/or the fields that should be updated. -
By default,
nops_scan()
now relies on the R packagesqpdf
andmagick
for merging/rotating/splitting PDF files and converting them to PNG, respectively. Thus, the system requirements of PDFTk (pdftk
) and ImageMagick (convert
), respectively, are not necessary anymore for scanning NOPS exams. However, for a transition period the old system calls for PDFTk/ImageMagick are still used when the R packagesqpdf
and/ormagick
are not available. -
The default evaluation rule in
exams2moodle()
and all QTI-basedexams2xyz()
interfaces (e.g.,exams2blackboard()
,exams2canvas()
,exams2openolat()
, etc.) is now consistentlypartial = TRUE
andnegative = FALSE
(as in previous versions) andrule = "false2"
. This was already the defaultrule
in most scenarios in previous versions. But formchoice
elements withincloze
exercises it often was"none"
(i.e., no negative points even when partial credits were used) which has been changed to the more commonly-usedrule = "false2"
now. (Reported by Hans-Peter Schröcker.) -
In
exams2qti21()
(and thus also inexams2openolat()
) fractional points are now rounded up (if necessary) at eight decimal places. Otherwise thecutvalue
might not be attained, especially forpartial = FALSE
. (Reported by Thomas Fetz.) -
Convenience extension for
cloze
exercises with elements embedded by##ANSWERi##
tags: The "Answerlist" only has to be specified if there areschoice
/mchoice
elements, otherwise it can be omitted. For exercises with mixed elements, the "Answerlist" only has to specify the entries of theschoice
/mchoice
elements while the empty entries for all othernum
orstring
/essay
/file
elements can optionally be omitted. -
New standard meta-information types
exauthor
andextags
. The latter is for tagging an exercise so that it can eventually be filtered, grouped, etc. A typical example for anextags
isextags: poisson
which could signal that an exercise is related to the Poisson distribution. Note that this might complement the hierarchicalexsection
meta-information which can be used for hierarchical grouping, e.g.,exsection: regression/glm/poisson
. Finally,extags
can define tag classes/group by adding a=
as inextags: grade=2
orextags: stage=advanced
etc. Multiple tags can be separated by|
. -
In
schoice
andmchoice
questions an error (rather than just a warning) is thrown when the lengths of the question list and theexsolution
do not match. Also, the reading of question lists is more robust now for Markdown exercises. -
New convenience function
match_exams_iteration()
that can be used within an exercise to query the current iteration (withinn
replications), e.g., to always cycle through the same finite set of parameters. -
Improvement in
nops_scan()
when finding the bottom markings of the scan. A smaller minimal bottom margin is assumed (3% instead of 7%) in order to better deal with different paper formats, specifically letter paper (reported by Perry de Valpine). -
Improvement in
nops_eval()
so that forschoice
questions no partial credits are used even if they are enabled formchoice
questions in theeval
specification. -
Additional NOPS language support: Bulgarian (
bg
, contributed by Nikolay Rachev) and Polish (pl
, contributed by Paweł Kleka). Corrections in French (fr
, contributed by Jean-Philippe Georget), Russian (ru
, contributed by Nikolay Rachev), and Spanish (es
, contributed by Flavio Lozano Isla). -
Various
exams2xyz()
interfaces gained argumentsenvir = NULL
and/orengine = NULL
. Both are passed on toxweave()
. Theenvir
argument can be used to control in which environment all exercises are processed in caseknitr
is used. Theengine
argument specifies whether"Sweave"
(default) or"knitr"
is used for rendering Rnw exercises. These arguments have been added in:exams2arsnova()
,exams2blackboard()
,exams2grasple()
,exams2html()
,exams2lops()
,exams2moodle()
,exams2pandoc()
,exams2qti12()
(and hence interfaces based on it likeexams2canvas()
),exams2qti21()
(and hence interfaces based on it likeexams2openolat()
),exams2testvision()
. -
In Rmd exercises only the meta-information tags (
extype
,exsolution
, etc.) from theMeta-information
are read. If the same tags occur elsewhere in the file they are ignored now. (Reported by Joan Sanz.) -
Include better table formatting by default in
exams2moodle()
. Stylestable = "table_shade"
,"table_rule"
, and"table_grid"
had already been available since version 2.4-0, buttable = "table_shade"
is now the new default. Alternatively, users can also set a custom table class and then use thecss
argument for controlling the rendering of that class. -
In
exams2moodle()
,exams2testvision()
,exams2qti12()
, andexams2qti21()
(and all interfaces built on top of these likeexams2openolat()
) the default is nowenumerate = FALSE
(rather thanTRUE
) so that single-choice and multiple-choice answers are not listed with letters a., b., c., ... The default was changed because it produces questions with less "clutter" but may make it a little bit harder to match solution lists in the feedback to the item lists in the question. -
In
exams2moodle()
thestring
elements incloze
exercises now also correctly support theusecase = TRUE
option (reported by Joan Sanz). -
In
exams2moodle()
theeval
forschoice
exercises is now correctly processed in case of negative points (reported in 78581471 on StackOverflow). -
In both
matrix_to_schoice()
andmatrix_to_mchoice()
the handling of vector (rather than matrix) inputs is improved. In this case the question list shows only a single index for the chosen element(s) rather than row and column indexes (suggested by Thomas Fetz). -
Further improved name handling in
exams2qti21()
(and thus also inexams2openolat()
): Periods in file names are avoided (like spaces and leading integers) as OpenOlat otherwise cannot read the file (reported by Andrea Erhart). -
The default in
exams2particify()
was changed tofix_choice = FALSE
because most Particify systems in use will probably support the math rendering in answer options now. So the fixup does not need to be enabled by default. Also, the function now tries to assure Unix-style linebreaks on Windows systems because the default Windows linebreaks could lead to problems with reading the correct answers. -
New argument
exams2nops(..., newpage = FALSE)
. If set toTRUE
a page break (\newpage
in LaTeX) is added after every exercise. -
The
logo
inexams2nops(..., logo = ...)
can now also be a relative path (relative to the working directory). Alsologo = "uibk"
is supported as a convenience option for including the logo of Universität Innsbruck. -
The exam type in
exams2nops()
now codes the number of exercises directly (rather than rounding the number to multiples of 5). This facilitates fixing the correct number of questions innops_fix()
. -
The answer lists in
exams2nops()
are now labeled\alph{enumii}.
rather than(\alph{enumii})
. Also the main exam sheet also uses\alph{}
with a custom counter to label the check boxes for the answers. -
When converting exercises with a converter based on
make_exercise_transform_pandoc()
to Markdown with Base64 output, graphics in<img>
tags are now correctly encoded as well. -
In all QTI-based interfaces (and also
exams2moodle()
) withexams2xyz(..., mchoice = list(enumerate = FALSE))
thesolutionlist
(if any) is formatted as an unordered list (rather than without any formatting). -
It is now also possible to extract the meta-information from the output of
xexams()
and allexams2xyz()
interfaces as adata.frame
(rather than a list of lists) viaexams_metainfo(..., class = "data.frame")
. -
Scientific notation produced by
knitr
is now correctly converted to numeric when reading the meta-information. (Reported in questions 61254298 and 75766543 on StackOverflow.) -
The (total) number of points in
exams2blackboard()
is now formatted as%.3f
rather than%d.0
so that it can also be fractional (with up to three decimal places) rather than integer. -
Various improvements in
exams2testvision()
, especially for cloze exercises combining various types of questions. In particular, a bug was fixed for cloze exercises with##ANSWERi##
tags which lead to unbalanced<div>
tags in previous versions. -
Added support for
\pandocbounded{}
(as produced bypandoc
starting from version 3.2.1) in all current LaTeX templates as well asexams2nops()
. Currently,\pandocbounded{}
does not anything in theexams
templates so that the size of the graphics in PDF output still has to be controlled in one of the previously available ways (e.g., within the exercises, via theexams2xyz()
interface, or via theGin
key in the LaTeX template).
-
Switched the entire package to support UTF-8 encodings by default for all exercises types. Previously, this was only the case for .Rmd exercises due to the UTF-8 requirement of
pandoc
(which is now a system requirement forexams
). All templates etc. have been modified to support UTF-8 out-of-the-box. Support for all other encodings like ISO-8859-* (latin1, latin9, etc.), which had previously been available for .Rnw exercises in certain interfaces, has been disabled. While this reduces the functionality of the package slightly, it greatly facilitates working with UTF-8 which appears to be predominantly used in practice. Documentation also becomes easier/clearer. -
To facilitate working with .Rmd exercises and embedded graphics or data files
base64enc
,knitr
, andrmarkdown
are now imported in the package (and not just suggested). -
Several extensions in
exams2qti21()
(and thus inherited byexams2openolat()
) that provide more control and options in the assessments.- Improved processing of the
cutvalue
(for passing a test/exam/quiz). By default, this iscutvalue = NULL
(or equivalentlycutvalue = NA
) which means that no pass/fail status is computed at all, i.e., only the sum of the points is reported. Moreover,cutvalue
may be a float now and is not coerced to an integer anymore (also applied inexams2qti12()
). - New argument
navigation = "nonlinear"
. This can be switched to"linear"
enforcing that questions in the test must be answered sequentially while the default"nonlinear"
means that participants can switch back and forth between questions. - New argument
selection = "pool"
that controls how exercises and sections are sampled. By default, the function creates one section for each exercise from which one replication will be selected in the exam. Ifselection = "exam"
each section contains all questions and one section will be selected for the exam. The"exam"
variant has the advantage thatnsamp
can be fully used now and that questions that build on each other can be used in the exam. - New argument
shufflesections = FALSE
can be set toTRUE
in order to randomly shuffle the order of sections/exercises for each participant. Forselection = "pool"
this corresponds to shuffling the sections that contain the pools of exercises. Forselection = "exam"
it corresponds to shuffling the exercises within each exam section. - New argument
cloze_schoice_display = "auto"
that controls the display ofschoice
elementsincloze
exercises. By default, radio"buttons"
are used if the answer list appears in its own paragraph and a"dropdown"
menu is used if the answer list appears inline (and has no mathematical markup). Both options can also be enforced explicitly, independently from the answer list appearing in a separate paragraph or inline. - New argument
allowskipping = TRUE
controlling whether exercises can be skipped without answering (default) or must be answered. - New argument
allowreview = FALSE
controlling whether exercises can be viewed again at the end of a test/exam. - New argument
allowcomment = FALSE
can be set toTRUE
to allow comments. - New argument
casesensitive = TRUE
that controls whether the evaluation of string exercises is case sensitive or not. - The default
stitle
(section title) andititle
(item title) are nowNULL
so that items are simply numbered consecutively (1, ..., n) and section titles are omitted. - Similarly, the default
sdescription
is now empty omitting the section description as it is typically not necessary. - If
solutionswitch = TRUE
andmaxattempts != 1
a warning is issued now. This is because with more than one attempt participants could otherwise copy the solution shown after an incorrect first attempt. - Also
maxattempts
can now be a vector so that different numbers of attempts per question are allowed for different sections/questions.
- Improved processing of the
-
An extended list of configuration options for OpenOlat assessments is now provided through the argument
config = TRUE
inexams2openolat()
. The logical specificationconfig = TRUE
/FALSE
uses the default configuration or switches off the extra configuration entirely, respectively. Moreover, a list of options likeconfig = list(cancel = TRUE, scoreprogress = TRUE)
can be provided for customizing how OpenOlat renders the QTI 2.1 content. -
Several extensions for
cloze
questions inexams2moodle()
:mchoice
elements incloze
questions are now properly supported. By default they are shown asMULTIRESPONSE
checkboxes and employ Moodle's default evaluation strategy where each incorrect box eliminates one correct box. A different evaluation strategy can, in principle, be chosen but Moodle might not process all negative points correctly.schoice
elements incloze
questions are still rendered asMULTICHOICE
drop-down menus by default unless they contain math markup. As this is not rendered by Moodle in drop-down menus, aMULTICHOICE_V
column of radio buttons is used in this case.- To allow for customization of both
mchoice
andschoice
elements incloze
questions, the are now bothcloze_mchoice_display
andcloze_schoice_display
arguments. This is not fully backward compatible because in previous versionscloze_mchoice_display
was also used to customizeschoice
elements. Now a warning is issued in this case. - If choice items contained closing curly brackets, these would typically
corrupt Moodle's embedded answers for
cloze
questions which relies on curly brackets. Hence, these are properly escaped now. - Similarly closing curly brackets in the solutions to
string
items (SHORTANSWER
) needed to be properly escaped. - To fix the maximum width of fill-in-the-blank cells in
num
and/orstring
sub-items (e.g., when presented in a table), argumentsnumwidth
andstringwidth
have been added tomake_question_moodle()
. Alternatively, they can also be specified throughexextra
tags in each exercise. See thefourfold2
exercise for an example and?make_question_moodle
for more details.
-
For illustrating the new improved cloze capabilities in
exams2moodle()
andexams2qti21()
/exams2openolat()
, there is a new exercise "lm2" which combines all basic exercise types:num
,schoice
,mchoice
, andstring
. Another extended version of this exercises, called "lm3", has also been added which addsessay
(text editor) andfile
upload interactions (see also below). -
Extended processing of
string
exercises for learning management systems like Moodle, OpenOlat, or other QTI-based systems. By default,string
exercises are intended for closed-format short-text answers that have to be matched exactly by the participants. Additionally, open-ended text answers can now be enabled by setting theexstringtype
meta-information toessay
and/orfile
. The former requests a text editor for entering an answer while the latter requests a file upload dialogue. The "essayreg" exercise has been modified to leverage this new meta-information. -
Similarly, the
exclozetype
meta-information now also acceptsessay
orfile
instead ofstring
for elements of acloze
exercise. Currently, the combination of these types withnum
orschoice
elements etc. is only possible for QTI-based systems (i.e., OpenOlat in particular) but not for Moodle (whose cloze format does not support open-ended text answers). For illustration, see the new "essayreg2" and "lm3" exercises. -
Added new interface
exams2ilias()
for the open-source ILIAS learning management system (https://www.ilias.de/). This is essentially a convenience wrapper toexams2qti12()
, tweaking a few defaults and employing a somewhat modified XML template. Not all question types are supported, though, mostly string questions with open-ended answers and multiple-choice and single-choice questions. Numeric and cloze questions are not supported, yet. -
Added first release version of new interface
exams2testvision()
for the Dutch testing platform TestVision. It is essentially a fork ofexams2qti21()
that incorporates TestVision's own strict implementation of QTI 2.1. See the online tutorial on how to upload the zip output fromexams2testvision()
into the system by selecting it in the import menu and then moving the imported material to the appropriate directories. The work on the function was financially supported by the Dutch Ministry of Education, Culture and Science (Project code OL20-06), and the University of Amsterdam. -
Added first release version of new interface
exams2grasple()
for Grasple, a Dutch practice platform for mathematics and statistics education. It supportsnum
andschoice
questions which are exported to a zip file containing Grasple's JSON format. Note that currently importing cannot be done by users themselves; it requires a request for manual import by a Grasple team member. The work on the function was financially supported by the Dutch Ministry of Education, Culture and Science (Project code OL20-06), and the University of Amsterdam. -
Added new interface
exams2particify()
that can export exercises to a comma-separated values (CSV) format for import in the audience response system Particify (https://particify.de/), the successor to ARSnova. In particular, single-choice and multiple-choice exercises are fully supported while num and string question are converted to open-ended text questions. -
Added new interface
exams2kahoot()
that can export sufficiently simple single-choice and multiple-choice exercises to an Excel sheet viaopenxlsx::write.xlsx()
that can be imported by the game-based learning platform Kahoot! at https://kahoot.com/ (suggested by Rushad Faridi). Exercises are converted to plain text and questions must not exceed 120 characters, answers must not exceed 75 characters. -
New experimental function
moodle2exams()
that can take a Moodle XML quiz file with numeric, multichoice, shortanswer, and essay exercises and convert them to R/exams exercise files, either in R/Markdown (Rmd, default) or R/LaTeX (Rnw) format. If the text formatting is more advanced (e.g., containing mathematical notation or tables etc.) the function might not lead to fully satisfactory results but still provide a useful starting point for subsequent manual editing. -
New function
testvision2exams()
to convert TestVision's QTI 2.1 questions to R/exams exercise files, either in R/Markdown (Rmd, default) or R/LaTeX (Rnw) format. The supported TestVision question types are 'invul (numeriek)', 'een-uit-meer', 'meer-uit-meer', and 'open' which are converted tonum
,schoice
,mchoice
, andstring
, respectively. -
When running exercises via
knitr::knit()
errors in the R code will stop the evaluation now by default. This was always the default behavior for Rnw exercises (i.e., when processed withengine = "sweave"
) but now is also the default for Rmd exercises and for Rnw exercises viaengine = "knitr"
. In exercises processed viaknitr::knit()
it is possible to carry on with code evaluation after errors (the default inknitr
) by setting the chunk optionerror = TRUE
. Similarly, the default handling of warnings has been set towarning = FALSE
so that warnings are reported on the console rather than in the weaved/knitted exercises. -
Added new argument
texengine = "pdflatex"
toexams2pdf()
which is passed on totinytex::latexmk(..., engine = texengine)
. Provided thattinytex
support is installed, this option can also be set totexengine = "xelatex"
or"lualatex"
for example. -
Added
exams2blackboard(..., mathjax = NULL)
that optionally embeds the MathJax<script>
in each of the exercises so that mathematical content can be rendered by MathJax (rather than by the browser directly). The default isFALSE
unlessconverter = "pandoc-mathjax"
is used. But also for the default converters (producing MathML output)mathjax = TRUE
can be used. (Suggested and tested by Sean Quallen and Gabriele Cantaluppi.) -
Improvements in
exams2blackboard()
:- Rendering verbatim code chunks can be fixed from
<pre>
to<code>
tags iffix_pre = TRUE
(default) which is necessary in classical Blackboard systems. - Points can be specified through
expoints
. - Bug fix in when using
shuffle = TRUE
which used to lead to a missing closing bracket.
- Rendering verbatim code chunks can be fixed from
-
The auxiliary functions from
exams_eval()
now explicitly distinguish between multiple-choice (mchoice
) and single-choice (schoice
) exercises provided that thetype
of exercise is provided to the functions. Consequently,schoice
questions are now handled likenum
orstring
questions that can just be correct or wrong (and not likemchoice
questions anymore). Partial credits are only supported formchoice
questions. -
Various improvemens in
nops_scan()
, especially for scanning the boxes pertaining to the student registration ID. Rather than reading a very small area around each box and just shaving off its borders, a larger area is read now and then shaved iteratively. Hence, setting it is also easily possible to further increase thesize
of the area which may sometimes lead to improved scanning results. -
Improved handling of
reglength < 7
inexams2nops()
. Internally,reglength = 7
is still enforced (and thus necessary in the registration CSV file) but the initial IDs are fixed to "0" in the exam sheet and corresponding boxes ticked already. -
Improved NOPS language support: Added Czech (
cz
, Jindřich Marek) and Galician (gl
, Marta Sestelo & Nora M. Villanueva). -
New exercise template
vowels.Rmd
/vowels.Rnw
contributed by Maria Paola Bissiri. This is acloze
exercise withschoice
elements that is particularly well-suited for drop-down menus. It also illustrates how UTF-8 symbols (for Cardinal vowels) can be used in an exercise. -
Improved
exams2canvas()
(and underlyingexams2qti12()
): First, it is assured that the points per section/exercise are set correctly in the exported QTI code. Second, extendedexstringtype
support so thatessay
questions andfile
questions are also possible. -
Added new argument
exams2moodle(..., forcedownload = FALSE)
which when set toTRUE
can force all supplementary links to be downloaded (rather than opened in the browser). Only supported ifpluginfile = TRUE
. Ifforcedownload = FALSE
the behavior typically depends on the browser, user settings, and file type. -
Improvements in
read_exercise()
:exshuffle
now works forcloze
questions even if nosolutionlist
is provided. Generally, warnings have been improved. In particular, it is now checked whether the question list contains duplicated items for single-choice and multiple-choice exercises.- For cloze exercises with
##ANSWERi##
placeholders it is checked that all necessary placeholders occur exactly once. Otherwise a warning is issued about missing and/or duplicated placeholders.
-
Bug fix in
extract_environment()
underlyingread_exercise()
: When Markdown tables were formatted with just---
markup (rather that|---|
) some lines in the table were erroneously forced to lower case (reported by Ulrike Groemping). -
Improvement in
extract_command()
underlyingread_exercise()
: For Sweave exercises leading and trailing spaces are now also removed (as they always were for Markdown exercises, pointed out by Ulrich Morawetz). -
Interfaces
exams2html()
,exams2pdf()
, andexams2pandoc()
gained an argumentexshuffle = NULL
which can be modified to overrule theexshuffle
setting within an exercise (if any). For example, settingexams2xyz(..., exshuffle = FALSE)
retains the full answerlist without any permutation. -
When using
pandoc
as theconverter
to HTML with multiple options, e.g.,converter = "pandoc-mathml-ascii"
, then the options were collapsed to a single string whereasrmarkdown::pandoc_convert()
expects them as a vector (for checking them). Furthermore, internally, before callingpandoc_convert()
, the default for--wrap
is changed topreserved
(rather thanauto
) and for--columns
to99999
(rather than72
) in order to assure that tables are processed correctly, in particular for PDF output. -
Improved formatting in
exams2pdf()
forcloze
exercises with embedded##ANSWERi##
tags. The formatting of the question in that case is improved and the question list is not displayed anymore - analogously toexams2html()
. -
Bug fix for pandoc-based HTML conversion of LaTeX equations containing
\not
. These are now converted to\neq
,\nless
,\ngtr
,\nleq
,\ngeq
which are handled by pandoc correctly. Notably, this affects exercise templatecholesky.Rmd
. -
The
extol
metainformation is now processed more flexibly and reliably inread_metainfo()
: First, it is now enforced to be non-negative. If a negative value is provided by the exercise, a warning is issued and 0 is used instead. Second, for cloze exercises the length ofextol
needs to be either (a) 1 (and is then recycled for all num elements) or (b) the number of of num elements (and is then matched correspondingly) or (c) the number of all cloze elements (and then is assumed to match correspondingly). -
Improved the
string
representation inmetainfo
of exercises and corresponding printing inprint.exams_metainfo()
. For cloze exercises tolerances of numeric elements are reported. For single-choice and multiple-choice exercises lower-case letters (instead of integer indexes) are used to incide the correct elements (provided that there are not more than 26 elements). -
In all
mchoice
exercise templates provided within the package it is now assured that there is at least one correct and one wrong choice item. This is necessary for some learning management systems like Moodle or Canvas because otherwise they cannot be scored correctly (specifically when using partial credits). This necessitated changes in the following exercise templates in the package: anova, automaton, boxplots, cholesky, relfreq, scatterplot. Consequently, these templates are not fully backward compatible with their earlier versions. Further improvements were made in automaton and relfreq. -
matrix_to_mchoice()
gained a new argumentrestricted = FALSE
which can be set toTRUE
in order to assure that there is at least one correct and one wrong solution/comparison in the list of choice items. The optionrestricted = TRUE
is used in thecholesky.Rmd
/cholesky.Rnw
exercise now. -
In
exams2pdf()
when auto-generating a questionnaire, the_
is now escaped within the\exstring{}
command. -
Added
envir
argument inexams2qti12()
andexams2qti21()
that is passed on toxweave()
. This allows to re-use variables generated in one exercise in previous exercises, e.g., for creating a sequence of variables based on the same data set. However, some learning-management systems do not the drawing of random questions to the same replication. In that case, this will typically only be useful for exams with a single random replication. A notable exception are systems based on QTI 2.1 that can process the output ofexams2qti21(..., selection = "exam")
(like OpenOlat). -
In
xexams()
a new argumentrds = FALSE
was added that indicates whether the list returned by the function should also be saved as an RDS data file. Ifrds = TRUE
the file namemetainfo.rds
is used but alternativelyrds
can also be specified as a character file name to be used. The newrds
argument is leveraged inexams2blackboard()
,exams2moodle()
,exams2pdf()
,exams2html()
,exams2qti12()
, andexams2qti21()
, as well as other interfaces built on top of these. -
To avoid accidental deletion of files in pre-existing temporary directories
xexams()
now assures that thetdir
is not identical to the output directorydir
or the exercise directoryedir
. Also, the documentation oftdir
in the manual pages has been made even more explicit. -
In
{answerlist}
definitions forexams2pdf()
andexams2nops()
theenumii
counter is used correctly now (rather thanenumi
as in previous versions). As all templates provided in R/exams aimed to set the counter formatting that is used by default forenumii
in LaTeX (namely (a), (b), ...) the difference was never noticed up to now. -
Tolerate trailing white spaces in section names for environments like question, solution, answerlist, etc. in R/Markdown exercises.
-
Bug fix in
exams2moodle()
which did not processpluginfile
correctly when the supplementary files contained a+
symbol - as produced byexpar()
temporary files. The latter now also use_
instead of+
in the file name. (Reported by Nina Timmesfeld.) -
In
exams2pdf()
it is now assured thatname
andtemplate
are always of the same length (with a warning ifname
is too short). (Reported by JPMD.) -
When reading
{answerlist}
environments inread_metainfo()
now a warning is issued if there is further text in the same line as the begin or end of the environment. Also parsing the individual items now also works tab-indented items. (Reported by Sebastian Kupek.) -
Use
gfm
instead of the depracatedmarkdown_github
to convert to GitHub-flavored Markdown inexams2arsnova()
. As this uses hex encodings for character entities, the defaultsep
inmake_exercise_transform_pandoc()
is changed to a plain ASCII separator. -
Improve handling of duplicated graphics file names in
exams2pdf()
(Reported by Eduardo Uresti Charre). -
In
xweave()
thehighlight = FALSE
(default) option is now handled by actually settinghighlight = TRUE
in combination withlang = ""
for Rmd exercises. The background for this is that recent versions the LaTeX conversion ofpandoc
does not yield{verbatim}
environments for text-chunks anymore. Only plain chunks are converted to{verbatim}
.
- Properly test for
pandoc
availability innops_language()
examples.
-
New function
expar()
that helps to fix parameters (defined in the first code chunk of an exercise). For exampleexpar("deriv.Rmd", a = 1, c = 0)
generates a temporary file where the parametersa
andc
of thederiv.Rmd
exercise are fixed to the values1
and0
, respectively. This can then be processed withexams2xyz()
"as usual". -
Added
tinytex::latexmk()
as an alternative totools::texi2dvi()
when converting to PDF output (exams2nops()
,exams2pdf()
, ...) as suggested by Yihui Xie. The default is to use tinytexif(requireNamespace("tinytex"))
. However, by settingoptions(exams_tex = "tools")
instead ofexams_tex = "tinytex"
the old behavior can be enforced even if tinytex is installed. When no other LaTeX distribution (like TeXLive or MikTeX) is installed, yet,tinytex::install_tinytex()
can easily install the TeXLive-based TinyTeX system. -
Started enabling setting random
seed
s for each individual exercise in an exam, to enable custom exercise selection (e.g., when only putting together a single exam). Currently, only supported inxexams()
,exams2pdf()
,exams2html()
,exams2nops()
, andexams2blackboard()
. -
To make the fixed
seed
s above applicable to static exercises where only theexshuffle
tag is enabled, theseed
is not only set prior to weaving but also to reading the exercise. -
Improved random shuffling if
exshuffle
is numeric where previously the correct solution(s) were not completely randomly distributed across the possible answers. -
In addition to the vector or list specification of the exercise
file
in theexams2xyz()
interfaces,file
can now also be a matrix. This enables customization of the exact selection of exercises in each exam. Theseed
can be a matrix of the same dimension. Currently, only supported inxexams()
,exams2pdf()
,exams2html()
,exams2nops()
, andexams2blackboard()
. -
Improved NOPS language support: Added Korean (
ko
, Saewon Jeong), Japanese (ja
, Kohei Watanabe), Norwegian (Bokmal,no
, Tormod Boe), Slovenian (sl
, Matjaz Jeran), Vietnamese (vi
, Tran Thi Hoang Ha). Some languages require that markboth/pagestyle are set after\begin{document}
and that a\newpage
is included directly before\end{document}
, both of which were adapted correspondingly. -
Improvements in
nops_eval()
: Show exam ID in HTML report and round points to four digits. Thelanguage=
file paths do not have to be absolute anymore. Forinteractive
checking/fixing of registration IDs the width of scanned subimage is now adapted according to thereglength
. The default converter for the HTML report is now"pandoc"
. -
The actual writing of
nops_eval()
results has been modularized (with contributions from Kenji Sato). Differentnops_eval_write_<flavor>
functions can be plugged in. At the moment there is only the default writer (optimized for OpenOlat) but further flavors are planned (including a standalone workflow and one for Moodle). -
Function
nops_language()
is now exported as part of the user interface (only internal previously). Based on a language specification in a DCF file this sets up a list with language texts (possibly converted to HTML). -
New exercise
capitals.Rmd
/Rnw
that illustrates how a certain number of true/false items can be chosen randomly from a longer list. The exercise can also be switched frommchoice
toschoice
without any further necessary modifications. Finally, the exercise illustrates that UTF-8 encoding is needed for the Rmd version while in the Rnw version the few special characters can be coded in ASCII using LaTeX commands. -
All LaTeX templates that use
\fontfamily{phv}
now also gained a\usepackage{helvet}
to ensure that the corresponding LaTeX packages are installed. When usingtinytex
(see above) the corresponding LaTeX packages will be installed if not yet available upon first usage. -
In R/Markdown exercises the question/solution answerlist can now use not only
*
but also-
as the symbol for bullet points (suggested by Ben Kasel). -
Fixed a bug in
exams2pdf()
where the case of multiple duplicated supplement names was not handled correctly (reported by TwelveFifths on StackOverflow). -
Improved
xexams()
so that full file paths to exercise files also work on Windows. -
read_metainfo()
now assures a non-NULL
exname
. The default is to use "R/exams exercise". -
Fixed a bug in
extract_items()
which incorrectly dropped the last element in an answerlist if it was completely empty (even without a trailing space). This was a problem for cloze exercises with ##ANSWER## patterns, leading to a questionlist that was too short (reported by Julia Guggenberger). -
Various fixes and improvements in
exams2qti21()
(and thus inherited byexams2openolat()
): Support of cloze and essay type exercises has been much improved, fixing bugs in the XML and metainformation handling. String exercises work again. The internally-generated XML labels are more robust now avoiding spaces and leading integers. -
Dependency on R >= 3.4.0 now which enables plugging a custom svg device into
Sweave()
. In previous versions of the package a workaround was included that works for R < 3.4.0 (but required writing into the global environment which is avoided now).
- Avoid execution of examples on CRAN that would necessitate
pandoc
availability. Currently, thermarkdown
package but not the underlyingpandoc
support is installed for the CRAN checks on Solaris and OS X.
-
Added new interface
exams2canvas()
for the open-source Canvas learning management system (https://www.instructure.com/canvas). This is essentially a convenience wrapper toexams2qti12()
along with a few Canvas-specific modifications of the QTI XML specification. The function has only received limited testing so far and is likely to improve in future version. The supported exercise types are num, schoice, mchoice, and string (but not cloze, yet). -
The default in
exams2moodle()
has been changed toconverter = "pandoc-mathjax"
. Thus, instead of relying on the browser to render mathematical notation from MathML, the MathJax plugin is now assumed to be enabled on the Moodle server (which is the default when setting up a new Moodle server). To employ MathML one can useconverter = NULL
orconverter = "pandoc-mathml"
etc. See the discussion at https://www.R-exams.org/tutorials/math/ for more details. -
exams_skeleton()
has been updated. The new default ismarkup = "markdown"
as this appears to be the more common choice for newcomers to R/exams. Furthermore, the list of exercises in thedemo-*.R
scripts has been updated to use newer exercises as well (along with links to the web page: https://www.R-exams.org/templates/). -
Assure in
nops_scan()
that scanned image file names contain no spaces. -
Fixed bugs in
exams2qti21()
(and henceexams2openolat()
) for certain combinations ofmaxchars
specifications instring
exercises. -
Added
\usepackage[...]{babel}
support tolanguage
specification ofexams2nops()
. In addition to a newBabel: ...
field, the DCF file can also provide aHeader: ...
field, e.g., for changing the font encoding or adding further options. -
For convenience, when
exams2html(..., converter = "pandoc-mathjax")
,mathjax = TRUE
is added automatically (unless explicitly switched off). -
Added
envir
argument inexams2moodle()
that is passed on toxweave()
. -
The
print()
method forexams_metainfo
objects received a newblock
argument so thatprint(exams_metainfo(x), which = 1, block = 5)
prints the metainformation (type/solution) of the first exam in the objectx
(output from anyexams2xyz()
function) in blocks of 5 exercises. -
For
exams2openolat()
the handling of the internalpandoc
fixups was extended to replacealign="right"
in tables withstyle="text-align: right;"
(and analogously for"left"
and"center"
). -
In
nops_eval()
duplicated sheets (original and replacement) were sometimes omitted even if the student ID was just000000
(i.e., not read correctly bynops_scan()
). A check has been added that avoids this. -
Changed the default of
fix_choice
inexams2arsnova()
. Current versions of the official ARSnova server (arsnova.eu) have the LaTeX rendering in the choice options switched off. Hence, by settingfix_choice = TRUE
by default the LaTeX math markup is removed. -
Add
\setkeys{Gin}{keepaspectratio}
in the defaultexams2pdf()
template forpandoc
(plain8.tex
) and inexams2nops()
. This is necessitated by a change inpandoc
that now always setsheight=\textheight
whenwidth=
is specified (see https://pandoc.org/faqs.html).
-
nops_scan()
gained a new argumenttrim = 0.3
that controls how much of check boxes is trimmed in order to shave the borders prior to determining the average gray level. In versions up to 2.3-1 this implicitly had a value of0.25
hard-coded. Now the default was increased to0.3
in order to shave box borders more reliably. -
nops_scan()
tries to process registration numbers more reliably. In case one of the registration columns contains more than one potential mark, the heuristics of determining the intended mark have been improved. -
New exercise
confint3.Rmd
/Rnw
that illustrates how to use the"verbatim"
clozetype
for Moodle. The exercises yields 100% of the points for the correct solution based on t quantiles but still 50% for a partially correct solution based on normal quantiles (contributed by Ulrike Groemping). -
nops_eval()
gained a new argumentlabels = NULL
that can be used to give labels for the marks that differ from the default(length(mark) + 1):1
. -
In all LaTeX templates that use Helvetica (phv) as the font for the main text, this is also used now in math mode by
\usepackage[helvet]{sfmath}
(rather than\usepackage{sfmath}
, as employed previously). In particular, this also affectsexams2nops()
andtex2image()
output. -
In
exams2nops()
theheader
argument can also be specified simply asheader = "\\mycommand{value}"
rather thanheader = list(mycommand = "value")
. The former is more flexible, e.g., for passing additional options or more complex commands. Internally, the former is turned into an unnamed list which is then processed correspondingly byexams2pdf()
. -
Various bug fixes in
exams2qti21()
pertaining to points and correct/incorrect computations for schoice/mchoice exercises. -
New language support in exams2nops: Russian (
ru
, contributed by Boris Demeshev) and Serbian (sr
, contributed by Tatjana Kecojevic). Croatian (hr
) was streamlined along with Serbian (by Tatjana Kecojevic). -
In
include_supplement()
an argumenttarget = NULL
was added to optionally include the supplement with a different file name than the original file name. -
Bug fix in the
pandoc
interface which previously erroneously produced unbalancedtags in certain situations.
-
Rather than fully importing the basic dependencies
stats
,graphics
,grDevices
,tools
, andutils
, the required functions are imported selectively only. (Issue raised by Florian Oswald.)
-
Added new interface
exams2openolat()
for the open-source OpenOlat learning management system (https://www.openolat.com/). This is only a convenience wrapper toexams2qti12()
orexams2qti21()
with some dedicated tweaks for optimizing MathJax output for OpenOlat. -
When using
exams2html(..., mathjax = TRUE)
for testing purposes, mathjax.rstudio.com is used now rather than cdn.mathjax.org which is currently redirecting and will eventually be shut down completely. -
Bug fixes and improvements in HTML transformers:
- Only
="file.ext"
(with="
) is replaced now by Base 64 version. href="file.ext"
is replaced byhref="file.ext" download="file.ext"
prior to Base 64 replacement.alt="file.ext"
anddownload="file.ext"
are preserved without Base 64 encoding.
- Only
-
In
exams2html()
and other interfaces based onmake_exercise_transform_html()
base64 = TRUE
now uses Base 64 encoding for all file extensions (known to the package) whereasbase64 = NULL
only encodes image files (previous default behavior). -
After setting a random seed
exams2nops()
andexams2pdf()
now yield the same random versions of the exercises. Previously, this was not the case becauseexams2nops()
internally generates a single random trial exam first for a couple of sanity checks. Now, the.GlobalEnv$.Random.seed
is restored after generating the trial exam. -
Fixed the support for
nsamp
argument inexams2nops()
. Furthermore, current limitations ofexams2nops()
are pointed out more clearly and error messages and edge cases caught. -
Include further file URIs for Base 64 supplements, in particular .sav for SPSS data files.
-
New language support in
exams2nops()
: Croatian (hr
, contributed by Krunoslav Juraic), Danish (da
, contributed by Tue Vissing Jensen & Jakob Messner), Slovak (sk
, contributed by Peter Fabsic), Swiss German (gsw
, contributed by Reto Stauffer), Turkish (tr
, contributed by Emrah Er). Furthermore, Portuguese has been distinguished intopt-PT
(Portuguese Portuguese) vs.pt-BR
(Brazilian Portuguese) withpt
defaulting to the former (contributed by Thomas Dellinger). -
include_supplement(..., dir = "foo")
now also works if"foo"
is sub-directory to the exercise directory (edir
). -
Allow varying points within a certain exercise in
nops_eval()
. -
exams2blackboard(..., base64 = FALSE, ...)
was erroneously ignored. No matter how base64 was specified essentiallybase64 = TRUE
was used, it is honored again now. -
Fixed a bug in
stresstest_exercise()
where the "rank" (previously called "order") of the correct solution was computed incorrectly. Enhancement in plots and labels. -
Fixed a bug for
tex2image(..., tikz = TRUE)
where erroneously\usetikzlibrary{TRUE}
was included. Alsotex2image(..., Sweave = TRUE)
(the default) did not run properly on Windows, fixed now. -
New function
include_tikz()
that facilitates compiling standalone tikz figures and including it in an exercise (especially for non-LaTeX-based output). -
Added support for
\tightlist
(as produced bypandoc
) in all current LaTeX templates as well asexams2nops()
. -
\exshuffle{<num>}
can now also be used for schoice exercises with more than one true answer. In a first step only one of the true answers is selected and then<num>-1
items from the false answers. -
Better warnings if
\exshuffle{<num>}
could not be honored due to a lack of sufficiently many (suitable) answer alternatives. -
Enable passing of
envir
argument fromexams2html()
toxweave()
in case of Rmd exercises. -
Bug fix in CSV export of
exams2arsnova()
. Recent ARSnova versions use "mc" (rather than "MC") and "abcd" (rather than "SC") for multiple-choice and single-choice questions, respectively.
-
A new web page accompanying the package is now available at https://www.R-exams.org/. This already contains a first overview of the package, some tutorials, and a gallery of all exercise templates provided in the package. More tutorials will follow in the form of blog articles.
-
A few exercise templates were slightly changed or improved for the new web page. Hence slightly different formulations or formatting may be used in some places.
-
tex2image()
has been rewritten to use the LaTeX class {standalone} instead of manually handling boxes and cropping of the PDF output. For converting to raster graphics like PNG (the default), R packagemagick
is now used rather thansystem("convert ...")
calls to ImageMagick on the system. For conversion to SVG it is still necessary to callpdfcrop
andpdf2svg
on viasystem()
. -
More fixups in LaTeX code prior to processing with
pandoc_convert()
, especially\url{...}
is replaced by\href{...}{\texttt{...}}
now to ensure typesetting in typewriter font. -
When including R input code chunks in Rmd exercises, code decoration is switched off by default now (knitr option
highlight = FALSE
) so that the output can be combined with standard LaTeX templates. The default can be changed either in the individual Rmd code chunks, e.g., {r, highlight=TRUE}, or by settinghighlight = TRUE
in the call toxweave()
. For the latter case a new LaTeX templateplain-highlight.tex
is also provided, e.g., to be used via:exams2pdf("lm.Rmd", highlight = TRUE, template = "plain-highlight")
-
exams2pdf()
gained an argumenttexdir = NULL
. By default a temporary directory is created for running LaTeX (and cleaned up subsequently). But usingtexdir = "/path/to/dir"
an output directory can be specified so that the LaTeX files can be inspected, e.g., for debugging. -
In
exams2pdf()
thecontrol
argument was extended to encompass a newcloze.collapse
option to fine tune the display of mchoice/schoice alternatives within a cloze subexercise. By default the separator is" / "
for collapsing the choice alternatives. Alternatively, for example, it could be set to"\\\\"
to add line breaks between the alternatives. Finally,control = list(cloze.collapse = "enumerate")
uses a nested enumerate environment. -
nops_scan()
now uses thedir
argument not only for the output ZIP file but also for the input PDF/PNG image files. -
exams2pdf()
and hence alsoexams2nops()
now try toiconv()
the header information to the specifiedencoding
(if any) rather than relying on header information (such as institution name etc.) are specified in LaTeX.
-
Added new interface
exams2pandoc()
which can generate a wide variety of output formats viapandoc
. The main purpose is to generate Docx output files (or ODT). The output format can be controlled through a template in either LaTeX, HTML, or Markdown format. -
New function
stresstest_exercise()
for "stress testing" of exercises, i.e., rerunning the exercise many times and capturing how the outcome depends on the simulated input parameters. -
New (and still somewhat experimental) function
match_exams_call()
that can be employed to query whichexams2xyz()
function was called to create a certain exercise/exam. Only works from R 3.2.0 onwards. -
Bug fix in
read_exercise()
for the case whenexshuffle
is integer. This was not correctly reflected inmetainfo$length
. -
Avoid
formatting in questionlist/solutionlist when using
converter = "pandoc"
in the conversion to HTML. -
Formatting of exercises without "solution" section improved in
exams2html()
andexams2moodle()
. -
In
exams2qti12()
the case of no answer was not handled correctly ifpartial = FALSE, negative = ...
was used. No answer was handled as incorrect (= negative points) rather than neutral (= zero points) but has been fixed now.
-
Added first release version of
exams2blackboard()
. This is essentially based onexams2qti12()
but incorporates Blackboard's own flavor of QTI 1.2. It is still likely to change due to improvements in future versions. After uploading a test into Blackboard the material will appear under "Course Tools": The test will be available in "Tests" and each pool within the test will also appear in "Pools". -
Added a new convenience function
include_supplement()
which facilitates including static supplement files (e.g., graphics or datasets). This essentially just callsfile.copy()
but facilitates finding supplement files that are available along with the Rnw/Rmd exercise files. -
xweave()
gained an extra argumentsvg = FALSE
to optionally produce scalable vector graphics (SVG) instead of PNG for later rendering into HTML. All HTML-basedexams2xyz()
functions gained ansvg = FALSE
argument that can be set toTRUE
to produce SVG instead of PNG. Base64 encoding is also used for SVG graphics by default. -
xweave()
gained an argumentengine = NULL
that can optionally be set toengine = "knitr"
to enable processing Rnw exercises byknitr::knit()
instead of the defaultutils::Sweave()
. -
exams2nops()
now supports registration IDs with more than 7 digits. Up to now, 7 digits were hard-coded but now values of 8, 9, or 10 are also possible by setting the argumentreglength
inexams2nops()
accordingly. -
In
exams2nops()
the argumentblank
can now be a vector of length 2 with the number of blank pages before and after the extra "pages". -
Added arguments
samepage = FALSE
andtwocolumn = FALSE
inexams2nops()
. If set toTRUE
, samepage adds a {samepage} environment around the question and solution lists in order to prevent page breaks within these lists. And the twocolumn option, if set toTRUE
, is added in the\documentclass
so that the exam is displayed in two-column format. -
New language support in
exams2nops()
: Hungarian (hu
, contributed by Gergely Daroczi and Denes Toth), Finnish (fi
, contributed by Klaus Nordhausen). Improvements in: Portugese (pt
, contributed by Mauricio Calvao). -
Improvements and bug fixes in
exams2tcexam()
. Various HTML tags are now supported in the development version by adding a new [html] tag in TCExam. This has been integrated into UIBK's version of TCExam but is not in the official release yet. -
Fixed a bug in
exams2html()
with optionsolution = FALSE
orquestion = FALSE
. Now these correctly suppress the corresponding element of the exercise. In previous versions only the header had been set toNA
erroneously. -
exams2moodle()
can now optionally turn "string" exercises in "essay" quiz items rather than the default "shortanswer". Various customization options can be set theexextra
metainformation. The most important options are illustrated in the new "essayreg" exercise. -
\exshuffle{}
can now also be used inread_exercise()
for subsampling rather than permutations only, e.g., via \exshuffle{3}. This first permutes the alternatives, always uses the first permuted true (if any), the first permuted false (if any), and then the first remaining alternatives. This facilitates static schoice/mchoice exercises which have many alternatives but should only use a limited number (say 5 forexams2nops()
) in each random replication. -
Bug fix in
extract_extra()
which preventedexextra
metainformation from being read correctly in the previous version. -
Improvement in
xexams()
to better support using the same exercise template several times within the same exam (e.g., for generating a single PDF with multiple versions of the same exercise). The temporary file names employed are now run throughmake.unique()
first. -
Improvement in
exams2pdf()
to assure that duplication in file names for graphics (across exercises within the same exam) are handled correctly. -
Within several
exams2xyz()
functionsgsub(...)
calls were changed togsub(..., fixed = TRUE)
for replacing placeholders that potentially have slashes. -
Updated
exams2arsnova()
to assure that\( ... \)
instead of$ ... $
is used for inline math. Also the JSON output was augmented with (almost empty) "publicPool" information to keep current ARSnova versions happy. -
New exercises "deriv"/"deriv2" (both in Rnw and Rmd) that illustrate a simple question about derivatives to be solved by the product rule. The "deriv" exercise is in num format and "deriv2" is the same in schoice (suggested by Martin Obradovits).
-
The
tth
/ttm
-based HTML conversion now makes sure that empty question/solution/list elements remain empty and do not introduce line breaks. -
Added copies of
num_to_schoice()
,num_to_tol()
, ... callednum2schoice()
, andnum2tol()
, ...
-
Exercises can now either be in Rnw format (R/LaTeX, as in previous versions) or in Rmd format (R/Markdown). A new function
xweave()
is provided for weaving either format by either callingutils::Sweave()
for Rnw andknitr::knit()
for Rmd. If Rmd exercises are used, the weaved exercises require conversion bypandoc
(see below). -
The vignettes have not yet been updated to incorporate the R/Markdown information or the new interfaces described below. For examples and some introductory comments,
exams_skeleton()
can generate demo scripts. -
Added new
make_exercise_transform_pandoc()
transfomer generator, interfacingrmarkdown::pandoc_convert()
. This provides an additional option for generating HTML output and additionally enables Markdown output (e.g., for ARSnova, see below). -
Added new interface
exams2nops()
for generating PDF exams that can be printed, scanned, and automatically evaluated. Accompanying functionsnops_scan()
(using thepng
package) andnops_eval()
are provided as well. The "nops" exams can be internationalized. So far there is language support for English (en
), Dutch (nl
, contributed by Niels Smits), French (fr
, contributed by Arthur Allignol), German (de
), Italian (it
, contributed by Domenico Zambella), Portuguese (pt
, contributed by Fabian Petutschnig), Romanian (ro
, contributed by Cristian Gatu), Spanish (es
, contributed by Maria Kogelnik). -
Added new interface
exams2arsnova()
for exporting exams/quizzes to the interactive audience response system ARSnova (arsnova.eu). This can either create JSON output files (viaRJSONIO::toJSON
) that need to be manually imported into ARSnova - or the JSON string can directly be imported into an active ARSnova session (viaRCurl
). -
Added
abstention
option in schoice/mchoice questions inexams2moodle()
. This can also be set directly through an\exabstention{}
tag in the corresponding Rnw exercise. -
Added various convenience functions for creating single- or multiple-choice questions from either a single numeric result (
num_to_schoice
) or from a matrix solution (matrix_to_schoice
,matrix_to_mchoice
,det_to_schoice
). -
Added various convenience functions for formatting numbers within exercises:
fmt()
for conveniently displaying a certain number of digits,round2()
for rounding away from zero,char_with_braces()
for adding braces to negative numbers, and atoLatex()
method for"matrix"
objects. -
tex2image()
now also supportsformat = "svg"
viapdfcrop
followed bypdf2svg
(instead of ImageMagick'sconvert
). -
Fixed bug in file paths created for "media" supplements in QTI XML formats. File names had an unnecessary trailing slash which lead to unrecognized suffixes in some browsers.
-
Added an optional
transform = NULL
argument inexams2pdf()
. -
Avoid
require(...)
calls for suggested packages.
-
The default encoding in
exams2moodle()
is now ensured to be"UTF-8"
rather than"utf8"
for improved cross-platform compatibility. -
\exshuffle{TRUE}
is now also used inread_exercise()
so that schoice/mchoice exercises (or schoice/mchoice components in cloze exercises) are shuffled upon reading exercises. This facilitates static schoice/mchoice exercises. -
New cloze type "verbatim" which is not processed further (e.g., to include Moodle control structures).
-
Empty questionlists for readily prepared Moodle cloze exercises can now be handled in
exams2pdf()
. -
Functions from non-imported packages (e.g., only suggested) are now always called with package::function to make R-devel checks happy.
-
Bug fix in processing of
duration
inexams2qti12()
.
-
New version accompanying publication of exams version 2 in the Journal of Statistical Software, 58(1), 1-36. See
vignette("exams2", package = "exams")
for more details. -
License extended from GPL-2 to GPL-2 | GPL-3.
-
New
exams2qti21()
interface for generating QTI 2.1 (rather than QTI 1.2) XML. So far this was only tested with the ONYX Player within OpenOLAT. Currently, some switches do not appear to fully work, yet, at least within ONYX. The function still needs further thorough testing and might be further improved in future versions. -
Added
verbose = FALSE
option toxexams()
andexams2xyz()
interfaces. If set toTRUE
, progress information on the exam generation is printed. -
The XML output in
exams2qti12()
sometimes did not yield fully correct QTI 1.2 output. This has been fixed now and test output was validated against the QTI 1.2 DTD. -
Added a new
pluginfile = TRUE
option inexams2moodle()
. By default, supplementary files (graphics, data files, etc.) are now included using Moodle's Pluginfile mechanism. This may not work with older versions of Moodle (< 2.5) but in newer versions it is better and more robust than using data URIs. -
Added
fix_num = TRUE
option inexams2qti12()
interface. Because OLAT does not display the correct answer of response_num items with tolerances (vargt/varlt), a workaround was added: In addition to the version with tolerances an exact equality is checked (varequal), adding and removing a 0.00001 points. Thus, evaluation of the exams is not affected but the display in OLAT is fixed. -
The {answerlist} in the {solution} environment can now also be omitted (in mchoice, schoice, cloze exercises). It is still recommended to include it but all
exams2xyz()
interfaces can process exercises correctly that do not provide it.
- Changed
tests/encodings.R
to useencoding = "Latin-9"
(rather than"latin9"
which does not work on Solaris, see?iconv
).
-
The new function
exams_skeleton()
helps users to create their first exam. It creates a directory with ademo.R
script illustrating the use of the variousexams2xyz()
interfaces. Subdirectories with copies of all demonstration exercise Rnw files and templates for different output formats (LaTeX, HTML, or XML) are also created. -
Encodings are now explicitly supported by all
exams2xyz()
interfaces. Essentially, the encoding argument is just passed on toSweave()
and the user has to make sure that the template (for LaTeX, HTML, or XML output) has the appropriate encoding.exams_skeleton()
also supports this and especially the encoding UTF-8 is now fully integrated. The encodings ISO-8859-1 (aka latin1) or ISO-8859-15 (aka latin9) have also been tested while other encodings may need further touch-ups. Furthermore, the developers recommend to not rely on encodings but to code special characters with their LaTeX commands because these work in all locales on all platforms. -
The new function
exams_eval()
captures various types of evaluation policies for exams (with/without partial credits for multiple choice, with/without negative points). The resulting functions aid generation of e-learning exams or evaluation of an exam "by hand". -
If the
edir
argument is specified inexams2xyz()
, then all files in edir and its subdirectories are searched recursively. -
Asymmetric tolerance intervals are not supported in the
exams2xyz()
interfaces anymore. Instead, vectors of solutions in cloze exercises can have vectors of tolerances. -
The original
exam.tex
/solution.tex
templates have been renamed tooexam.tex
/osolution.tex
. The functionexams()
needs to be used with oexam/osolution while exam/solution are now optimized forexams2pdf()
. The reason is that the questionnaire command has been changed. For a multiple-choice question with five answers and correct solutions 1 and 4, say,exams()
produces \exmchoice{X}{ }{ }{X}{ } whileexams2pdf()
now uses \exmchoice{X}[ ][ ][X][ ], i.e., with optional instead of required arguments. The latter solution is not restricted to multiple-choice questions with exactly five answers anymore.
- Several functions now use
find.package()
rather than.find.package()
internally (as the latter will be deprecated soon).
- Enforced .tex suffix in LaTeX files used internally by
exams2pdf()
. The lack of .tex suffixes led to errors on certain Windows systems.
-
New demo exercises:
confint2.Rnw
shows how a confidence interval can be embedded into a cloze question (for all version 2 interfaces).dist.Rnw
is a very short and simple example that is intelligible across a wide range of disciplines (not for statistics audiences only).dist2.Rnw
is an extension ofdist.Rnw
that is written as a cloze.
-
Questions in
exams2moodle()
were forced to be-formatted, now embedded in normal HTML (without
tags).
-
Supplementary files had not been correctly inferred on Solaris systems. This has been fixed now so that the package behaves the same across different platforms.
-
The code underlying the old
"exams"
vignette now avoids opening PDF viewers.
- Major revision of the
exams
package, adding flexible support for generation of exams in different formats including PDF, HTML, Moodle XML, and QTI 1.2 (for OLAT). This new version of the exams package (called "version 2") is described in a new vignette:vignette("exams2", package = "exams")
-
Added an {answerlist} environment in the LaTeX templates (
inst/tex
) so that each \item in the {answerlist} is automatically labeled with (a), (b), (c), ... -
Replaced the old {itemize} environments with {answerlist} in
anova.Rnw
,boxplots.Rnw
,relfreq.Rnw
,scatterplot.Rnw
,ttest.Rnw
. (The resulting PDFs do not change.)
- Small improvements in solution string formatting.
- The argument
nsamp
was added toexams()
in order to allow sampling more than one exercise from each element of the argumentfile
.
-
The man page of
exams()
was modified to use suitable markup commands. -
The questions in the ANOVA example were slightly changed to more explicitly indicate which hypothesis is tested. A typo in the vignette was fixed.
-
New version accompanying publication in the Journal of Statistical Software. See
vignette("exams", package = "exams")
for more details. -
New CITATION file pointing to the JSS paper, see
citation("exams")
.
-
The possible types of questions were extended to allow also text results. The new type is specified by "string".
-
To specify the allowed tolerance for numeric solutions now different tolerances can be supplied for falling below or exceeding the true value via
\extol{lower}{upper}
. -
The "discussion" section in the vignette was extended to include several remarks and pointers on strategies for exercise generation.
-
First CRAN release version.
-
New
vignette("exams", package = "exams")
that explains how to use the package. -
New set of exercises for illustation in examples and vignette.
- First stable version for internal use at WU Wien.