summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/texmf-dist/doc/latex/xsim/README10
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.pdfbin0 -> 45719 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.tex59
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.pdfbin0 -> 57220 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.tex81
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.pdfbin0 -> 86047 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.tex70
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.pdfbin0 -> 20045 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.tex26
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.pdfbin0 -> 27155 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.tex13
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.pdfbin0 -> 28426 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.tex25
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.pdfbin0 -> 25040 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.tex66
-rw-r--r--Master/texmf-dist/doc/latex/xsim/xsim.history20
-rw-r--r--Master/texmf-dist/doc/latex/xsim/xsim_manual.pdfbin1085922 -> 1151692 bytes
-rw-r--r--Master/texmf-dist/doc/latex/xsim/xsim_manual.tex228
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim-manual.cls132
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex2
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex2
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex45
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex7
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex7
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex45
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex53
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex4
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.grades.code.tex2
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex65
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.layouts.code.tex77
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.modules.code.tex14
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex13
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.random.code.tex2
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex157
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.sty8
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.tags.code.tex5
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.templates.code.tex2
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex2
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex3
-rw-r--r--Master/texmf-dist/tex/latex/xsim/xsimverb.sty2
40 files changed, 968 insertions, 279 deletions
diff --git a/Master/texmf-dist/doc/latex/xsim/README b/Master/texmf-dist/doc/latex/xsim/README
index b8da799ff7d..5f1ba9fa6e0 100644
--- a/Master/texmf-dist/doc/latex/xsim/README
+++ b/Master/texmf-dist/doc/latex/xsim/README
@@ -1,5 +1,5 @@
--------------------------------------------------------------------------
-XSIM 2017/05/19 v0.8a
+XSIM 2017/09/19 v0.10
eXercise Sheets IMproved
@@ -34,6 +34,7 @@ The xsim package consists of the code files:
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 @@ The xsim package consists of the example files:
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
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.pdf b/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.pdf
new file mode 100644
index 00000000000..6a6dab99cca
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.tex b/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.tex
new file mode 100644
index 00000000000..5fa3ed4ec8f
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.hints.tex
@@ -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}
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.pdf b/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.pdf
new file mode 100644
index 00000000000..8050ee8f90a
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.tex b/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.tex
new file mode 100644
index 00000000000..c2a9a3fe362
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.listofexercises.tex
@@ -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}
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.pdf b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.pdf
new file mode 100644
index 00000000000..af889a6709f
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.tex b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.tex
new file mode 100644
index 00000000000..3b52ce46b24
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-13635.tex
@@ -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}
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.pdf b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.pdf
new file mode 100644
index 00000000000..6c9fc4482af
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.tex b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.tex
new file mode 100644
index 00000000000..2edb7bfdad2
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-155630.tex
@@ -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}
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.pdf b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.pdf
new file mode 100644
index 00000000000..eb27dce140c
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.tex b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.tex
new file mode 100644
index 00000000000..74e762fa08b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-308883.tex
@@ -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}
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.pdf b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.pdf
new file mode 100644
index 00000000000..13933e80c3b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.tex b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.tex
new file mode 100644
index 00000000000..99b300c4a01
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-370642.tex
@@ -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}
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.pdf b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.pdf
new file mode 100644
index 00000000000..137c8587693
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.tex b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.tex
new file mode 100644
index 00000000000..48bf94cd6eb
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xsim/examples/xsim.texsx-391530.tex
@@ -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@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}
diff --git a/Master/texmf-dist/doc/latex/xsim/xsim.history b/Master/texmf-dist/doc/latex/xsim/xsim.history
index 895e7a47a3b..9c3ab5498e5 100644
--- a/Master/texmf-dist/doc/latex/xsim/xsim.history
+++ b/Master/texmf-dist/doc/latex/xsim/xsim.history
@@ -79,3 +79,23 @@ HISTORY:
- 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'
diff --git a/Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf b/Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf
index 3a0fa539656..e38a1654029 100644
--- a/Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf
+++ b/Master/texmf-dist/doc/latex/xsim/xsim_manual.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex b/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex
index 2e351c7a64e..96a6613159a 100644
--- a/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex
+++ b/Master/texmf-dist/doc/latex/xsim/xsim_manual.tex
@@ -1,8 +1,8 @@
-% !arara: pdflatex: { action: nonstopmode }
-% !arara: biber
% arara: pdflatex: { action: nonstopmode }
+% !arara: biber
% arara: pdflatex: { action: nonstopmode }
% arara: pdflatex: { action: nonstopmode }
+% !arara: pdflatex: { action: nonstopmode }
% ----------------------------------------------------------------------------
% the XSIM package
%
@@ -282,8 +282,20 @@ order to deal with this somehow \xsim\ offers the following option:
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 @@ others can be set using the optional argument of the exercise environment.
\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 \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 \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 \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 @@ This is better demonstrated with an example:
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 @@ Here is how you could mimick the command \cs*{totalpoints} from
\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 @@ This means that these options are available:
\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 @@ At last now an example using external files, collections and tags:
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 @@ Valid options for this command are:
\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 @@ There are different commands for printing the solutions to exercises:
\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 @@ The ones in the second group set conditions selecting which solutions are
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 @@ yourself in order to achieve certain layouts\footnote{I plan to incorporate
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 @@ yourself in order to achieve certain layouts\footnote{I plan to incorporate
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 @@ yourself in order to achieve certain layouts\footnote{I plan to incorporate
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 @@ yourself in order to achieve certain layouts\footnote{I plan to incorporate
\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 @@ yourself in order to achieve certain layouts\footnote{I plan to incorporate
\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 @@ yourself in order to achieve certain layouts\footnote{I plan to incorporate
\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 @@ Below the definition of the \code{default} exercise template provided by
\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 @@ problems in this manual have been defined:
\IfInsideSolutionF{%
\GetExercisePropertyT{points}{ % notice the space
(%
- \PropertyValue
+ \printgoal{\PropertyValue}
\IfExerciseGoalSingularTF{points}
{\XSIMtranslate{point}}
{\XSIMtranslate{points}}%
@@ -1525,6 +1603,7 @@ See it in action:
\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,69 +1618,51 @@ would use a real sectioning command for the title.
\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}}%
+ }%
}%
}%
}
{}
\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}}
\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 @@ exercise type or to \meta{code}.
\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 @@ resolve your problems.
\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 @@ The usage is now as follows:
\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 @@ The formal description of the commands:
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.
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls b/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls
index 56121054dd8..23fb8db3f24 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls
+++ b/Master/texmf-dist/tex/latex/xsim/xsim-manual.cls
@@ -29,7 +29,7 @@
% please ignore the contents of this file -- it is not a good example for
% coding...
%
-\ProvidesClass{xsim-manual}[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,12 +203,14 @@
pkg ,
pointsandbonus ,
printA, printC, printE ,
+ printhints ,
printcompletepoints ,
printsumofpointsandbonus ,
setlist ,
settasks ,
tcbuselibrary ,
tcolorbox ,
+ thechapter ,
thesection ,
toprule ,
whileboolexpr ,
@@ -222,6 +225,21 @@
module-sep = {\texttt{/}}%
}
+
+\RequirePackage[en-US]{datetime2}
+\newrobustcmd*\xsim@add@version[2]{\csdef{xsimversion#1}{\DTMdate{#2}}}
+\renewrobustcmd*\sinceversion[1]{%
+ \cnltx@version@note{\GetTranslation{cnltx-introduced}~#1 (\csuse{xsimversion#1})}%
+}
+\renewrobustcmd*\changedversion[1]{%
+ \cnltx@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@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@add@example[1]{%
@@ -703,22 +685,25 @@
\stepcounter{examplefiles}%
}
\newcommand*\listexamplefiles{%
+ \def\xsim@example@texfile@path##1{./examples/xsim.##1.tex}%
+ \def\xsim@example@pdffile@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@example@texfile@path{##1}}{\color{white}[\TeX]}
+ \href{\xsim@example@pdffile@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@example@texfile@path{##1}}
\tcblower
\fbox{%
- \href{../examples/xsim.##1.pdf}{%
- \includegraphics[width=.8\linewidth]{../examples/{xsim.##1}.pdf}}}%
+ \href{\xsim@example@pdffile@path{##1}}{%
+ \includegraphics[width=.8\linewidth]{\xsim@example@pdffile@path{##1}}}}%
\end{cnltxcode}
}%
\dolistloop\xsim@examplefiles
@@ -732,24 +717,65 @@
\xsim@add@example{description-list}
\xsim@add@example{different-point-types}
\xsim@add@example{difficulties}
+\xsim@add@example{hints}
\xsim@add@example{floating}
\xsim@add@example{grade-distribution}
\xsim@add@example{listings}
\xsim@add@example{multiplechoice}
+\xsim@add@example{listofexercises}
\xsim@add@example{pointsums}
\xsim@add@example{randomexercises}
\xsim@add@example{various}
+\xsim@add@example{texsx-13635}
+\xsim@add@example{texsx-155630}
\xsim@add@example{texsx-199360}
\xsim@add@example{texsx-299534}
\xsim@add@example{texsx-305110}
+\xsim@add@example{texsx-308883}
\xsim@add@example{texsx-338165}
\xsim@add@example{texsx-350028}
\xsim@add@example{texsx-369065}
\xsim@add@example{texsx-369636}
\xsim@add@example{texsx-369803}
+\xsim@add@example{texsx-370642}
+\xsim@add@example{texsx-391530}
\xsim@add@example{texwelt-6698}
\xsim@add@example{texwelt-15093}
\xsim@add@example{golatex-16824}
\xsim@add@example{golatex-18844}
+% ----------------------------------------------------------------------------
+
+\newcommand*\listlayouts{%
+ \def\do##1{%
+ \begin{cnltxcode}[{title=Layout \enquote{\texttt{##1}}}]
+ \ifcsdef{xsim@layout@extra@##1}
+ {\csuse{xsim@layout@extra@##1}}
+ {}%
+ \xsimsetup{exercise/template={##1}}
+ \let\marginpar\marginnote
+ \XSIMexpandcode{%
+ \printexercise{exercise}{\GetExerciseIdForProperty{ID}{showlayout}}
+ }%
+ \end{cnltxcode}
+ }%
+ \dolistloop\xsim@layouts
+}
+
+\NewDocumentCommand\xsim@add@layout{mo}{%
+ \listadd\xsim@layouts{#1}%
+ \IfNoValueF{#2}{\csdef{xsim@layout@extra@#1}{#2}}%
+}
+
+\xsim@add@layout{default}
+\xsim@add@layout{runin}[\renewcommand*\theexercise{\arabic{exercise}.}]
+\xsim@add@layout{margin}[\renewcommand*\theexercise{\arabic{exercise}.}]
+
+\xsim@add@version{0.8} {2017-05-18}
+\xsim@add@version{0.8a} {2017-05-19}
+\xsim@add@version{0.8b} {2017-05-23}
+\xsim@add@version{0.9} {2017-06-20}
+\xsim@add@version{0.10} {2017-09-19}
+
+% ----------------------------------------------------------------------------
\endinput
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex
index 2a0f95846f3..2959a910915 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.auxfile.code.tex
@@ -179,4 +179,4 @@
{ \seq_item:cn {g__xsim_list_recorded_#1_seq} {#2} }
% ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex
index 30be8b9d18f..abec4de0501 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.base.code.tex
@@ -166,4 +166,4 @@
{ \keys_set:nn {xsim} {#1} }
% ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex
index 323b7bd52f9..55b1db7cf45 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex
@@ -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@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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex
index 8bf0c0bc705..e3945e86a43 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.collections.code.tex
@@ -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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex
index a30c44a76fc..824da2241ea 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.definitions.code.tex
@@ -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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex
index 43a46ab6146..aa89ce5ee2c 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.environments.code.tex
@@ -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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex
index 59434ec3071..185544564f5 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.exercises.code.tex
@@ -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,13 +185,41 @@
{ \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: }
{ \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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex
index 8a881eb22ad..d537754fa72 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.goals.code.tex
@@ -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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.grades.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.grades.code.tex
index 0fe0d162db5..141aaa3da3f 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.grades.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.grades.code.tex
@@ -150,4 +150,4 @@
}
% ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex
index b1006f49356..2c9f0c56449 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.interface.code.tex
@@ -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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.layouts.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.layouts.code.tex
new file mode 100644
index 00000000000..3b94b6cc518
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.layouts.code.tex
@@ -0,0 +1,77 @@
+% ----------------------------------------------------------------------------
+% the XSIM package - layouts style
+%
+% eXercise Sheets IMproved
+%
+% ----------------------------------------------------------------------------
+% Clemens Niederberger
+% Web: https://github.com/cgnieder/xsim
+% E-Mail: contact@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
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.modules.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.modules.code.tex
index 1e5d7d5cfa1..a2913f4ad80 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.modules.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.modules.code.tex
@@ -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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex
index ec88d1be00a..a932faf4472 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.properties.code.tex
@@ -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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.random.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.random.code.tex
index 3120c800bd8..0730d04d454 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.random.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.random.code.tex
@@ -304,4 +304,4 @@
% \xsim_get_id_for_property:nn {ID} {}
% ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex
index 101c19aa23c..6855f635968 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.solutions.code.tex
@@ -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,14 +80,15 @@
% #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
{ \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,19 +284,38 @@
}
\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:
}
% #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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.sty b/Master/texmf-dist/tex/latex/xsim/xsim.sty
index 7bc7248c47e..b7ce1cf4b3f 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.sty
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.sty
@@ -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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.tags.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.tags.code.tex
index b438afb203e..57e0dfd38bf 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.tags.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.tags.code.tex
@@ -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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.templates.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.templates.code.tex
index f08ff904b4c..fa62e3f96c4 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.templates.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.templates.code.tex
@@ -169,4 +169,4 @@
\cs_generate_variant:Nn \xsim_use_template:nn {nx,nV}
% ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex
index a52d3708632..83feaf8169d 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.translations.code.tex
@@ -143,4 +143,4 @@
}
% ----------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex
index ae0338463b1..748550657d5 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex
+++ b/Master/texmf-dist/tex/latex/xsim/xsim.verbwrite.code.tex
@@ -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:
diff --git a/Master/texmf-dist/tex/latex/xsim/xsimverb.sty b/Master/texmf-dist/tex/latex/xsim/xsimverb.sty
index da6ab48c9ee..ec5fbd14dde 100644
--- a/Master/texmf-dist/tex/latex/xsim/xsimverb.sty
+++ b/Master/texmf-dist/tex/latex/xsim/xsimverb.sty
@@ -63,4 +63,4 @@
\xsim_load_module:n {verbwrite}
% --------------------------------------------------------------------------
-\tex_endinput:D
+\file_input_stop: