From e3210b55f95f0078fe35f60e19af205873f7e8b0 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 10 Nov 2019 22:07:28 +0000 Subject: xsim (10nov19) git-svn-id: svn://tug.org/texlive/trunk@52725 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/xsim/README | 3 +- .../doc/latex/xsim/examples/xsim.texsx-498299.pdf | Bin 0 -> 42513 bytes .../doc/latex/xsim/examples/xsim.texsx-498299.tex | 75 +++++++++++++++++++++ Master/texmf-dist/doc/latex/xsim/xsim.history | 3 + Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf | Bin 1229505 -> 1232911 bytes Master/texmf-dist/doc/latex/xsim/xsim_manual.tex | 24 ++++++- Master/texmf-dist/tex/latex/xsim/xsim-manual.cls | 14 +++- .../tex/latex/xsim/xsim.auxfile.code.tex | 8 +-- .../texmf-dist/tex/latex/xsim/xsim.base.code.tex | 14 ++++ .../tex/latex/xsim/xsim.collections.code.tex | 4 +- .../tex/latex/xsim/xsim.environments.code.tex | 2 +- .../tex/latex/xsim/xsim.exercises.code.tex | 4 +- .../texmf-dist/tex/latex/xsim/xsim.goals.code.tex | 6 +- .../tex/latex/xsim/xsim.interface.code.tex | 24 ++++++- .../tex/latex/xsim/xsim.properties.code.tex | 4 +- Master/texmf-dist/tex/latex/xsim/xsim.sty | 4 +- .../tex/latex/xsim/xsim.translations.code.tex | 25 +++---- 17 files changed, 177 insertions(+), 37 deletions(-) create mode 100644 Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-498299.pdf create mode 100644 Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-498299.tex (limited to 'Master') diff --git a/Master/texmf-dist/doc/latex/xsim/README b/Master/texmf-dist/doc/latex/xsim/README index 68012b839a4..0aa35c006f7 100644 --- a/Master/texmf-dist/doc/latex/xsim/README +++ b/Master/texmf-dist/doc/latex/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/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-498299.pdf b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-498299.pdf new file mode 100644 index 00000000000..99e8314406f Binary files /dev/null and b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-498299.pdf differ diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-498299.tex b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-498299.tex new file mode 100644 index 00000000000..6716d52e7e7 --- /dev/null +++ b/Master/texmf-dist/doc/latex/xsim/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/Master/texmf-dist/doc/latex/xsim/xsim.history b/Master/texmf-dist/doc/latex/xsim/xsim.history index c9e96232203..c3214cf5735 100644 --- a/Master/texmf-dist/doc/latex/xsim/xsim.history +++ b/Master/texmf-dist/doc/latex/xsim/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/Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf b/Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf index fc6659b04fc..72711292c54 100644 Binary files a/Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf and b/Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf differ diff --git a/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex b/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex index 7296f6124d8..5156221b0e6 100644 --- a/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex +++ b/Master/texmf-dist/doc/latex/xsim/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} diff --git a/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls b/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls index 7e8fec1b670..3667dd11c62 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls +++ b/Master/texmf-dist/tex/latex/xsim/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/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex index 80186946168..d308a9ccc31 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex +++ b/Master/texmf-dist/tex/latex/xsim/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/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex index df767976b60..b1fa20bff73 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex +++ b/Master/texmf-dist/tex/latex/xsim/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/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex index 3f5d2a1b862..3097981b741 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex +++ b/Master/texmf-dist/tex/latex/xsim/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/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex index daaae03211c..2f9c870b71e 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex +++ b/Master/texmf-dist/tex/latex/xsim/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/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex index 9eb469fee4e..f9cb7064107 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex +++ b/Master/texmf-dist/tex/latex/xsim/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/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex index c03fe144836..6e482737b50 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex +++ b/Master/texmf-dist/tex/latex/xsim/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/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex index 0c1251d1130..ba409d9758b 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex +++ b/Master/texmf-dist/tex/latex/xsim/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/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex index 1222a61b2e9..5dd0d1baeec 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex +++ b/Master/texmf-dist/tex/latex/xsim/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/Master/texmf-dist/tex/latex/xsim/xsim.sty b/Master/texmf-dist/tex/latex/xsim/xsim.sty index a56fa8ecf54..f5efe124088 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim.sty +++ b/Master/texmf-dist/tex/latex/xsim/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/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex index 978413f6e6c..f818c8d5fff 100644 --- a/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex +++ b/Master/texmf-dist/tex/latex/xsim/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 -- cgit v1.2.3