texlive[45355] Master/texmf-dist: xsim (20sep17)

commits+karl at tug.org commits+karl at tug.org
Thu Sep 21 00:36:23 CEST 2017


Revision: 45355
          http://tug.org/svn/texlive?view=revision&revision=45355
Author:   karl
Date:     2017-09-21 00:36:23 +0200 (Thu, 21 Sep 2017)
Log Message:
-----------
xsim (20sep17)

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_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.grades.code.tex
    trunk/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex
    trunk/Master/texmf-dist/tex/latex/xsim/xsim.modules.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.tags.code.tex
    trunk/Master/texmf-dist/tex/latex/xsim/xsim.templates.code.tex
    trunk/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex
    trunk/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex
    trunk/Master/texmf-dist/tex/latex/xsim/xsimverb.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.pdf
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.tex
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.pdf
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.tex
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.pdf
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.tex
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.pdf
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.tex
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.pdf
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.tex
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.pdf
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.tex
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.pdf
    trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.tex
    trunk/Master/texmf-dist/tex/latex/xsim/xsim.layouts.code.tex

Modified: trunk/Master/texmf-dist/doc/latex/xsim/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/README	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/doc/latex/xsim/README	2017-09-20 22:36:23 UTC (rev 45355)
@@ -1,5 +1,5 @@
 --------------------------------------------------------------------------
-XSIM 2017/05/19 v0.8a
+XSIM 2017/09/19 v0.10
 
   eXercise Sheets IMproved
 
@@ -34,6 +34,7 @@
    xsim.goals.code.tex
    xsim.grades.code.tex
    xsim.interface.code.tex
+   xsim.layouts.code.tex
    xsim.modules.code.tex
    xsim.properties.code.tex
    xsim.random.code.tex
@@ -60,19 +61,26 @@
    xsim.difficulties.tex, xsim.difficulties.pdf
    xsim.floating.tex, xsim.floating.pdf
    xsim.grade-distribution.tex, xsim.grade-distribution.pdf
+   xsim.hints.tex, xsim.hints.pdf
    xsim.listings.tex, xsim.listings.pdf
    xsim.multiplechoice.tex, xsim.multiplechoice.pdf
+   xsim.listofexercises.tex, xsim.listofexercises.pdf
    xsim.pointsums.tex, xsim.pointsums.pdf
    xsim.randomexercises.tex, xsim.randomexercises.pdf
    xsim.various.tex, xsim.various.pdf
+   xsim.texsx-13635.tex, xsim.texsx-13635.pdf
+   xsim.texsx-155630.tex, xsim.texsx-155630.pdf
    xsim.texsx-199360.tex, xsim.texsx-199360.pdf
    xsim.texsx-299534.tex, xsim.texsx-299534.pdf
    xsim.texsx-305110.tex, xsim.texsx-305110.pdf
+   xsim.texsx-308883.tex, xsim.texsx-308883.pdf
    xsim.texsx-338165.tex, xsim.texsx-338165.pdf
    xsim.texsx-350028.tex, xsim.texsx-350028.pdf
    xsim.texsx-369065.tex, xsim.texsx-369065.pdf
    xsim.texsx-369803.tex, xsim.texsx-369803.pdf
    xsim.texsx-369686.tex, xsim.texsx-369686.pdf
+   xsim.texsx-370642.tex, xsim.texsx-370642.pdf
+   xsim.texsx-391530.tex, xsim.texsx-391530.pdf
    xsim.texwelt-6698.tex, xsim.texwelt-6698.pdf
    xsim.texwelt-15093.tex, xsim.texwelt-15093.pdf
    xsim.golatex-16824.tex, xsim.golatex-16824.pdf

Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.pdf	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.pdf	2017-09-20 22:36:23 UTC (rev 45355)

Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -0,0 +1,59 @@
+% https://tex.stackexchange.com/q/224408/
+\documentclass{article}
+\usepackage{xsim}
+
+\usepackage{needspace}
+
+\DeclareExerciseProperty{hint}
+
+% we'll use a description list for the hints:
+\newcommand\printhints{%
+  \begin{description}
+    \ForEachUsedExerciseByType{%
+      \def\ExerciseType{##1}%
+      \def\ExerciseID{##2}%
+      \GetExercisePropertyT{hint}
+        {%
+          \item[\XSIMmixedcase{\GetExerciseName}~##3]
+           ####1%
+        }%
+    }%
+  \end{description}
+}
+
+\newcommand\hint[1]{\SetExerciseProperty{\ExerciseType}{\ExerciseID}{hint}{#1}}
+
+\begin{document}
+
+\section{Problems}
+% set hint through option:
+\begin{exercise}[subtitle=Pythagoras,hint=This is a hint to the first problem.]
+  This is the first problem.
+\end{exercise}
+\begin{solution}
+  This is the solution to the first problem.
+\end{solution}
+
+\begin{exercise}[subtitle=Another Problem]
+  This is the second problem.
+\end{exercise}
+\begin{solution}
+  This is the solution to the second problem.
+\end{solution}
+
+% set hint with custom command:
+\begin{exercise}[subtitle=Yet Another Problem]
+  This is the third problem.
+  \hint{This is a hint to the third problem.}
+\end{exercise}
+\begin{solution}
+  This is the solution to the third problem.
+\end{solution}
+
+\section{Hints}
+\printhints
+
+\section{Solutions}
+\printsolutions[headings=false]
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.pdf	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.pdf	2017-09-20 22:36:23 UTC (rev 45355)

Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -0,0 +1,81 @@
+% https://tex.stackexchange.com/q/94766/
+\documentclass[a4paper,10pt]{book}
+\usepackage[utf8]{inputenc}
+
+\usepackage{xsim}
+\xsimsetup{
+  exercise/within=chapter,
+  exercise/template=theorem ,
+  exercise/the-counter=\thechapter.\arabic{exercise}
+}
+
+\DeclareExerciseEnvironmentTemplate{theorem}
+  {%
+    \par\addvspace{\baselineskip}
+    \noindent
+    \XSIMexpandcode{\noexpand\label{\ExerciseType:\ExerciseID}}
+    \Large\textbf{%
+      \space\GetExerciseProperty{counter}%
+      \GetExercisePropertyT{subtitle}{ (\PropertyValue)}%
+    } \normalsize\itshape
+  }
+  {\par\addvspace{\baselineskip}}
+
+\usepackage{multicol}
+  
+\newcommand\listofexercises{
+  \chapter*{List of Exercises}
+  \def\CurrentExerciseChapter{}%
+  \ForEachPrintedExerciseByType{
+    \global\let\LastExerciseChapter\CurrentExerciseChapter
+    \xdef\CurrentExerciseChapter{\ExercisePropertyGet{##1}{##2}{chapter}}%
+    \XSIMifeqF{\LastExerciseChapter}{\CurrentExerciseChapter}
+      {
+        \XSIMifblankF{\LastExerciseChapter}{\end{multicols}}
+        \begin{multicols}{2}%
+          [\contentsline{chapter}{Chapter \CurrentExerciseChapter}{}{}]
+      }
+    \contentsline
+      {section}
+      {%
+        Exercise \ExercisePropertyGet{##1}{##2}{counter}%
+        \XSIMifblankF{##4}{ (##4)}%
+      }
+      {\pageref{##1:##2}}{}%
+  }
+  \end{multicols}
+}
+
+% \usepackage{hyperref}
+% \newcommand\theHexercise{\thechapter.\arabic{exercise}}
+
+\begin{document}
+
+\chapter{kinetic}
+\begin{exercise}
+  435-1
+\end{exercise}
+\begin{exercise}[subtitle=Foo Bar]
+  435-2
+\end{exercise}
+\begin{exercise}
+  435-3
+\end{exercise}
+
+\chapter{momentum}
+\begin{exercise}
+  436-1
+\end{exercise}
+\begin{exercise}
+  436-2
+\end{exercise}
+\begin{exercise}
+  436-3
+\end{exercise}
+\begin{exercise}
+  436-4
+\end{exercise}
+
+\listofexercises
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.pdf	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.pdf	2017-09-20 22:36:23 UTC (rev 45355)

Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -0,0 +1,70 @@
+% https://tex.stackexchange.com/q/13635/
+\documentclass{article}
+\usepackage{xsim}
+
+\DeclareExerciseEnvironmentTemplate{theorem:remark}
+  {
+    \par\addvspace{\baselineskip}
+    \noindent
+    \textit{%
+      \IfInsideSolutionF{\XSIMmixedcase{\GetExerciseName}~}%
+      \GetExerciseProperty{counter}}%
+    \GetExercisePropertyT{subtitle}{ \textup{(#1)}}%
+    . %
+  }
+  {\par\addvspace{\baselineskip}}
+
+\DeclareExerciseHeadingTemplate{exercises}{\subsection*{Exercises}}
+
+\xsimsetup{
+  exercise/template = theorem:remark ,
+  exercise/within = section ,
+  exercise/the-counter = \thesection.\arabic{exercise} ,
+  print-collection/headings = true ,
+  print-collection/headings-template = exercises
+}
+
+\DeclareExerciseCollection{prime numbers}
+\DeclareExerciseCollection{Zeta function}
+
+\begin{document}
+
+\collectexercises{prime numbers}
+\section{Prime Numbers}
+
+A \emph{prime number} is a positive integer other than $1$ that is only
+divisible by $1$ and itself.
+
+\begin{exercise}[subtitle=Euclid's Theorem]
+  \label{ex:euclid}
+  Show that there are infinitely many prime numbers.
+\end{exercise}
+
+As you will show in Exercise \ref{ex:euclid}, there are infinitely many
+primes.  The number of primes that are smaller than a given natural number $n$
+is denoted $\pi(n)$.
+
+\begin{exercise}
+  Find an asymptotic formula for $\pi(n)$. \emph{Hint:} You might find
+  Exercise \ref{ex:zeta} helpful.
+\end{exercise}
+\collectexercisesstop{prime numbers}
+
+\printcollection{prime numbers}
+
+\collectexercises{Zeta function}
+\section{Zeta function}
+
+The zeta function is given by $\zeta(s) = \sum_{n=1}^\infty n^{-s}$, where $s$
+is a complex number with real part bigger than $1$.
+\begin{exercise}\label{ex:zeta}
+  Extend $\zeta$ as far as possible and find all zeros
+  of the function.
+\end{exercise}
+For example $\zeta(2) = \frac{\pi^2}{6}$.
+
+\collectexercisesstop{Zeta function}
+
+\printcollection{Zeta function}
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.pdf	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.pdf	2017-09-20 22:36:23 UTC (rev 45355)

Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -0,0 +1,26 @@
+% https://tex.stackexchange.com/q/155630/
+\documentclass{article}
+\usepackage{xsim}
+
+\DeclareExerciseCollection{foo}
+
+\begin{document}
+
+\collectexercises{foo}
+\begin{exercise}
+  foo
+\end{exercise}
+\begin{exercise}
+  bar
+\end{exercise}
+\begin{exercise}
+  baz
+\end{exercise}
+\collectexercisesstop{foo}
+
+% shuffle around for a different version:
+\printexercise{exercise}{1}
+\printexercise{exercise}{3}
+\printexercise{exercise}{2}
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.pdf	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.pdf	2017-09-20 22:36:23 UTC (rev 45355)

Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -0,0 +1,13 @@
+% https://tex.stackexchange.com/q/308883/
+\documentclass{article}
+\usepackage{xsim,siunitx}
+\xsimsetup{goal-print={\num{#1}}}
+\sisetup{output-decimal-marker={,}}
+
+\begin{document}
+
+\begin{exercise}[points=2.5]
+  foo
+\end{exercise}
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.pdf	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.pdf	2017-09-20 22:36:23 UTC (rev 45355)

Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -0,0 +1,25 @@
+% https://tex.stackexchange.com/q/370642/
+\documentclass[a4paper,12pt]{article}
+\usepackage{xsim}
+
+\DeclareExerciseEnvironmentTemplate{simple}
+  {\par\noindent\textbf{\GetExerciseProperty{counter}}. }
+  {\par}
+\xsimsetup{exercise/template=simple}
+
+\begin{document}
+
+\begin{exercise}\label{eq1}
+  Let $X$ be such that\dots
+\end{exercise}
+
+\begin{exercise}
+  In this exercise consider $Y=2$ \dots
+\end{exercise}
+
+\begin{exercise}
+  Consider $X$ as in exercise~\ref{eq1} (I would like to see the issue
+  number~1)
+\end{exercise}
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.pdf	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.pdf	2017-09-20 22:36:23 UTC (rev 45355)

Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -0,0 +1,66 @@
+\documentclass{article}
+\usepackage{xsim}
+
+\DeclareExerciseType{subquestion}{
+  exercise-env = question ,
+  solution-env = answer ,
+  exercise-name = Question ,
+  solution-name = Answer ,
+  exercise-template = item ,
+  solution-template = item
+}
+
+\DeclareExerciseProperty{title}
+
+\makeatletter
+\DeclareExerciseEnvironmentTemplate{named}
+  {%
+    \subsection*{%
+      \GetExercisePropertyTF{title}
+        {#1}
+        {??\@latex at warning{Please give an exercise title}}%
+    }%
+  }
+  {}
+\makeatother
+
+\DeclareExerciseEnvironmentTemplate{item}
+  {\item}
+  {}
+
+\DeclareExerciseCollection{exercise-pool}
+
+\xsimsetup{
+  exercise/template = named
+}
+
+\begin{filecontents*}{\jobname-exercises.tex}
+\begin{question}
+  Who is the Defence Minister?
+\end{question}
+\begin{question}
+  Who is the Home Minister?
+\end{question}
+\begin{question}
+  Who is the Finance Minister?
+\end{question}
+\begin{question}
+  Who is the External Affairs Minister?
+\end{question}
+\end{filecontents*}
+
+\begin{document}
+
+\collectexercises{exercise-pool}
+\input{\jobname-exercises.tex}
+\collectexercisesstop{exercise-pool}
+
+\begin{exercise}[title=Answer the following in one sentence:]
+  \begin{enumerate}
+    \item Who is the President?
+    \item Who is the Prime Minister?
+    \printrandomexercises[collection=exercise-pool]{2}
+  \end{enumerate}
+\end{exercise}
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/xsim/xsim.history
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xsim/xsim.history	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/doc/latex/xsim/xsim.history	2017-09-20 22:36:23 UTC (rev 45355)
@@ -79,3 +79,23 @@
                    - 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'

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	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -1,8 +1,8 @@
-% !arara: pdflatex: { action: nonstopmode }
+% arara: pdflatex: { action: nonstopmode }
 % !arara: biber
 % arara: pdflatex: { action: nonstopmode }
 % arara: pdflatex: { action: nonstopmode }
-% arara: pdflatex: { action: nonstopmode }
+% !arara: pdflatex: { action: nonstopmode }
 % ----------------------------------------------------------------------------
 % the XSIM package
 % 
@@ -282,8 +282,20 @@
     given.  Exercises will be written to and included from this path.
     \emph{The path must exist on your system before you can use it!} This
     document uses \keyis{path}{exercises}.
+  \keyval{file-extension}{string}\Default{\code{tex}}
+    \sinceversion{0.10}This option let's you choose the extension of the
+    auxiliary files.
 \end{options}
 
+Another thing to keep in mind: the environment in many ways works the same way
+as the \env{filecontents}. \emph{This also means that you \emph{cannot} have
+  comments on the first line of the environments:}
+\begin{sourcecode}
+  \begin{exercise}[points=2] % this will cause trouble
+    Lorem ipsum
+  \end{exercise}
+\end{sourcecode}
+
 \begin{bewareofthedog}
   \xsim\ writes a lot of stuff to the auxfile for re-using information on
   subsequent compilations.  If you add exercises, change properties \etc\ it
@@ -486,17 +498,18 @@
   \command{DeclareExerciseProperty}[\barg\sarg\narg\marg{property}]
     Declares the property \meta{property}.
     
-    If used with the optional \barg\ star a unique property is defined which
-    means that each exercise must have a property value distinct from all
-    other exercises (all means all -- \emph{independent from the exercise type}).
+    If used with the optional \barg\ a \textbf{unique property} is defined
+    which means that each exercise must have a property value distinct from
+    all other exercises (all means all -- \emph{independent from the exercise
+      type}).
 
-    If used with the optional \sarg\ a boolean property is defined which
-    means that it only should get the values \code{true} or \code{false} and
-    if used without value it gets the value \code{true} instead of an empty
-    value.  If any other value is used the property is set to
-    \code{false}.  A boolean option obviously cannot be unique.  The optional
-    \sarg\ takes precedence over the optional \barg, \ie, if both are present
-    the property is boolean \emph{but not} unique.
+    If used with the optional \sarg\ a \textbf{boolean property} is defined
+    which means that it only should get the values \code{true} or \code{false}
+    and if used without value it gets the value \code{true} instead of an
+    empty value.  If any other value is used the property is set to
+    \code{false}.  A boolean property obviously cannot be unique.  The
+    optional \sarg\ takes precedence over the optional \barg, \ie, if both are
+    present the property is boolean \emph{but not} unique.
 
     If used with the optional \narg\ a property is defined which won't get
     updated through subsequent compilation runs but is only set when the
@@ -527,7 +540,7 @@
 The power of properties will get more clear when reading
 section~\vref{sec:styl-exerc-templ} about templates.
 
-\subsection{A Special Kind of Property: Exercise Goals}\label{sec:goals}
+\subsection[Exercise Goals]{A Special Kind of Property: Exercise Goals}\label{sec:goals}
 
 Exercise goals are a generic concept in \xsim\ for exercise properties like
 \property{points} or \property{bonus-points}.  Those are properties which can
@@ -652,7 +665,7 @@
 \end{sourcecode}
 
 
-\subsection{A Special Kind of Property: Exercise Tags}\label{sec:tags}
+\subsection[Exercise Tags]{A Special Kind of Property: Exercise Tags}\label{sec:tags}
 
 Exercise tags are a generic concept in \xsim\ for exercise properties like
 \property{tags} or \property{topics}.  Those are properties which can (only)
@@ -679,13 +692,13 @@
   \keyval{tags}{csv list of tags}
     Choose the set of tags whose associated exercises should be printed.
   \keyval{topics}{csv list of topics}
-    Choose the set of tags whose associated exercises should be printed.
-  \keybool{ignore-tagging}\Module{tags}\Default{false}
+    Choose the set of topics whose associated exercises should be printed.
+  \keybool{ignore-untagged}\Module{tags}\Default{false}
     If set to true exercises with no tags will be printed even if tags have
     been chosen with the option \option{tags}.
-  \keybool{ignore-tagging}\Module{topics}\Default{true}
-    If set to true exercises with no topics will be printed even if tags have
-    been chosen with the option \option{topics}.
+  \keybool{ignore-untagged}\Module{topics}\Default{true}
+    If set to true exercises with no topics will be printed even if topics
+    have been chosen with the option \option{topics}.
 \end{options}
 
 It may happen that you choose certain tags for printing and want one or two
@@ -978,7 +991,7 @@
   once and only \emph{after it has been collected}.  No guaranties are given
   that properties are set correctly if you use the collection before.  You
   usually also will make sure that the exercises in a collection are unique,
-  \ie, that an exercises is not part of several collections -- at least not if
+  \ie, that an exercise is not part of several collections -- at least not if
   both collections are printed in the same document.
 \end{bewareofthedog}
 
@@ -1014,10 +1027,10 @@
   \printrandomexercises[collection=foo]{2}
 \end{example}
 
-The example above of course doesn't make much sense but if have a collection
-which collects exercises from an external file and the exercise haven't been
-printed in the document before then you will get a list of subsequently
-numbered exercises.
+The example above of course doesn't make much sense but if you have a
+collection which collects exercises from an external file and the exercises
+haven't been printed in the document before then you will get a list of
+subsequently numbered exercises.
 
 \section{Printing Solutions}\label{sec:printing-solutions}
 
@@ -1044,12 +1057,12 @@
   \printsolutionstype{exercise}
 \end{example}
 
-The options can be diveded into two groups.  The ones in the first group
+The options can be divided into two groups.  The ones in the first group
 modify the layout.
 \begin{options}
-  \keybool{headings}\Default{true}
+  \keybool{headings}\Module{print-solutions}\Default{true}
     If true a heading for each exercise type is inserted.
-  \keyval{headings-template}{template}\Default{default}
+  \keyval{headings-template}{template}\Module{print-solutions}\Default{default}
     The heading template used when \keyis{headings}{true}.
 \end{options}
 
@@ -1057,15 +1070,18 @@
 printed.  If you combine those conditions a solution is printed if it meets
 either of the conditions.
 \begin{options}
-  \keychoice{section}{\default{true},false,\meta{integer}}\Default{false}
+  \keychoice{section}{\default{true},false,\meta{integer}}\Module{print-solutions}%
+    \Default{false}
     If you set \keyis{section}{true} only solutions of exercises of the
     current section are printed.  If you set \keyis{section}{4} only solutions
     of exercises in a section with number~$4$ are printed.
-  \keychoice{chapter}{\default{true},false,\meta{integer}}\Default{false}
+  \keychoice{chapter}{\default{true},false,\meta{integer}}\Module{print-solutions}%
+    \Default{false}
     If you set \keyis{chapter}{true} only solutions of exercises of the
     current chapter are printed.  If you set \keyis{chapter}{4} only solutions
     of exercises in a chapter with number~$4$ are printed.
-  \keychoice{collection}{false,\meta{collection name}}\Default{false}
+  \keychoice{collection}{false,\meta{collection name}}\Module{print-solutions}%
+    \Default{false}
     If used only solutions of exercises belonging to collection
     \meta{collection name} are printed.
 \end{options}
@@ -1169,6 +1185,34 @@
   section~\vref{sec:template-examples} but at the time of writing this is still
   up in the air.}.
 
+\subsection{Templates Provided by the Package}
+\xsim\ comes with a few predefined layouts:
+\begin{description}
+  \item[\code{default}] The template activated per default and the only one
+    available without further action.
+  \item[\code{runin}] A layout rather similar to the one by package
+    \pkg{exsheets}, see section~\vref{sec:runin-template}.  Available through
+    the style file \code{layouts} (see section~\vref{sec:style-files} for more
+    information on style files\index{style file}).
+  \item[\code{margin}] A layout rather similar to the one by package
+    \pkg{exsheets}, see section~\ref{sec:margin-template}.  Available through
+    the style file \code{layouts} (see section~\vref{sec:style-files} for more
+    information on style files\index{style file}).
+\end{description}
+
+\collectexercises{layouts}
+\begin{exercise}[subtitle=The Subtitle,points=2.5,ID=showlayout]
+  Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
+  vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum
+  gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a,
+  magna. Donec vehicula augue eu neque. Pellentesque habitant morbi tristique
+  senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras
+  viverra metus rhoncus sem.
+\end{exercise}
+\collectexercisesstop{layouts}
+
+\listlayouts
+
 \subsection{Commands for Usage in Template Definitions}
 \subsubsection{Goals}
 \begin{commands}
@@ -1213,7 +1257,11 @@
     current exercise.  Inside the \meta{true} branch you can refer to the
     retrieved value either with \code{\#1} or with \cs{PropertyValue}.
     \emph{This command expands its contents inside a group.}
-  \command{GetExerciseIdForProperty}[\marg{property}\marg{value}]
+  \command{GetExerciseBody}[\Marg{exercise\textnormal{|}solution}]
+    \sinceversion{0.10}Retrieves the environment body of either the
+    \code{exercise} or the corresponding \code{solution} of the current
+    exercise.
+  \expandable\command{GetExerciseIdForProperty}[\marg{property}\marg{value}]
     Retrieves the property \property{id} of the exercise where the property
     \meta{property} has the value \meta{value}.  \emph{This only works for
       \emph{unique} properties!}
@@ -1221,9 +1269,19 @@
     Retrieves the property \property{type} of the exercise where the
     property \meta{property} has the value \meta{value}.  \emph{This only
       works for \emph{unique} properties!}
-  \command{SetExerciseProperty}[\marg{type}\marg{id}\marg{property}\marg{value}]
-    Set the property \meta{property} of exercise of type \meta{type} and id
-    \meta{id} to \meta{value}.
+  \command{SetExerciseProperty}[\marg{property}\marg{value}]
+    \changedversion{0.9}Set the property \meta{property} of the current
+    exercise to \meta{value}.
+  \command{SetExpandedExerciseProperty}[\marg{property}\marg{value}]
+    \sinceversion{0.9}Expand \meta{value} \cs*{edef}-like and set the property
+    \meta{property} of the current exercise to the result of the expansion.
+  \command{ExerciseSetProperty}[\marg{type}\marg{id}\marg{property}\marg{value}]
+    \sinceversion{0.9}Set the property \meta{property} of the exercise of type
+    \meta{type} and id \meta{id} to \meta{value}.
+  \command{ExerciseSetExpandedProperty}[\marg{type}\marg{id}\marg{property}\marg{value}]
+    \sinceversion{0.9}Expand \meta{value} \cs*{edef}-like and set the property
+    \meta{property} of the exercise of type \meta{type} and id \meta{id} to
+    the result of the expansion.
   \expandable\command{IfExerciseBooleanProperty\TF}[\marg{property}%
     \marg{true}\marg{false}]
     Checks wether the boolean property \meta{property} has value \code{true}
@@ -1259,14 +1317,28 @@
 \subsubsection{Parameters}
 \begin{commands}
   \expandable\command{GetExerciseParameter}[\marg{parameter}]
-    Retrieves the value of the parameter \meta{paramater} for the current exercise.
+    Retrieves the value of the parameter \meta{paramater} for the current
+    exercise type.
+  \command{GetExerciseParameter\TF}[\marg{parameter}\marg{true}\marg{false}]
+    \sinceversion{0.9}Retrieves the value of the parameter \meta{paramater}
+    for the current exercise type. Inside the \meta{true} branch you can refer
+    to the retrieved value either with \code{\#1} or with \cs{ParameterValue}.
+    \emph{This command expands its contents inside a group.}
   \expandable\command{GetExerciseName}
     Retrieves the value of the parameter \parameter{exercise-name} for the
     current exercise or of the parameter \parameter{solution-name} for the
     current solution.
-  \expandable\command{ExerciseParameterGet}[\marg{type}\marg{id}\marg{parameter}]
+  \expandable\command{ExerciseParameterGet}[\marg{type}\marg{parameter}]
     Retrieves the value of the parameter \meta{parameter} for the exercise of type
     \meta{type} with id \meta{id}.
+  \expandable\command{IfExerciseParameterSet\TF}[\marg{parameter}%
+    \marg{true}\marg{false}]
+    \sinceversion{0.9}Test if the parameter \meta{parameter} has been set for
+    the current exercise type.
+  \expandable\command{ExerciseParameterIfSet\TF}[\marg{type}\marg{parameter}%
+    \marg{true}\marg{false}]
+    \sinceversion{0.9}Test if the parameter \meta{parameter} has been set for
+    the exercise type \meta{type}.
 \end{commands}
 
 \subsubsection{Tags}
@@ -1288,6 +1360,10 @@
 
 \subsubsection{Further Commands for Usage in Template Definitions}
 \begin{commands}
+  \command{UseExerciseTemplate}[\marg{type}\marg{name}]
+    Retrieve template \meta{name} of type \meta{type}.  This can be useful if
+    you want to define a template which just adds some code to an existing
+    template (an automated \cs*{label}, say).
   \expandable\command{ExerciseType}
     Can be used to refer to the current exercise type.
   \expandable\command{ExerciseID}
@@ -1306,6 +1382,8 @@
   \expandable\command{IfPrintSolution\TF}[\marg{true}\marg{false}]
     Tests if the option \option{print} for the solutions of the current
     \cs{ExerciseType} is set to \code{true} or \code{false}.
+  \command{IfExistSolution\TF}[\marg{true}\marg{false}]
+    \sinceversion{0.9}Tests if a solution for the current exercise exists.
   \command{ForEachPrintedExerciseByType}[\marg{code}]
     Loops over each \emph{printed} exercise ordered by the exercise types and
     within each type by id.  Inside \meta{code} you can refer to several
@@ -1459,8 +1537,8 @@
         \marginpar
           {%
             \IfInsideSolutionF{\rule{1.2cm}{1pt}\slash}%
-            \PropertyValue
-            \GetExercisePropertyT{bonus-points}{~(+\PropertyValue)}%
+            \printgoal{\PropertyValue}
+            \GetExercisePropertyT{bonus-points}{~(+\printgoal{\PropertyValue})}%
             ~\XSIMtranslate {point-abbr}%
           }%
       }%
@@ -1493,7 +1571,7 @@
           \IfInsideSolutionF{%
             \GetExercisePropertyT{points}{ % notice the space
               (%
-                \PropertyValue
+                \printgoal{\PropertyValue}
                 \IfExerciseGoalSingularTF{points}
                   {\XSIMtranslate{point}}
                   {\XSIMtranslate{points}}%
@@ -1525,6 +1603,7 @@
 \end{example}
 
 \subsubsection{Mimicking \pkg*{exsheets}' \code{runin} Template}
+\label{sec:runin-template}
 
 The following example shows how you could mimick \pkg*{exsheets}' \code{runin}
 template.  The outcome isn't exactly the same since \pkg{exsheets} doesn't use
@@ -1539,14 +1618,16 @@
       \Needspace*{2\baselineskip}
       \noindent
       \textbf{\XSIMmixedcase{\GetExerciseName}~\GetExerciseProperty{counter}}%
-      \GetExercisePropertyT{subtitle}{ \textit{#1}} %
-      \GetExercisePropertyT{points}{%
-        \marginpar{%
-          \PropertyValue
-          \GetExercisePropertyT{bonus-points}{+\PropertyValue}%
-          \,\IfExerciseGoalSingularTF{points}
-              {\XSIMtranslate{point}}
-              {\XSIMtranslate{points}}%
+      \GetExercisePropertyT{subtitle}{ \textit{#1}} % <<< notice the space
+      \IfInsideSolutionF{%
+        \GetExercisePropertyT{points}{%
+          \marginpar{%
+            \printgoal{\PropertyValue}%
+            \GetExercisePropertyT{bonus-points}{+\printgoal{\PropertyValue}}%
+            \,\IfExerciseGoalSingularTF{points}
+                {\XSIMtranslate{point}}
+                {\XSIMtranslate{points}}%
+          }%
         }%
       }%
     }
@@ -1553,28 +1634,17 @@
     {}
 \end{sourcecode}
 
-See it in action:
-\begin{example}
-  \xsimsetup{exercise/template=runin}
-  \renewcommand*\theexercise{\arabic{exercise}.}
-  \begin{exercise}[subtitle=exsheets' runin,points=2.5]
-    \lipsum[4]
-  \end{exercise}
-\end{example}
-
 \subsubsection{Mimicking \pkg*{exsheets}' \code{margin} Template}
+\label{sec:margin-template}
 
 The following example shows how you could mimick \pkg*{exsheets}'
 \code{margin} template.
 
 \begin{sourcecode}
-  \usepackage{needspace}
   \DeclareExerciseEnvironmentTemplate{margin}
     {%
-      \par\vspace{\baselineskip}
-      \Needspace*{2\baselineskip}
-      \noindent
-      \llap{%
+      \trivlist
+      \item[\llap{%
         \smash{%
           \tabular[t]{@{}r@{}}
             \textbf{\XSIMmixedcase{\GetExerciseName}~\GetExerciseProperty{counter}}
@@ -1581,27 +1651,18 @@
             \IfExercisePropertySetT{points}{%
               \tabularnewline
               (%
-                \GetExerciseProperty{points}%
-                \GetExercisePropertyT{bonus-points}{+#1}%
+                \printgoal{\GetExerciseProperty{points}}%
+                \GetExercisePropertyT{bonus-points}{+\printgoal{#1}}%
                 \,\XSIMtranslate{point-abbr}%
               )%
             }%
           \endtabular
-        } % notice the space
-      }%
+        }%
+      }]\relax
     }
-    {}
+    {\endtrivlist}
 \end{sourcecode}
 
-See it in action:
-\begin{example}
-  \xsimsetup{exercise/template=margin}
-  \renewcommand*\theexercise{\arabic{exercise}.}
-  \begin{exercise}[subtitle=exsheets' margin,points=2.5]
-    \lipsum[4]
-  \end{exercise}
-\end{example}
-
 \subsubsection{The Headings Templates}\label{sec:headings-templates}
 \xsim\ defines four heading templates which only differ by which text they
 output:
@@ -1758,7 +1819,7 @@
 \section{Exercise Translations}\label{sec:exerc-transl}
 
 \begin{commands}
-  \command{DeclareExerciseTranslation}[\marg{keyword}\marg{language}\marg{translation}]
+  \command{DeclareExerciseTranslation}[\marg{language}\marg{keyword}\marg{translation}]
     Declare the translation of \meta{keyword} for language \meta{language}.
   \command{DeclareExerciseTranslations}[\marg{keyword}\marg{translations}]
     Declare the translations of \meta{keyword} for several languages at once.
@@ -1936,11 +1997,11 @@
 \subsection{\code{! TeX capacity exceeded, sorry [text input levels=15].}
   Why?}
 Did you try to use an exercise or solution in a macro of some sort?  This
-generally will fail\footnote{The reasons are not entirely clear to me.}.  But
-there should never be the need to hide the environments inside of a macro,
-anyway.
+generally will fail\footnote{The reasons are similar to the ones given here:
+  \url{https://tex.stackexchange.com/a/295422/}.}.  But there should never be
+the need to hide the environments inside of a macro, anyway.
 
-\subsection{\code{Runaway argument? !File ended while scanning use of \^\^M.} Why?}
+\subsection{\code{Runaway argument? !File ended while scanning use of \^{}\^{}M.} Why?}
 Did you try to use an exercise or solution in a macro of some sort?  This
 generally will fail.  But there should never be the need to hide the
 environments inside of a macro, anyway.
@@ -1993,7 +2054,8 @@
   \end{exercise}
 \end{example}
 
-\subsection{\dots Create and Use \xsim\ Style Files?}
+\subsection{\dots Create and Use \xsim\ Style Files?}\label{sec:style-files}
+\index{style file|(}
 
 \xsim\ offers you the possibility to create own \emph{style files}.  Let's say
 you want to have a style called \code{math-exam}.  Then you need to save all
@@ -2044,6 +2106,8 @@
   additional features.
 \end{bewareofthedog}
 
+\index{style file|)}
+
 \subsection{\dots Print All Solutions Grouped by Section?}
 Here is an idea how to get a list of all solutions grouped by the section the
 corresponding exercises are appearing in.

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls	2017-09-20 22:36:23 UTC (rev 45355)
@@ -29,7 +29,7 @@
 % please ignore the contents of this file -- it is not a good example for
 % coding...
 %
-\ProvidesClass{xsim-manual}[2017/04/14]
+\ProvidesClass{xsim-manual}[2017/09/18]
 
 \LoadClass[load-preamble,add-index]{cnltx-doc}
 \RequirePackage{imakeidx}
@@ -185,6 +185,7 @@
     DeclareFloatingEnvironment ,
     enddescription ,
     endtcolorbox ,
+    hint ,
     hoehe ,
     iflist ,
     IfNoValueTF ,
@@ -202,6 +203,7 @@
     pkg ,
     pointsandbonus ,
     printA, printC, printE ,
+    printhints ,
     printcompletepoints ,
     printsumofpointsandbonus ,
     setlist ,
@@ -208,6 +210,7 @@
     settasks ,
     tcbuselibrary ,
     tcolorbox ,
+    thechapter ,
     thesection ,
     toprule ,
     whileboolexpr ,
@@ -222,6 +225,21 @@
   module-sep = {\texttt{/}}%
 }
 
+
+\RequirePackage[en-US]{datetime2}
+\newrobustcmd*\xsim at add@version[2]{\csdef{xsimversion#1}{\DTMdate{#2}}}
+\renewrobustcmd*\sinceversion[1]{%
+  \cnltx at version@note{\GetTranslation{cnltx-introduced}~#1 (\csuse{xsimversion#1})}%
+}
+\renewrobustcmd*\changedversion[1]{%
+  \cnltx at version@note{\GetTranslation{cnltx-changed}~#1 (\csuse{xsimversion#1})}%
+}
+
+\newnote*\sincechanged[2]{\GetTranslation{cnltx-introduced}~#1
+  (\csuse{xsimversion#1}), changed with version~#2 (\csuse{xsimversion#2})}
+
+\renewcommand*\versionnoteformat{\scriptsize\sffamily\RaggedRight}
+
 \renewcommand*\cnltx at module@text[2]{%
   \begingroup
     \reversemarginpar
@@ -569,6 +587,7 @@
 }
 
 \DeclareExerciseCollection{foo}
+\DeclareExerciseCollection{layouts}
 
 \newrobustcmd*\TF{%
   \colorlet{outside}{.}%
@@ -582,6 +601,9 @@
 
 \renewrobustcmd*\code[1]{\begingroup\codefont\let\^\textasciicircum#1\endgroup}
 
+% ----------------------------------------------------------------------------
+\loadxsimstyle{layouts}
+
 \DeclareExerciseEnvironmentTemplate{tcolorbox}
   {%
     \tcolorbox[
@@ -603,7 +625,7 @@
         \IfInsideSolutionF{%
           \GetExercisePropertyT{points}
             { % notice the space
-              (\PropertyValue
+              (\printgoal{\PropertyValue}
               \IfExerciseGoalSingularTF{points}
                 {\XSIMtranslate{point}}
                 {\XSIMtranslate{points}})%
@@ -613,50 +635,6 @@
   }
   {\endtcolorbox}
 
-\RequirePackage{needspace}
-  
-\DeclareExerciseEnvironmentTemplate{runin}
-  {%
-    \par\vspace{\baselineskip}
-    \Needspace*{2\baselineskip}
-    \noindent
-    \textbf{\XSIMmixedcase{\GetExerciseName}~\GetExerciseProperty{counter}}%
-    \GetExercisePropertyT{subtitle}{ \textit{#1}} %
-    \GetExercisePropertyT{points}{%
-      \marginpar{%
-        \PropertyValue
-        \GetExercisePropertyT{bonus-points}{+\PropertyValue}%
-        \,\IfExerciseGoalSingularTF{points}
-            {\XSIMtranslate{point}}
-            {\XSIMtranslate{points}}%
-      }%
-    }%
-  }
-  {}
-
-\DeclareExerciseEnvironmentTemplate{margin}
-  {%
-    \par\vspace{\baselineskip}
-    \Needspace*{2\baselineskip}
-    \noindent
-    \llap{%
-      \smash{%
-        \tabular[t]{@{}r@{}}
-          \textbf{\XSIMmixedcase{\GetExerciseName}~\GetExerciseProperty{counter}}
-          \IfExercisePropertySetT{points}{%
-            \tabularnewline
-            (%
-              \GetExerciseProperty{points}%
-              \GetExercisePropertyT{bonus-points}{+#1}%
-              \,\XSIMtranslate{point-abbr}%
-            )%
-          }%
-        \endtabular
-      } % notice the space
-    }%
-  }
-  {}
-
 \DeclareExerciseProperty*{bonus}
 \DeclareExerciseEnvironmentTemplate{bonus}
   {%
@@ -685,6 +663,8 @@
   }
   {}
 
+% ----------------------------------------------------------------------------
+
 \DeclareExerciseType{problem}{
   exercise-env = problem ,
   solution-env = answer ,
@@ -696,6 +676,8 @@
 
 \RequirePackage{hyperref,bookmark}
 
+% ----------------------------------------------------------------------------
+
 \newcounter{examplefile}
 \newcounter{examplefiles}
 \newcommand*\xsim at add@example[1]{%
@@ -703,22 +685,25 @@
   \stepcounter{examplefiles}%
 }
 \newcommand*\listexamplefiles{%
+  \def\xsim at example@texfile at path##1{./examples/xsim.##1.tex}%
+  \def\xsim at example@pdffile at path##1{./examples/{xsim.##1}.pdf}%
   \def\do##1{%
-    \stepcounter{examplefile}%
     \begin{cnltxcode}[
+      step and label={examplefile}{example:##1} ,
       sidebyside align=top seam,sidebyside,
       righthand width=\linewidth/4,
       sidebyside gap=0pt,
       lower separated=false,
-      title=Example~\theexamplefile\ \enquote{##1}
-        \href{../examples/xsim.##1.tex}{\color{white}[\TeX]}
-        \href{../examples/xsim.##1.pdf}{\color{white}[PDF]}%
+      title=Example~\theexamplefile\ \enquote{\texttt{##1}}
+        \href{\xsim at example@texfile at path{##1}}{\color{white}[\TeX]}
+        \href{\xsim at example@pdffile at path{##1}}{\color{white}[PDF]}%
     ]
-    \lstinputlisting[style=cnltx,lastline=10]{../examples/xsim.##1.tex}
+    \bookmark[level=2,dest=examplefile.\arabic{examplefile}]{Example~\theexamplefile\ (##1)}%
+    \lstinputlisting[style=cnltx,lastline=10]{\xsim at example@texfile at path{##1}}
     \tcblower
     \fbox{%
-      \href{../examples/xsim.##1.pdf}{%
-        \includegraphics[width=.8\linewidth]{../examples/{xsim.##1}.pdf}}}%
+      \href{\xsim at example@pdffile at path{##1}}{%
+        \includegraphics[width=.8\linewidth]{\xsim at example@pdffile at path{##1}}}}%
     \end{cnltxcode}
   }%
   \dolistloop\xsim at examplefiles
@@ -732,24 +717,65 @@
 \xsim at add@example{description-list}
 \xsim at add@example{different-point-types}
 \xsim at add@example{difficulties}
+\xsim at add@example{hints}
 \xsim at add@example{floating}
 \xsim at add@example{grade-distribution}
 \xsim at add@example{listings}
 \xsim at add@example{multiplechoice}
+\xsim at add@example{listofexercises}
 \xsim at add@example{pointsums}
 \xsim at add@example{randomexercises}
 \xsim at add@example{various}
+\xsim at add@example{texsx-13635}
+\xsim at add@example{texsx-155630}
 \xsim at add@example{texsx-199360}
 \xsim at add@example{texsx-299534}
 \xsim at add@example{texsx-305110}
+\xsim at add@example{texsx-308883}
 \xsim at add@example{texsx-338165}
 \xsim at add@example{texsx-350028}
 \xsim at add@example{texsx-369065}
 \xsim at add@example{texsx-369636}
 \xsim at add@example{texsx-369803}
+\xsim at add@example{texsx-370642}
+\xsim at add@example{texsx-391530}
 \xsim at add@example{texwelt-6698}
 \xsim at add@example{texwelt-15093}
 \xsim at add@example{golatex-16824}
 \xsim at add@example{golatex-18844}
 
+% ----------------------------------------------------------------------------
+
+\newcommand*\listlayouts{%
+  \def\do##1{%
+    \begin{cnltxcode}[{title=Layout \enquote{\texttt{##1}}}]
+      \ifcsdef{xsim at layout@extra@##1}
+        {\csuse{xsim at layout@extra@##1}}
+        {}%
+      \xsimsetup{exercise/template={##1}}
+      \let\marginpar\marginnote
+      \XSIMexpandcode{%
+        \printexercise{exercise}{\GetExerciseIdForProperty{ID}{showlayout}}
+      }%
+    \end{cnltxcode}
+  }%
+  \dolistloop\xsim at layouts
+}
+
+\NewDocumentCommand\xsim at add@layout{mo}{%
+  \listadd\xsim at layouts{#1}%
+  \IfNoValueF{#2}{\csdef{xsim at layout@extra@#1}{#2}}%
+}
+
+\xsim at add@layout{default}
+\xsim at add@layout{runin}[\renewcommand*\theexercise{\arabic{exercise}.}]
+\xsim at add@layout{margin}[\renewcommand*\theexercise{\arabic{exercise}.}]
+
+\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}
+\xsim at add@version{0.9}  {2017-06-20}
+\xsim at add@version{0.10} {2017-09-19}
+
+% ----------------------------------------------------------------------------
 \endinput

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -179,4 +179,4 @@
   { \seq_item:cn {g__xsim_list_recorded_#1_seq} {#2} }
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -166,4 +166,4 @@
   { \keys_set:nn {xsim} {#1} }
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -29,6 +29,7 @@
 
 \bool_new:N \l__xsim_blank_width_bool
 \bool_new:N \l__xsim_blank_linespread_bool
+\bool_new:N \l__xsim_fill_blank_bool
 \tl_new:N   \l__xsim_blank_linespread_tl
 \tl_new:N   \l__xsim_blank_scale_tl
 \dim_new:N  \l__xsim_blank_dim
@@ -41,32 +42,34 @@
 
 \keys_define:nn {xsim/blank}
   {
-    blank-style         .code:n    =
+    blank-style         .code:n     =
       \cs_set_protected:Npn \xsim_write_cloze_blank:n ##1 {#1} ,
-    blank-style         .initial:n = \underline {#1} ,
-    filled-style        .code:n    =
+    blank-style         .initial:n  = \underline {#1} ,
+    filled-style        .code:n     =
       \cs_set_protected:Npn \xsim_write_cloze_filled:n ##1 {#1} ,
-    filled-style        .initial:n = \underline {#1} ,
-    style               .meta:n    =
+    filled-style        .initial:n  = \underline {#1} ,
+    style               .meta:n     =
       {
         blank-style = #1 ,
         filled-style = #1
       } ,
-    scale               .tl_set:N  = \l__xsim_blank_scale_tl ,
-    scale               .initial:n = 1 ,
-    width               .code:n    =
+    fill                .bool_set:N = \l__xsim_fill_blank_bool ,
+    fill                .initial:n  = false ,
+    scale               .tl_set:N   = \l__xsim_blank_scale_tl ,
+    scale               .initial:n  = 1 ,
+    width               .code:n     =
       {
         \bool_set_true:N \l__xsim_blank_width_bool
         \dim_set:Nn \l__xsim_blank_dim {#1}
       } ,
-    linespread          .code:n    =
+    linespread          .code:n     =
       \bool_set_true:N \l__xsim_blank_linespread_bool
       \tl_set:Nn \l__xsim_blank_linespread_tl {#1} ,
-    linespread          .initial:n = 1 ,
-    line-increment      .dim_set:N = \l__xsim_blank_line_increment_dim ,
-    line-increment      .initial:n = 1pt ,
-    line-minimum-length .dim_set:N = \l__xsim_blank_line_minimum_length_dim ,
-    line-minimum-length .initial:n = 2em
+    linespread          .initial:n  = 1 ,
+    line-increment      .dim_set:N  = \l__xsim_blank_line_increment_dim ,
+    line-increment      .initial:n  = 1pt ,
+    line-minimum-length .dim_set:N  = \l__xsim_blank_line_minimum_length_dim ,
+    line-minimum-length .initial:n  = 2em
   }
 
 \cs_new_protected:Npn \xsim_blank:n #1
@@ -75,7 +78,8 @@
     \mode_if_math:TF
       { \hbox_set:Nn \l__xsim_blank_box { $ \m at th \mathpalette{}{#1} $ } }
       { \hbox_set:Nn \l__xsim_blank_box {#1} }
-    \xsim_if_inside_solution:TF
+    \bool_if:nTF
+      { \xsim_if_inside_solution_p: || \l__xsim_fill_blank_bool }
       { \xsim_write_cloze_filled:n {#1} }
       {
         \bool_if:NTF \l__xsim_blank_width_bool
@@ -103,9 +107,9 @@
               {
                 % I wonder what the correct l3 way would be -- if there is
                 % one, yet:
-                \tex_hfil:D
+                % \tex_hfil:D
                 \tex_penalty:D \hyphenpenalty
-                \tex_hfilneg:D
+                % \tex_hfilneg:D
                 \dim_compare:nTF
                   { \l__xsim_tmpa_dim < \l__xsim_blank_line_increment_dim }
                   { \xsim_write_cloze_blank:n { \skip_horizontal:N \l__xsim_tmpa_dim } }
@@ -117,12 +121,15 @@
               }
           }
       }
-      { \xsim_write_cloze_blank:n { \skip_horizontal:N \l__xsim_tmpa_dim } }
+      {
+        \xsim_write_cloze_blank:n
+          { \skip_horizontal:N \l__xsim_blank_line_minimum_length_dim }
+      }
   }
 \cs_generate_variant:Nn \__xsim_blank_skip:n { V }
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:
 
 the following code from Heiko Oberdieck in d.c.t.t served as inspiration
 and basis for the \blank command:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -127,8 +127,9 @@
     \xsim_if_collection_exists:nF {#1}
       { \msg_error:nnn {xsim} {unknown-collection} {#1} }
     \xsim_activate_collection:nn {#1} {#2}
-    \xsim_setup:n { #2/print = false }
+    \xsim_setup:x { \xsim_get_parameter:nn {#2} {exercise-env} /print = false }
   }
+\cs_generate_variant:Nn \xsim_setup:n {x}
 
 % start collection for all exercise types:
 % #1: collection name
@@ -139,7 +140,7 @@
       { \msg_error:nnn {xsim} {unknown-collection} {#1} }
     \xsim_activate_collection:n {#1}
     \xsim_foreach_exercise_type:n
-      { \xsim_setup:n { ##1/print = false } }
+      { \xsim_setup:x { \xsim_get_parameter:nn {##1} {exercise-env} /print = false } }
   }
 
 % stop collection:
@@ -392,4 +393,4 @@
   }
   
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -58,6 +58,7 @@
 }
 \DeclareExerciseProperty  {section-value}
 \DeclareExerciseProperty  {section}
+\DeclareExerciseProperty  {sectioning}
 
 % those are additional and wouldn't *need* to be present except for
 % pre-defined templates which make use of them:
@@ -183,9 +184,9 @@
         \marginpar
           {
             \IfInsideSolutionF { \rule {1.2cm} {1pt} \slash }
-            \PropertyValue
+            \printgoal {\PropertyValue}
             \GetExercisePropertyT {bonus-points}
-              { \nobreakspace ( + \PropertyValue ) }
+              { \nobreakspace ( + \printgoal {\PropertyValue} ) }
             \nobreakspace\XSIMtranslate {point-abbr}
           }
       }
@@ -427,4 +428,4 @@
 }
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -33,13 +33,29 @@
 \tl_new:N   \l__xsim_file_path_tl
 \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
 \bool_new:N \l__xsim_options_given_bool
 \bool_new:N \l__xsim_insert_mode_bool
 
+\tl_new:N  \ExerciseText
+\tl_set:Nn \ExerciseText { \msg_error:nn {xsim} {only-in-solution} }
+
 % ----------------------------------------------------------------------------
 
+\msg_new:nnn {xsim} {only-in-solution}
+  {
+    You~ can't~ use~ \token_to_str:N \ExerciseText \c_space_tl inside~ an~
+    exercise.~ It~ is~ only~ allowed~ inside~ solution~ environments!
+  }
+
+% ----------------------------------------------------------------------------
+
 \keys_define:nn {xsim}
-  { path .tl_set:N = \l__xsim_file_path_tl }
+  {
+    path .tl_set:N = \l__xsim_file_path_tl ,
+    file-extension .tl_set:N  = \l__xsim_file_extension_tl ,
+    file-extension .initial:n = tex
+  }
 
 % ----------------------------------------------------------------------------
 
@@ -68,7 +84,7 @@
 \cs_generate_variant:Nn \__xsim_set_file_signature:nnn {nx,nV}
 
 \tl_set:Nn \l__xsim_file_name_tl
-  { \c_sys_jobname_str - \l__xsim_file_name_signature_tl -body.tex }
+  { \c_sys_jobname_str - \l__xsim_file_name_signature_tl -body . \l__xsim_file_extension_tl }
 
 \tl_set:Nn \l__xsim_file_path_and_name_tl
   {
@@ -276,6 +292,13 @@
               \xsim_set_properties:nnn {#1} {#2}
                 { print=true , used=true }
             }
+          \str_if_eq:nnT {#4} {solution}
+            {
+              \__xsim_set_file_signature:nnn {#1} {#2} {exercise}
+              \tl_set_from_file:Nnn \ExerciseText {}
+                {\l__xsim_file_path_and_name_tl}
+              \tl_trim_spaces:N \ExerciseText
+            }
           \use:x
             {
               \xsim_use_hook:nnn {#1} {#4} {pre}
@@ -283,7 +306,7 @@
                 {begin}
                 { \xsim_get_parameter:nn {#1} {#4-template} }
               \xsim_use_hook:nnn {#1} {#4} {begin}
-              \file_input:n { \exp_not:V \l__xsim_file_path_and_name_tl }
+              \xsim_input:nnn {#1} {#2} {#4}
               \xsim_use_hook:nnn {#1} {#4} {end}
               \xsim_use_template:nn
                 {end}
@@ -293,12 +316,24 @@
         \group_end:
       }
       {
-        \xsim_verbose:n
+        \xsim_verbose:x
           { File~ `\l__xsim_file_path_and_name_tl'~ doesn't~ exist. }
       }
   }
 \cs_generate_variant:Nn \xsim_insert:nnnn {nV,VV,nnnV}
 
+% #1: type
+% #2: id
+% #3: exercise|solution
+\cs_new_protected:Npn \xsim_input:nnn #1#2#3
+  {
+    \group_begin:
+      \__xsim_set_file_signature:nnn {#1} {#2} {#3}
+      \file_input:n { \l__xsim_file_path_and_name_tl }
+    \group_end:
+  }
+\cs_generate_variant:Nn \xsim_input:nnn {oo}
+
 \prg_new_conditional:Npnn \xsim_if_insert_mode: {T,F,TF}
   {
     \bool_if:NTF \l__xsim_insert_mode_bool
@@ -342,4 +377,4 @@
   }
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -65,6 +65,13 @@
     exercise~ type~ `#2'.
   }
 
+\msg_new:nnn {xsim} {unknown-parameter}
+  {
+    You~ tried~ to~ retrieve~ the~ parameter~ `#1'~ \msg_line_context: . \\
+    This~ parameter~ does~ not~ exist.~ Check~ for~ a~ typo~ or~ \\
+    define~ the~ parameter~ yourself.
+  }
+
 % ----------------------------------------------------------------------------
 
 \xsim_new_list:n {types}
@@ -126,7 +133,7 @@
   {
     \seq_map_inline:Nn \l__xsim_mandatory_parameters_seq
       {
-        \xsim_if_parameter:nnF {#1} {##1}
+        \xsim_if_parameter_set:nnF {#1} {##1}
           { \msg_error:nnnn {xsim} {mandatory-parameter} {##1} {#1} }
       }
   }
@@ -148,7 +155,7 @@
       {
         \xsim_if_parameter_fixed:nTF {#1}
           {
-            \xsim_if_parameter:nnTF {#1} {#2}
+            \xsim_if_parameter_set:nnTF {#1} {#2}
               {
                 \msg_warning:nnnn {xsim} {parameter-fixed} {#1} {#2}
                 \xsim_verbose:n
@@ -178,7 +185,7 @@
   { \prop_item:cn {l__xsim_#1_type_parameters_prop} {#2} }
 \cs_generate_variant:Nn \xsim_get_parameter:nn {o}
 
-\prg_new_conditional:Npnn \xsim_if_parameter:nn #1#2 {p,T,F,TF}
+\prg_new_conditional:Npnn \xsim_if_parameter_set:nn #1#2 {p,T,F,TF}
   {
     \prop_if_in:cnTF {l__xsim_#1_type_parameters_prop} {#2}
       { \prg_return_true: }
@@ -185,6 +192,34 @@
       { \prg_return_false: }
   }
 
+\cs_new:Npn \__xsim_get_parameter_tmp:n #1 {}
+\cs_generate_variant:Nn \__xsim_get_parameter_tmp:n {V}
+
+% #1: type
+% #2: parameter
+\cs_new_protected:Npn \xsim_get_parameter_if_set:nnTF #1#2#3#4
+  {
+    \group_begin:
+      \xsim_if_parameter_exist:nTF {#2}
+        {
+          \xsim_if_parameter_set:nnTF {#1} {#2}
+            {    
+              \tl_set:Nx \ParameterValue
+                { \xsim_get_parameter:nn {#1} {#2} }
+              \cs_set:Npn \__xsim_get_parameter_tmp:n ##1 {#3}
+              \__xsim_get_parameter_tmp:V \ParameterValue
+            }
+            {#4}
+        }
+        { \msg_error:nnn {xsim} {unknown-parameter} {#2} }
+    \group_end:
+  }
+\cs_new_protected:Npn \xsim_get_parameter_if_set:nnT #1#2#3
+  { \xsim_get_parameter_if_set:nnTF {#1} {#2} {#3} {} }
+\cs_new_protected:Npn \xsim_get_parameter_if_set:nnF #1#2#3
+  { \xsim_get_parameter_if_set:nnTF {#1} {#2} {} {#3} }
+\cs_generate_variant:Nn \xsim_get_parameter_if_set:nnTF {o}
+
 % ----------------------------------------------------------------------------
 % inside the argument `#1' refers to the type
 \cs_new_protected:Npn \xsim_foreach_exercise_type:n #1
@@ -282,12 +317,12 @@
         \xsim_set_parameter:nnx {#1} {number}
           { number of \xsim_get_parameter:nn {#1} {exercise-env} s }
         \xsim_check_mandatory_parameters:n {#1}
-        \xsim_if_parameter:nnF {#1} {counter}
+        \xsim_if_parameter_set:nnF {#1} {counter}
           {
             \xsim_set_parameters:nx {#1}
               { counter =  \xsim_get_parameter:nn {#1} {exercise-env} }
           }
-        \xsim_if_parameter:nnF {#1} {solution-counter}
+        \xsim_if_parameter_set:nnF {#1} {solution-counter}
           {
             \xsim_set_parameters:nx {#1}
               { solution-counter =  \xsim_get_parameter:nn {#1} {solution-env} }
@@ -355,6 +390,12 @@
             section-value = \arabic{section} ,
             section = \thesection ,
             page-value = \arabic{page} ,
+            sectioning =
+              { \cs_if_exist:NTF \chapter { \arabic{chapter} } {0} }
+              { \arabic {section} }
+              { \arabic {subsection} }
+              { \arabic {subsubsection} }
+              { \arabic {paragraph} } ,
             page = \thepage ,
             used = false
           }
@@ -512,4 +553,4 @@
   }
 
 % ----------------------------------------------------------------------------  
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -139,7 +139,7 @@
 % #3: value != 1
 \cs_new_protected:Npn \xsim_print_goal:nnn #1#2#3
   {
-    \__xsim_print_goal:n { \fp_to_decimal:n {#1} }
+    \__xsim_print_goal:x { \fp_to_decimal:n {#1} }
     \fp_compare:nTF { (#1) = 1 } {#2} {#3}
   }
 
@@ -304,4 +304,4 @@
   }
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.grades.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.grades.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.grades.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -150,4 +150,4 @@
   }
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -53,6 +53,15 @@
 
 % ----------------------------------------------------------------------------
 
+\ProvideDocumentCommand \IfExistSolutionTF {+m+m}
+  { \xsim_if_solution_exists:ooTF {\ExerciseType} {\ExerciseID} {#1} {#2} }
+
+\NewDocumentCommand \IfExistSolutionT {+m}
+  { \IfExistSolutionTF {#1} {} }
+
+\NewDocumentCommand \IfExistSolutionF {+m}
+  { \IfExistSolutionTF {} {#1} }
+
 \NewExpandableDocumentCommand \IfInsideSolutionTF {+m+m}
   { \xsim_if_inside_solution:TF {#1} {#2} }
 
@@ -138,8 +147,17 @@
 \@onlypreamble \DeclareExercisePropertyAlias
 
 \NewDocumentCommand \SetExerciseProperty {mmm+m}
+  { \xsim_set_property:xxnn {\ExerciseType} {\ExerciseID} {#3} {#4} }
+
+\NewDocumentCommand \SetExpandedExerciseProperty {mmm+m}
+  { \xsim_set_property:xxnx {\ExerciseType} {\ExerciseID} {#3} {#4} }
+
+\NewDocumentCommand \ExerciseSetProperty {mmm+m}
   { \xsim_set_property:nnnn {#1} {#2} {#3} {#4} }
 
+\NewDocumentCommand \ExerciseSetExpandedProperty {mmm+m}
+  { \xsim_set_property:nnnx {#1} {#2} {#3} {#4} }
+
 \NewExpandableDocumentCommand \IfExercisePropertyExistTF {+m+m+m}
   { \xsim_if_property_exist:nTF {#1} {#2} {#3} }
 
@@ -238,6 +256,36 @@
       { \GetExerciseParameter {exercise-name} }
   }
 
+\NewDocumentCommand \GetExerciseBody {m}
+  { \xsim_input:oon { \ExerciseType } { \ExerciseID } {#1} }
+  
+\NewExpandableDocumentCommand \IfExerciseParameterSetTF {+m+m+m}
+  { \xsim_if_parameter_set:nnTF {\ExerciseType} {#1} {#2} {#3} }
+
+\NewExpandableDocumentCommand \IfExerciseParameterSetT {+m+m}
+  { \IfExerciseParameterSetTF {#1} {#2} {} }
+
+\NewExpandableDocumentCommand \IfExerciseParameterSetF {+m+m}
+  { \IfExerciseParameterSetTF {#1} {} {#2} }
+
+\NewExpandableDocumentCommand \ExerciseParameterIfSetTF {+m+m+m+m}
+  { \xsim_if_parameter_set:nnTF {#1} {#2} {#3} {#4} }
+
+\NewExpandableDocumentCommand \ExerciseParameterIfSetT {+m+m+m}
+  { \ExerciseParameterIfSetTF {#1} {#2} {#3} {} }
+
+\NewExpandableDocumentCommand \ExerciseParameterIfSetF {+m+m+m}
+  { \ExerciseParameterIfSetTF {#1} {#2} {} {#3} }
+
+\NewDocumentCommand \GetExerciseParameterTF {m+m+m}
+  { \xsim_get_parameter_if_set:onTF {\ExerciseType} {#1} {#2} {#3} }
+
+\NewDocumentCommand \GetExerciseParameterT {m+m}
+  { \GetExerciseParameterTF {#1} {#2} {} }
+
+\NewDocumentCommand \GetExerciseParameterF {m+m+m}
+  { \GetExerciseParameterTF {#1} {} {#2} }
+
 % ----------------------------------------------------------------------------
 
 \NewDocumentCommand \ExercisePropertyIfSetTF {mmm+m+m}
@@ -548,6 +596,21 @@
 
 % ----------------------------------------------------------------------------
 
+\NewDocumentCommand \printforexercises {sO{}+mO{}}
+  {
+    \IfBooleanTF {#1}
+      {
+        \xsim_foreach_exercise_type:n
+          { \xsim_print_type_code:nnnnn { \c_true_bool } {#2} {#4} {##1} {#3} }
+      }
+      {
+        \xsim_foreach_exercise_type:n
+          { \xsim_print_type_code:nnnnn { \c_false_bool } {#2} {#4} {##1} {#3} }
+      }
+  }
+
+% ----------------------------------------------------------------------------
+
 \NewDocumentCommand \xsimsetup {m}
   { \xsim_setup:n {#1} }
 
@@ -562,4 +625,4 @@
   { \xsim_if_chapter:F {#1} }
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Added: trunk/Master/texmf-dist/tex/latex/xsim/xsim.layouts.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.layouts.code.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.layouts.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -0,0 +1,77 @@
+% ----------------------------------------------------------------------------
+% the XSIM package - layouts style
+% 
+%   eXercise Sheets IMproved
+% 
+% ----------------------------------------------------------------------------
+% Clemens Niederberger
+% Web:    https://github.com/cgnieder/xsim
+% E-Mail: contact at mychemistry.eu
+% ----------------------------------------------------------------------------
+% Copyright 2017 Clemens Niederberger
+% 
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% 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.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% 
+% This work has the LPPL maintenance status `maintained'.
+% 
+% The Current Maintainer of this work is Clemens Niederberger.
+% ----------------------------------------------------------------------------
+% If you have any ideas, questions, suggestions or bugs to report, please
+% feel free to contact me.
+% ----------------------------------------------------------------------------
+\xsimstyle{layouts}[2017/09/14]
+
+\RequirePackage{needspace}
+
+\DeclareExerciseEnvironmentTemplate{runin}
+  {%
+    \par\vspace{\baselineskip}
+    \Needspace*{2\baselineskip}
+    \noindent
+    \textbf{\XSIMmixedcase{\GetExerciseName}~\GetExerciseProperty{counter}}%
+    \GetExercisePropertyT{subtitle}{ \textit{#1}} % <<< notice the space
+    \IfInsideSolutionF{%
+      \GetExercisePropertyT{points}{%
+        \marginpar{%
+          \printgoal{\PropertyValue}%
+          \GetExercisePropertyT{bonus-points}{+\printgoal{\PropertyValue}}%
+          \,\IfExerciseGoalSingularTF{points}
+              {\XSIMtranslate{point}}
+              {\XSIMtranslate{points}}%
+        }%
+      }%
+    }%
+  }
+  {}
+
+\RequirePackage{array}
+
+\DeclareExerciseEnvironmentTemplate{margin}
+  {%
+    \trivlist
+    \item[\llap{%
+      \smash{%
+        \tabular[t]{@{}r@{}}
+          \textbf{\XSIMmixedcase{\GetExerciseName}~\GetExerciseProperty{counter}}
+          \IfExercisePropertySetT{points}{%
+            \tabularnewline
+            (%
+              \printgoal{\GetExerciseProperty{points}}%
+              \GetExercisePropertyT{bonus-points}{+\printgoal{#1}}%
+              \,\XSIMtranslate{point-abbr}%
+            )%
+          }%
+        \endtabular
+      }%
+    }]\relax
+  }
+  {\endtrivlist}
+
+% ----------------------------------------------------------------------------
+\endinput


Property changes on: trunk/Master/texmf-dist/tex/latex/xsim/xsim.layouts.code.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.modules.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.modules.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.modules.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -191,21 +191,21 @@
 % define a xsim module:
 % #1: name
 % #2: description
-\NewDocumentCommand \XSIMmodule {mm} { \__xsim_module:nn {#1} {#2}
-\ExplSyntaxOn }
+\NewDocumentCommand \XSIMmodule {mm}
+  { \__xsim_module:nn {#1} {#2} \ExplSyntaxOn }
 
 % --------------------------------------------------------------------------
 % style files
-\NewDocumentCommand \xsimstyle   {sm}
+\NewDocumentCommand \xsimstyle   {smO{}}
   {
-    \__xsim_module:nn {#2} {}
-    \IfBooleanF {#1} { \ExplSyntaxOn }
+    \__xsim_module:nn {#2} {#3}
+    \IfBooleanT {#1} { \ExplSyntaxOn }
   }
 
 \cs_new_protected:Npn \xsim_style_options:nn #1#2
   { \keys_define:nn {xsim/#1} {#2} }
 
-\NewDocumentCommand \loadxsimstyle {m} { \xsim_load_module:n {#1} }
+\NewDocumentCommand \loadxsimstyle {m} { \xsim_load_modules:n {#1} }
 
 % --------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -178,7 +178,7 @@
       }
       { \msg_error:nnn {xsim} {unknown-property} {#3} }  
   }
-\cs_generate_variant:Nn \xsim_set_property:nnnn {nnxx,nnnV,nV,nVnx,nnnx}
+\cs_generate_variant:Nn \xsim_set_property:nnnn {nnxx,nnnV,nV,nVnx,nnnx,xx,xxnx}
 
 \cs_new_protected:Npn \__xsim_set_boolean_property:nnnn #1#2#3#4
   {
@@ -416,9 +416,6 @@
   { \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_new:Npn \__xsim_get_property_tmp:n #1 {}
-\cs_generate_variant:Nn \__xsim_get_property_tmp:n {V}
-
 % #1: property
 % #2: value
 \cs_new:Npn \xsim_get_id_for_property:nn #1#2
@@ -430,6 +427,9 @@
   { \prop_item:cn {g__xsim_property_#1_type_prop} {#2} }
 \cs_generate_variant:Nn \xsim_get_type_for_property:nn {nV}
 
+\cs_new:Npn \__xsim_get_property_tmp:n #1 {}
+\cs_generate_variant:Nn \__xsim_get_property_tmp:n {V}
+
 % #1: type
 % #2: id
 % #3: property
@@ -467,7 +467,8 @@
           {
             \xsim_if_property_set:nnnTF {#1} {#2} {#3}
               {
-                \bool_if:cTF { c_ \xsim_get_property:nnn {#1} {#2} {#3} _bool}
+                \bool_if:cTF
+                  {c_ \xsim_get_property:nnn {#1} {#2} {#3} _bool}
                   { \prg_return_true: }
                   { \prg_return_false: }
               }
@@ -492,4 +493,4 @@
 \cs_generate_variant:Nn \xsim_gsave_property:nnnN {nx,xx}
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\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	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.random.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -304,4 +304,4 @@
 % \xsim_get_id_for_property:nn {ID} {}
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -30,6 +30,7 @@
 \xsim_load_modules:n {tags,properties}
 
 \bool_new:N \l_xsim_inside_solution_bool
+\bool_new:N \l__xsim_include_question_bool
 \bool_new:N \l__xsim_printsolutions_headings_bool
 \bool_new:N \l__xsim_printsolutions_conditions_bool
 \bool_new:N \l____xsim_this_condition_bool
@@ -79,7 +80,7 @@
 
 % #1: type
 % #2: id
-\prg_new_conditional:Npnn \xsim_if_solution_exists:nn #1#2 {T,F,TF}
+\prg_new_protected_conditional:Npnn \xsim_if_solution_exists:nn #1#2 {T,F,TF}
   {
     \__xsim_set_file_signature:nnn {#1} {#2} {solution}
     \file_if_exist:VTF \l__xsim_file_path_and_name_tl
@@ -86,7 +87,8 @@
       { \prg_return_true: }
       { \prg_return_false: }
   }
-\cs_generate_variant:Nn \xsim_if_solution_exists:nnT {VV}
+\cs_generate_variant:Nn \xsim_if_solution_exists:nnT  {VV,oo}
+\cs_generate_variant:Nn \xsim_if_solution_exists:nnTF {oo}
 
 % #1: type
 % #2: options
@@ -101,84 +103,65 @@
 
 % ----------------------------------------------------------------------------
 
-% per section condition:
-% #1: type
-% #2: id
-% #3: boolean property
-\prg_new_protected_conditional:Npnn
-  \__xsim_if_solutions_per_section:nnn #1#2#3 {T,F,TF}
+% #1: conditional base function (three n args)% #2: name
+% #3: code (refer to type and id with `#1' and `#2'), #3 refers to the boolean
+%     properties use/print
+\cs_new_protected:Npn \xsim_new_solutions_condition:Nnn #1#2#3
   {
-    \xsim_if_in_list:nnTF {#3} {#1-#2=={true}}
+    \prg_new_protected_conditional:Npnn #1 ##1##2##3 {T,F,TF}
       {
-        \__xsim_printsolutions_if_condition:nTF {per-section}
+        \xsim_if_in_list:nnTF {##3} {##1-##2=={true}}
           {
-            \__xsim_printsolutions_condition_true:
-            \xsim_if_in_list:nxTF {section-value}
-              { #1-#2 == { \int_use:N \l_xsim_printsolutions_section_int } }
-              {
-                \tl_set:Nx \ExerciseSection
-                  { \xsim_get_property:nnn {#1} {#2} {section} }
-                \prg_return_true:   
-              }
+            \__xsim_printsolutions_if_condition:nTF {#2}
+              { \__xsim_printsolutions_condition_true: #3 }
               { \prg_return_false: }
           }
           { \prg_return_false: }
       }
+  }
+
+% per section condition:
+\xsim_new_solutions_condition:Nnn \__xsim_if_solutions_per_section:nnn
+  {per-section}
+  {
+    \xsim_if_in_list:nxTF {section-value}
+      { #1-#2 == { \int_use:N \l_xsim_printsolutions_section_int } }
+      {
+        \tl_set:Nx \ExerciseSection
+          { \xsim_get_property:nnn {#1} {#2} {section} }
+        \prg_return_true:   
+      }
       { \prg_return_false: }
   }
 
 % per chapter condition:
-% #1: type
-% #2: id
-% #3: boolean property
-\prg_new_protected_conditional:Npnn
-  \__xsim_if_solutions_per_chapter:nnn #1#2#3 {T,F,TF}
+\xsim_new_solutions_condition:Nnn \__xsim_if_solutions_per_chapter:nnn
+  {per-chapter}
   {
-    \xsim_if_in_list:nnTF {#3} {#1-#2=={true}}
+    \xsim_if_in_list:nxTF {chapter-value}
+      { #1-#2 == { \int_use:N \l_xsim_printsolutions_chapter_int } }
       {
-        \__xsim_printsolutions_if_condition:nTF {per-chapter}
-          {
-            \__xsim_printsolutions_condition_true:
-            \xsim_if_in_list:nxTF {chapter-value}
-              { #1-#2 == { \int_use:N \l_xsim_printsolutions_chapter_int } }
-              {
-                \tl_set:Nx \ExerciseChapter
-                  { \xsim_get_property:nnn {#1} {#2} {chapter} }
-                \prg_return_true:   
-              }
-              { \prg_return_false: }
-          }
-          { \prg_return_false: }
+        \tl_set:Nx \ExerciseChapter
+          { \xsim_get_property:nnn {#1} {#2} {chapter} }
+        \prg_return_true:   
       }
       { \prg_return_false: }
   }
 
 % per collection condition:
-% #1: type
-% #2: id
-% #3: boolean property
-\prg_new_protected_conditional:Npnn
-  \__xsim_if_solutions_in_collection:nnn #1#2#3 {T,F,TF}
+\xsim_new_solutions_condition:Nnn \__xsim_if_solutions_in_collection:nnn
+  {per-collection}
   {
-    \xsim_if_in_list:nnTF {#3} {#1-#2=={true}}
+    \tl_if_blank:VTF \l__xsim_printsolutions_collection_tl
+      { \prg_return_false: }
       {
-        \__xsim_printsolutions_if_condition:nTF {per-collection}
-          {
-            \__xsim_printsolutions_condition_true:
-            \tl_if_blank:VTF \l__xsim_printsolutions_collection_tl
-              { \prg_return_false: }
-              {
-                \xsim_if_in_collection:VnnTF
-                  \l__xsim_printsolutions_collection_tl
-                  {#1}
-                  {#2}
-                  { \prg_return_true: }
-                  { \prg_return_false: }
-              }
-          }
+        \xsim_if_in_collection:VnnTF
+          \l__xsim_printsolutions_collection_tl
+          {#1}
+          {#2}
+          { \prg_return_true: }
           { \prg_return_false: }
       }
-      { \prg_return_false: }
   }
 
 % ----------------------------------------------------------------------------
@@ -206,7 +189,7 @@
 
 % #1: name
 % #2: condition
-\cs_new_protected:Npn \__xsim_declare_printsolutions_condition:nn #1#2
+\cs_new_protected:Npn \xsim_declare_printsolutions_condition:nn #1#2
   {
     \bool_new:c {l__xsim_printsolutions_#1_condition_bool}
     \prop_put:Nnn \l__xsim_printsolutions_conditions_prop {#1} {#2}
@@ -270,25 +253,26 @@
 % ----------------------------------------------------------------------------
 % #1: boolean -- if true only the solutions of printed exercises will be
 %     output
-% #2: options
-% #3: type
-\cs_new_protected:Npn \xsim_print_type_solutions:nnn #1#2#3
+% #2: pre
+% #3: post
+% #4: type
+% #5: code (refer to type with #1 and id with #2)
+\cs_new_protected:Npn \xsim_print_type_code:nnnnn #1#2#3#4#5
   {
-    \xsim_verbose:n
-      { Printing~ solutions~ for~ exercise~ type~ `#3'. }
     \group_begin:
-      \keys_set:nn {xsim/print-solutions} {#2}
+      \cs_set_protected:Npn \__xsim_print_entry:nn ##1##2 {#5}
+      #2
       \bool_set_false:N \l__xsim_tmpa_bool
       \bool_if:nTF {#1}
         {
-          \xsim_if_solutions_do:nnn {#3} {print}
+          \xsim_if_solutions_do:nnn {#4} {print}
             { \bool_set_true:N \l__xsim_tmpa_bool }
         }
         {
-          \xsim_if_solutions_do:nnn {#3} {use}
+          \xsim_if_solutions_do:nnn {#4} {use}
             { \bool_set_true:N \l__xsim_tmpa_bool }
         }
-      \tl_set:Nn \ExerciseType {#3}
+      \tl_set:Nn \ExerciseType {#4}
       \bool_if:NT \l__xsim_tmpa_bool
         {
           \bool_if:NT \l__xsim_printsolutions_headings_bool
@@ -300,13 +284,14 @@
         }
       \bool_if:nTF {#1}
         {
-          \xsim_if_solutions_do:nnn {#3} {print}
-            { \xsim_insert:nnnn {#3} {##2} {} {solution} }
+          \xsim_if_solutions_do:nnn {#4} {print}
+            { \__xsim_print_entry:nn {#4} {##2} }
         }
         {
-          \xsim_if_solutions_do:nnn {#3} {use}
-            { \xsim_insert:nnnn {#3} {##2} {} {solution} }
+          \xsim_if_solutions_do:nnn {#4} {use}
+            { \__xsim_print_entry:nn {#4} {##2} }
         }
+      #3
     \group_end:
   }
 
@@ -313,6 +298,24 @@
 % #1: boolean -- if true only the solutions of printed exercises will be
 %     output
 % #2: options
+% #3: type
+\cs_new_protected:Npn \xsim_print_type_solutions:nnn #1#2#3
+  {
+    \xsim_print_type_code:nnnnn
+      {#1}
+      {
+        \xsim_verbose:n
+          { Printing~ solutions~ for~ exercise~ type~ `#3'. }
+        \keys_set:nn {xsim/print-solutions} {#2}
+      }
+      {}
+      {#3}
+      { \xsim_insert:nnnn {##1} {##2} {} {solution} }
+  }
+
+% #1: boolean -- if true only the solutions of printed exercises will be
+%     output
+% #2: options
 \cs_new_protected:Npn \xsim_print_all_solutions_per_type:nn #1#2
   {
     \xsim_foreach_exercise_type:n
@@ -348,11 +351,11 @@
 
 % ----------------------------------------------------------------------------
 
-\__xsim_declare_printsolutions_condition:nn {per-section}
+\xsim_declare_printsolutions_condition:nn {per-section}
   { \__xsim_if_solutions_per_section:nnnTF }
-\__xsim_declare_printsolutions_condition:nn {per-chapter}
+\xsim_declare_printsolutions_condition:nn {per-chapter}
   { \__xsim_if_solutions_per_chapter:nnnTF }
-\__xsim_declare_printsolutions_condition:nn {per-collection}
+\xsim_declare_printsolutions_condition:nn {per-collection}
   { \__xsim_if_solutions_in_collection:nnnTF }
 
 % ----------------------------------------------------------------------------
@@ -363,6 +366,8 @@
     headings .initial:n  = true ,
     headings-template .tl_set:N  = \l__xsim_printsolutions_headings_template_tl ,
     headings-template .initial:n = default ,
+    include-exercise  .bool_set:N = \l__xsim_include_question_bool ,
+    include-exercise  .initial:n = false ,
     section           .choice: ,
     section/true      .code:n    =
       \__xsim_printsolutions_condition:nn  {per-section} {true}
@@ -399,4 +404,4 @@
 
 % ----------------------------------------------------------------------------
   
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.sty	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.sty	2017-09-20 22:36:23 UTC (rev 45355)
@@ -29,10 +29,10 @@
 
 \ExplSyntaxOn
 
-\tl_const:Nn \c_xsim_date_tl                 {2017/05/19}
+\tl_const:Nn \c_xsim_date_tl                 {2017/09/19}
 \tl_const:Nn \c_xsim_version_major_number_tl {0}
-\tl_const:Nn \c_xsim_version_minor_number_tl {8}
-\tl_const:Nn \c_xsim_version_subrelease_tl   {a}
+\tl_const:Nn \c_xsim_version_minor_number_tl {10}
+\tl_const:Nn \c_xsim_version_subrelease_tl   {}
 \tl_const:Nx \c_xsim_version_number_tl
   {
     \c_xsim_version_major_number_tl .
@@ -106,4 +106,4 @@
 
 \AtEndDocument { \xsim_do_rerun: }
 
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.tags.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.tags.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.tags.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -61,7 +61,7 @@
       { \c_false_bool }
       { \c_false_bool }
       {#1}
-    \__xsim_declare_printsolutions_condition:nn {#1}
+    \xsim_declare_printsolutions_condition:nn {#1}
       { \__xsim_printsolutions_if_tagged:nnnnTF {#1}  }
     \keys_define:nn {xsim/print-solutions}
       {
@@ -89,7 +89,6 @@
         \__xsim_printsolutions_if_condition:nTF {#1}
           {
             \__xsim_printsolutions_condition_true:
-            % TODO: doesn't return anything
             \xsim_if_tagged:nnnTF {#2} {#3} {#1}
               { \prg_return_true: }
               { \prg_return_false: }
@@ -192,4 +191,4 @@
 \cs_generate_variant:Nn \xsim_exercise_tags_use:nnnnnn {oo}
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.templates.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.templates.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.templates.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -169,4 +169,4 @@
 \cs_generate_variant:Nn \xsim_use_template:nn {nx,nV}
 
 % ----------------------------------------------------------------------------  
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -143,4 +143,4 @@
   }
 
 % ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex	2017-09-20 22:36:23 UTC (rev 45355)
@@ -189,7 +189,7 @@
 \NewDocumentCommand \XSIMfilewritestart {sm}
   {
     \IfBooleanTF {#1}
-      { \xsim_file_write_start:nn { \c_false_bool  } {#2} }
+      { \xsim_file_write_start:nn { \c_false_bool } {#2} }
       { \xsim_file_write_start:nn { \c_true_bool } {#2} }
   }
 
@@ -206,3 +206,4 @@
   { \int_set:Nn \l_xsim_line_gobble_int {#1} }
   
 % ----------------------------------------------------------------------------
+\file_input_stop:

Modified: trunk/Master/texmf-dist/tex/latex/xsim/xsimverb.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xsim/xsimverb.sty	2017-09-20 20:20:55 UTC (rev 45354)
+++ trunk/Master/texmf-dist/tex/latex/xsim/xsimverb.sty	2017-09-20 22:36:23 UTC (rev 45355)
@@ -63,4 +63,4 @@
 \xsim_load_module:n {verbwrite}
 
 % --------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:



More information about the tex-live-commits mailing list