I need to produce exercise sheets, and I am looking for a package providing exercise/answer environments. I tried for now exercise and exsheets packages, and I can almost do what I want but there is always a restriction.

I would like to produce a list of exercises such that :

• An exercise can possibly be just one line "Exercise 1. Blah blah blah?"
• An exercise can possibly be longer, with multiple questions. In that case the first line would just be "Exercise X. Title" and then there would be one line per question, with proper numeration.
• I should be able to give the solution for each exercise or question, and choose to display the solution or not.
• When there are multiple questions, I should be able to give an answer for each question (and not only for the whole exercise). The answer should appear after each question.
• The exercises and answers are written directly in the same source file.
• It is possible to customize the way the answer are written (e.g. to add a fbox or color)
• Ideally, also being able to add some symbol to specify the difficulty, but this is not essential.

What would be, according to you, the best package to do that, or the one requiring as few tricks as possible?

• Have a look at the very flexible xsim. – TeXnician Oct 9 '17 at 10:26
• I actually wanted to try it, but I cannot get it working on my computer. It does not come with the distribution, and when I install it separately (~/texmf), I get a conflict with scrlfile when loading the package (undefined control sequence l.211 \file_input_stop)… not sure what is the cause exactly. As it is a recent package, maybe it is not stable yet ? Do you know any other package with similar capabilities ? – Zooky Oct 9 '17 at 11:36
• It does come with any current distro. Which one are you using? – TeXnician Oct 9 '17 at 11:37
• xsim was never part of TeX Live 2016 and it relies on other packages newer than the ones in TeX Live 2016. You need to install TeX Live 2017. I would recommend installing “vanilla” TeX Live instead of the one in the repo, any way. See tex.stackexchange.com/questions/301126/… – cgnieder Oct 9 '17 at 12:21
• If you do not want to do that heavy step maybe there's some idea for some of the older packages... – TeXnician Oct 9 '17 at 13:20

All of the mentioned points should be doable using the xsim package (which is the successor of exsheets). I do not have enough knowledge of other exercise packages to be able to judge if they allow similar things…

Here is a suggestion about how you could use xsim to achieve what you want. Hopefully the code is self-explanatory.

\documentclass{article}
\usepackage{xsim,tcolorbox,needspace}

% declare a boolean property:
\DeclareExerciseProperty*{short}
% declare a tag like property:
\DeclareExerciseTagging{level}

% declare a template which typesets exercises differently according to given
% properties:
\DeclareExerciseEnvironmentTemplate{exercise}
{%
\renewcommand*\theenumi{\theexercise.\arabic{enumi}}%
\Needspace*{2\baselineskip}
\noindent
\GetExercisePropertyT{level}{\marginpar{\sffamily Level: #1}}%
\textbf{\XSIMmixedcase{\GetExerciseName}~\GetExerciseProperty{counter}.} %
\GetExercisePropertyT{subtitle}{\textit{#1}}%
\IfExerciseBooleanPropertyF{short}{\par\noindent}%
}
{}

% declare a tcolorbox template for the solutions:
\DeclareExerciseEnvironmentTemplate{solution}
{\tcolorbox[colback=yellow,colframe=red]}
{\endtcolorbox}

% declare a user command for short answers:
\IfSolutionPrintT{%
\UseExerciseTemplate{begin}{solution}%
#1%
\UseExerciseTemplate{end}{solution}%
}{}%
}

% setup exercises and solutions:
\SetExerciseParameters{exercise}{
exercise-template = exercise ,
solution-template = solution
}

% remove this option to hide the answers:
% \xsimsetup{solution/print=true}

\usepackage{lipsum}

\begin{document}

\begin{exercise}[level=hard,short]
Just a short exercise
\end{exercise}
\begin{solution}
The somewhat longer solution to the short exercise. \lipsum[1]
\end{solution}

\begin{exercise}[subtitle=This one has a title,level=easy]
\begin{enumerate}
\end{enumerate}
\end{exercise}

\begin{exercise}
\end{exercise}

\begin{exercise}[level=medium,short]
\end{exercise}

\end{document}


This gives

or

depending on wether solution/print=true has been set or not.

• This is perfect! Thank you very much, I really appreciate this example. – Zooky Oct 9 '17 at 21:28