--------------------------------------------------------------------------

XSIM -- eXercise Sheets IMproved

--------------------------------------------------------------------------
Clemens Niederberger
Web:    https://github.com/cgnieder/xsim
E-Mail: clemens@cnltx.de
--------------------------------------------------------------------------
Copyright 2017--2022 Clemens Niederberger

This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
of this license or (at your option) any later version.
The latest version of this license is in
  http://www.latex-project.org/lppl.txt
and version 1.3c or later is part of all distributions of LaTeX
version 2008/05/04 or later.

This work has the LPPL maintenance status `maintained'.

The Current Maintainer of this work is Clemens Niederberger.
--------------------------------------------------------------------------

HISTORY:

 v0.0   2017/02/09 - start with coding the first ideas
 v0.1   2017/03/19 - first draft which actually seems to do everything as
                     planned
 v0.2   2017/03/21 - bugfix in the verbwrite module
                   - add `use!' and `print!' properties
                   - add the concepts of `noupdate' and `boolean' properties
 v0.4   2017/03/24 - \IfExerciseBooleanPropertyTF
                   - \GetExercisePropertyTF, \PropertyValue
                   - \printallsolutions
                   - \UseExerciseTemplate
                   - bug fix in solution environments: now get printed again
                     when option `print=true' is used
                   - bug fix to the translations of the solution list headings:
                     exercise name instead of exercise type is now printed
                   - \AddtoExerciseTypeGoal, \AddtoExerciseGoal
                     \AddtoExerciseTypeGoalPrint, \AddtoExerciseGoalPrint,
                     \ExerciseGoalValuePrint
                   - \addpoints, \addbonus, \points, \printgoal
 v0.5   2017/03/30 - add style file mechanism
                   - make solution print conditions `section' and `chapter'
                     combinable
 v0.5a  2017/04/15 - fix wrong translation of the `default-heading'
 v0.5b  2017/04/16 - add \SetExerciseProperty
 v0.6   2017/04/27 - official interface for grade distributions
                   - refine hook management (environment module)
 v0.6a  2017/04/28 - refine \blank command, add documentation for said command
 v0.7   2017/05/09 - \xsim_list_length:n
                   - new boolean property `used'
                   - when an exercise is collected the counter isn't stepped
                     but only when the exercise is inserted for the first
                     time; when this happens the new property `used' is set to
                     `true' 
                   - make setting boolean properties case insensitive
                   - add missing pieces to manual (eg `page' property...)
                   - \TotalExerciseGoals and \TotalExerciseTypeGoals
                   - \XSIMifchapterTF
                   - \xsim_if_goal_sum:nnnTF and friends,
                     \IfExerciseTypeGoalsSumTF and \IfExerciseGoalsSumTF
                   - some more hints in the manual regarding collections
 v0.8   2017/05/18 - bug fix in \xsim_set_property:nnnn
                   - random exercise lists from collections
                   - \xsim_collection_count:n
                   - \GetExerciseIdForProperty and \GetExerciseTypeForProperty
                     for unique properties
                   - set property `print=false' during collection and only to
                     true when the corresponding exercises actually are
                     printed
                   - do not insert \par at the beginning and end of exercises
                     and solutions; this should be left to the templates!
                   - new option `print-collection/print' which allows to
                     choose between exercises, solutions, and both to be
                     printed
                   - new parameter `solution-counter' in order to avoid
                     possible conflicts with existing counters
 v0.8a  2017/05/19 - \IfPrintSolutionTF
 v0.8b  2017/05/23 - use \printgoal in default environment template
                   - \xsim_print_goal:nnn now expands input to a number
 v0.9   2017/06/20 - \xsimstyle's behaviour now matches the description in
                     the manual
                   - add style file `layouts' which at the moment provides the
                     two exercise templates `runin' and `margin'
                   - \printforexercises , \xsim_print_type_code:nnnnn
                   - \IfExerciseParameterSetTF
                   - \GetExerciseParameterTF
                   - change syntax of \SetExerciseProperty
                   - \SetExpandedExerciseProperty
                   - \ExerciseSetProperty, \ExerciseSetExpandedProperty
                   - property `sectioning'
                   - \IfExistSolutionTF
 v0.10  2017/09/19 - \xsim_input:nnn
                   - \GetExerciseBody
                   - option `blank/fill'
                   - bug fix in \xsim_start_collection:nn
                   - added further examples to package
                   - new option `file-extension'
 v0.10a 2017/10/01 - bug fix: grading table options can now be set with
                     \xsimsetup (issue 15)
 v0.11  2018/02/12 - change name requirement for style files in order to
                     prevent possible name clashes with module files
                   - fix bug in \SetExerciseProperty and
                     \SetExpandedExerciseProperty
                   - fix bug when xsimverb is used standalone (issue 21)
                   - add option `split-aux-lists' (issue 18)
                   - \IfExerciseTagSetTF and \IfExerciseTopicSetTF
                   - introduce a \xsim_if_<tagging>_value:nTF for each tag
                     kind
                   - \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)
 v0.13  2019/10/06 - experimental package option `no-files'
 v0.14  2019/10/13 - new exercise parameters `exercise-heading' and
                     `solution-heading'
                   - new options `exercise/heading' and `solution/heading' as
                     interface for setting the new parameters
                   - new command \GetExerciseHeadingF for using the new
                     parameters in environment templates
                   - change the environment template `default' to use the new
                     \GetExerciseHeadingF and output a \par at the end
                   - make argument of \xsimsetup long
                   - new template `minimal'
                   - new option `load-style'
                   - new example `texwelt-23968' (long and short solutions)
 v0.14a 2019/10/19 - fix \xsim_if_exercise_exist:nnTF to obey the `no-files'
                     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
        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
 v0.18  2020/02/23 - fix issue #56
                   - change \printexercise and \printsolution to accept a
                     clist of either ids or IDs (or mixed)
                   - new templates in the `layouts' style
 v0.19  2020/03/16 - improve performance
                   - only set \ExerciseID and \ExerciseType locally to ensure
                     correct values when exercises (of different types) are
                     nested
                   - new load-time option `debug' - only for development
 v0.19a 2020/03/19 - fix missing-variant-bug introduced with the last update
 v0.19b 2020/04/04 - fix bug in new attribute mechanism which was a problem
                     when `no-files` has been used
 v0.20  2021/01/31 - switch to one sty file per package
                   - use LaTeX's new hooks
                   - declare undeclared variables
                   - new exercise setup mechanism which clearly determines the
                     difference between definition, usage, and printing of an
                     exercise; this also solves the problem with added goals
                     in the exercise body in a collection
                   - re-write collection mechanism:
                     * changes the behaviour of \collectexercises but doesn't
                       require external files any more and more importantly
                       doesn't require inputting files several times for
                       multiple collections
                     * drop \collectexercisestype
                     * new \(de)activatecollection
                     * new options `collect' and `<type>/collect'
                   - small improvements in performance
                   - new parameters `within' and `the-counter'
                   - make `no-files' the default
                   - new examples
                   - various small fixes
 v0.20a 2021/02/01 - re-add missing `layouts' style
                   - add example texsx-549540
 v0.20b 2021/02/02 - fix issue #78
 v0.20c 2021/02/03 - fix issue #80
                   - add missing test in \xsim_if_exist:nnnTF
 v0.21  2022/02/12 - make \__xsim_set_file_signature:nnn public
                   - make \l__xsim_file_path_and_name_tl, \l__xsim_file_name_tl
                     and \l__xsim_file_path_tl public
                   - introduce XSIMsetfilebeginX and XSIMsetfileendX (xsimverb)
                   - reduce comment line in automated comments in exercise and
                     solution files
                   - add option <tag>/use-unmatched
                   - document option `blank/fill'
                   - add counter foreach type and collection that holds the
                     number of exercises of a type in a collection
                   - fix issue #90
                   - correct file hooks
                   - implement issue #88
                   - fix issue #96
                   - `use!' and `print!' had gone lost. Add them back in.
                   - add new options `match-all'/`match-any' for the collection
                     conditions.  Resolves issue #94.
                   - new \ForEachUsedExerciseByOrder, used in the table
                     templates which resolves issue #85
