summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/exercise
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/exercise
Initial commit
Diffstat (limited to 'macros/latex/contrib/exercise')
-rw-r--r--macros/latex/contrib/exercise/README109
-rw-r--r--macros/latex/contrib/exercise/exercise.dtx1806
-rw-r--r--macros/latex/contrib/exercise/exercise.ins66
-rw-r--r--macros/latex/contrib/exercise/exercise.pdfbin0 -> 321470 bytes
4 files changed, 1981 insertions, 0 deletions
diff --git a/macros/latex/contrib/exercise/README b/macros/latex/contrib/exercise/README
new file mode 100644
index 0000000000..8bd6efcd13
--- /dev/null
+++ b/macros/latex/contrib/exercise/README
@@ -0,0 +1,109 @@
+Typesetting exercises: the exercise package
+===========================================
+
+The package helps to typeset exercises or list of exercises within any
+document.
+
+Exercises, questions, sub-questions are automatically numbered. It is
+possible to put answers in the same document, and display them
+immediately, later in the document or not at all.
+
+The layout of exercise is fully customisable. It is then possible to typeset
+long problems, short exercises, questionnaires, etc.
+
+Usage of the babel package is detected, but not fully supported by now
+(only english and french are implemented). See documentation for more
+information.
+
+Copyright:
+----------
+
+Copyright (C) 2004 by Paul Pichaureau
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+Installation:
+-------------
+
+- execute latex on exercise.ins
+
+- execute latex on exercise.dtx
+
+- produce Index and Change History with
+
+ makeindex -s gind.ist -o exercise.ind exercise.idx
+ makeindex -s gglo.ist -o exercise.gls exercise.glo
+
+- and then execute latex on exercise.dtx (again !)
+
+- copy exercise.sty and exercise.pdf to the correct places in the texmf
+tree. exercise.sty could be put in
+
+ $LOCALTEXMF\tex\latex\exercise
+
+exercise.pdf is the documentation of the package: it could take place
+in
+
+ $TEXMF\doc\latex\exercise
+
+- run texhash or the corresponding command of your distribution
+
+
+To do:
+------
+
+- Add more languages.
+
+
+Change log:
+-----------
+- v1.6 2014-10-20 Added \AtBeginExercise and \AddBeginAnswer
+ (following a suggestion of Daniel Turner)
+ Portuguese translation fixed.
+ Russian translation added
+ (thx to Andreï V. Kostyrka)
+ Added \AnswerSkipBefore and \AnswerSkipAfter
+ (thx to Alexander Malkis)
+ Bugs corrected.
+- v1.58 2012-05-08 Minor modification to avoid pagebreak after
+ exercise and answer heading
+ (thx to Mathias Magdowski)
+- v1.57 2011/07/19 Bug correction on exercise selection
+ (thx to Tobias Isenberg)
+- v1.56 2011/05/10 Portuguese translation added
+ (thx to José Romildo Malaquias)
+- v1.55 2011/03/13 Command \refAnswer added (thx to Ferenc Wettl)
+- v1.54 2010/12/14 Corrected a bug with infinite loop in Answer
+- v1.53 2010/11/27 Exercise selection now works correctly
+- v1.52 2010/10/09 New skip added
+ German support added (thx to Peter Zimmermann)
+- v1.5 2010/10/03 Label and reference now corrects
+ Dutch support added (thx to Frank Koenders)
+- v1.4 2010/08/27 Many bugs corrected
+ Exercise selection reviewed
+- v1.31 2009/03/28 Italian support added
+- v1.3 2009/03/26 Spanish support added
+ List of exercices support
+ Bug corrected
+- v1.2 2006/04/22 A basic exercice selection mechanism added.
+- v1.11 2004/09/08 Corrected a bug preventing the correct
+ use of the babel package.
+- v1.1 2004/09/05 Added the \renewcounter command
+- v1 2004/08/19 First release
+
+19 aout 2004
+Paul Pichaureau
+paul.pichaureau@alcandre.net
diff --git a/macros/latex/contrib/exercise/exercise.dtx b/macros/latex/contrib/exercise/exercise.dtx
new file mode 100644
index 0000000000..9ffb04cf2e
--- /dev/null
+++ b/macros/latex/contrib/exercise/exercise.dtx
@@ -0,0 +1,1806 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2003-2006 by Paul Pichaureau
+%
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License
+% as published by the Free Software Foundation; either version 2
+% of the License, or (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but without any warranty; without even the implied warranty of
+% merchantability or fitness for a particular purpose. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+% Public LaTeX Project Public
+%
+% \fi
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{exercise}
+%<package> [2014/10/20 v1.6 Exercise package (P.Pichaureau)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{exercise}
+\usepackage[latin1]{inputenc}
+\usepackage{xspace,fancyvrb}
+\usepackage{hyperref}
+%% \IfFileExists{hyperref.sty}{\usepackage[bookmarksopen]{hyperref}}{}
+%% \def\PrintDescribeMacro#1{}
+%% \def\PrintDescribeEnv#1{}
+\newenvironment{decl}[1][]%
+ {\par\small\addvspace{4.5ex plus 1ex}%
+ \vskip -\parskip
+ \ifx\relax#1\relax
+ \def\@decl@date{}%
+ \else
+ \def\@decl@date{\NEWfeature{#1}}%
+ \fi
+ \noindent\hspace{-\leftmargini}%
+ \begin{tabular}{|l|}\hline\ignorespaces}%
+ {\\\hline\end{tabular}\nobreak\@decl@date\par\nobreak
+ \vspace{2.3ex}\vskip -\parskip}
+\makeatletter
+ \EnableCrossrefs \PageIndex
+\makeatother
+\begin{document}
+ \DocInput{exercise.dtx}
+\end{document}
+%</driver>
+% \fi
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
+% \DoNotIndex{\@ne,\@auxout,\@ifnextchar,\@ifstar,\@ifundefined,\@bsphack,\@esphack,\@fleqnfalse}
+% \DoNotIndex{\advance,\begingroup,\begin,\bgroup,\catcode,\closein,\closeout}
+% \DoNotIndex{\day,\def,\edef,\else,\empty,\endgroup,\end,\egroup,\errmessage}
+% \DoNotIndex{\expandafter,\fi,\futurelet,\gdef,\global,\if,\ifeof}
+% \DoNotIndex{\ifx,\immediate,\let,\loop,\m@ne,\message,\month}
+% \DoNotIndex{\newcount}
+% \DoNotIndex{\newif,\newlinechar,\newread,\newtoks,\newwrite}
+% \DoNotIndex{\noexpand,\openin,\openout,\par,\quad,\read,\relax,\repeat}
+% \DoNotIndex{\space,\the,\undefined,\write,\xdef,\year,\z@}
+% \DoNotIndex{\item,\copy,\arabic,\addto,\addtolength,\alph}
+% \DoNotIndex{\ref,\Roman,\rmdefault,\or,\number,\medskip,\makebox}
+% \DoNotIndex{\fbox,\label,\ifcase,\ifnum,\ignorespaces,\newcommand}
+% \DoNotIndex{\renewenvironment,\renewcommand,\refstepcounter,\newenvironment}
+% \DoNotIndex{\setlength,\string,\textbf,\textsc,\emph,\whiledo,\vbox}
+% \DoNotIndex{\unvbox,\usefont,\usecounter,\value,\vskip,\setbox,\setcounter}
+%
+%\CheckSum{2004}
+%
+%
+% \GetFileInfo{exercise.sty}
+%
+% \makeatletter
+% \IndexPrologue{\section*{Index}%
+% \markboth{Index}{Index}%
+% For entries in type-writer font, numbers written in italic
+% refer to the page where the corresponding entry is
+% described; numbers underlined refer to the
+% \ifcodeline@index code line of the \fi definition;
+% numbers in roman refer to the \ifcodeline@index code
+% lines \else pages \fi where the entry is used. }
+% \makeatother
+%\title{\texttt{exercise.sty} : a package to typeset exercises}
+%
+%\date{\today}
+%
+%\author{Paul Pichaureau\\ \texttt{paul.pichaureau@alcandre.net}}
+%
+%\maketitle
+%
+%\begin{abstract}
+% This package offers a simple environment to typeset exercises,
+% and their questions, sub-questions, indications, answers and so
+% on.
+%
+% The layout of the exercises is fully customisable. Moreover, the
+% answers of the exercise could be typeset immediately or
+% later in the document.
+%\end{abstract}
+%
+% \tableofcontents
+%\section{Options of the package}
+%
+%\index{package>options}\index{options>of the package}
+%
+%Here we list the options of the package |exercise.sty|:
+%
+%\begin{description}
+% \item[|noexercise|] hide all the exercises
+% of a document.
+%
+% \item[|noanswer|] hide all the answers
+% of a document. The default behaviour is to show both the exercises
+% and the answers.
+%
+%
+% \item[|exerciseonly|] is a synonym of |noanswer|.
+%
+% \item[|answeronly|] is a synonym of |noexercise|.
+%
+% \item[|nothing|] hide answers and exercises (synonym of
+% |noanswer| and |noexercise|).
+%
+% \item[|answerdelayed|] save the answers instead of typeset
+% them. The answers can be included later in the document with the
+% command |\shipoutAnswer|.
+%
+% More precisely, the answers are stored
+% in a vertical box. When |\shipoutAnswer| is encountered, this box
+% is emptied and its contents is placed in the main vertical
+% list. The answers defined later are placed in this emptied
+% vertical box. In this way, you can have many group of answers in
+% the same document.
+%
+% \item[|exercisedelayed|] saves the exercises instead of
+% typeset them. The exercises can be included later with the command
+% |\shipoutExercise|.
+%
+% \item [|lastexercise|] if no references is given for an
+% answer, then the answer is supposed to refer to the last
+% exercise (see section \ref{sec:lastexercise}).
+%
+%\end{description}
+%
+%
+%\section{Commands}
+%
+%\label{sec:option}
+%
+%\subsection{Exercises and answers}
+%
+%
+%\begin{decl}
+% |\begin{Exercise}| \oarg{key val list} ... |\end{Exercise}| \\
+% |\begin{Exercise*}| \oarg{key val list} ... |\end{Exercise*}|
+%\end{decl}
+%
+%\DescribeEnv{Exercise}\DescribeEnv{Exercise*}
+%The |Exercise| environment is used to typeset just one exercise. We
+%use the \textsf{keyval} package to give different informations about
+%an exercise.
+%
+%The |Exercise*| environment typeset an exercise without number, and
+% without puting it in the |listofexercices|.
+%
+%\vspace*{-\baselineskip}
+%
+%\index{options>of \texttt{Exercise}}
+%\index{keys>of \texttt{Exercise}}
+%\begin{decl}
+%|label|=\marg{string}\\
+%|title|=\marg{string}\\
+%|difficulty|=\marg{number}\\
+%|origin|=\marg{string}\\
+%|name|=\marg{string}\\
+%|counter|=\marg{counter}\\
+%|number|=\marg{string}
+%|exam|=\marg{string}
+%|year|=\marg{string}
+%\end{decl}
+%All these keys define commands that will be available later to typeset
+%the exercise. They are all optional.
+%\begin{description}
+% \item[|label|] The label of the exercise. This label can be
+% used later in cross-reference, or to link an answer to this
+% exercise.
+% \item[|title|] The title of the exercise. It will be available
+% later with the command |\ExerciseTitle|.
+% \item[|difficulty|] The difficulty of the exercise (a number).
+% It will be available later with the counter
+% |\ExerciseDifficulty|.
+% \item[|origin|] The origin of the exercise.
+% It will be available later with the command |\ExerciseOrigin|.
+% \item[|name|] In document, exercises can have multiple
+% denomination, like problem, exam, or even question. This key
+% allows to change the denomination. This denomination is accessible
+% with the command |\ExerciseName|.
+% \item[|counter|] Use the given counter to number this
+% exercise. Here, \marg{counter} must be a pre-defined counter.
+% \item[|number|] Use the given number for the exercise. In
+% fact, this number is a string, so you can number the exercise
+% with letters.
+% \item[|exam|] To keep track of exams associated with the exercise.
+% \item[|year|] To keep track of the year you have given the
+% exercise.
+%\end{description}
+%
+%\bigskip[1]
+%
+%As an example, with the default definitions, the following code:
+%\medskip
+%\begin{verbatim}
+%\begin{Exercise}[title={Euler's constant}, difficulty=2, label=ex1,
+% origin={P.Paelw}]
+%\end{Exercise}
+%\end{verbatim}
+%\noindent will give \par \medskip
+%\index{example}
+%\noindent \fbox{\begin{minipage}[t]{.95\textwidth}
+%\begin{Exercise}[title={Euler's constant}, difficulty=2, label=ex1,
+% origin={P.Paelw}]
+%\end{Exercise}
+%\end{minipage}}
+%
+%\DescribeEnv{Problem}
+%It is possible to define different type of exercise. For example,
+%you can define a |Problem| environment with the two lines:
+%\begin{verbatim}
+% \newcounter{Problem}
+% \newenvironment{Problem}{\begin{Exercise}[name={Problem},
+% counter={Problem}]}
+% {\end{Exercise}}
+%\end{verbatim}
+%Anyway, all type of exercise will have the same layout in the document.
+%
+%\begin{decl}
+% |\begin{Answer}| \oarg{key val list} ... |\end{Answer}|
+%\end{decl}
+%
+%\DescribeEnv{Answer}
+%The |Answer| environment is used to typeset the answer of an
+%exercise. To determine to which exercise this answer is attributed
+%to, you can use the two following keys.
+%
+%\vspace*{-\baselineskip}
+%\index{options>of \texttt{Answer}}
+%\index{keys>of \texttt{Answer}}
+%\begin{decl}
+%|ref|=\marg{string}\\
+%|number|=\marg{string}
+%\end{decl}
+%\begin{description}
+% \item[|ref|] a \LaTeX\ reference. \emph{Must} correspond to the |label|
+% key of an exercise.
+% \item[|number|] if the answer refers to an exercise in
+% another document, you can set the number of the exercise with this
+% key. It is in fact a string.
+%\end{description}
+%
+%\label{sec:lastexercise} If the package is loaded with the option
+% |lastexercise| and if no |ref| and no |number| key is given, then
+% the last exercise is taken as a reference for the answer.
+%
+%If no |ref| and no |number| key is given and the option |lastexercise|
+%is not activated, a Package Warning is displayed.
+%
+%\begin{decl}
+% |\begin{ExerciseList}| \\
+% \quad |\Exercise|\oarg{key val list} \\
+% \quad |\Answer|\oarg{key val list} \\
+% |\end{ExerciseList}|
+%\end{decl}
+%
+%\DescribeEnv{ExerciseList}
+%The |ExerciseList| environment is a convenience to typeset a list of
+%small exercises. In |ExerciseList|, everything between two |\Exercise|
+%or |\Answer| tags is interpreted as the body of an exercise (or an
+%answer).
+%
+%\DescribeMacro{\Exercise}
+%\DescribeMacro{\Exercise*}
+%\DescribeMacro{\Answer}
+%The command |\Exercise| inside |ExerciseList| accepts the same keys
+%than the |Exercise| environment. The command |\Answer| inside
+%|ExerciseList| accepts the same keys than the |Answer| environment and
+%behaves in the same way.
+%
+%\subsection{Parts and questions}
+%
+%\begin{decl}
+% |\ExePart|\oarg{key val list} \\
+% |\ExePart*|\oarg{key val list}
+%\end{decl}
+%\DescribeMacro{\ExePart}
+%\DescribeMacro{\ExePart*}
+%It is common to split large exercise in parts: it is the purpose of
+%the |\ExePart| command.
+%\index{options>of \texttt{\bslash ExePart}}
+%\index{keys>of \texttt{\bslash ExePart}}
+%The keys |title|, |name| and |difficulty| are
+%available for this command.
+%
+%For example, a non-numbered preliminary part is obtained with
+%\begin{verbatim}
+% \ExePart*[name={Preliminary}]
+%\end{verbatim}
+%
+%\begin{decl}
+% |\Question|\oarg{key val list}\\
+% |\subQuestion|\oarg{key val list}\\
+% |\subsubQuestion|\oarg{key val list}
+%\end{decl}
+%\DescribeMacro{\Question}
+%\DescribeMacro{\subQuestion}
+%\DescribeMacro{\subsubQuestion}
+%These three commands define the hierarchy of questions. A
+%|\subsubQuestion| cannot be preceded by a |\Question| or a
+%|\begin{Exercise}|. A |\subQuestion| cannot be preceded by a
+% |\begin{Exercise}|. If one of these cases is detected, a Package
+% Error is displayed.
+%
+%\index{options>of \texttt{\bslash Question}}
+%\index{keys>of \texttt{\bslash Question}}
+%\index{options>of \texttt{\bslash subQuestion}}
+%\index{keys>of \texttt{\bslash subQuestion}}
+%\index{options>of \texttt{\bslash subsubQuestion}}
+%\index{keys>of \texttt{\bslash subsubQuestion}}
+%Two keys are available for these commands: |title| and |difficulty|.
+%
+%\begin{decl}
+% |\ExeText|
+%\end{decl}
+%\DescribeMacro{\ExeText}
+%The text following this command has the same status that the first
+%indications of the exercise. So, the next level of the hierarchy must
+%be a |\ExePart| or a |\Question|.
+%
+%
+%
+%\subsection{Exercise selection}
+%\begin{decl}
+% |\ExerciseSelect|\oarg{key val list}\\
+% |\ExerciseSelect*|\oarg{key val list}\\
+% |\ExerciseStopSelect|
+%\end{decl}
+%\DescribeMacro{\ExerciseSelect}
+%\DescribeMacro{\ExerciseStopSelect}
+%
+% A very basic exercise selection mechanism is provided. When
+% |\ExerciseSelect| is used, an exercise is printed if and only
+% if the value of its keys are within the values specified after
+% |\ExerciseSelect|. For example, the following command
+%\begin{verbatim}
+% \ExerciseSelect[type={short}, difficulty={0,1}]
+%\end{verbatim}
+%selects the short exercises of difficulties 0 and 1, whereas
+%\begin{verbatim}
+% \ExerciseSelect[label={exe1,exe10,exe11}]
+%\end{verbatim}
+%selects the exercises with label |exe1|, |exe10| and |exe11|. It is important
+%to \emph{not} have spaces before or after the commas.
+%
+%With |\ExerciseStartSelect*|, the exercises which fit the conditions
+%are \emph{omited} instead of selected.
+%
+%Last, |\ExerciseStopSelect| stops the processus of selection: every
+%exercise will be displayed later.
+%
+%The purpose of these commands is to select exercises within a long list
+%stored on an auxiliary file.
+%
+%\subsection{References}
+%
+%If you want to make a cross-reference to an exercise, you must use
+%the |label| key of the |Exercise| command. Afterward, you can use the
+%usual \LaTeX commands |\ref|, |\pageref| and so on.
+%
+%The |hyperref| package should work normaly, but you must load it
+%\emph{before} the |exercise| package.
+%
+%\begin{decl}
+% |\refAnswer|\marg{label}
+%\end{decl}
+%\DescribeMacro{\refAnswer} Whenever an answer is connected to an
+%exercise \emph{via} the |ref| key, a label \emph{Exercise
+%label}|-Answer| is created. In this way, you can easily make
+%reference to a given exercise.
+%
+%The |\refAnswer| command is another way to reference the answer of a
+%given exercise : its argument is the label of an exercise without the
+%postfix |-Answer|.
+%
+%In this way
+%\begin{verbatim}
+% \ref{ex1-Answer} \refAnswer{ex1}
+%\end{verbatim}
+%are two equivalent ways to reference the answer of the preceding
+%exercise labeled~|ex1|.
+%
+%Remember that inside an |Exercise| the command |\ExerciseLabel|
+%stores the label of the exercise. So another way to reference the
+%exercise \emph{inside} is own code is
+%\begin{verbatim}
+% \ref{\ExerciseLabel}
+%\end{verbatim}
+%
+%\subsection{Extra stuff}
+%\DescribeMacro{\marker}
+%\DescribeMacro{\DifficultyMarker}
+%The difficulty of an exercise is represented by a certain amount of
+%stars. The command |\marker| is used to typeset the difficulty of an
+%exercise.
+%\begin{verbatim}
+% \marker<symbol><counter>
+%\end{verbatim}
+%displays |<symbol>| repeated |<counter>| times. For example |\marker*2|
+% gives **, and |\marker+{14}| gives ++++++++++++++
+%
+%By default, the difficulty is symbolized by star. You can customise
+%this by redefining the command |\DifficultyMarker|.
+%
+%\bigskip
+%\changes{v1.3}{2009/03/26}{Added the 'listofexercices' features.}
+%\DescribeMacro{\listofexercises}
+%This command add a list of all the exercise in your document.
+%
+%\begin{decl}
+% |\ListOfExerciseInToc|\\
+% |\ExerciseLevelInToc|\marg{level of exercices}
+%\end{decl}
+%\DescribeMacro{\ListOfExerciseInToc}
+%\DescribeMacro{\ExerciseLevelInToc}
+%If you prefer to display this list of exercises in the table of
+%contents, then use the command |\ListOfExerciseInToc|.
+%
+%By default, the exercises appear in the table of content at the same
+% level as the paragraphs. The command |\ExerciseLevelInToc| is used
+% to customize this behaviour. For example with the command
+% |\ExerciseLevelInToc{subsection}| the exercises will appear at the
+% same level as the subsctions. Avalaible levels are: section,
+% subsection, subsubsection, paragraph and subparagraph.
+%
+%\section{Customisation}
+%
+%\label{sec:custom}
+%
+%\subsection{Internationalisation}
+%
+%\begin{decl}
+%|\ExerciseName|\\
+%|\ExerciseListName|\\
+%|\AnswerName|\\
+%|\AnswerListName|\\
+%|\ExePartName|%
+%\end{decl}
+%\DescribeMacro{\ExerciseName}
+%\DescribeMacro{\ExerciseListName}
+%\DescribeMacro{\AnswerName}
+%\DescribeMacro{\AnswerListName}
+%\DescribeMacro{\ExePartName}
+%\DescribeMacro{\ExePartListName}
+%These commands store various hard-wired string. |\ExerciseListName|
+%is used in the |ExerciseList| environment: it is possibly an
+%abbreviation of the word ``Exercise".
+%
+%\textsf{Exercise.sty} automatically detects the usage of
+% \textsf{babel} and translate these terms in the language loaded...
+% if I (the author) know the translation!
+%
+% By now, and thanks to many contributors, english, french, spanish,
+% italian, dutch, german, portugese and russian are supported.
+%
+%If you sent me the translations in your language, I will be happy to
+%add them in the package. Anyway, you can redefine these
+%commands (with a |\renewcommand|).
+%
+%You must load the \textsf{exercise} package \emph{after}
+%\textsf{babel} to activate this option.
+%
+%\subsection{Layout}
+%
+%\subsubsection{Exercises, answers and parts}
+%
+%For the layout of the exercises, two levels of customisation are
+%available. First, you can customise the way the informations will be
+%typeset, and then you can customise the way these pieces of
+%informations are typeset together.
+%
+%\begin{decl}
+% |\ExerciseHeaderTitle| \\
+% |\ExerciseHeaderDifficulty| \\
+% |\ExerciseHeaderOrigin|\\
+% |\ExerciseHeaderNB|
+%\end{decl}
+%\DescribeMacro{\ExerciseHeaderTitle}
+%\DescribeMacro{\ExerciseHeaderDifficulty}
+%\DescribeMacro{\ExerciseHeaderOrigin}
+%\DescribeMacro{\ExerciseHeaderNB}
+%These commands are used to typeset the corresponding information:
+%\\ |\ExerciseHeaderTitle| corresponds to the |title| key, \\
+%|\ExerciseHeaderDifficulty| to the |difficulty| key,
+%|\ExerciseHeaderOrigin| to the |origin| key and |\ExerciseHeaderNB| to
+%the number of the exercise.
+%
+%In these commands, you specify the fonts to use, the space around the
+%information, some symbols (like dash or dot) you want to put here, and
+%so on. If the key is not present in the definition of the exercise,
+%then the corresponding part of the header will be emptied by the package.
+%
+%For example the default definition of |\ExerciseHeaderTitle| is
+%\begin{verbatim}
+% \newcommand{\ExerciseHeaderTitle}{\quad---\quad\ExerciseTitle}
+%\end{verbatim}
+%If an exercise has a title, then this title will be displayed preceded
+%by an emdash (as you can see in exercise \ref{ex1} of this
+%document). If an exercise doesn't have a title, then this command is
+%set to nothing (precisely to |{}|) during the exercise.
+%
+%These commands can be redefined with a |\renewcommand|. You don't have
+%to worry about the ``undefinition" mechanism: the package manages that
+%by itself.
+%
+%\begin{decl}
+% |\ExerciseHeader| \\
+% |\ExerciseListHeader|
+%\end{decl}
+%\DescribeMacro{\ExerciseHeader}
+%\DescribeMacro{\ExerciseListHeader}
+%When the layout of all the elements has been fixed, they are collected
+%in the |\ExerciseHeader| command (or in |\ExerciseListHeader|).
+%Here, you specify the way the different elements are mixed
+%together.
+%
+%The default definition of |\ExerciseHeader| is
+%\begin{verbatim}
+% \newcommand{\ExerciseHeader}{\centerline{\textbf{\large
+% \ExerciseName\ExerciseHeaderNB\ExerciseHeaderTitle
+% \ExerciseHeaderOrigin\medskip}}}
+%\end{verbatim}
+%\noindent which displays all the informations in a centered line, using
+%a large bold default font.
+%
+%\begin{decl}
+% |\AnswerHeader| \\
+% |\AnswerListHeader|
+%\end{decl}
+%\DescribeMacro{\AnswerHeader}
+%\DescribeMacro{\AnswerListHeader}
+%The same mechanism is implemented for the answers.
+%|\AnswerHeader| and |\AnswerListHeader| specifies the way the header
+%of answers are typeset. In the definition of these commands, you can
+%use freely the informations of the related exercise. For example, this
+%is the default definition of |\AnswerHeader|:
+%
+%\begin{verbatim}
+% \newcommand{\AnswerHeader}{\medskip\centerline{\textbf{
+% Answer of \ExerciseName\ \ExerciseHeaderNB}\smallskip}}
+%\end{verbatim}
+%
+%
+%\begin{decl}
+% |\ExePartHeaderTitle| \\
+% |\ExePartHeaderDifficulty| \\
+% |\ExePartHeaderNB|\\
+% |\ExePartHeader|\\
+% |\ExePartListHeader|
+%\end{decl}
+%\DescribeMacro{\ExePartHeaderTitle}
+%\DescribeMacro{\ExePartHeaderDifficulty}
+%\DescribeMacro{\ExePartHeaderNB}
+%\DescribeMacro{\ExePartHeader}
+%\DescribeMacro{\ExePartListHeader}
+%The same kind of customisation is available for the |\ExePart|
+%command: |\ExePartHeaderTitle|, |\ExePartHeaderDifficulty| and
+%|\ExePartHeaderNB| \\ control the way the title (|\ExePartTitle|), the
+%difficulty (|\ExePartdifficulty|) and the number (|\theExePart|) of
+%the part are displayed.
+%
+%These pieces are collected in the command |\ExePartHeader| or
+%\\ |\ExePartListHeader|.
+%
+%\DescribeMacro{\AtBeginExercise}
+%\DescribeMacro{\AtBeginAnswer}
+%Finally, you can use the commands |\AtBeginExercise|
+%and |\AtBeginAnswer|. They are executed respectively at the beginning
+%of each exercise/each answer.
+%
+%For example, if you want all the answer typeset in italic shape, use
+% \begin{verbatim}
+%\newcommand{\AtBeginAnswer}{\itshape}
+% \end{verbatim}
+%
+%\changes{v1.6}{2014/10/20}{Added new commands |\AtBeginExercise|
+%and |\AtBeginAnswer|.}
+%
+%
+%\subsubsection{Questions, sub-questions and sub-sub-questions}
+%
+%The layout of the questions is a little more rigid. Somehow, it can be
+%customised.
+%
+%\begin{decl}
+% |\QuestionHeaderTitle| \\
+% |\QuestionHeaderDifficulty| \\
+% |\QuestionHeaderNB|
+%\end{decl}
+%
+%\DescribeMacro{\QuestionHeaderTitle}
+%\DescribeMacro{\QuestionHeaderDifficulty}
+%\DescribeMacro{\QuestionHeaderNB}
+%\DescribeMacro{\subQuestionHeaderTitle}
+%\DescribeMacro{\subQuestionHeaderDifficulty}
+%\DescribeMacro{\subQuestionHeaderNB}
+%\DescribeMacro{\subsubQuestionHeaderTitle}
+%\DescribeMacro{\subsubQuestionHeaderDifficulty}
+%\DescribeMacro{\subsubQuestionHeaderNB}
+%These commands plays the same role that the corresponding command
+%relating to exercises. But here, no |\QuestionHeader| is defined.
+%
+%The |subQuestion| and |subsubQuestion| versions of these commands are
+%also defined.
+%
+%All of these commands can be changed using |\renewcommand|.
+%
+%
+%\subsection{Lengths}
+%
+%\changes{v1.52}{2011/11/09}{Added the 'ExerciseSkipBefore'
+%and 'ExerciseSkipAfter' skip.}
+%\changes{v1.6}{2014/10/20}{Added the 'AnswerSkipBefore'
+%and 'AnswerSkipAfter' skip.}
+%\begin{decl}
+% \begin{tabular}{l}
+% |\ExerciseSkipBefore| \\
+% |\ExerciseSkipAfter| \\
+% |\AnswerSkipBefore| \\
+% |\AnswerSkipAfter|
+%\end{tabular}
+%\end{decl}
+%\DescribeMacro{ExerciseSkipBefore}
+%\DescribeMacro{ExerciseSkipAfter}
+%\DescribeMacro{AnswerSkipBefore}
+%\DescribeMacro{AnswerSkipAfter}
+%Before every |Exercise| environment the vertical skip
+%|ExerciseSkipBefore| is added. The corresponding |ExerciseSkipAfter|
+%vertical skip is added after every |Exercise| environment.
+%|AnswerSkipBefore| and |AnswerSkipAfter| are the amount of vertical
+%spaces inserted before an after each answer.
+%\begin{decl}
+% \begin{tabular}{llll}
+% |\Exesep| & |\Exetopsep| & |\Exeparsep| &
+% |\Exepartopsep| \\
+% |\Exeleftmargin| & |\Exerightmargin| & |\Exelabelwidth|
+% & |\Exelabelsep|
+%\end{tabular}
+%\end{decl}
+%\DescribeMacro{Exesep}
+%\DescribeMacro{Exetopsep}
+%\DescribeMacro{Exeparsep}
+%\DescribeMacro{Exepartopsep}
+%\DescribeMacro{Exeleftmargin}
+%\DescribeMacro{Exerightmargin}
+%\DescribeMacro{Exelabelsep}
+%These lengths have an effect only inside an |ExerciseList| environment.
+%This environment is nothing more than a |list|
+%environment. All the parameters of \LaTeX's lists are
+%available. Please consult your favourite source of information to have
+%the exact definitions of these lengths.
+%
+%\begin{decl}
+% \begin{tabular}{ll}
+% |\QuestionBefore| & |\QuestionIndent| \\
+% |\subQuestionBefore| & |\subQuestionIndent| \\
+% |\subsubQuestionBefore| & |\subsubQuestionIndent| \\
+% \end{tabular}
+%\end{decl}
+%\DescribeMacro{QuestionBefore}
+%\DescribeMacro{QuestionIndent}
+%\DescribeMacro{subQuestionBefore}
+%\DescribeMacro{subQuestionIndent}
+%\DescribeMacro{subsubQuestionBefore}
+%\DescribeMacro{subsubQuestionIndent}
+%Here, |\QuestionBefore| is the vertical space above |\Question|, and\\
+%|\QuestionIndent| it the horizontal distance added to the margin in
+%question. Same thing for |\subQuestion| and |\subsubQuestion|.
+%
+% \subsection{The \texttt{\textbackslash renewcounter} command}
+%
+%\changes{v1.1}{2004/09/05}{Added the 'renewcounter' command.}
+%
+% In a document, you will probably want to customise the way the
+% |Exercise| counter will reseted. Strangely, it is impossible to
+% redefined counter with \LaTeX. There is no equivalent of the
+% |\renewcommand| command for the counters.
+%
+% We provide such an equivalent with the command |\renewcounter|.
+%\DescribeMacro{\renewcounter}
+%
+%\begin{decl}
+% |\renewcounter|\marg{foo}\oarg{counter}
+%\end{decl}
+% The |\renewcounter| command defines a new counter named |foo|. The
+% counter is initialized to zero.
+%
+% The optional argument \oarg{counter} causes the counter |foo| to be
+% reset whenever the counter named in the optional argument is
+% incremented.
+%
+% If the counter |foo| was not previously defined, a \LaTeX\ error
+% occurs.
+%
+%\section{Known problems}
+%
+%The commands |\Question|, |\subQuestion|, etc. are heavily based
+%on |list| environment. These lists are hidden (I know it's bad!) to
+%simplify the syntax of the source file (I think it's nice!).
+%
+%In fact, every |\Question| is like the beginning of an environment,
+%which is closed at the next |\Question| (the exact mechanism is a
+%little bit more complicated).
+%
+%Consequently it's dangerous to put questions inside environment.
+%The following code will lead to an error:
+%\vspace*{-.5\baselineskip}
+%\begin{verbatim}
+% \begin{Exercise}
+% \begin{multicols}{2}
+% \Question ...
+% \Question ...
+% \end{multicols}
+% \end{Exercise}
+%\end{verbatim}
+%Of course, you can put entire exercise inside other environment (like
+%|minipage|). The following code will work:
+%\vspace*{-.5\baselineskip}
+%\begin{verbatim}
+% \begin{multicols}{2}
+% \begin{Exercise}
+% \Question ...
+% \Question ...
+% \end{Exercise}
+% \end{multicols}
+%\end{verbatim}
+%
+%\begin{decl}
+% |\EndCurrentQuestion|\\
+% |\EndCurrentsubQuestion|\\
+% |\EndCurrentsubsubQuestion|
+%\end{decl}
+%\DescribeMacro{\EndCurrentQuestion}
+%\DescribeMacro{\EndCurrentsubQuestion}
+%\DescribeMacro{\EndCurrentsubsubQuestion}
+%If you really need to put some questions inside environment, you must
+%use the command |\EndCurrentQuestion| just before ending the
+%environment. This command ends the question's ``environment". So,
+%this code will work:
+%\vspace*{-.5\baselineskip}
+%\begin{verbatim}
+% \begin{Exercise}
+% \begin{multicols}{2}
+% \Question ...
+% \Question ...
+% \EndCurrentQuestion
+% \end{multicols}
+% \end{Exercise}
+%\end{verbatim}
+%
+%
+%
+%
+%
+%In |ExerciseList| environment, the command |\Exercise| shouldn't be
+%followed by an empty line.
+%
+% \PrintChanges
+%
+%\makeatletter\c@IndexColumns = 2\makeatother
+% \StopEventually{\PrintIndex\newpage\tableofcontents }
+%
+% \section{Implementation}
+%
+% \subsection{Package options}
+% This part deals with the package options. Nothing more than an
+% affair of boolean.
+% \begin{macrocode}
+\newif\if@AnswerOutput \@AnswerOutputtrue
+\newif\if@AnswerDelay \@AnswerDelayfalse
+\newif\if@ExerciseOutput \@ExerciseOutputtrue
+\newif\if@ExerciseDelay \@ExerciseDelayfalse
+\newif\if@AswLastExe \@AswLastExefalse
+
+\DeclareOption{noanswer} {\@AnswerOutputfalse}
+\DeclareOption{answeronly} {\@AnswerOutputtrue\@ExerciseOutputfalse}
+\DeclareOption{noexercise} {\@ExerciseOutputfalse}
+\DeclareOption{exerciseonly} {\@AnswerOutputfalse}
+\DeclareOption{outputnothing}{\@ExerciseOutputfalse\@AnswerOutputfalse}
+\DeclareOption{exercisedelayed}{\@ExerciseDelaytrue}
+\DeclareOption{answerdelayed}{\@AnswerDelaytrue}
+\DeclareOption{lastexercise} {\@AswLastExetrue}
+% \end{macrocode}
+% The following option, which displays the exercise label in margin, is
+% not implemented yet.
+% \begin{macrocode}
+\newif\if@ShowLabel \@ShowLabelfalse
+\DeclareOption{showlabel} {\@ShowLabeltrue}
+
+\ProcessOptions
+% \end{macrocode}
+% The only required package are \textsf{keyval} and \textsf{ifthen}.
+% \begin{macrocode}
+\RequirePackage{keyval, ifthen}
+% \end{macrocode}
+%
+%\subsection{Customisation}
+%
+%\subsubsection{Internationalisation}
+%\changes{v1.11}{2004/09/08}{Corrected a bug preventing the correct
+%use of the \textsf{babel} package.}
+% \begin{macrocode}
+\def\listexercisename{List of exercises}%
+\def\ExerciseName{Exercise}%
+\def\AnswerName{Answer of exercise}%
+\def\ExerciseListName{Ex.}%
+\def\AnswerListName{Answer}%
+\def\ExePartName{Part}%
+\def\ArticleOf{of\ }%
+\@ifpackageloaded{babel}{
+\addto{\captionsfrenchb}{
+ \def\listexercisename{Liste des exercices}%
+ \def\ExerciseName{Exercice}%
+ \def\AnswerName{Solution de l'exercice}%
+ \def\ExerciseListName{Ex.}%
+ \def\AnswerListName{Solution}%
+ \def\ExePartName{Partie}%
+}
+\addto{\captionsspanish}{
+ \def\listexercisename{\'{I}ndice de \es@uclc Eejercicios}%
+ \def\ExerciseName{Ejercicio}%
+ \def\AnswerName{Soluci\'on del ejercicio}%
+ \def\ExerciseListName{Ej.}%
+ \def\AnswerListName{Soluci\'on}%
+ \def\ExePartName{Parte}%
+ \def\ArticleOf{del\ }%
+ }
+\addto\captionsitalian{%
+ \def\listexercisename{Indice degli esercizi}
+ \def\ExerciseName{Esercizio}%
+ \def\AnswerName{Soluzione dell'esercizio}%
+ \def\ExerciseListName{Es.}%
+ \def\AnswerListName{Soluzione}%
+ \def\ExePartName{Parte}%
+}
+\addto\captionsdutch{%
+ \def\listexercisename{Lijst van opdrachten}
+ \def\ExerciseName{Opdracht}
+ \def\AnswerName{Oplossing van opdracht}
+ \def\ExerciseListName{Opg.}
+ \def\AnswerListName{Oplossing}
+ \def\ExePartName{Deel}
+ \def\ArticleOf{van\ }
+}
+\addto\captionsgerman{%
+ \def\listexercisename{Liste der {\"U}bungen}%
+ \def\ExerciseName{{\"U}bung}%
+ \def\AnswerName{L{\"o}sung zu {\"U}bung}%
+ \def\ExerciseListName{{\"U}b.}%
+ \def\AnswerListName{L{\"o}sung}%
+ \def\ExePartName{Teil}%
+ \def\ArticleOf{von\ }%
+}
+\addto\captionsngerman{%
+ \def\listexercisename{Liste der {\"U}bungen}%
+ \def\ExerciseName{{\"U}bung}%
+ \def\AnswerName{L{\"o}sung zu {\"U}bung}%
+ \def\ExerciseListName{{\"U}b.}%
+ \def\AnswerListName{L{\"o}sung}%
+ \def\ExePartName{Teil}%
+ \def\ArticleOf{von\ }%
+}
+\addto\captionsportugese{%
+\def\listexercisename{Lista de exerc\'icios}%
+\def\ExerciseName{Exerc\'icio}%
+\def\AnswerName{Solução do exerc\'icio}%
+\def\ExerciseListName{Ex.}%
+\def\AnswerListName{Solu\c{c}\~ao}%
+\def\ExePartName{Parte}%
+\def\ArticleOf{de\ }%
+}
+\addto{\captionsrussian}{
+ \def\listexercisename{Список упражнений}%
+ \def\ExerciseName{Упражнение}%
+ \def\AnswerName{Ответ к упражнению}%
+ \def\ExerciseListName{Упр.}%
+ \def\AnswerListName{Ответ}%
+ \def\ExePartName{Часть}%
+ \def\ArticleOf{из\ }%
+}
+}{}
+% \end{macrocode}
+%\subsubsection{Layout}
+% First a bunch of length definitions.
+% \begin{macrocode}
+\newlength{\ExerciseSkipBefore}
+\setlength{\ExerciseSkipBefore}{1\baselineskip}
+\newlength{\ExerciseSkipAfter}
+\setlength{\ExerciseSkipAfter}{0\baselineskip}
+\newlength{\AnswerSkipBefore}
+\setlength{\AnswerSkipBefore}{0\baselineskip}
+\newlength{\AnswerSkipAfter}
+\setlength{\AnswerSkipAfter}{0\baselineskip}
+\newlength{\Exesep}
+\setlength{\Exesep}{1\baselineskip}
+\newlength{\Exetopsep}
+\setlength{\Exetopsep}\z@
+\newlength{\Exeparsep}
+\setlength{\Exeparsep}{\parskip}
+\newlength{\Exepartopsep}
+\setlength{\Exepartopsep}\z@
+\newlength{\Exeleftmargin}
+\setlength{\Exeleftmargin}\z@
+\newlength{\Exerightmargin}
+\setlength{\Exerightmargin}\z@
+\newlength{\Exelabelwidth}
+\setlength{\Exelabelwidth}\z@
+\newlength{\Exelabelsep}
+\setlength{\Exelabelsep}\z@
+\newlength{\ExerciseBefore}
+\setlength{\ExerciseBefore}{0em}
+\newlength{\QuestionBefore}
+\setlength{\QuestionBefore}{.25em}
+\newlength{\subQuestionBefore}
+\setlength{\subQuestionBefore}{0em}
+\newlength{\subsubQuestionBefore}
+\setlength{\subsubQuestionBefore}{0em}
+\newlength{\QuestionIndent}
+\setlength{\QuestionIndent}{3em}
+\newlength{\subQuestionIndent}
+\setlength{\subQuestionIndent}{2em}
+\newlength{\subsubQuestionIndent}
+\setlength{\subsubQuestionIndent}{2.5em}
+% \end{macrocode}
+% Now the counters
+% \begin{macrocode}
+\newcounter{Exercise}
+\newcounter{Answer}
+\gdef\@ExerciseCounter{Exercise} %default exercise counter
+\gdef\@AnswerCounter{Answer} %default answer counter
+\@ifpackageloaded{hyperref}{
+\def\@setAnswerref#1#2#3#4{%
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \PackageWarning{exercise}{Reference to Answer of `#3' on page
+ \thepage \space undefined}%
+ \else
+ \hyperref[#4]{\expandafter#2#1}\null
+ \fi}
+\def\refAnswer#1{\expandafter\@setAnswerref\csname r@#1\endcsname\@firstoffive{#1}{#1-Answer}}}
+{\let\refAnswer\ref}
+\newcounter{ExePart}[Exercise]
+\newcounter{Question}[Exercise]
+\newcounter{subQuestion}[Question]
+\newcounter{subsubQuestion}[subQuestion]
+% \end{macrocode}
+% Presentation of these labels in cross references
+% \begin{macrocode}
+\renewcommand{\theExercise}{\if@ExeStared\else\arabic{\@ExerciseCounter}\fi}
+\renewcommand{\theExePart}{\Roman{ExePart}}
+\renewcommand{\theQuestion}{\arabic{Question}}
+\renewcommand{\thesubQuestion}{\alph{subQuestion}}
+\renewcommand{\thesubsubQuestion}{\roman{subsubQuestion}}
+% \end{macrocode}
+% For internal purposes
+% \begin{macrocode}
+\newcounter{savedQuestion}
+\newcounter{savedsubQuestion}
+\newcounter{savedsubsubQuestion}
+% \end{macrocode}
+% The |\marker| command.
+% \begin{macrocode}
+ \def\marker#1#2{\@tempcnta#2\whiledo{\@tempcnta>0}{#1\advance
+ \@tempcnta by -1 }}
+% \end{macrocode}
+% Symbol used to indicate the difficulty of an exercise or a question
+% \begin{macrocode}
+\def\DifficultyMarker{*}
+% \end{macrocode}
+% Commands executed respectively at the begin of an exercise and at the
+% beginning of an Answer (in both case, \emph{after} the header).
+% \begin{macrocode}
+\newcommand{\AtBeginExercise}{}
+\newcommand{\AtBeginAnswer}{}
+% \end{macrocode}
+% Presentation of informations in the header of exercises
+% \begin{macrocode}
+\newcommand{\ExerciseHeaderTitle}{\qquad\ExerciseTitle}
+\newcommand{\ExerciseHeaderExam}{\ExerciseExam}
+\newcommand{\ExerciseHeaderYear}{\ \ExerciseYear}
+\newcommand{\ExerciseHeaderDifficulty}{\theExerciseDifficulty\ }
+\newcommand{\ExerciseHeaderOrigin}{%
+\ ({\usefont{\encodingdefault}{\rmdefault}{m}{it}\ExerciseOrigin})}
+\newcommand{\ExerciseHeaderNB}{\theExercise}
+\newcommand{\ExerciseHeaderLabel}{\fbox{\textsc{\ExerciseLabel}}}
+% \end{macrocode}
+% The header itself
+% \begin{macrocode}
+\newcommand{\ExerciseHeader}{\centerline{%
+\textbf{\large\ExerciseHeaderDifficulty\ExerciseName\ %
+\ExerciseHeaderNB\ExerciseHeaderTitle\ExerciseHeaderOrigin}}\medskip}
+% \end{macrocode}
+% The header of exercise in ExerciseList environment
+% \begin{macrocode}
+\newcommand{\ExerciseListHeader}{\ExerciseHeaderDifficulty%
+\textbf{\ExerciseListName\ \ExerciseHeaderNB%
+\ --- \ \ExerciseHeaderTitle}%
+\ExerciseHeaderOrigin\ignorespaces}
+% \end{macrocode}
+% Presentation of informations in the header of ExePart
+% \begin{macrocode}
+\newcommand{\ExePartHeaderNB}{\ \theExePart}
+\newcommand{\ExePartHeaderTitle}{\quad --- \quad {\ExePartTitle}}
+\newcommand{\ExePartHeaderDifficulty}{\theExePartDifficulty\ }
+% \end{macrocode}
+% The header of |ExePart|
+% \begin{macrocode}
+\newcommand{\ExePartHeader}{%
+\medskip\centerline{\emph{\large\ExePartHeaderDifficulty\ExePartName%
+\ExePartHeaderNB\ExePartHeaderTitle}}}
+\newcommand{\ExePartListHeader}{\bigskip%
+\emph{\ExePartHeaderDifficulty\ExePartName%
+\ExePartHeaderNB\ExePartHeaderTitle}\par\medskip}
+% \end{macrocode}
+% Presentation of Questions
+% \begin{macrocode}
+\newcommand{\QuestionNB}{\arabic{Question}.\ }
+\newcommand{\QuestionHeaderTitle}{\emph{(\QuestionTitle)}\ }
+\newcommand{\QuestionHeaderDifficulty}{\theQuestionDifficulty\ }
+\newcommand{\theQuestionDifficulty}{\marker{\DifficultyMarker}%
+{\QuestionDifficulty}}
+\newcommand{\subQuestionNB}{\alph{subQuestion})}
+\newcommand{\subQuestionHeaderTitle}{\emph{(\subQuestionTitle)}\ }
+\newcommand{\subQuestionHeaderDifficulty}{\thesubQuestionDifficulty\ }
+\newcommand{\subQuestionHeader}{\subQuestionHeaderDifficulty%
+ \subQuestionNB)\ \emph{\subQuestionHeaderTitle}}
+\newcommand{\thesubQuestionDifficulty}{\marker{\DifficultyMarker}%
+{\subQuestionDifficulty}}
+\newcommand{\subsubQuestionNB}{\roman{subsubQuestion} -- }
+\newcommand{\subsubQuestionHeaderTitle}{\emph{(\subsubQuestionTitle)}\ }
+\newcommand{\subsubQuestionHeaderDifficulty}{\thesubsubQuestionDifficulty\ }
+\newcommand{\subsubQuestionHeader}{\subsubQuestionHeaderDifficulty%
+ \subsubQuestionNB \emph{\subsubQuestionHeaderTitle} --}
+\newcommand{\thesubsubQuestionDifficulty}{%
+\marker{\DifficultyMarker}{\subsubQuestionDifficulty}}
+% \end{macrocode}
+% \subsection{Macros definition}
+% \begin{macrocode}
+\newcount\@QuestionLevel \@QuestionLevel=0
+\newcommand{\the@QuestionLevel}{\number\@QuestionLevel}
+\newbox\@Exercisebox
+\newbox\all@Exercisebox
+\newbox\temp@Exercisebox
+\newbox\all@Answerbox
+\newbox\temp@Answerbox
+\newif\if@echapq \@echapqfalse
+\newif\if@Answer \@Answerfalse
+\def\termineliste#1{\global\@echapqfalse%
+\whiledo{\@QuestionLevel>#1}%
+{\ifnum\@QuestionLevel=\colonnesLevel\end{multicols}\colonnesLevel=-10\fi%
+\end{list}\advance\@QuestionLevel by -1}%
+\ifnum\@QuestionLevel=\colonnesLevel\end{multicols}\colonnesLevel=-10\fi}
+% \end{macrocode}
+%
+% \subsubsection{Definition of \texttt{Exercise}}
+%
+% The keyval package is used to specify various information about an exercise.
+% \begin{macrocode}
+\newif\if@ExeTitle \@ExeTitlefalse
+\newif\if@ExeExam \@ExeExamfalse
+\newif\if@ExeYear \@ExeYearfalse
+\newif\if@ExeReName \@ExeReNamefalse
+\global\newcount\ExerciseDifficulty \ExerciseDifficulty=0
+\newif\if@ExeDifficulty \@ExeDifficultyfalse
+\newif\if@ExeOrigin \@ExeOriginfalse
+\newif\if@ExeType \@ExeTypefalse
+\newif\if@ExeLabel \@ExeLabelfalse
+\newif\if@ExeNB \@ExeNBfalse
+%
+\def\theExerciseDifficulty{\marker{\DifficultyMarker}{\ExerciseDifficulty}}
+%
+\define@key{PPExercise}{title}%
+{\global\@ExeTitletrue\gdef\ExerciseTitle{#1}}
+\define@key{PPExercise}{exam}%
+{\global\@ExeExamtrue\gdef\ExerciseExam{#1}}
+\define@key{PPExercise}{year}%
+{\global\@ExeYeartrue\gdef\ExerciseYear{#1}}
+\define@key{PPExercise}{difficulty}%
+{\global\@ExeDifficultytrue\global\ExerciseDifficulty=\number#1}
+\define@key{PPExercise}{name}%
+{\global\@ExeReNametrue\gdef\@ExerciseName{#1}}
+\define@key{PPExercise}{origin}%
+{\global\@ExeOrigintrue\gdef\ExerciseOrigin{#1}}
+\define@key{PPExercise}{type}%
+{\global\@ExeTypetrue\gdef\ExerciseType{#1}}
+\define@key{PPExercise}{counter}%
+{\gdef\@ExerciseCounter{#1}}
+\define@key{PPExercise}{label}%
+{\global\@ExeLabeltrue\gdef\ExerciseLabel{#1}\gdef\ExerciseTrueLabel{#1}}
+\define@key{PPExercise}{number}%
+{\global\@ExeNBtrue\gdef\ExerciseLocalNB{#1}}
+\define@key{PPExercise}{class}%
+{\gdef\ExerciseClass{#1}}
+%
+\newif\if@ExeStared
+\@ExeStaredfalse
+%
+\def\@InitExe{\@savemathindent\global\@echapqfalse%
+\gdef\ExerciseTitle{}%
+\gdef\ExerciseExam{}%
+\gdef\ExerciseYear{}%
+\gdef\@ExerciseName{}%
+\gdef\ExerciseOrigin{}%
+\gdef\ExerciseType{}%
+\gdef\ExerciseTrueLabel{}%
+\global\ExerciseDifficulty=0%
+\global\@ExeTitlefalse%
+\global\@ExeExamfalse%
+\global\@ExeYearfalse%
+\global\@ExeReNamefalse%
+\global\@ExeDifficultyfalse%
+\global\@ExeOriginfalse%
+\global\@ExeTypefalse%
+\global\@ExeNBfalse%
+\gdef\@ExerciseCounter{Exercise}%
+\setcounter{ExePart}{0}%
+\setcounter{Question}{0}%
+\global\@ExeLabelfalse%
+}
+%
+\def\@getExerciseInfo{%
+\if@ExeReName\def\ExerciseName{\@ExerciseName}\fi%
+\if@ExeTitle\else\def\ExerciseHeaderTitle{}\fi%
+\if@ExeExam\else\def\ExerciseHeaderExam{}\fi%
+\if@ExeYear\else\def\ExerciseHeaderYear{}\fi%
+\if@ExeOrigin\else\def\ExerciseHeaderOrigin{}\fi%
+\if@ExeType\else\def\ExerciseHeaderType{}\fi%
+\if@ExeNB\setcounter{Exercise}{\ExerciseLocalNB}
+\protected@edef\@currentlabel{\p@Exercise\theExercise}%
+\fi%
+\if@ExeDifficulty\else\def\ExerciseHeaderDifficulty{}\fi%
+\if@ExeStared\def\ExerciseHeaderNB{}\fi%
+\if@ExeLabel\recordExerciseLabel{\ExerciseLabel}\else\def\ExerciseHeaderLabel{}\fi%
+}
+%
+\def\refstepExecounter{\if@ShipThisExercise\if@ExeStared\else\if@ExeNB\else%
+\refstepcounter{\@ExerciseCounter}\fi\fi\fi}
+%
+\def\recordExerciseLabel#1{\label{#1}}
+%
+\def\@BeginExeBox{\global\setbox\@Exercisebox\vbox\bgroup}
+\def\@EndExeBox{\egroup\if@Answer\if@AnswerOutput\@DelayAnswerBox\fi%
+\else\if@ExerciseOutput\@DelayExerciseBox\fi\fi}
+%
+\def\@DelayAnswerBox{%
+\if@ShipThisAnswer\if@AnswerDelay\global\setbox\temp@Answerbox%
+\vbox{\unvbox\all@Answerbox\vskip\Exesep\unvbox\@Exercisebox\vskip\z@}%
+\global\setbox\all@Answerbox\copy\temp@Answerbox%
+\else\unvbox\@Exercisebox\fi\fi}
+%
+\def\@DelayExerciseBox{\if@ShipThisExercise\if@ExerciseDelay%
+\global\setbox\temp@Exercisebox%
+\vbox{\unvbox\all@Exercisebox\vskip\Exesep\unvbox\@Exercisebox\vskip\z@}%
+\global\setbox\all@Exercisebox\copy\temp@Exercisebox%
+\else\unvbox\@Exercisebox\fi\fi}
+%
+\newcommand{\shipoutAnswer}{\if@AnswerOutput\unvbox\all@Answerbox\fi}
+\newcommand{\shipoutExercise}{\if@ExerciseOutput\unvbox\all@Exercisebox\fi}
+% \end{macrocode}
+% The commands for the \texttt{Exercise} environment.
+% \begin{macrocode}
+\def\beginExerciseEnv{\@InitExe\@ifnextchar[\@@ExeEnv{\@@ExeEnv[]}}%]
+%
+\def\@@ExeEnv[#1]{\setkeys{PPExercise}{#1}%
+\@selectExercise\global\@Answerfalse\@BeginExeBox\@@@ExeEnv}
+%
+\newcommand{\@@@ExeEnv}{%
+ \pagebreak[1]\vskip\ExerciseSkipBefore
+ \@QuestionLevel1
+ \refstepExecounter
+ \begingroup\@getExerciseInfo\ExerciseHeader
+ \addcontentsline{\ext@exercise}{\toc@exercise}{\ExerciseName\
+ \theExercise\ \expandafter{\itshape \ExerciseTitle}\hspace{.66em}}
+ \endgroup\AtBeginExercise}
+%
+%
+\def\endExerciseEnv{\termineliste{1}\@EndExeBox%
+\vskip\ExerciseSkipAfter}
+% \end{macrocode}
+% The commands for exercise within <ExerciseList> environment
+% \begin{macrocode}
+\def\ExerciseCmd{\@InitExe\@ifstar{\global\@ExeStaredtrue\@ExeCmd}%
+{\global\@ExeStaredfalse\@ExeCmd}}
+%
+\def\@ExeCmd{\@ifnextchar[\@@ExeCmd{\@@ExeCmd[]}}%] for emacs
+%
+\def\@@ExeCmd[#1]{\setkeys{PPExercise}{#1}\@@@ExeCmd}
+%
+\newcommand{\@@@ExeCmd}{%
+ \ifnum\@QuestionLevel=0
+ \advance \@QuestionLevel by 1
+ \begin{list}{\@getExerciseInfo\ExerciseListHeader}%
+{\partopsep\Exepartopsep \labelsep\Exelabelsep \itemsep \Exesep%
+\parsep\Exeparsep \topsep\Exetopsep \labelwidth\Exelabelwidth%
+\leftmargin\Exeleftmargin \rightmargin\Exerightmargin}
+ \else
+ \termineliste{1}\@EndExeBox
+ \fi
+ \@selectExercise
+ \global\@Answerfalse\@BeginExeBox\refstepExecounter%
+ \addcontentsline{\ext@exercise}{\toc@exercise}{\ExerciseName\
+ \theExercise\ \expandafter{\itshape \ExerciseTitle}\hspace{.66em}}
+ \item\ignorespaces\AtBeginExercise
+}
+%
+\def\defineExePartInEnv{\def\@ExePartHeader{\ExePartHeader}}
+\def\defineExePartInList{\def\@ExePartHeader{\ExePartListHeader}}
+\def\defineExerciseEnv{%
+ \defineExePartInEnv
+ \renewenvironment{Exercise}{\global\@ExeStaredfalse\global\beginExerciseEnv}%
+{\endExerciseEnv}
+ \renewenvironment{Exercise*}{\global\@ExeStaredtrue\beginExerciseEnv}%
+{\endExerciseEnv}
+}
+\newenvironment{Exercise}{}{}
+\newenvironment{Exercise*}{}{}
+%
+\def\defineExerciseCmd{\def\Exercise{\ExerciseCmd}}
+%
+\renewcommand{\Exercise}{}
+%
+\defineExerciseEnv
+%
+\def\beginExerciseListEnv{\defineExerciseCmd\defineAnswerCmd%
+\defineExePartInList}
+%
+\def\endExerciseListEnv{\termineliste{1}\@EndExeBox\termineliste{0}%
+\defineExerciseEnv\defineAnswerEnv}
+%
+\newenvironment{ExerciseList}{\beginExerciseListEnv}{\endExerciseListEnv}
+% \end{macrocode}
+% \subsubsection{Definition of \texttt{questions}}
+% \begin{macrocode}
+\def\QuestionTitle{}
+\newif\if@QuestionTitle \@QuestionTitlefalse
+\global\newcount\QuestionDifficulty \QuestionDifficulty=0
+\newif\if@QuestionDifficulty \@QuestionDifficultyfalse
+%
+\define@key{PPQuestion}{title}{%
+\global\@QuestionTitletrue\gdef\QuestionTitle{#1}}
+\define@key{PPQuestion}{difficulty}{%
+\global\@QuestionDifficultytrue\global\QuestionDifficulty=\number#1}
+%
+\def\@InitQuestion{\nopagebreak
+\gdef\QuestionTitle{}%
+\global\QuestionDifficulty=0%
+\global\@QuestionTitlefalse%
+\global\@QuestionDifficultyfalse}
+%
+\def\@getQuestionInfo{%
+\if@QuestionTitle\else\def\QuestionHeaderTitle{}\fi
+\if@QuestionDifficulty\else\def\QuestionHeaderDifficulty{}\fi
+}
+%
+\def\EndCurrentQuestion{\termineliste{1}}
+%
+\def\Question{\@InitQuestion\@ifnextchar[\@@Question{\@@Question[]}}%]
+%
+\def\@@Question[#1]{\setkeys{PPQuestion}{#1}\@@@Question}
+%
+\def\@QuestionHeader{\item[{\makebox[0cm][r]{\begingroup\@getQuestionInfo%
+\QuestionHeaderDifficulty\QuestionNB\endgroup}}]%
+\begingroup\@getQuestionInfo\QuestionHeaderTitle\endgroup\ignorespaces}
+\newcommand{\@@@Question}{%
+ \ifnum\@QuestionLevel=1
+ \advance \@QuestionLevel by 1
+ \begin{list}{}{\leftmargin \QuestionIndent
+ \partopsep0pt \parsep\parskip \topsep \QuestionBefore
+ \itemsep \QuestionBefore \labelwidth 2em
+ \labelsep .33em
+ \usecounter{Question}}
+ \if@echapq
+ \setcounter{Question}{\value{savedQuestion}}\global\@echapqfalse
+ \fi
+ \refstepcounter{Question}
+ \@restoremathindent
+ \@decalemathindent{\QuestionIndent}
+ \@QuestionHeader
+ \else
+ \ifnum\@QuestionLevel=2
+ \refstepcounter{Question}
+ \@QuestionHeader
+ \else
+ \ifnum\@QuestionLevel>2
+ \termineliste{2}
+ \refstepcounter{Question}
+ \@QuestionHeader
+ \else
+ \PackageError{exercise}{You don't respect the hierarchy of
+ questions}{Verify the Question}
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Definition of \texttt{sub-questions} and
+%\texttt{sub-sub-questions}}
+% Here a good factorization is possible, but I prefer readibility over
+% efficacity.
+% \begin{macrocode}
+\def\subQuestionTitle{}
+\newif\if@subQuestionTitle\@subQuestionTitlefalse
+\global\newcount\subQuestionDifficulty\subQuestionDifficulty=0
+\newif\if@subQuestionDifficulty\@subQuestionDifficultyfalse
+%
+\define@key{PPsubQuestion}{title}{%
+\gdef\subQuestionTitle{#1}\global\@subQuestionTitletrue}
+\define@key{PPsubQuestion}{difficulty}{%
+\global\@subQuestionDifficultytrue\global\subQuestionDifficulty=\number#1}
+%
+\def\@InitsubQuestion{\gdef\subQuestionTitle{}%
+\global\subQuestionDifficulty=0%
+\global\@subQuestionTitlefalse%
+\global\@subQuestionDifficultyfalse}
+%
+\def\@getsubQuestionInfo{%
+\if@subQuestionTitle\else\def\subQuestionHeaderTitle{}\fi
+\if@subQuestionDifficulty\else\def\subQuestionHeaderDifficulty{}\fi
+}
+%
+\def\EndCurrentsubQuestion{\termineliste{2}}
+%
+\def\subQuestion{\@InitsubQuestion%
+\@ifnextchar[\@@subQuestion{\@@subQuestion[]}}%]
+\def\@@subQuestion[#1]{\setkeys{PPsubQuestion}{#1}\@@@subQuestion}
+%
+\def\@subQuestionHeader{\item[{\makebox[0cm][r]%
+{\begingroup\@getsubQuestionInfo\subQuestionHeaderDifficulty%
+\subQuestionNB\endgroup}}]%
+\begingroup\@getsubQuestionInfo\subQuestionHeaderTitle\endgroup%
+\ignorespaces}
+\newcommand{\@@@subQuestion}{%
+ \ifnum\@QuestionLevel=2
+ \advance \@QuestionLevel by 1
+ \begin{list}{}{\leftmargin \subQuestionIndent
+ \partopsep0pt \parsep\parskip \topsep \subQuestionBefore
+ \itemsep \subQuestionBefore \labelwidth 2em
+ \labelsep .33em
+ \usecounter{subQuestion}}
+ \if@echapq
+ \setcounter{subQuestion}{\value{savedsubQuestion}}%
+ \global\@echapqfalse
+ \fi
+ \refstepcounter{subQuestion}
+ \@restoremathindent
+ \@decalemathindent{\subQuestionIndent}
+ \@subQuestionHeader
+ \else
+ \ifnum\@QuestionLevel=3
+ \refstepcounter{subQuestion}
+ \@subQuestionHeader
+ \else
+ \ifnum\@QuestionLevel>3
+ \termineliste{3}
+ \refstepcounter{subQuestion}
+ \@subQuestionHeader
+ \else
+ \PackageError{exercise}{You don't respect the hierarchy of
+ subQuestion}{Verify the subQuestion}
+ \fi
+ \fi
+ \fi
+}
+%
+\def\subsubQuestionTitle{}
+\newif\if@subsubQuestionTitle\@subsubQuestionTitlefalse
+\global\newcount\subsubQuestionDifficulty\subsubQuestionDifficulty=0
+\newif\if@subsubQuestionDifficulty\@subsubQuestionDifficultyfalse
+%
+\define@key{PPsubsubQuestion}{title}{%
+\gdef\subsubQuestionTitle{#1}\global\@subsubQuestionTitletrue}
+\define@key{PPsubsubQuestion}{difficulty}{%
+\global\@subsubQuestionDifficultytrue%
+\global\subsubQuestionDifficulty=\number#1}
+%
+\def\@InitsubsubQuestion{\gdef\subsubQuestionTitle{}%
+\global\subsubQuestionDifficulty=0%
+\global\@subsubQuestionTitlefalse%
+\global\@subsubQuestionDifficultyfalse}
+%
+\def\@getsubsubQuestionInfo{%
+\if@subsubQuestionTitle\else\def\subsubQuestionHeaderTitle{}\fi
+\if@subsubQuestionDifficulty\else\def\subsubQuestionHeaderDifficulty{}\fi
+}
+%
+\def\EndCurrentsubsubQuestion{\termineliste{3}}
+\def\subsubQuestion{\@InitsubsubQuestion%
+\@ifnextchar[\@@subsubQuestion{\@@subsubQuestion[]}}%]
+\def\@@subsubQuestion[#1]{\setkeys{PPsubsubQuestion}{#1}\@@@subsubQuestion}
+%
+\def\@subsubQuestionHeader{\item[{\makebox[0cm][r]%
+{\begingroup\@getsubsubQuestionInfo\subsubQuestionHeaderDifficulty%
+\subsubQuestionNB\endgroup}}]%
+\begingroup\@getsubsubQuestionInfo\subsubQuestionHeaderTitle\endgroup%
+\ignorespaces}
+\newcommand{\@@@subsubQuestion}{%
+ \ifnum\@QuestionLevel=3
+ \advance \@QuestionLevel by 1
+ \begin{list}{}{\leftmargin \subsubQuestionIndent
+ \partopsep0pt \parsep\parskip \topsep \subsubQuestionBefore
+ \itemsep \subsubQuestionBefore \labelwidth 2em
+ \labelsep .33em
+ \usecounter{subsubQuestion}}
+ \if@echapq
+ \setcounter{subsubQuestion}{\value{savedsubsubQuestion}}%
+ \global\@echapqfalse
+ \fi
+ \refstepcounter{subsubQuestion}
+ \@restoremathindent
+ \@decalemathindent{\subsubQuestionIndent}
+ \@subsubQuestionHeader
+ \else
+ \ifnum\@QuestionLevel=4
+ \refstepcounter{subsubQuestion}
+ \@subsubQuestionHeader
+ \else
+ \ifnum\@QuestionLevel>4
+ \termineliste{4}
+ \refstepcounter{subsubQuestion}
+ \@subsubQuestionHeader
+ \else
+ \PackageError{exercise}{You don't respect the hierarchy of
+ subsubQuestion}{Verify the subsubQuestion}
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{ Presentation of part (within an exercise)}
+% \begin{macrocode}
+\newif\if@ExePartStared \@ExePartStaredfalse
+\newif\if@ExePartTitle \@ExePartTitlefalse
+\newif\if@ExePartReName \@ExePartReNamefalse
+\newif\if@ExePartDifficulty \@ExePartDifficultyfalse
+\global\newcount\ExePartDifficulty \ExePartDifficulty=0
+%
+\def\theExePartDifficulty{\marker{\DifficultyMarker}{\ExePartDifficulty}}
+%
+\def\@InitExePart{\global\@echapqfalse%
+\gdef\ExePartTitle{}%
+\gdef\@ExePartName{}%
+\global\ExePartDifficulty=0%
+\global\@ExePartTitlefalse%
+\global\@ExePartReNamefalse%
+\global\@ExePartDifficultyfalse%
+\setcounter{Question}{0}\termineliste{1}}
+%
+\define@key{PPExePart}{title}{\gdef\ExePartTitle{#1}%
+\global\@ExePartTitletrue}
+\define@key{PPExePart}{name}{\gdef\@ExePartName{#1}%
+\global\@ExePartReNametrue}
+\define@key{PPExePart}{difficulty}{\global\@ExePartDifficultytrue%
+\global\ExePartDifficulty=\number#1}
+%
+\def\@getExePartInfo{%
+\if@ExePartReName\def\ExePartName{\@ExePartName}\fi
+\if@ExePartTitle\else\def\ExePartHeaderTitle{}\fi
+\if@ExePartDifficulty\else\def\ExePartHeaderDifficulty{}\fi
+\if@ExePartStared\def\ExePartHeaderNB{}\fi
+}
+%
+\def\ExePart{\@InitExePart\@ifstar{\global\@ExePartStaredtrue\@ExePart}%
+{\global\@ExePartStaredfalse\@ExePart}}
+%
+\def\@ExePart{\@ifnextchar[\@@ExePart{\@@ExePart[]}}%] for emacs
+%
+\def\@@ExePart[#1]{\setkeys{PPExePart}{#1}\@@@ExePart}
+%
+\newcommand{\@@@ExePart}{%
+ \if@ExePartStared\else\refstepcounter{ExePart}\fi
+ \begingroup\@getExePartInfo\@ExePartHeader\endgroup}
+%
+% \end{macrocode}
+% \subsubsection{Presentation of answers}
+% \begin{macrocode}
+\newbox\@Answerbox
+%
+%\changes{v1.3}{2009/03/26}{Header of answers are now correct.}
+%
+\newcommand{\AnswerHeader}{\medskip\centerline{\textbf{\AnswerName\ %
+ \ExerciseHeaderNB}\smallskip}}
+%
+\newcommand{\AnswerListHeader}{\textbf{\AnswerListName\
+ (\ExerciseListName\ \ExerciseHeaderNB)\ ---\ }}
+%
+% The commands for <Exercise> environment
+%
+\def\@InitAnswer{\@savemathindent\global\@echapqfalse%
+\gdef\AnswerRef{}%
+\global\@AnswerReffalse%
+\gdef\AnswerNB{}%
+\global\@AnswerNBfalse%
+\setcounter{ExePart}{0}%
+\setcounter{Question}{0}}
+%
+\def\@getAnswerInfo{%
+\if@AnswerRef%
+\def\theExercise{\ref{\AnswerRef}}%
+\refstepcounter{Answer}%
+\recordExerciseLabel{\AnswerRef-Answer}%
+\else
+\if@AnswerNB
+\def\ExerciseTitle{}%
+\def\ExerciseName{}%
+\def\ExerciseOrigin{}%
+\def\ExerciseType{}%
+\ExerciseDifficulty=0%
+\def\theExercise{\AnswerNB}%
+\else
+\if@AswLastExe
+\else
+\PackageWarning{Exercise}%
+{An answer has no reference and no number}{}%
+\def\AnswerHeaderRef{\AnswerName\ ???}%
+\def\AnswerListHeaderRef{\AnswerName\ ???}%
+\fi\fi\fi}
+%
+\newif\if@AnswerRef \@AnswerReffalse
+\newif\if@AnswerNB \@AnswerNBfalse
+%
+\define@key{PPAnswer}{ref}{\global\@AnswerReftrue\gdef\AnswerRef{#1}}
+\define@key{PPAnswer}{number}{\global\@AnswerNBtrue\gdef\AnswerNB{#1}}
+%
+\def\beginAnswerEnv{\@InitAnswer\@ifnextchar[\@@AnswerEnv{\@@AnswerEnv[]}}%]
+%
+\def\@@AnswerEnv[#1]{\setkeys{PPAnswer}{#1}%
+\global\@Answertrue\@selectAnswer\@BeginExeBox\@@@AnswerEnv}
+%
+\newcommand{\@@@AnswerEnv}{%
+ \pagebreak[1]\vskip\AnswerSkipBefore\@QuestionLevel1
+ \begingroup\@getAnswerInfo\AnswerHeader\endgroup\AtBeginAnswer}
+%
+\gdef\endAnswerEnv{\termineliste{1}\@EndExeBox\termineliste{0}\vskip\AnswerSkipAfter}
+%
+\newenvironment{Answer}{}{}
+\gdef\defineAnswerEnv{
+ \gdef\@AnswerHeaderRef{\AnswerHeader}
+ \renewenvironment{Answer}{\beginAnswerEnv}{\endAnswerEnv}}
+%
+\defineAnswerEnv
+%
+\def\AnswerCmd{\@InitAnswer\@ifnextchar[\@@AnswerCmd{\@@AnswerCmd[]}}
+%
+\def\@@AnswerCmd[#1]{\setkeys{PPAnswer}{#1}\@@@AnswerCmd}
+%
+\newcommand{\@@@AnswerCmd}{%
+ \ifnum\@QuestionLevel=0
+ \advance \@QuestionLevel by 1
+ \begin{list}{}{\partopsep\Exepartopsep \labelsep\Exelabelsep
+ \itemsep \Exesep \parsep\Exeparsep
+ \topsep\Exetopsep \labelwidth\Exelabelwidth
+ \leftmargin\Exeleftmargin
+ \rightmargin\Exerightmargin }
+%% \refstepExecounter
+ \else
+ \termineliste{1}\@EndExeBox
+ \fi
+ \global\@Answertrue\@selectAnswer\@BeginExeBox%
+ \item[\bgroup\@getAnswerInfo\AnswerListHeader\egroup]\AtBeginAnswer\ignorespaces
+}
+%
+\def\defineAnswerCmd{\gdef\@AnswerHeaderRef{\AnswerListHeader}%
+\def\Answer{\AnswerCmd}}
+% \end{macrocode}
+% \subsubsection{Exercises selection}
+%
+%\changes{v1.4}{2010/08/27}{Exercises selection completly review.}
+%
+% \begin{macrocode}
+
+
+\newif\if@ShipThisExercise \@ShipThisExercisetrue
+\newif\if@@ShipThisExercise \@@ShipThisExercisetrue
+\newif\if@ExerciseSelected \@ExerciseSelectedtrue
+\newif\if@ShipThisAnswer \@ShipThisAnswertrue
+\newif\if@@ShipThisAnswer \@@ShipThisAnswertrue
+\newif\if@ExeSelectExam \@ExeSelectExamfalse
+\newif\if@ExeSelectYear \@ExeSelectYearfalse
+\newif\if@ExeSelectDifficulty \@ExeSelectDifficultyfalse
+\newif\if@ExeSelectOrigin \@ExeSelectOriginfalse
+\newif\if@ExeSelectClass \@ExeSelectClassfalse
+\newif\if@ExeSelectType \@ExeSelectTypefalse
+\newif\if@ExeSelectLabel \@ExeSelectLabelfalse
+
+\define@key{PPExerciseSelect}{exam}%
+{\global\@ExeSelectExamtrue\gdef\ExerciseSelectExam{#1}}
+\define@key{PPExerciseSelect}{year}%
+{\global\@ExeSelectYeartrue\gdef\ExerciseSelectYear{#1}}
+\define@key{PPExerciseSelect}{difficulty}%
+{\global\@ExeSelectDifficultytrue\gdef\ExerciseSelectDifficulty{#1}}
+\define@key{PPExerciseSelect}{type}%
+{\global\@ExeSelectTypetrue\gdef\ExerciseSelectType{#1}}
+\define@key{PPExerciseSelect}{origin}%
+{\global\@ExeSelectOrigintrue\gdef\ExerciseSelectOrigin{#1}}
+\define@key{PPExerciseSelect}{class}%
+{\global\@ExeSelectClasstrue\gdef\ExerciseSelectClass{#1}}
+\define@key{PPExerciseSelect}{label}%
+{\global\@ExeSelectLabeltrue\gdef\ExerciseSelectLabel{#1}}
+
+\newcommand{\ExerciseStopSelect}{
+ \@ExeSelectExamfalse
+ \@ExeSelectYearfalse
+ \@ExeSelectDifficultyfalse
+ \@ExeSelectTypefalse
+ \@ExeSelectOriginfalse
+ \@ExeSelectClassfalse
+ \@ExeSelectLabelfalse
+ \@ExeSelectTypefalse
+}
+
+\newcommand{\ExerciseSelect}{\@ifstar{\global\@ExerciseSelectedfalse\@ExerciseSelect}{\global\@ExerciseSelectedtrue\@ExerciseSelect}}
+\newcommand{\@ExerciseSelect}[1][]{\setkeys{PPExerciseSelect}{#1}}
+
+\def\@selectExercise{%
+ \global\@ShipThisExercisetrue
+ \global\@@ShipThisExercisefalse
+ \if@ExeSelectExam
+ \@for\@exam:=\ExerciseSelectExam\do
+ {\ifthenelse{\equal{\@exam}{\ExerciseExam}}{
+ \global\@@ShipThisExercisetrue
+ }{}
+ }
+ \if@@ShipThisExercise\else\@ShipThisExercisefalse\fi
+ \global\@@ShipThisExercisefalse
+ \fi
+ %
+ \if@ExeSelectYear
+ \@for\@year:=\ExerciseSelectYear\do
+ { \ifthenelse{\equal{\@year}{\ExerciseYear}}{
+ \global\@@ShipThisExercisetrue
+ }{}
+ }
+ \if@@ShipThisExercise\else\@ShipThisExercisefalse\fi
+ \global\@@ShipThisExercisefalse
+ \fi
+ %
+ \if@ExeSelectDifficulty
+ \@for\@difficulty:=\ExerciseSelectDifficulty\do
+ { \ifthenelse{\equal{\@difficulty}{\ExerciseDifficulty}}{
+ \global\@@ShipThisExercisetrue
+ }{}
+ }
+ \if@@ShipThisExercise\else\@ShipThisExercisefalse\fi
+ \global\@@ShipThisExercisefalse
+ \fi
+ %
+ \if@ExeSelectOrigin
+ \@for\@origin:=\ExerciseSelectOrigin\do
+ { \ifthenelse{\equal{\@origin}{\ExerciseOrigin}}{
+ \global\@@ShipThisExercisetrue
+ }{}
+ }
+ \if@@ShipThisExercise\else\@ShipThisExercisefalse\fi
+ \global\@@ShipThisExercisefalse
+ \fi
+ %
+ \if@ExeSelectClass
+ \@for\@origin:=\ExerciseSelectClass\do
+ { \ifthenelse{\equal{\@origin}{\ExerciseClass}}{
+ \global\@@ShipThisExercisetrue
+ }{}
+ }
+ \if@@ShipThisExercise\else\@ShipThisExercisefalse\fi
+ \global\@@ShipThisExercisefalse
+ \fi
+ %
+ \if@ExeSelectLabel
+ \@for\@label:=\ExerciseSelectLabel\do
+ { \ifthenelse{\equal{\@label}{\ExerciseLabel}}{
+ \global\@@ShipThisExercisetrue
+ }{}
+ }
+ \if@@ShipThisExercise\else\@ShipThisExercisefalse\fi
+ \global\@@ShipThisExercisefalse
+ \fi
+ %
+ \if@ExeSelectType
+ \@for\@type:=\ExerciseSelectType\do
+ { \ifthenelse{\equal{\@type}{\ExerciseType}}{
+ \global\@@ShipThisExercisetrue
+ }{}
+ }
+ \if@@ShipThisExercise\else\@ShipThisExercisefalse\fi
+ \global\@@ShipThisExercisefalse
+ \fi
+ \if@ExerciseSelected\else\if@ShipThisExercise\global\@ShipThisExercisefalse\else\global\@ShipThisExercisetrue\fi\fi
+}
+\def\@selectAnswer{%
+ \global\@ShipThisAnswertrue
+ \global\@@ShipThisAnswerfalse
+ %
+ \if@ExeSelectLabel
+ \@for\@label:=\ExerciseSelectLabel\do
+ { \ifthenelse{\equal{\@label}{\AnswerRef}}{
+ \global\@@ShipThisAnswertrue
+ }{}
+ }
+ \if@@ShipThisAnswer\else\@ShipThisAnswerfalse\fi
+ \global\@@ShipThisAnswerfalse
+ \fi
+ \if@ExerciseSelected\else\if@ShipThisAnswer\global\@ShipThisAnswerfalse\else\global\@ShipThisAnswertrue\fi\fi
+}
+% \end{macrocode}
+% \subsubsection{Some extra stuff}
+% \begin{macrocode}
+\newcommand{\ExeText}{\setcounter{savedQuestion}{\value{Question}}%
+\termineliste{1}\@echapqtrue}
+% \end{macrocode}
+% \subsubsection{Secret stuff}
+% \begin{macrocode}
+%
+% Il est possible de présenter un niveau de sectionnement sur
+% deux colonnes avec la commande \colonnesLevel
+%
+\newcount\colonnesLevel \colonnesLevel=-10
+\newskip\tempskipa
+\newskip\tempskipb
+\def\deuxcolonnes{\tempskipa=\multicolsep\colonnesLevel=\@QuestionLevel
+\ifcase\@QuestionLevel \multicolsep=\QuestionBefore %
+\or
+\multicolsep=\subQuestionBefore\or\multicolsep=\subsubQuestionBefore\fi%
+\begin{multicols}{2}}
+%
+% Tenir compte de l'option fleqn
+%
+\@ifundefined{if@fleqn}{\newif\if@fleqn\@fleqnfalse}{}
+%
+\newlength{\@savedmathindent}
+\newcommand{\@savemathindent}{\relax}
+\newcommand{\@decalemathindent}[1]{\relax}
+\newcommand{\@restoremathindent}{\relax}
+\if@fleqn %
+ \renewcommand{\@savemathindent}{\setlength{\@savedmathindent}{\mathindent}}
+ \renewcommand{\@decalemathindent}[1]{\addtolength{\mathindent}{#1}}
+ \renewcommand{\@restoremathindent}{\setlength{\mathindent}{\@savedmathindent}}
+\else
+ \renewcommand{\@savemathindent}{\relax}
+ \renewcommand{\@decalemathindent}[1]{\relax}
+ \renewcommand{\@restoremathindent}{\relax}
+\fi
+% \end{macrocode}
+% \subsection{The \texttt{\textbackslash renewcounter} command}
+% This commands is the equivalent of the well--known |\renewcommand|,
+% but for counter. It allows you to redefine the |Exercise| counter,
+% in order to reset it at each chapter (for example).
+% \begin{macrocode}
+\def\renewcounter#1{%
+ \@ifundefined{c@#1}
+ {\@latex@error{counter #1 undefined}\@ehc}%
+ \relax
+ \let\@ifdefinable\@rc@ifdefinable
+ \@ifnextchar[{\@newctr{#1}}{}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\ext@exercise{loe}
+\newcommand{\ExerciseLevelInToc}[1]{\def\toc@exercise{#1}}
+\ExerciseLevelInToc{exercise}
+\newcommand{\ListOfExerciseInToc}{\def\ext@exercise{toc}\ExerciseLevelInToc{paragraph}}
+\newcommand\listofexercises{%
+ \section*{\listexercisename}%
+ \@mkboth{\MakeUppercase\listexercisename}%
+ {\MakeUppercase\listexercisename}%
+ \@starttoc{\ext@exercise}%
+}
+\newcommand*\l@exercise{\@dottedtocline{2}{1.5em}{2.3em}}
+% \end{macrocode}
+
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/exercise/exercise.ins b/macros/latex/contrib/exercise/exercise.ins
new file mode 100644
index 0000000000..c2a5b09dcd
--- /dev/null
+++ b/macros/latex/contrib/exercise/exercise.ins
@@ -0,0 +1,66 @@
+%% Copyright (C) 2003 by Paul Pichaureau
+%%
+%% This program is free software; you can redistribute it and/or
+%% modify it under the terms of the GNU General Public License
+%% as published by the Free Software Foundation; either version 2
+%% of the License, or (at your option) any later version.
+%%
+%% This program is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this program; if not, write to the Free Software
+%% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%% Public LaTeX Project Public
+
+\input docstrip.tex
+
+%\keepsilent
+
+\usedir{tex/latex/exercise}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2003 by Paul Pichaureau
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+Public LaTeX Project Public
+
+\endpreamble
+
+\generate{\file{exercise.sty}{\from{exercise.dtx}{package}}}
+
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space exercise.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file exercise.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Don't forget to produce Index and Change History with}
+\Msg{* makeindex -s gind.ist -o exercise.ind exercise.idx}
+\Msg{* makeindex -s gglo.ist -o exercise.gls exercise.glo}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+
+\endbatchfile \ No newline at end of file
diff --git a/macros/latex/contrib/exercise/exercise.pdf b/macros/latex/contrib/exercise/exercise.pdf
new file mode 100644
index 0000000000..b3792cdaa6
--- /dev/null
+++ b/macros/latex/contrib/exercise/exercise.pdf
Binary files differ