summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/xsim
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-11-11 03:00:42 +0000
committerNorbert Preining <norbert@preining.info>2019-11-11 03:00:42 +0000
commit0e71c26d9aa79c6e92c3095d6c71f28a566e6054 (patch)
treeb7657bd03108b5ca35e61578ab27b67bd098bf4e /macros/latex/contrib/xsim
parent838842fa4625160270947ca654e7492e3c7afc44 (diff)
CTAN sync 201911110300
Diffstat (limited to 'macros/latex/contrib/xsim')
-rw-r--r--macros/latex/contrib/xsim/README3
-rw-r--r--macros/latex/contrib/xsim/code/xsim.auxfile.code.tex8
-rw-r--r--macros/latex/contrib/xsim/code/xsim.base.code.tex14
-rw-r--r--macros/latex/contrib/xsim/code/xsim.collections.code.tex4
-rw-r--r--macros/latex/contrib/xsim/code/xsim.environments.code.tex2
-rw-r--r--macros/latex/contrib/xsim/code/xsim.exercises.code.tex4
-rw-r--r--macros/latex/contrib/xsim/code/xsim.goals.code.tex6
-rw-r--r--macros/latex/contrib/xsim/code/xsim.interface.code.tex24
-rw-r--r--macros/latex/contrib/xsim/code/xsim.properties.code.tex4
-rw-r--r--macros/latex/contrib/xsim/code/xsim.sty4
-rw-r--r--macros/latex/contrib/xsim/code/xsim.translations.code.tex25
-rw-r--r--macros/latex/contrib/xsim/doc/examples/xsim.texsx-498299.pdfbin0 -> 42513 bytes
-rw-r--r--macros/latex/contrib/xsim/doc/examples/xsim.texsx-498299.tex75
-rw-r--r--macros/latex/contrib/xsim/doc/xsim-manual.cls14
-rw-r--r--macros/latex/contrib/xsim/doc/xsim.history3
-rw-r--r--macros/latex/contrib/xsim/doc/xsim_manual.pdfbin1229505 -> 1232911 bytes
-rw-r--r--macros/latex/contrib/xsim/doc/xsim_manual.tex24
17 files changed, 177 insertions, 37 deletions
diff --git a/macros/latex/contrib/xsim/README b/macros/latex/contrib/xsim/README
index 68012b839a..0aa35c006f 100644
--- a/macros/latex/contrib/xsim/README
+++ b/macros/latex/contrib/xsim/README
@@ -1,5 +1,5 @@
--------------------------------------------------------------------------
-XSIM 2019/11/02 v0.15
+XSIM 2019/11/10 v0.16
eXercise Sheets IMproved
@@ -83,6 +83,7 @@ The xsim package consists of the example files:
xsim.texsx-370642.tex, xsim.texsx-370642.pdf
xsim.texsx-391530.tex, xsim.texsx-391530.pdf
xsim.texsx-395273.tex, xsim.texsx-395273.pdf
+ xsim.texsx-498299.tex, xsim.texsx-498299.pdf,
xsim.texwelt-6698.tex, xsim.texwelt-6698.pdf
xsim.texwelt-15093.tex, xsim.texwelt-15093.pdf
xsim.texwelt-23968.tex, xsim.texwelt-23968.pdf
diff --git a/macros/latex/contrib/xsim/code/xsim.auxfile.code.tex b/macros/latex/contrib/xsim/code/xsim.auxfile.code.tex
index 8018694616..d308a9ccc3 100644
--- a/macros/latex/contrib/xsim/code/xsim.auxfile.code.tex
+++ b/macros/latex/contrib/xsim/code/xsim.auxfile.code.tex
@@ -58,7 +58,7 @@
\xsim_write_to_aux:x { \token_to_str:N \XSIM {#1} #2 }
}
-\AtBeginDocument
+\xsim_at_begin_document:n
{
\iow_now:Nx \@auxout
{ \token_to_str:N \providecommand \token_to_str:N \XSIM [1] {} }
@@ -69,7 +69,7 @@
\xsim_if_use_aux:F
{
\iow_new:N \l__xsim_aux_file_iow
- \AtBeginDocument
+ \xsim_at_begin_document:n
{ \iow_open:Nn \l__xsim_aux_file_iow { \c_sys_jobname_str .xsim } }
}
@@ -117,7 +117,7 @@
{ \prop_gput:cnn {g__xsim_list_#1_prop} {####1} {} }
}
}
- \AtBeginDocument
+ \xsim_at_begin_document:n
{
\seq_gclear:c {g__xsim_list_recorded_#1_seq}
\seq_set_eq:Nc \l__xsim_tmpa_seq {g__xsim_list_#1_seq}
@@ -178,7 +178,7 @@
\cs_new_protected:Npn \xsim_empty_lists:
{ \bool_set_true:N \l__xsim_empty_lists_bool }
-% update list -- should be used inside \AtEndDocument:
+% update list (should be used inside \xsim_at_end_document:n):
% #1: name
\cs_new_protected:Npn \xsim_update_list:n #1
{
diff --git a/macros/latex/contrib/xsim/code/xsim.base.code.tex b/macros/latex/contrib/xsim/code/xsim.base.code.tex
index df767976b6..b1fa20bff7 100644
--- a/macros/latex/contrib/xsim/code/xsim.base.code.tex
+++ b/macros/latex/contrib/xsim/code/xsim.base.code.tex
@@ -27,6 +27,20 @@
% ----------------------------------------------------------------------------
\XSIMmodule{base}{basic functionality of the package}
+\tl_new:N \g_xsim_end_document_hook_tl
+\tl_new:N \g_xsim_begin_document_hook_tl
+
+\AtBeginDocument { \tl_use:N \g_xsim_begin_document_hook_tl }
+\AtEndDocument { \tl_use:N \g_xsim_end_document_hook_tl }
+
+\cs_new_protected:Npn \xsim_at_begin_document:n #1
+ { \tl_gput_right:Nn \g_xsim_begin_document_hook_tl {#1} }
+
+\cs_new_protected:Npn \xsim_at_end_document:n #1
+ { \tl_gput_right:Nn \g_xsim_end_document_hook_tl {#1} }
+
+% ----------------------------------------------------------------------------
+
\xsim_load_modules:n {auxfile}
% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/xsim/code/xsim.collections.code.tex b/macros/latex/contrib/xsim/code/xsim.collections.code.tex
index 3f5d2a1b86..3097981b74 100644
--- a/macros/latex/contrib/xsim/code/xsim.collections.code.tex
+++ b/macros/latex/contrib/xsim/code/xsim.collections.code.tex
@@ -380,13 +380,13 @@
% ----------------------------------------------------------------------------
-\AtBeginDocument
+\xsim_at_begin_document:n
{
\xsim_get_collections:
\xsim_activate_collection:n {all~ exercises}
}
-\AtEndDocument
+\xsim_at_end_document:n
{
\xsim_deactivate_collection:n {all~ exercises}
\xsim_foreach_collection:n { \xsim_update_list:n {collection:#1} }
diff --git a/macros/latex/contrib/xsim/code/xsim.environments.code.tex b/macros/latex/contrib/xsim/code/xsim.environments.code.tex
index daaae03211..2f9c870b71 100644
--- a/macros/latex/contrib/xsim/code/xsim.environments.code.tex
+++ b/macros/latex/contrib/xsim/code/xsim.environments.code.tex
@@ -404,7 +404,7 @@
}
}
}
-\cs_generate_variant:Nn \xsim_insert:nnnn {nV,VV,nnnV}
+\cs_generate_variant:Nn \xsim_insert:nnnn {nV,VV,nnnV,xx}
% #1: type
% #2: id
diff --git a/macros/latex/contrib/xsim/code/xsim.exercises.code.tex b/macros/latex/contrib/xsim/code/xsim.exercises.code.tex
index 9eb469fee4..f9cb706410 100644
--- a/macros/latex/contrib/xsim/code/xsim.exercises.code.tex
+++ b/macros/latex/contrib/xsim/code/xsim.exercises.code.tex
@@ -540,7 +540,7 @@
}
}
-\AtBeginDocument
+\xsim_at_begin_document:n
{
\xsim_foreach_exercise_type:n
{
@@ -549,7 +549,7 @@
}
}
-\AtEndDocument
+\xsim_at_end_document:n
{
\xsim_if_clear_aux:T
{
diff --git a/macros/latex/contrib/xsim/code/xsim.goals.code.tex b/macros/latex/contrib/xsim/code/xsim.goals.code.tex
index c03fe14483..6e482737b5 100644
--- a/macros/latex/contrib/xsim/code/xsim.goals.code.tex
+++ b/macros/latex/contrib/xsim/code/xsim.goals.code.tex
@@ -54,7 +54,7 @@
{ \fp_new:c {g__xsim_total_goal_#1_fp} }
\fp_if_exist:cF {g__xsim_total_goal_recorded_#1_fp}
{ \fp_new:c {g__xsim_total_goal_recorded_#1_fp} }
- \AtBeginDocument
+ \xsim_at_begin_document:n
{
\xsim_foreach_exercise_type:n
{
@@ -262,7 +262,7 @@
\xsim_new_aux_cs:cpn {totalgoal} #1#2
{ \fp_gset:cn {g__xsim_total_goal_#1_fp} {#2} }
-\AtBeginDocument
+\xsim_at_begin_document:n
{
\seq_map_inline:Nn \l__xsim_goals_seq
{
@@ -272,7 +272,7 @@
}
}
-\AtEndDocument
+\xsim_at_end_document:n
{
\seq_map_inline:Nn \l__xsim_goals_seq
{
diff --git a/macros/latex/contrib/xsim/code/xsim.interface.code.tex b/macros/latex/contrib/xsim/code/xsim.interface.code.tex
index 0c1251d113..ba409d9758 100644
--- a/macros/latex/contrib/xsim/code/xsim.interface.code.tex
+++ b/macros/latex/contrib/xsim/code/xsim.interface.code.tex
@@ -498,6 +498,14 @@
% ----------------------------------------------------------------------------
+\NewDocumentCommand \XSIMatbegindocument {+m}
+ { \xsim_at_begin_document:n {#1} }
+
+\NewDocumentCommand \XSIMatenddocument {+m}
+ { \xsim_at_end_document:n {#1} }
+
+% ----------------------------------------------------------------------------
+
\NewDocumentCommand \ForEachPrintedExerciseByType {+m}
{ \xsim_foreach_exercise_type_id:nn {print} {#1} }
@@ -601,11 +609,23 @@
% ----------------------------------------------------------------------------
-\NewDocumentCommand \printsolution {O{}mm}
- { \xsim_insert:nnnn {#2} {#3} {#1} {solution} }
+\NewDocumentCommand \XSIMprint {mO{}mm}
+ { \xsim_insert:nnnn {#3} {#4} {#2} {#1} }
+
+\NewDocumentCommand \XSIMxprint {mO{}mm}
+ { \xsim_insert:xxnn {#3} {#4} {#2} {#1} }
\NewDocumentCommand \printexercise {O{}mm}
{ \xsim_insert:nnnn {#2} {#3} {#1} {exercise} }
+
+\NewDocumentCommand \xprintexercise {O{}mm}
+ { \xsim_insert:xxnn {#2} {#3} {#1} {exercise} }
+
+\NewDocumentCommand \printsolution {O{}mm}
+ { \xsim_insert:nnnn {#2} {#3} {#1} {solution} }
+
+\NewDocumentCommand \xprintsolution {O{}mm}
+ { \xsim_insert:xxnn {#2} {#3} {#1} {solution} }
% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/xsim/code/xsim.properties.code.tex b/macros/latex/contrib/xsim/code/xsim.properties.code.tex
index 1222a61b2e..5dd0d1baee 100644
--- a/macros/latex/contrib/xsim/code/xsim.properties.code.tex
+++ b/macros/latex/contrib/xsim/code/xsim.properties.code.tex
@@ -94,8 +94,8 @@
}
\bool_if:nF {#3}
{
- \AtEndDocument { \xsim_update_list:n {#4} }
- \AtBeginDocument { \__xsim_set_property_from_list:n {#4} }
+ \xsim_at_end_document:n { \xsim_update_list:n {#4} }
+ \xsim_at_begin_document:n { \__xsim_set_property_from_list:n {#4} }
}
}
}
diff --git a/macros/latex/contrib/xsim/code/xsim.sty b/macros/latex/contrib/xsim/code/xsim.sty
index a56fa8ecf5..f5efe12408 100644
--- a/macros/latex/contrib/xsim/code/xsim.sty
+++ b/macros/latex/contrib/xsim/code/xsim.sty
@@ -29,9 +29,9 @@
\ExplSyntaxOn
-\tl_const:Nn \c_xsim_date_tl {2019/11/02}
+\tl_const:Nn \c_xsim_date_tl {2019/11/10}
\tl_const:Nn \c_xsim_version_major_number_tl {0}
-\tl_const:Nn \c_xsim_version_minor_number_tl {15}
+\tl_const:Nn \c_xsim_version_minor_number_tl {16}
\tl_const:Nn \c_xsim_version_subrelease_tl {}
\tl_const:Nx \c_xsim_version_number_tl
{
diff --git a/macros/latex/contrib/xsim/code/xsim.translations.code.tex b/macros/latex/contrib/xsim/code/xsim.translations.code.tex
index 978413f6e6..f818c8d5ff 100644
--- a/macros/latex/contrib/xsim/code/xsim.translations.code.tex
+++ b/macros/latex/contrib/xsim/code/xsim.translations.code.tex
@@ -65,18 +65,19 @@
}
}
-\AtBeginDocument{
- \bool_if:NTF \l__xsim_language_auto_bool
- {
- \tl_set:Nx \l_xsim_language_tl
- { \@trnslt@language{\@trnslt@current@language} }
- }
- {
- \tl_set_eq:NN
- \l_xsim_language_tl
- \l__xsim_current_language_tl
- }
-}
+\xsim_at_begin_document:n
+ {
+ \bool_if:NTF \l__xsim_language_auto_bool
+ {
+ \tl_set:Nx \l_xsim_language_tl
+ { \@trnslt@language{\@trnslt@current@language} }
+ }
+ {
+ \tl_set_eq:NN
+ \l_xsim_language_tl
+ \l__xsim_current_language_tl
+ }
+ }
% ----------------------------------------------------------------------------
% #1: keyword
diff --git a/macros/latex/contrib/xsim/doc/examples/xsim.texsx-498299.pdf b/macros/latex/contrib/xsim/doc/examples/xsim.texsx-498299.pdf
new file mode 100644
index 0000000000..99e8314406
--- /dev/null
+++ b/macros/latex/contrib/xsim/doc/examples/xsim.texsx-498299.pdf
Binary files differ
diff --git a/macros/latex/contrib/xsim/doc/examples/xsim.texsx-498299.tex b/macros/latex/contrib/xsim/doc/examples/xsim.texsx-498299.tex
new file mode 100644
index 0000000000..6716d52e7e
--- /dev/null
+++ b/macros/latex/contrib/xsim/doc/examples/xsim.texsx-498299.tex
@@ -0,0 +1,75 @@
+\documentclass{article}
+\usepackage[no-files]{xsim}
+\usepackage{tasks}
+
+\DeclareExerciseEnvironmentTemplate{item}
+ {\item[\GetExerciseProperty{counter}]}
+ {}
+
+\DeclareExerciseProperty{answer}
+
+\newcommand*\answer[1]{%
+ \XSIMexpandcode{%
+ \SetExerciseProperty{answer}
+ { (\noexpand\textit{\alph{task}}) \unexpanded{#1}}}%
+ #1%
+}
+
+\newcommand*\getanswers{%
+ \def\betweenanswers{\def\betweenanswers{\hspace{2em}}}%
+ \ForEachUsedExerciseByID{%
+ \betweenanswers##3\ExercisePropertyGet{##1}{##2}{answer}%
+ }%
+}
+
+\xsimsetup{
+ exercise/template = item,
+ exercise/the-counter = \arabic{exercise}.
+}
+
+\NewTasksEnvironment[
+ label = (\textit{\alph*}) ,
+ label-width = 14pt
+]{choice}[\choice]
+
+\newenvironment{questions}
+ {\itemize}
+ {\enditemize}
+
+\begin{document}
+
+\section{Problems}
+\begin{questions}
+ \begin{exercise}
+ What is the product of $-2$ and $3$?
+ \begin{choice}(4)
+ \choice \answer{$-6$}
+ \choice $6$
+ \choice $5$
+ \choice $-5$
+ \end{choice}
+ \end{exercise}
+ \begin{exercise}
+ What is the sum of the sides of a polygon called?
+ \begin{choice}(2)
+ \choice Leg
+ \choice \answer{Perimeter}
+ \choice Area
+ \choice Volume
+ \end{choice}
+ \end{exercise}
+ \begin{exercise}
+ What is the sum of $-2$ and $-3$?
+ \begin{choice}(4)
+ \choice $-6$
+ \choice $6$
+ \choice $5$
+ \choice \answer{$-5$}
+ \end{choice}
+ \end{exercise}
+\end{questions}
+
+\section{Answers}
+\getanswers
+
+\end{document}
diff --git a/macros/latex/contrib/xsim/doc/xsim-manual.cls b/macros/latex/contrib/xsim/doc/xsim-manual.cls
index 7e8fec1b67..3667dd11c6 100644
--- a/macros/latex/contrib/xsim/doc/xsim-manual.cls
+++ b/macros/latex/contrib/xsim/doc/xsim-manual.cls
@@ -29,7 +29,7 @@
% please ignore the contents of this file -- it is not a good example for
% coding...
%
-\ProvidesClass{xsim-manual}[2019/09/27]
+\ProvidesClass{xsim-manual}[2019/11/10]
\LoadClass[load-preamble,add-index]{cnltx-doc}
\RequirePackage{imakeidx}
@@ -169,6 +169,10 @@
UseExerciseTags ,
UseExerciseTagsX ,
UseExerciseTemplate ,
+ xprintexercise ,
+ xprintsolution ,
+ XSIMatbegindocument ,
+ XSIMatenddocument ,
XSIMexpandcode ,
XSIMsetfilebegin ,
XSIMfilewritestart ,
@@ -185,10 +189,12 @@
XSIMifeqT ,
XSIMifeqTF ,
XSIMmixedcase ,
+ xsimprint ,
XSIMputright ,
xsimsetup ,
xsimstyle ,
- XSIMtranslate
+ XSIMtranslate ,
+ xsimxprint
} ,
add-envs = { exercise , solution } ,
add-silent-cmds = {
@@ -829,7 +835,8 @@
\xsim@add@example{texsx-369803}{Layout adjustments}
\xsim@add@example{texsx-370642}{Minimalistic layout}
\xsim@add@example{texsx-391530}{Exercises and sub-exercises}
-\xsim@add@example{texsx-395273}{Different aspects of exercises. Highlighted solutions}
+\xsim@add@example{texsx-395273}{Different aspects of exercises, highlighted solutions}
+\xsim@add@example{texsx-498299}{Multiple choice questions with automated solutions}
\xsim@add@example{texwelt-6698}{Custom list of exercises}
\xsim@add@example{texwelt-15093}{Indicate difficulty level}
\xsim@add@example{texwelt-23968}{Long and short solutions}
@@ -858,6 +865,7 @@
\xsim@add@version{0.13} {2019-10-06}
\xsim@add@version{0.14} {2019-10-13}
\xsim@add@version{0.15} {2019-11-02}
+\xsim@add@version{0.16} {2019-11-10}
% ----------------------------------------------------------------------------
\newrobustcmd*\xsimauxfileinfo{%
diff --git a/macros/latex/contrib/xsim/doc/xsim.history b/macros/latex/contrib/xsim/doc/xsim.history
index c9e9623220..c3214cf573 100644
--- a/macros/latex/contrib/xsim/doc/xsim.history
+++ b/macros/latex/contrib/xsim/doc/xsim.history
@@ -131,3 +131,6 @@ HISTORY:
option
v0.15 2019/11/02 - use own auxiliary file per default and add option
`use-aux'
+ v0.16 2019/11/10 - fix issue due to usage of own auxiliary file
+ - \XSIMatbegindocument and \XSIMatenddocument
+ - \xprintexercise, \xprintsolution, \xsimprint, \xsimxprint
diff --git a/macros/latex/contrib/xsim/doc/xsim_manual.pdf b/macros/latex/contrib/xsim/doc/xsim_manual.pdf
index fc6659b04f..72711292c5 100644
--- a/macros/latex/contrib/xsim/doc/xsim_manual.pdf
+++ b/macros/latex/contrib/xsim/doc/xsim_manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/xsim/doc/xsim_manual.tex b/macros/latex/contrib/xsim/doc/xsim_manual.tex
index 7296f6124d..5156221b0e 100644
--- a/macros/latex/contrib/xsim/doc/xsim_manual.tex
+++ b/macros/latex/contrib/xsim/doc/xsim_manual.tex
@@ -911,6 +911,9 @@ existing exercise, \ie, every exercise whose external file exists.
\command{printexercise}[\marg{type}\marg{id}]
Inserts the exercise of type \meta{type} with the \property{id}
\meta{id}.
+ \command{xprintexercise}[\marg{type}\marg{id}]
+ \sinceversion{0.16}The same as \cs{printexercise} but expands \meta{type}
+ and \meta{id} before it uses them.
\end{commands}
\begin{example}
\printexercise{exercise}{5}
@@ -1135,6 +1138,9 @@ There are different commands for printing the solutions to exercises:
\command{printsolution}[\oarg{options}\marg{type}\marg{id}]
Prints the solution of the exercise of type \meta{type} with the
\property{id} \meta{id}.
+ \command{xprintsolution}[\marg{type}\marg{id}]
+ \sinceversion{0.16}The same as \cs{printsolution} but expands \meta{type}
+ and \meta{id} before it uses them.
\end{commands}
\begin{example}
@@ -1509,7 +1515,7 @@ yourself in order to achieve certain layouts\footnote{I plan to incorporate
\item \code{\#5}: the \property{points} property of the exercise
\item \code{\#6}: the \property{bonus-points} property of the exercise
\end{itemize}
- \command{ForEachPrintedExerciseByID}
+ \command{ForEachPrintedExerciseByID}[\marg{code}]
Loops over each \emph{printed} exercise order by the exercise id. Inside
\meta{code} you can refer to several properties of the corresponding
exercise:
@@ -1521,7 +1527,7 @@ yourself in order to achieve certain layouts\footnote{I plan to incorporate
\item \code{\#5}: the \property{points} property of the exercise
\item \code{\#6}: the \property{bonus-points} property of the exercise
\end{itemize}
- \command{ForEachUsedExerciseByID}
+ \command{ForEachUsedExerciseByID}[\marg{code}]
Loops over each \emph{used} exercise order by the exercise id. Inside
\meta{code} you can refer to several properties of the corresponding
exercise:
@@ -1533,6 +1539,12 @@ yourself in order to achieve certain layouts\footnote{I plan to incorporate
\item \code{\#5}: the \property{points} property of the exercise
\item \code{\#6}: the \property{bonus-points} property of the exercise
\end{itemize}
+ \command{XSIMprint}[\Marg{exercise|solution}\marg{type}\marg{id}]
+ \sinceversion{0.16}Inserts the either the exercise or the solution of type
+ \meta{type} with the \property{id} \meta{id}.
+ \command{XSIMxprint}[\Marg{exercise|solution}\marg{type}\marg{id}]
+ \sinceversion{0.16}The same as \cs{XSIMprint} but expands \meta{type} and
+ \meta{id} before it uses them.
\expandable\command{XSIMtranslate}[\marg{keyword}]
Delivers the translation of \meta{keyword} according to the current
document language (in the meaning of a \pkg{babel}~\cite{pkg:babel} or
@@ -1562,7 +1574,13 @@ yourself in order to achieve certain layouts\footnote{I plan to incorporate
\meta{code 2} is the same tokenlist.
\expandable\command{XSIMifblank\TF}[\marg{code}\marg{true}\marg{false}]
Checks if the full expansion\footref{fn:romannumeral} of \meta{code} is
- blank (\ie, if it is empty or only consists of spaces).
+ blank (\ie, if it is empty or only consists of spaces).
+ \command{XSIMatbegindocument}[\marg{code}]
+ \sinceversion{0.15a}Adds \meta{code} to \xsim's begin document hook.
+ Should be used inside style files instead of \cs*{AtBeginDocument}.
+ \command{XSIMatenddocument}[\marg{code}]
+ \sinceversion{0.15a}Adds \meta{code} to \xsim's end document hook.
+ Should be used inside style files instead of \cs*{AtEndDocument}.
\end{commands}
\subsection{Declaring Templates}