% \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
