# Problem/solution environment

I'm writing a textbook and an accompanying solution manual. In the book, I have a series of exercises at the end of each chapter. As the number of chapters and exercises grows, I'm getting to the point where it's easy to get the ordering of the exercises and solutions mixed up. So what I'm looking for is a simple but effective way to always have them in a consistent order.

What I thought about, but don't know to implement (yet), is that each exercise and the corresponding solution would be located in one tex file. I could then \input that file in the book and the manual in the appropriate location, and (through an as of yet undetermined mechanism), only the exercise or the solution would be input. I also thought that I could create a separate "master" tex file for each chapter that in turn inputs the exercise/solution tex files. Then I simply input that "master" tex file in the book and the manual. In this way, it would be impossible to get the ordering mixed up.

In UNIX, I guess one way of accomplishing this would be true environment variables, but I don't know whether this is possible in LaTeX and whether this would be sensible.

Thanks in advance for criticisms, ideas, feedback.

-
You might be interested in this: tex.stackexchange.com/questions/22269/… (or use ConTeXt;)). –  mbork Sep 7 '12 at 17:46
Thanks, I'm aware of them. As far as I can tell, they do not address the issue I'm trying to resolve. –  user1362373 Sep 7 '12 at 18:34
A have a vague memory that the answers package does store solutions in separate files… –  clemens Sep 7 '12 at 18:44
I think this a job for the answers package- have a look at the questions with the answers tag. With that in mind, I'd be tempted to call this a duplicate –  cmhughes Sep 7 '12 at 21:44
I recall doing exactly this a long time ago (in plain TeX), i.e., putting each exercise in a separate file, and I recall one thing about it: it was a bad idea (in terms of compilation speed). (Though hardware 10 years ago was a bit different, I admit.) –  mbork Sep 8 '12 at 6:54

Here is a possibility (and I really don't like the fact that this - again - seems like an advertisement): I have a package exsheets which I haven't uploadad to CTAN yet as it still requires some testing (feedback highly welcome). With it the task at hand seems fairly easy.

You create a separate tex file for each chapter that contains both exercises and solutions. In these files a solution is written directly after the exercise it belongs to.

These files are then either input at the appropriate points in each chapter of the main book or in the document providing the solutions. The choice if exercises or solutions are printed is made through a package option.

The main file would look for example like this:

\documentclass{book}
\usepackage{exsheets}

\SetupExSheets{
counter-format = ch.qu ,
counter-within = chapter
}

\begin{document}
\chapter{One}
\section{Exercises}
\input{\jobname-exercises-one}

\chapter{Two}
\section{Exercises}
\input{\jobname-exercises-two}
\end{document}


The files for the exercises look like this:

% this is \jobname-exercises-one.tex
\begin{question}
The first exercise in chapter one.
\end{question}
\begin{solution}
The answer to the first exercise in chapter one.
\end{solution}
\begin{question}
The second exercise in chapter one.
\end{question}
\begin{solution}
The answer to the second exercise in chapter one.
\end{solution}


The second file:

% this is \jobname-exercises-two.tex
\begin{question}
The first exercise in chapter two.
\end{question}
\begin{solution}
The answer to the first exercise in chapter two.
\end{solution}
\begin{question}
The second exercise in chapter two.
\end{question}
\begin{solution}
The answer to the second exercise in chapter two.
\end{solution}


A suiting solutions document now could look as follows:

\documentclass{article}
\usepackage{exsheets}

\SetupExSheets{
question/print = false ,
solution/print = true ,
counter-format = se.qu ,
counter-within = section
}

\makeatletter
\makeatother

\begin{document}
\section{Solutions to chapter one}
\input{\jobname-exercises-one}

\section{Solutions to chapter one}
\input{\jobname-exercises-two}

\end{document}


-
Thanks - it looks like this does exactly what I want. –  user1362373 Sep 8 '12 at 14:20
@user1362373 you're welcome. And as I said in the answer: feedback on the package is highly welcome. So please don't hesitate me (via email) if you encounter any problems (or have suggestions…) –  clemens Sep 8 '12 at 14:27

You may want to look at toggle commands from the etoolbox package. For example you can set up something like this

\documentclass{article}
\usepackage{etoolbox}

\providetoggle{problem}
\toggletrue{problem}

\providetoggle{solution}
\togglefalse{solution}

\begin{document}

\input{problem_file}

\end{document}


The problem_file will contain something like

\iftoggle{problem}{Problem statement}{}
\iftoggle{solution}{Solution}{}

-
The comment package makes that even easier. –  Martin Schröder Sep 7 '12 at 20:31
Thanks, I'll take a look at the etoolbox package as well as the comment package. –  user1362373 Sep 8 '12 at 14:21