texlive[53877] Master/texmf-dist: xsim (22feb20)
commits+karl at tug.org
commits+karl at tug.org
Sun Feb 23 01:33:45 CET 2020
Revision: 53877
http://tug.org/svn/texlive?view=revision&revision=53877
Author: karl
Date: 2020-02-23 01:33:45 +0100 (Sun, 23 Feb 2020)
Log Message:
-----------
xsim (22feb20)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/xsim/README
trunk/Master/texmf-dist/doc/latex/xsim/xsim.history
trunk/Master/texmf-dist/doc/latex/xsim/xsim.ideas
trunk/Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf
trunk/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls
trunk/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.random.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsim.sty
trunk/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex
trunk/Master/texmf-dist/tex/latex/xsim/xsimverb.sty
Modified: trunk/Master/texmf-dist/doc/latex/xsim/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/README 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/doc/latex/xsim/README 2020-02-23 00:33:45 UTC (rev 53877)
@@ -1,5 +1,5 @@
--------------------------------------------------------------------------
-XSIM 2020/01/16 v0.16a
+XSIM 2020/01/21 v0.17
XSIMVERB 2019/12/29 v0.1a
eXercise Sheets IMproved
@@ -9,7 +9,7 @@
Web: https://github.com/cgnieder/xsim
E-Mail: contact at mychemistry.eu
--------------------------------------------------------------------------
-Copyright 2017--2019 Clemens Niederberger
+Copyright 2017--2020 Clemens Niederberger
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
Modified: trunk/Master/texmf-dist/doc/latex/xsim/xsim.history
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/xsim.history 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/doc/latex/xsim/xsim.history 2020-02-23 00:33:45 UTC (rev 53877)
@@ -113,7 +113,7 @@
- \ProvideExerciseTagging
v0.12 2019/09/30 - add parameter versions for the plural forms of exercise
and solution names
- - bug fixes (issues 37, 39, 43, 47)
+ - bug fixes (issues 37, 39, 43, 47)
v0.13 2019/10/06 - experimental package option `no-files'
v0.14 2019/10/13 - new exercise parameters `exercise-heading' and
`solution-heading'
@@ -133,6 +133,14 @@
`use-aux'
v0.16 2019/11/10 - fix issue due to usage of own auxiliary file
- \XSIMatbegindocument and \XSIMatenddocument
- - \xprintexercise, \xprintsolution, \xsimprint, \xsimxprint
+ - \xprintexercise, \xprintsolution, \xsimprint, \xsimxprint
2019/12/29 - bugfix in `xsimverb'
v0.16a 2020/01/16 - adapt to renaming of string case changing functions
+ v0.17 2020/02/21 - prefer lazy boolean evaluation if possible
+ - remove spurious \par at the beginning of typeset
+ exercises
+ - add `blank' option, implements issue #31
+ - add `solution' property, implements issue #33
+ - fix issue #27
+ - implement issue #2
+ - don't allow package options to be set with \xsimsetup
Modified: trunk/Master/texmf-dist/doc/latex/xsim/xsim.ideas
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/xsim.ideas 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/doc/latex/xsim/xsim.ideas 2020-02-23 00:33:45 UTC (rev 53877)
@@ -26,4 +26,3 @@
- a document class `xsim-exam' for creating exams
- a mechanism for providing variants of an exam
-- some kind of `subexercise' mechanism
Modified: trunk/Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -1,8 +1,8 @@
-% !arara: pdflatex: { action: nonstopmode }
+% !arara: pdflatex: { interaction: nonstopmode }
% !arara: biber
-% !arara: pdflatex: { action: nonstopmode }
-% arara: pdflatex: { action: nonstopmode }
-% arara: pdflatex: { action: nonstopmode }
+% arara: pdflatex: { interaction: nonstopmode }
+% arara: pdflatex: { interaction: nonstopmode }
+% arara: pdflatex: { interaction: nonstopmode }
% ----------------------------------------------------------------------------
% the XSIM package
%
@@ -32,8 +32,7 @@
% ----------------------------------------------------------------------------
\documentclass{xsim-manual}
-\usepackage{filecontents}
-\begin{filecontents*}{\jobname.bib}
+\begin{filecontents*}[overwrite]{\jobname.bib}
@online{texsx:romannumeral,
author = {Bruno Le Floch} ,
title = {Cunning (La)TeX tricks} ,
@@ -44,7 +43,7 @@
title = {Questions tagged `exsheets'} ,
author = {various} ,
url = {http://tex.stackexchange.com/questions/tagged/exsheets} ,
- urldate = {2017-05-15}
+ urldate = {2020-02-21}
}
\end{filecontents*}
\addbibresource{\jobname.bib}
@@ -76,7 +75,7 @@
It has been quite a while since I first published
\pkg{exsheets}~\cite{pkg:exsheets} in June 2012. Since then it has gained a
user base and a little bit of popularity as the number of questions on tex.sx
-shows (119~at the time of writing)~\cite{texsx:tagged/exsheets}. User
+shows (143~at the time of writing)~\cite{texsx:tagged/exsheets}. User
questions, bug reports and feature requests improved it over the time. It
still has a version number starting with a zero, though, which in my
versioning system means I still consider it experimental.
@@ -138,21 +137,21 @@
\sinceversion{0.15}With this option enabled \xsim\ will use the regular
auxiliary file \cs*{jobname}\code{.aux} instead of its own auxiliary file
\cs*{jobname}\code{.xsim}.
+ \opt{blank}
+ \sinceversion{0.17}With this option enabled \xsim\ will not define the
+ default environments \env{exercise} and \env{solution}.
\end{options}
-Those options are used the usual way as package option
+Those options are load-time options and are used the usual way as package
+options:
\begin{sourcecode}
\usepackage[verbose]{xsim}
\end{sourcecode}
-or as global option
-\begin{sourcecode}
- \documentclass[verbose]{article}
-\end{sourcecode}
-or via the setup\changedversion{0.13} command as options belonging to the
-\module{package}, see also section~\vref{sec:setting-options}:
-\begin{sourcecode}
- \xsimsetup{package/verbose}
-\end{sourcecode}
+\begin{bewareofthedog}
+ Although those options technically belong to the \module{package} module
+ (see also section~\vref{sec:setting-options}) it is \emph{not} possible to
+ set them via \cs{xsimsetup}.
+\end{bewareofthedog}
\subsection{Setting Options}\label{sec:setting-options}
Apart from the package options already described in
@@ -208,7 +207,8 @@
\section{Exercises and Solutions}
The two predefined environments for exercises and solutions are the following
-ones:
+ones\footnote{When you load \xsim\ with the \option{blank} those environments
+ will \emph{not} be defined!}:
\begin{environments}
\environment{exercise}[\oarg{\acsp*{prop}}]
Input and typeset an exercise. See section~\vref{sec:exercise-properties}
@@ -334,15 +334,15 @@
A lot of the lines \xsim\ writes to the auxiliary file and reads in a
subsequent run look like this:
\begin{sourcecode}
- \XSIM{points}{exercise-2=={4}|exercise-10=={2.5}|problem-11=={5}}
+ \XSIM{points}{exercise-2=={4}||exercise-10=={2.5}||problem-11=={5}}
\end{sourcecode}
As you can see different entries of the various properties of exercises are
- separated with a \code{|}. This means that you cannot use this symbol
- inside properties. This is why \xsim\ provides an option to change this
- marker.
+ separated with \code{||}. This means that you cannot use this symbol
+ combination inside properties. For this reason \xsim\ provides an option to
+ change the marker.
\end{bewareofthedog}
\begin{options}
- \keyval{split-aux-lists}{string}\Default{\code{|}}
+ \keyval{split-aux-lists}{string}\Default{\code{||}}
Set\sinceversion{0.11} the string that is used to separate the property
entries in the auxiliary file.
\end{options}
@@ -515,30 +515,37 @@
True if an exercise has been used at least once. For an existing exercise
this is only false for exercises that have been collected
(\cf~section~\vref{sec:collecting-exercises}).
+ \propbool{solution}
+ \sinceversion{0.17}Holds the solution boolean of an exercise. If this is
+ true then a solution has the same text\slash environment body as the
+ corresponding exercise. (This might be useful for multiple choice
+ questions for example.)
\propval{tags}{csv list of tags}
Holds the list of tags the exercise should be associated with.
\propval{topics}{csv list of topics}
Holds the list of topics the exercise should be associated with.
\propval{page}{text}
- Holds the page counter value representation of an exercise (\ie, what you
- usually know as \cs*{thepage}).
+ Holds the page counter value representation of an exercise \\
+ (\ie, what you usually know as \cs*{thepage}).
\propval{page-value}{integer}
- Holds the page counter value of an exercise (\ie, what you usually know as
- \cs*{the}\cs*{value}\Marg{page}).
+ Holds the page counter value of an exercise \\
+ (\ie, what you usually know as \cs*{the}\cs*{value}\Marg{page}).
\propval{section}{text}
- Holds the section counter value representation of an exercise (\ie, what
- you usually know as \cs*{thesection}).
+ Holds the section counter value representation of an exercise \\
+ (\ie, what you usually know as \cs*{thesection}).
\propval{section-value}{integer}
- Holds the section counter value of an exercise (\ie, what you usually know
- as \cs*{the}\cs*{value}\Marg{section}).
+ Holds the section counter value of an exercise \\
+ (\ie, what you usually know as \cs*{the}\cs*{value}\Marg{section}).
\propval{chapter}{text}
- Holds the chapter counter value representation of an exercise (\ie, what
- you usually know as \cs*{thechapter}). \emph{Only if a command
- \cs*{chapter} \emph{and} a counter \code{chapter} exist.}
+ Holds the chapter counter value representation of an exercise \\
+ (\ie, what you usually know as \cs*{thechapter}). \\
+ \emph{Only if a command \cs*{chapter} \emph{and} a counter \code{chapter}
+ exist.}
\propval{chapter-value}{integer}
- Holds the chapter counter value of an exercise (\ie, what you usually know
- as \cs*{the}\cs*{value}\Marg{chapter}). \emph{Only if a command \cs*{chapter}
- \emph{and} a counter \code{chapter} exist.}
+ Holds the chapter counter value of an exercise \\
+ (\ie, what you usually know as \cs*{the}\cs*{value}\Marg{chapter}). \\
+ \emph{Only if a command \cs*{chapter} \emph{and} a counter \code{chapter}
+ exist.}
\propval{sectioning}{section numbers}
Holds five brace groups which in turn hold the section numbers (integers)
of the exercise in the order
@@ -594,15 +601,12 @@
This is better demonstrated with an example:
\begin{example}
- % \lipsum is provided by package `lipsum'
\begin{exercise}
- \lipsum[4]
\verb+\GetExerciseProperty{id}+: \GetExerciseProperty{id} \par
\verb+\GetExerciseAliasProperty{ID}+: \GetExerciseAliasProperty{ID} \par
\verb+\GetExerciseProperty{ID}+: \GetExerciseProperty{ID}
\end{exercise}
\begin{exercise}[ID=foo-bar]
- \lipsum[4]
\verb+\GetExerciseProperty{id}+: \GetExerciseProperty{id} \par
\verb+\GetExerciseAliasProperty{ID}+: \GetExerciseAliasProperty{ID} \par
\verb+\GetExerciseProperty{ID}+: \GetExerciseProperty{ID}
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls 2020-02-23 00:33:45 UTC (rev 53877)
@@ -522,6 +522,7 @@
\XSIMfilewritestart*{\jobname.tmp}%
}%
\endgroup
+
\def\xsimman at read@options@[#1]{\pgfqkeys{/cnltx}{#1}}
\RenewDocumentEnvironment{sourcecode}{}
@@ -565,6 +566,7 @@
}
{%
\XSIMfilewritestop
+ \catcode`\^^M=5
\ifbool{cnltx at sidebyside}
{%
\cnltxcode
@@ -865,6 +867,16 @@
% ----------------------------------------------------------------------------
% versions:
+\xsim at add@version{0.0} {2017-02-09}
+\xsim at add@version{0.1} {2017-03-19}
+\xsim at add@version{0.2} {2017-03-21}
+\xsim at add@version{0.4} {2017-03-24}
+\xsim at add@version{0.5} {2017-03-30}
+\xsim at add@version{0.5a} {2017-04-15}
+\xsim at add@version{0.5b} {2017-04-16}
+\xsim at add@version{0.6} {2017-04-27}
+\xsim at add@version{0.6a} {2017-04-28}
+\xsim at add@version{0.7} {2017-05-09}
\xsim at add@version{0.8} {2017-05-18}
\xsim at add@version{0.8a} {2017-05-19}
\xsim at add@version{0.8b} {2017-05-23}
@@ -875,8 +887,11 @@
\xsim at add@version{0.12} {2019-09-26}
\xsim at add@version{0.13} {2019-10-06}
\xsim at add@version{0.14} {2019-10-13}
+\xsim at add@version{0.14a} {2019-10-19}
\xsim at add@version{0.15} {2019-11-02}
\xsim at add@version{0.16} {2019-11-10}
+\xsim at add@version{0.16a} {2020-01-16}
+\xsim at add@version{0.17} {2020-02-21}
% ----------------------------------------------------------------------------
\newrobustcmd*\xsimauxfileinfo{%
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -49,10 +49,10 @@
\cs_new_protected:Npn \XSIM #1 { \use:c {XSIMaux#1} }
-\cs_new_protected:Npn \xsim_new_aux_cs:cpn #1
+\cs_new_protected:Npn \xsim_new_aux_property:cpn #1
{ \cs_new_protected:cpn {XSIMaux#1} }
-\cs_new_protected:Npn \xsim_add_cs_to_aux:nn #1#2
+\cs_new_protected:Npn \xsim_add_property_to_aux:nn #1#2
{
\xsim_verbose:n { Writing~ command~ \XSIM {#1}~ to~ aux~ file }
\xsim_write_to_aux:x { \token_to_str:N \XSIM {#1} #2 }
@@ -83,8 +83,11 @@
}
}
-\xsim_new_aux_cs:cpn {readaux}
- { \file_input:n { \c_sys_jobname_str .xsim } }
+\xsim_new_aux_property:cpn {readaux}
+ {
+ \file_if_exist:nT { \c_sys_jobname_str .xsim }
+ { \file_input:n { \c_sys_jobname_str .xsim } }
+ }
% ----------------------------------------------------------------------------
% list for recording values that need to be written to the aux file and
@@ -105,7 +108,7 @@
\prop_new:c {g__xsim_list_#1_prop}
\seq_new:c {g__xsim_list_#1_seq}
\seq_new:c {g__xsim_list_recorded_#1_seq}
- \xsim_new_aux_cs:cpn {#1} ##1
+ \xsim_new_aux_property:cpn {#1} ##1
{
\prop_gclear:c {g__xsim_list_#1_prop}
\tl_if_blank:nF {##1}
@@ -193,7 +196,7 @@
{ \xsim_rerun: }
\bool_if:NF \l__xsim_empty_lists_bool
{
- \xsim_add_cs_to_aux:nn {#1}
+ \xsim_add_property_to_aux:nn {#1}
{ { \seq_use:cV {g__xsim_list_#1_seq} \l__xsim_split_aux_lists_str } }
}
}
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -124,7 +124,7 @@
\prg_new_conditional:Npnn \xsim_if_final: {p,T,F,TF}
{
- \bool_if:NTF \g_xsim_final_bool
+ \bool_if:NTF \g__xsim_final_bool
{ \prg_return_true: }
{ \prg_return_false: }
}
@@ -131,11 +131,18 @@
\prg_new_conditional:Npnn \xsim_if_verbose: {p,T,F,TF}
{
- \bool_if:NTF \g_xsim_verbose_bool
+ \bool_if:NTF \g__xsim_verbose_bool
{ \prg_return_true: }
{ \prg_return_false: }
}
+\prg_new_conditional:Npnn \xsim_if_package_blank: {p,T,F,TF}
+ {
+ \bool_if:NTF \g__xsim_blank_bool
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
\prg_new_conditional:Npnn \xsim_if_rerun: {p,T,F,TF}
{
\bool_if:NTF \g__xsim_rerun_bool
@@ -170,8 +177,9 @@
\prg_new_conditional:Npnn \xsim_if_chapter: {p,T,F,TF}
{
- \bool_if:nTF
- { \cs_if_exist_p:N \chapter && \cs_if_exist_p:N \c at chapter }
+ \bool_lazy_and:nnTF
+ { \cs_if_exist_p:N \chapter }
+ { \cs_if_exist_p:N \c at chapter }
{ \prg_return_true: }
{ \prg_return_false: }
}
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -78,8 +78,9 @@
\mode_if_math:TF
{ \hbox_set:Nn \l__xsim_blank_box { $ \m at th \mathpalette{}{#1} $ } }
{ \hbox_set:Nn \l__xsim_blank_box {#1} }
- \bool_if:nTF
- { \xsim_if_inside_solution_p: || \l__xsim_fill_blank_bool }
+ \bool_lazy_or:nnTF
+ { \xsim_if_inside_solution_p: }
+ { \l__xsim_fill_blank_bool }
{ \xsim_write_cloze_filled:n {#1} }
{
\bool_if:NTF \l__xsim_blank_width_bool
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -351,11 +351,9 @@
{
\prop_if_in:NnTF \g__xsim_collections_prop {#1}
{
- \bool_if:nTF
- {
- !\str_if_eq_p:en {#1} {all~ exercises} &&
- \prop_item:Nn \g__xsim_collections_prop {#1}
- }
+ \bool_lazy_and:nnTF
+ { !\str_if_eq_p:en {#1} {all~ exercises} }
+ { \prop_item:Nn \g__xsim_collections_prop {#1} }
{ \prg_return_true: }
{ \prg_return_false: }
}
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -59,6 +59,7 @@
\DeclareExerciseProperty * {use}
\DeclareExerciseProperty * {used}
\DeclareExerciseProperty *-{use!}
+\DeclareExerciseProperty * {solution}
\XSIMifchapterT{
\DeclareExerciseProperty {chapter-value}
\DeclareExerciseProperty {chapter}
@@ -165,18 +166,21 @@
% ----------------------------------------------------------------------------
-\DeclareExerciseType {exercise} {
- exercise-env = exercise ,
- solution-env = solution ,
- exercise-name = \XSIMtranslate {exercise} ,
- exercises-name = \XSIMtranslate {exercises} ,
- solution-name = \XSIMtranslate {solution} ,
- solutions-name = \XSIMtranslate {solutions} ,
- exercise-template = default ,
- solution-template = default ,
- exercise-heading = \subsection* ,
- solution-heading = \subsection*
-}
+\xsim_if_package_blank:F
+ {
+ \DeclareExerciseType {exercise} {
+ exercise-env = exercise ,
+ solution-env = solution ,
+ exercise-name = \XSIMtranslate {exercise} ,
+ exercises-name = \XSIMtranslate {exercises} ,
+ solution-name = \XSIMtranslate {solution} ,
+ solutions-name = \XSIMtranslate {solutions} ,
+ exercise-template = default ,
+ solution-template = default ,
+ exercise-heading = \subsection* ,
+ solution-heading = \subsection*
+ }
+ }
% ----------------------------------------------------------------------------
@@ -473,4 +477,6 @@
% ----------------------------------------------------------------------------
\file_input_stop:
-2019/02/17 fixed error in German translations (issue 39)
+2019/02/17 - fix issue #39 (error in German translations)
+2020/02/19 - implement issue #33 (solution property)
+2020/02/20 - implement issue #31 (blank package option)
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -48,6 +48,7 @@
\tl_new:N \l__xsim_file_path_and_name_tl
\tl_new:N \l__xsim_file_name_tl
\tl_new:N \l__xsim_file_extension_tl
+\tl_new:N \l__xsim_solution_tl
\bool_new:N \l__xsim_options_given_bool
\bool_new:N \l__xsim_insert_mode_bool
@@ -276,38 +277,56 @@
% #3: exercise|solution
\cs_new_protected:Npn \xsim_typeset_environment:nnn #1#2#3
{
+ \xsim_if_exchange:nnnT {#1} {#2} {#3}
+ { \__xsim_set_file_signature:nnn {#1} {#2} {exercise} }
\xsim_verbose:n
{ Typesetting~ #3~ environment~ type~ `#1'~ id~ `#2' }
- \use:x
+ \xsim_use_hook:nnn {#1} {#3} {pre}
+ \xsim_use_template:nx
+ {begin}
+ { \xsim_get_parameter:nn {#1} {#3-template} }
+ \xsim_use_hook:nnn {#1} {#3} {begin}
+ \xsim_if_write_to_files:TF
{
- \exp_not:N \par
- \xsim_use_hook:nnn {#1} {#3} {pre}
- \xsim_use_template:nn
- {begin}
- { \xsim_get_parameter:nn {#1} {#3-template} }
- \xsim_use_hook:nnn {#1} {#3} {begin}
- \xsim_if_write_to_files:TF
+ \file_if_exist:nTF { \exp_not:V \l__xsim_file_path_and_name_tl }
+ { \file_input:n { \exp_not:V \l__xsim_file_path_and_name_tl } }
{
- \file_if_exist:nTF { \exp_not:V \l__xsim_file_path_and_name_tl }
- { \file_input:n { \exp_not:V \l__xsim_file_path_and_name_tl } }
- {
- \xsim_verbose:n
- { File~ `\l__xsim_file_path_and_name_tl'~ doesn't~ exist. }
- }
+ \xsim_verbose:n
+ { File~ `\l__xsim_file_path_and_name_tl'~ doesn't~ exist. }
}
+ }
+ {
+ \xsim_if_exchange:nnnTF {#1} {#2} {#3}
+ { \xsim_get_property:nnn {#1} {#2} {exercise-body} }
{ \xsim_get_property:nnn {#1} {#2} {#3-body} }
- \xsim_use_hook:nnn {#1} {#3} {end}
- \xsim_use_template:nn
- {end}
- { \xsim_get_parameter:nn {#1} {#3-template} }
- \xsim_use_hook:nnn {#1} {#3} {post}
- \exp_not:N \par
}
+ \xsim_synchronize_goals:nn {#1} {#2}
+ \str_if_eq:nnT {#3} {exercise}
+ { \xsim_update_goals:nn {#1} {#2} }
+ \xsim_use_hook:nnn {#1} {#3} {end}
+ \xsim_use_template:nx
+ {end}
+ { \xsim_get_parameter:nn {#1} {#3-template} }
+ \xsim_use_hook:nnn {#1} {#3} {post}
}
% #1: type
% #2: id
% #3: exercise|solution
+\prg_new_conditional:Npnn \xsim_if_exchange:nnn #1#2#3 {T,F,TF}
+ {
+ \str_if_eq:nnTF {#3} {solution}
+ {
+ \xsim_if_boolean_property:nnnTF {#1} {#2} {solution}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ { \prg_return_false: }
+ }
+
+% #1: type
+% #2: id
+% #3: exercise|solution
\prg_new_protected_conditional:Npnn \xsim_if_exist:nnn #1#2#3 {T,F,TF}
{
\xsim_if_write_to_files:TF
@@ -334,7 +353,9 @@
% #4: exercise|solution
\cs_new_protected:Npn \xsim_insert:nnnn #1#2#3#4
{
- \xsim_if_exist:nnnTF {#1} {#2} {#4}
+ \xsim_if_exchange:nnnTF {#1} {#2} {#4}
+ { \xsim_if_exist:nnnTF {#1} {#2} {exercise} }
+ { \xsim_if_exist:nnnTF {#1} {#2} {#4} }
{
\xsim_verbose:n
{ Inserting~ #4~ type~ `#1'~ id~ `#2'. }
@@ -355,6 +376,8 @@
section-value = \the\value{section} ,
section = \thesection
}
+ \xsim_synchronize_goals:nn {#1} {#2}
+ \xsim_update_goals:nn {#1} {#2}
}
\xsim_if_property_exist:nT {chapter}
{
@@ -414,10 +437,16 @@
\group_begin:
\xsim_if_write_to_files:TF
{
- \__xsim_set_file_signature:nnn {#1} {#2} {#3}
+ \xsim_if_exchange:nnnTF {#1} {#2} {#3}
+ { \__xsim_set_file_signature:nnn {#1} {#2} {exercise} }
+ { \__xsim_set_file_signature:nnn {#1} {#2} {#3} }
\file_input:n { \l__xsim_file_path_and_name_tl }
}
- { \xsim_get_property:nnn {#1} {#2} {#3-body} }
+ {
+ \xsim_if_exchange:nnnTF {#1} {#2} {#3}
+ { \xsim_get_property:nnn {#1} {#2} {exercise-body} }
+ { \xsim_get_property:nnn {#1} {#2} {#3-body} }
+ }
\group_end:
}
\cs_generate_variant:Nn \xsim_input:nnn {oo}
@@ -492,3 +521,8 @@
2019/02/17 - fix issue #43
2019/10/03 - add possibility to save environment bodies to property list
+2020/02/15 - remove spurious \par at the beginning and end of typeset
+ exercises and solutions
+2020/02/19 - implement issue #33 (solution property)
+2020/02/20 - fix issue #27
+ - implement issue #2
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -394,35 +394,82 @@
\int_gincr:N \g_xsim_id_int
\int_compare:nF { \g_xsim_max_id_int > \g_xsim_id_int }
{ \int_gset_eq:NN \g_xsim_max_id_int \g_xsim_id_int }
- \xsim_set_properties:nxx {#1} { \int_use:N \g_xsim_id_int }
+ \tl_gset:Nx \g_xsim_exercise_id_tl { \int_use:N \g_xsim_id_int }
+ % save the goal values from the auxiliary files:
+ \xsim_foreach_goal:n
{
+ \xsim_temporary_goal_new:nVn {#1} \g_xsim_exercise_id_tl {##1}
+ \xsim_if_property_set:nVnT {#1} \g_xsim_exercise_id_tl {##1}
+ {
+ \xsim_temporary_goal_set:nVnn
+ {#1}
+ \g_xsim_exercise_id_tl
+ {##1}
+ { \xsim_get_property:nVn {#1} \g_xsim_exercise_id_tl {##1} }
+ }
+ }
+ \xsim_set_properties:nVx {#1} \g_xsim_exercise_id_tl
+ {
+ % preset options so the user doesn't has to:
print = true ,
use = true ,
+ % options set by the user:
\exp_not:n {#2} ,
- id = \int_use:N \g_xsim_id_int ,
+ % options which need to have certain values:
+ id = \g_xsim_exercise_id_tl ,
section-value = \arabic{section} ,
section = \thesection ,
page-value = \arabic{page} ,
sectioning =
- { \cs_if_exist:NTF \chapter { \arabic{chapter} } {0} }
+ { \cs_if_exist:NTF \thechapter { \arabic {chapter} } {0} }
{ \arabic {section} }
{ \arabic {subsection} }
{ \arabic {subsubsection} }
{ \arabic {paragraph} } ,
page = \thepage ,
+ % this cannot yet be set (see below):
used = false
}
+ % temporary goal now: either 0 or equal the complete property
+ % property: equal to the given value
+ \xsim_foreach_goal:n
+ {
+ \fp_set:Nn \l__xsim_tmpa_fp
+ { \xsim_temporary_goal_get:nVn {#1} \g_xsim_exercise_id_tl {##1} }
+ % set temporary goal to given property:
+ \xsim_if_property_given:nTF {##1}
+ {
+ \xsim_temporary_goal_set:nVnn
+ {#1}
+ \g_xsim_exercise_id_tl
+ {##1}
+ { \xsim_get_property:nVn {#1} \g_xsim_exercise_id_tl {##1} }
+ }
+ {
+ \xsim_temporary_goal_set:nVnn
+ {#1}
+ \g_xsim_exercise_id_tl
+ {##1}
+ {0}
+ }
+ % update to property to complete value:
+ \xsim_if_property_set:nVnT {#1} \g_xsim_exercise_id_tl {##1}
+ {
+ \xsim_set_property:nVnx {#1} \g_xsim_exercise_id_tl {##1}
+ { \fp_to_decimal:N \l__xsim_tmpa_fp }
+ }
+ }
\xsim_if_property_exist:nT {chapter}
{
- \xsim_set_properties:nxx {#1} { \int_use:N \g_xsim_id_int }
+ \xsim_set_properties:nVx {#1} \g_xsim_exercise_id_tl
{
chapter-value = \arabic{chapter} ,
chapter = \thechapter
}
}
- \tl_gclear:N \g_xsim_exercise_id_tl
- \xsim_gsave_property:nxnN {#1} { \int_use:N \g_xsim_id_int } {id}
- \g_xsim_exercise_id_tl
+ % \tl_gclear:N \g_xsim_exercise_id_tl
+ % \xsim_gsave_property:nVnN {#1} \l__xsim_tmpa_tl {id}
+ % \g_xsim_exercise_id_tl
\tl_gset_eq:NN \ExerciseID \g_xsim_exercise_id_tl
\tl_gset:Nn \ExerciseType {#1}
\xsim_verbose:x
@@ -449,7 +496,6 @@
\xsim_set_property:nVnn {#1} \g_xsim_exercise_id_tl
{use}
{true}
- \xsim_update_goals:nV {#1} \g_xsim_exercise_id_tl
}
{
\xsim_set_properties:nVn {#1} \g_xsim_exercise_id_tl
@@ -524,7 +570,7 @@
% ----------------------------------------------------------------------------
-\xsim_new_aux_cs:cpn {total-number} #1
+\xsim_new_aux_property:cpn {total-number} #1
{ \int_gset:Nn \g_xsim_max_id_int {#1} }
\RequirePackage {etoolbox}
@@ -535,7 +581,7 @@
{
\tl_new:c { number of #1 s }
\tl_set:cn { number of #1 s } {0}
- \xsim_new_aux_cs:cpn {#1} ##1
+ \xsim_new_aux_property:cpn {#1} ##1
{ \tl_gset:cn { number of #1 s } {##1} }
}
}
@@ -556,10 +602,10 @@
\int_compare:nNnF { \g_xsim_max_id_int } = { \g_xsim_id_int }
{ \xsim_empty_lists: }
}
- \xsim_add_cs_to_aux:nn {total-number} { { \int_use:N \g_xsim_id_int } }
+ \xsim_add_property_to_aux:nn {total-number} { { \int_use:N \g_xsim_id_int } }
\xsim_foreach_exercise_type:n
{
- \xsim_add_cs_to_aux:nn {#1}
+ \xsim_add_property_to_aux:nn {#1}
{ { \arabic { \xsim_get_parameter:nn {#1} {number} } } }
}
\xsim_update_list:n {types}
@@ -567,3 +613,5 @@
% ----------------------------------------------------------------------------
\file_input_stop:
+
+2020/02/21 - implement issue #2
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -49,6 +49,7 @@
{#1}
\seq_put_right:Nn \l__xsim_goals_seq {#1}
\fp_gzero_new:c {g__xsim_goal_#1_fp}
+ \bool_new:c {l__xsim_goal_#1_given_bool}
\fp_gzero_new:c {l__xsim_current_goal_#1_fp}
\fp_if_exist:cF {g__xsim_total_goal_#1_fp}
{ \fp_new:c {g__xsim_total_goal_#1_fp} }
@@ -73,6 +74,16 @@
{ \prg_return_false: }
}
+\prg_new_conditional:Npnn \xsim_if_goal_given:n #1 {p,T,F,TF}
+ {
+ \bool_if:cTF {l__xsim_goal_#1_given_bool}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\cs_new_protected:Npn \xsim_goal_given:n #1
+ { \bool_set_true:c {l__xsim_goal_#1_given_bool} }
+
% #1: exercise type
% #2: id
% #3: goal
@@ -99,6 +110,28 @@
\cs_new_protected:Npn \xsim_foreach_goal:n #1
{ \seq_map_inline:Nn \l__xsim_goals_seq {#1} }
+% #1: type
+% #2: id
+\cs_new_protected:Npn \xsim_synchronize_goals:nn #1#2
+ {
+ \xsim_foreach_goal:n
+ {
+ \xsim_if_property_set:nnnTF {#1} {#2} {##1}
+ {
+ \xsim_set_property:nnnx {#1} {#2} {##1}
+ { \xsim_temporary_goal_get:nnn {#1} {#2} {##1} }
+ }
+ {
+ \fp_compare:nNnT
+ { \xsim_temporary_goal_get:nnn {#1} {#2} {##1} } > {0}
+ {
+ \xsim_set_property:nnnx {#1} {#2} {##1}
+ { \xsim_temporary_goal_get:nnn {#1} {#2} {##1} }
+ }
+ }
+ }
+ }
+
% #1: exercise type
% #2: id
% #3: goal
@@ -108,9 +141,10 @@
\xsim_if_goal_exist:nT {#3}
{
\xsim_verbose:n { Adding~ `#4'~ to~ `#3'~ goal~ of~ #1~ #2 }
- \fp_gadd:cn {g__xsim_goal_#3_fp} {#4}
- \fp_gadd:cn {g__xsim_#1_goal_#3_fp} {#4}
- \fp_add:cn {l__xsim_current_goal_#3_fp} {#4}
+ % \fp_gadd:cn {g__xsim_goal_#3_fp} {#4}
+ % \fp_gadd:cn {g__xsim_#1_goal_#3_fp} {#4}
+ % \fp_add:cn {l__xsim_current_goal_#3_fp} {#4}
+ \xsim_temporary_goal_add:nnnn {#1} {#2} {#3} {#4}
}
}
\cs_generate_variant:Nn \xsim_addto_goal:nnnn {xx,nVnx}
@@ -129,6 +163,46 @@
\cs_generate_variant:Nn \xsim_if_goal_value:nnnnTF {xx}
% ----------------------------------------------------------------------------
+% we need some kind of temporary variable to be able to set goals both as
+% option to exercises and within the exercise body
+
+% #1: type
+% #2: id
+% #3: goal
+\cs_new_protected:Npn \xsim_temporary_goal_new:nnn #1#2#3
+ { \fp_new:c {g__xsim_goal_#3_#1_#2_fp} }
+\cs_generate_variant:Nn \xsim_temporary_goal_new:nnn {nV}
+
+% #1: type
+% #2: id
+% #3: goal
+% #4: value
+\cs_new_protected:Npn \xsim_temporary_goal_set:nnnn #1#2#3#4
+ { \fp_gset:cn {g__xsim_goal_#3_#1_#2_fp} {#4} }
+\cs_generate_variant:Nn \xsim_temporary_goal_set:nnnn {nV}
+
+% #1: type
+% #2: id
+% #3: goal
+% #4: value
+\cs_new_protected:Npn \xsim_temporary_goal_add:nnnn #1#2#3#4
+ { \fp_gadd:cn {g__xsim_goal_#3_#1_#2_fp} {#4} }
+\cs_generate_variant:Nn \xsim_temporary_goal_add:nnnn {nV}
+
+% #1: type
+% #2: id
+% #3: goal
+\cs_new:Npn \xsim_temporary_goal_get:nnn #1#2#3
+ { \fp_to_decimal:c {g__xsim_goal_#3_#1_#2_fp} }
+\cs_generate_variant:Nn \xsim_temporary_goal_get:nnn {nV}
+
+% #1: type
+% #2: id
+% #3: goal
+\cs_new_protected:Npn \__xsim_temporary_goal_show:nnn #1#2#3
+ { \fp_show:c {g__xsim_goal_#3_#1_#2_fp} }
+
+% ----------------------------------------------------------------------------
% a function which can be used to modify how the numbers of a goal are
% printed:
\cs_new_protected:Npn \__xsim_print_goal:n #1 {#1}
@@ -254,12 +328,12 @@
% #1: exercise type
% #2: goal
% #3: value
-\xsim_new_aux_cs:cpn {goal} #1#2#3
+\xsim_new_aux_property:cpn {goal} #1#2#3
{ \fp_gset:cn {g__xsim_total_#1_goal_#2_fp} {#3} }
% #1: goal
% #2: value
-\xsim_new_aux_cs:cpn {totalgoal} #1#2
+\xsim_new_aux_property:cpn {totalgoal} #1#2
{ \fp_gset:cn {g__xsim_total_goal_#1_fp} {#2} }
\xsim_at_begin_document:n
@@ -278,7 +352,7 @@
{
\xsim_foreach_exercise_type:n
{
- \xsim_add_cs_to_aux:nn {goal}
+ \xsim_add_property_to_aux:nn {goal}
{ {##1} {#1} { \fp_to_decimal:c {g__xsim_##1_goal_#1_fp} } }
}
\tl_set:Nx \l__xsim_tmpa_tl
@@ -286,7 +360,7 @@
\tl_set:Nx \l__xsim_tmpb_tl
{ \fp_to_decimal:c {g__xsim_total_goal_recorded_#1_fp} }
\tl_if_eq:NNF \l__xsim_tmpa_tl \l__xsim_tmpb_tl { \xsim_rerun: }
- \xsim_add_cs_to_aux:nn {totalgoal}
+ \xsim_add_property_to_aux:nn {totalgoal}
{ {#1} { \fp_to_decimal:c {g__xsim_goal_#1_fp} } }
}
}
@@ -306,4 +380,6 @@
% ----------------------------------------------------------------------------
\file_input_stop:
-2019/01/30 bug fix (cf. https://texwelt.de/wissen/fragen/24101/)
+2019/01/30 - bug fix (cf. https://texwelt.de/wissen/fragen/24101/)
+2020/02/20 - add temporary variables for the whole subpoint thing
+ (cf. issue #2)
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -54,6 +54,7 @@
\seq_new:N \l__xsim_boolean_properties_seq
\seq_new:N \l__xsim_unique_properties_seq
\seq_new:N \l__xsim_noupdate_properties_seq
+\seq_new:N \l__xsim_given_properties_seq
\prop_new:N \g__xsim_properties_prop
% new property:
@@ -131,6 +132,15 @@
{ \prg_return_false: }
}
+% true if property #1 has been set in the /last/ call of
+% \xsim_set_properties:nnn
+\prg_new_conditional:Npnn \xsim_if_property_given:n #1 {p,T,F,TF}
+ {
+ \seq_if_in:NnTF \l__xsim_given_properties_seq {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
% #1: property
% #2: value
\prg_new_conditional:Npnn \xsim_if_property_unique_value:nn #1#2 {p,T,F,TF}
@@ -178,8 +188,12 @@
}
{ \msg_error:nnn {xsim} {unknown-property} {#3} }
}
-\cs_generate_variant:Nn \xsim_set_property:nnnn {nnxx,nnnV,nV,nVnx,nnnx,xx,xxnx}
+\cs_generate_variant:Nn \xsim_set_property:nnnn {nnxx,nnnV,nV,nVnx,nnnx,xx,xxnx,nxnx}
+% #1: type
+% #2: id
+% #3: property
+% #4: value
\cs_new_protected:Npn \__xsim_set_boolean_property:nnnn #1#2#3#4
{
\str_case_e:nnTF { \str_lowercase:n {#4} }
@@ -191,6 +205,10 @@
{ \__xsim_set_property:nnnn {#1} {#2} {#3} {false} }
}
+% #1: type
+% #2: id
+% #3: property
+% #4: value
\cs_new_protected:Npn \__xsim_set_unique_property:nnnn #1#2#3#4
{
\__xsim_set_property:nnnn {#1} {#2} {#3} {#4}
@@ -309,6 +327,7 @@
% #3: csv list of properties
\cs_new_protected:Npn \xsim_set_properties:nnn #1#2#3
{
+ \seq_clear:N \l__xsim_given_properties_seq
\clist_map_inline:nn {#3}
{
\seq_set_split:Nnx \l__xsim_tmpa_seq {=} { \tl_trim_spaces:n {##1} }
@@ -317,6 +336,8 @@
{#2}
{ \seq_item:Nn \l__xsim_tmpa_seq {1} }
{ \seq_item:Nn \l__xsim_tmpa_seq {2} }
+ \seq_put_right:Nx \l__xsim_given_properties_seq
+ { \seq_item:Nn \l__xsim_tmpa_seq {1} }
}
\xsim_property_set_aliases:nn {#1} {#2}
}
@@ -326,16 +347,15 @@
% #1: type
% #2: id
% #3: property
-\prg_new_protected_conditional:Npnn \xsim_if_property_set:nnn #1#2#3 {T,F,TF}
+\prg_new_conditional:Npnn \xsim_if_property_set:nnn #1#2#3 {T,F,TF}
{
- \prop_if_in:NxTF \g__xsim_properties_prop
- { #2 ! #1 ! #3 }
+ \prop_if_in:NnTF \g__xsim_properties_prop {#2!#1!#3}
{ \prg_return_true: }
{ \prg_return_false: }
}
-\cs_generate_variant:Nn \xsim_if_property_set:nnnTF {nnx,xx,nV}
-\cs_generate_variant:Nn \xsim_if_property_set:nnnF {nx,nnx,xx}
-\cs_generate_variant:Nn \xsim_if_property_set:nnnT {nnx,xx}
+\prg_generate_conditional_variant:Nnn \xsim_if_property_set:nnn
+ {nx,nnx,xx,nV}
+ {T,F,TF}
% ----------------------------------------------------------------------------
@@ -414,7 +434,7 @@
% #3: property
\cs_new:Npn \xsim_get_property:nnn #1#2#3
{ \prop_item:Nn \g__xsim_properties_prop { #2 ! #1 ! #3 } }
-\cs_generate_variant:Nn \xsim_get_property:nnn {nx,xx,oo,no,nnf,nf,oof,nV}
+\cs_generate_variant:Nn \xsim_get_property:nnn {nx,ne,xx,oo,no,nnf,nf,oof,nV}
% #1: property
% #2: value
@@ -482,7 +502,7 @@
\cs_generate_variant:Nn \xsim_if_boolean_property:nnnF {nV}
\cs_new_protected:Npn \xsim_save_property:nnnN #1#2#3#4
- { \prop_get:NnN \g__xsim_properties_prop { #2 ! #1 ! #3 } #4 }
+ { \prop_get:NnN \g__xsim_properties_prop {#2!#1!#3} #4 }
\cs_generate_variant:Nn \xsim_save_property:nnnN {nx,xx}
\cs_new_protected:Npn \xsim_gsave_property:nnnN #1#2#3#4
@@ -490,7 +510,7 @@
\xsim_save_property:nnnN {#1} {#2} {#3} #4
\tl_gset:NV #4 #4
}
-\cs_generate_variant:Nn \xsim_gsave_property:nnnN {nx,xx}
+\cs_generate_variant:Nn \xsim_gsave_property:nnnN {nx,xx,nV}
% ----------------------------------------------------------------------------
\file_input_stop:
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.random.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.random.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.random.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -52,7 +52,7 @@
% #1: random list id
% #2: csv list of integers
-\xsim_new_aux_cs:cpn {random} #1#2
+\xsim_new_aux_property:cpn {random} #1#2
{
\xsim_random_list_if_exist:nF {#1}
{ \xsim_new_random_list:n {#1} }
@@ -100,7 +100,7 @@
\xsim_random_list_if_empty:nT {#1}
{ \xsim_set_random_list_from_seq:nN {#1} #2 }
\xsim_verbose:n {Saving~ random~ list~ `#1'}
- \xsim_add_cs_to_aux:nn {random}
+ \xsim_add_property_to_aux:nn {random}
{ {#1} { \xsim_use_random_list:nn {#1} {,} } }
}
@@ -165,13 +165,10 @@
% #4: seq variable
\cs_new_protected:Npn \xsim_generate_random_list:nnnN #1#2#3#4
{
- \bool_if:nT
+ \bool_lazy_or:nnT
+ { !\xsim_random_list_if_exist_p:n {#1} }
+ { \xsim_random_list_if_empty_p:n {#1} }
{
- !\xsim_random_list_if_exist_p:n {#1}
- ||
- \xsim_random_list_if_empty_p:n {#1}
- }
- {
\xsim_verbose:n
{Generating~ random~ list~ `#1'~ with~ #3~ out~ of~ #2~ items}
\seq_gclear:N #4
@@ -199,13 +196,10 @@
% #2: random list id
\cs_new_protected:Npn \xsim_print_random_exercises:Nn #1#2
{
- \bool_if:nT
+ \bool_lazy_and:nnT
+ { \xsim_random_list_if_exist_p:n {#2} }
+ { !\xsim_random_list_if_empty_p:n {#2} }
{
- \xsim_random_list_if_exist_p:n {#2}
- &&
- !\xsim_random_list_if_empty_p:n {#2}
- }
- {
\xsim_verbose:x
{
Printing~
@@ -220,12 +214,13 @@
{ \seq_item:Nn #1 {##1} }
\tl_set:Nx \l__xsim_tmpb_tl
{ \xsim_get_type_for_property:nV {id} \l__xsim_tmpa_tl }
- \bool_if:nT
+ \bool_lazy_or:nnT
{
\tl_if_eq_p:NN
\l__xsim_print_random_choice_tl
\c__xsim_print_random_both_tl
- ||
+ }
+ {
\tl_if_eq_p:NN
\l__xsim_print_random_choice_tl
\c__xsim_print_random_exercise_tl
@@ -242,12 +237,13 @@
{exercise}
}
}
- \bool_if:nT
+ \bool_lazy_or:nnT
{
\tl_if_eq_p:NN
\l__xsim_print_random_choice_tl
\c__xsim_print_random_both_tl
- ||
+ }
+ {
\tl_if_eq_p:NN
\l__xsim_print_random_choice_tl
\c__xsim_print_random_solution_tl
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -82,7 +82,9 @@
% #2: id
\prg_new_protected_conditional:Npnn \xsim_if_solution_exist:nn #1#2 {T,F,TF}
{
- \xsim_if_exist:nnnTF {#1} {#2} {solution}
+ \xsim_if_boolean_property:nnnTF {#1} {#2} {solution}
+ { \xsim_if_exist:nnnTF {#1} {#2} {exercise} }
+ { \xsim_if_exist:nnnTF {#1} {#2} {solution} }
{ \prg_return_true: }
{ \prg_return_false: }
}
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.sty 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.sty 2020-02-23 00:33:45 UTC (rev 53877)
@@ -29,9 +29,9 @@
\ExplSyntaxOn
-\tl_const:Nn \c_xsim_date_tl {2020/01/16}
+\tl_const:Nn \c_xsim_date_tl {2020/02/21}
\tl_const:Nn \c_xsim_version_major_number_tl {0}
-\tl_const:Nn \c_xsim_version_minor_number_tl {16a}
+\tl_const:Nn \c_xsim_version_minor_number_tl {17}
\tl_const:Nn \c_xsim_version_subrelease_tl {}
\tl_const:Nx \c_xsim_version_number_tl
{
@@ -55,29 +55,49 @@
% options, information
-\bool_new:N \g_xsim_final_bool
-\bool_new:N \g_xsim_verbose_bool
+\bool_new:N \g__xsim_final_bool
+\bool_new:N \g__xsim_verbose_bool
\bool_new:N \g_xsim_clear_aux_bool
\bool_new:N \g__xsim_write_to_file_bool
\bool_new:N \g_xsim_use_aux_bool
\bool_new:N \g__xsim_rerun_bool
+\bool_new:N \g__xsim_blank_bool
\keys_define:nn {xsim/package}
{
- final .bool_gset:N = \g_xsim_final_bool ,
- verbose .bool_gset:N = \g_xsim_verbose_bool ,
+ final .bool_gset:N = \g__xsim_final_bool ,
+ verbose .bool_gset:N = \g__xsim_verbose_bool ,
clear-aux .bool_gset:N = \g_xsim_clear_aux_bool ,
no-files .bool_gset_inverse:N = \g__xsim_write_to_file_bool ,
no-files .initial:n = false ,
use-aux .bool_gset:N = \g_xsim_use_aux_bool ,
- use-aux .initial:n = false
+ use-aux .initial:n = false ,
+ blank .bool_gset:N = \g__xsim_blank_bool ,
+ blank .initial:n = false
}
\ProcessKeysPackageOptions {xsim/package}
+\keys_define:nn {xsim/package}
+ {
+ final .code:n = \msg_error:nnn {xsim} {load-time-option} {final} ,
+ verbose .code:n = \msg_error:nnn {xsim} {load-time-option} {verbose} ,
+ clear-aux .code:n = \msg_error:nnn {xsim} {load-time-option} {clear-aux} ,
+ no-files .code:n = \msg_error:nnn {xsim} {load-time-option} {no-files} ,
+ use-aux .code:n = \msg_error:nnn {xsim} {load-time-option} {use-aux} ,
+ blank .code:n = \msg_error:nnn {xsim} {load-time-option} {blank}
+ }
+
% --------------------------------------------------------------------------
% messages:
+\msg_new:nnn {xsim} {load-time-option}
+ {
+ `#1'~ is~ a~ load-time~ option! \\
+ You~ cannot~ set~ it~ with~ \token_to_str:N \xsimsetup ! \\
+ You~ need~ to~ use~ \token_to_str:N \usepackage [#1] {xsim} .
+ }
+
\msg_new:nnn {xsim} {rerun}
{
Exercise~ properties~ may~ have~ changed.~ Rerun~ to~ get~ them~
@@ -105,5 +125,9 @@
\xsim_do_rerun:
\xsim_close_aux:
}
+
+% --------------------------------------------------------------------------
+\file_input_stop:
-\file_input_stop:
+2020/02/20 - implement issue #31 (blank package option)
+2020/02/21 - don't allow package options to be set with \xsimsetup
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex 2020-02-23 00:33:45 UTC (rev 53877)
@@ -52,11 +52,11 @@
\file_if_exist:nTF {#2}
{ \xsim_if_final:F { \iow_open:Nn #1 {#2} } }
{
- % \g_xsim_final_bool is a global variable; however, if it is true and
+ % \g__xsim_final_bool is a global variable; however, if it is true and
% the exercise file doesn't exist, yet, we need to set it locally to
% false in order to ensure that the file is correctly written and the
% stream closed afterwards
- \bool_set_false:N \g_xsim_final_bool
+ \bool_set_false:N \g__xsim_final_bool
\iow_open:Nn #1 {#2}
}
}
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsimverb.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsimverb.sty 2020-02-23 00:33:25 UTC (rev 53876)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsimverb.sty 2020-02-23 00:33:45 UTC (rev 53877)
@@ -59,8 +59,8 @@
\cs_new_protected:Npn \xsimverb_bool_provide:N #1
{ \bool_if_exist:NF #1 { \bool_new:N #1 } }
-\xsimverb_bool_provide:N \g_xsim_final_bool
-\xsimverb_bool_provide:N \g_xsim_verbose_bool
+\xsimverb_bool_provide:N \g__xsim_final_bool
+\xsimverb_bool_provide:N \g__xsim_verbose_bool
\xsimverb_bool_provide:N \g_xsim_clear_aux_bool
\xsimverb_bool_provide:N \g__xsim_write_to_file_bool
\xsimverb_bool_provide:N \g_xsim_use_aux_bool
@@ -68,8 +68,8 @@
\keys_define:nn {xsimverb}
{
- final .bool_gset:N = \g_xsim_final_bool ,
- verbose .bool_gset:N = \g_xsim_verbose_bool ,
+ final .bool_gset:N = \g__xsim_final_bool ,
+ verbose .bool_gset:N = \g__xsim_verbose_bool ,
clear-aux .bool_gset:N = \g_xsim_clear_aux_bool ,
no-files .bool_gset_inverse:N = \g__xsim_write_to_file_bool ,
no-files .initial:n = false ,
More information about the tex-live-commits
mailing list.