%% This is a slightly older version of exercise.sty; hacked to add commands %% AnswerBoxSectionMark and AnswerBoxExecute, and some other mods %% The newer version of exercise.sty breaks the type-setting, and it's not worth trying to fix it! %% %% This is file `exercise.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% exercise.dtx (with options: `package') %% %% 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 %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{utils/exercise} [2004/09/05 v1.1 Exercise package (P.Pichaureau)] %% \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 \~} %% \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} {\@ExerciseOutputfalse} \DeclareOption{noexercise} {\@ExerciseOutputfalse} \DeclareOption{exerciseonly} {\@AnswerOutputfalse} \DeclareOption{outputnothing}{\@ExerciseOutputfalse\@AnswerOutputfalse} \DeclareOption{exercisedelayed}{\@ExerciseDelaytrue} \DeclareOption{answerdelayed}{\@AnswerDelaytrue} \DeclareOption{lastexercise} {\@AswLastExetrue} \newif\if@ShowLabel \@ShowLabelfalse \DeclareOption{showlabel} {\@ShowLabeltrue} \ProcessOptions \RequirePackage{keyval, ifthen} \def\ExerciseName{Exercise}% \def\AnswerName{Answer}% \def\ExerciseListName{Ex.}% \def\AnswerListName{Answer}% \def\ExePartName{Part}% \@ifpackageloaded{babel}{ \addto{\captionsfrenchb}{ \def\ExerciseName{Exercice}% \def\AnswerName{Solution}% \def\ExerciseListName{Ex.}% \def\AnswerListName{Sol.}% \def\ExePartName{Partie}% }}{} \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} \newcounter{Exercise} \gdef\@ExerciseCounter{Exercise} %default exercise counter \newcounter{ExePart}[Exercise] \newcounter{Question}[Exercise] \newcounter{subQuestion}[Question] \newcounter{subsubQuestion}[subQuestion] \renewcommand{\theExercise}{\arabic{\@ExerciseCounter}} \renewcommand{\theExePart}{\Roman{ExePart}} \renewcommand{\theQuestion}{\arabic{Question}} \renewcommand{\thesubQuestion}{\alph{subQuestion}} \renewcommand{\thesubsubQuestion}{\roman{subsubQuestion}} \newcounter{savedQuestion} \newcounter{savedsubQuestion} \newcounter{savedsubsubQuestion} \def\marker#1#2{\@tempcnta#2\whiledo{\@tempcnta>0}{#1\advance \@tempcnta by -1 }} \def\DifficultyMarker{*} \newcommand{\ExerciseHeaderTitle}{\qquad \ExerciseTitle} \newcommand{\ExerciseHeaderDifficulty}{\theExerciseDifficulty\ } \newcommand{\ExerciseHeaderOrigin}{% \ ({\usefont{\encodingdefault}{\rmdefault}{m}{it}\ExerciseOrigin})} \newcommand{\ExerciseHeaderNB}{\ \theExercise} \newcommand{\ExerciseHeaderLabel}{\fbox{\textsc{\ExerciseLabel}}} \newcommand{\ExerciseHeader}{\centerline{% \textbf{\large\ExerciseHeaderDifficulty\ExerciseName% \ExerciseHeaderNB\ExerciseHeaderTitle\ExerciseHeaderOrigin}}\medskip} \newcommand{\ExerciseListHeader}{\ExerciseHeaderDifficulty% \textbf{\ExerciseListName\ExerciseHeaderNB% \ --- \ \ExerciseHeaderTitle}% \ExerciseHeaderOrigin\ignorespaces} \newcommand{\ExePartHeaderNB}{\ \theExePart} \newcommand{\ExePartHeaderTitle}{\quad --- \quad {\ExePartTitle}} \newcommand{\ExePartHeaderDifficulty}{\theExePartDifficulty\ } \newcommand{\ExePartHeader}{% \medskip\centerline{\emph{\large\ExePartHeaderDifficulty\ExePartName% \ExePartHeaderNB\ExePartHeaderTitle}}} \newcommand{\ExePartListHeader}{\bigskip% \emph{\ExePartHeaderDifficulty\ExePartName% \ExePartHeaderNB\ExePartHeaderTitle}\par\medskip} \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}} \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} \newif\if@ExeTitle \@ExeTitlefalse \newif\if@ExeReName \@ExeReNamefalse \global\newcount\ExerciseDifficulty \ExerciseDifficulty=0 \newif\if@ExeDifficulty \@ExeDifficultyfalse \newif\if@ExeOrigin \@ExeOriginfalse \newif\if@ExeLabel \@ExeLabelfalse \newif\if@ExeNB \@ExeNBfalse \def\theExerciseDifficulty{\marker{\DifficultyMarker}{\ExerciseDifficulty}} \define@key{PPExercise}{title}% {\global\@ExeTitletrue\gdef\ExerciseTitle{\string#1}} \define@key{PPExercise}{difficulty}% {\global\@ExeDifficultytrue\global\ExerciseDifficulty=\number#1} \define@key{PPExercise}{name}% {\global\@ExeReNametrue\gdef\@ExerciseName{\string#1}} \define@key{PPExercise}{origin}% {\global\@ExeOrigintrue\gdef\ExerciseOrigin{#1}} \define@key{PPExercise}{counter}% {\gdef\@ExerciseCounter{\string#1}} \define@key{PPExercise}{label}% {\global\@ExeLabeltrue\gdef\ExerciseLabel{\string#1}\gdef\ExerciseTrueLabel{#1}} \define@key{PPExercise}{number}% {\global\@ExeNBtrue\gdef\ExerciseLocalNB{\string#1}} %% \define@key{PPExercise}{domain}{} %% \define@key{PPExercise}{sdomain}{} %% \define@key{PPExercise}{keyword}{} \newif\if@ExeStared \newif\if@staredpb \newif\if@staredpart \newif\if@renamepart \@ExeStaredfalse \@staredpbfalse \@staredpartfalse \@renamepartfalse \def\@InitExe{\@savemathindent\global\@echapqfalse% \gdef\ExerciseTitle{}% \gdef\@ExerciseName{}% \gdef\ExerciseOrigin{}% \gdef\ExerciseTrueLabel{}% \global\ExerciseDifficulty=0% \global\@ExeTitlefalse% \global\@ExeReNamefalse% \global\@ExeDifficultyfalse% \global\@ExeOriginfalse% \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@ExeOrigin\else\def\ExerciseHeaderOrigin{}\fi% \if@ExeLabel\else\def\ExerciseHeaderLabel{}\fi% \if@ExeDifficulty\else\def\ExerciseHeaderDifficulty{}\fi% \if@ExeStared\def\ExerciseHeaderNB{}\fi% \if@ExeNB\def\theExercise{\ExerciseLocalNB}\fi% \if@ExeLabel\label{\ExerciseLabel}\recordExerciseLabel{\ExerciseLabel}\fi% } \def\refstepExecounter{\if@ExeStared\else\if@ExeNB\else% \refstepcounter{\@ExerciseCounter}\fi\fi} \def\recordExerciseLabel#1{\@bsphack \protected@write\@auxout{}% {\string\newlabel{PP#1}{{\@AnswerHeaderRef}{\thepage}}}% \@esphack} \def\@BeginExeBox{\global\setbox\@Exercisebox\vbox\bgroup} \def\@EndExeBox{\egroup\if@Answer\if@AnswerOutput\@DelayAnswerBox\fi% \else\if@ExerciseOutput\@DelayExerciseBox\fi\fi} \def\AnswerBoxSectionMark#1{% \global\setbox\temp@Answerbox% \vbox{\unvbox\all@Answerbox\vskip\Exesep% \section*{\vspace*{.5em}\hrule\hrule\vspace*{.5em}\hspace*{-\parindent}#1\vspace*{.5em}\hrule\hrule\markboth{#1}{}}% \unvbox\@Exercisebox\vskip\z@}% \global\setbox\all@Answerbox\copy\temp@Answerbox% } \def\AnswerBoxExecute#1{% \global\setbox\temp@Answerbox% \vbox{\unvbox\all@Answerbox#1\unvbox\@Exercisebox}% \global\setbox\all@Answerbox\copy\temp@Answerbox% } \def\@DelayAnswerBox{% \if@ShipThisExercise\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\vskip\Exesep\unvbox\@Exercisebox\fi\fi} \newcommand{\shipoutAnswer}{\if@AnswerOutput\unvbox\all@Answerbox\fi} \newcommand{\shipoutExercise}{\if@ExerciseOutput\unvbox\all@Exercisebox\fi} \def\beginExerciseEnv{\@InitExe\@ifnextchar[\@@ExeEnv{\@@ExeEnv[]}}%] \def\@@ExeEnv[#1]{\setkeys{PPExercise}{#1}% \global\@Answerfalse\@BeginExeBox\@@@ExeEnv} \newcommand{\@@@ExeEnv}{% \@selectExercise{\ExerciseTrueLabel} \@QuestionLevel1 \refstepExecounter \begingroup\@getExerciseInfo\ExerciseHeader\endgroup} \def\endExerciseEnv{\termineliste{1}\@EndExeBox} \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{\ExerciseTrueLabel} \global\@Answerfalse\@BeginExeBox\refstepExecounter% \item\ignorespaces } \def\defineExePartInEnv{\def\@ExePartHeader{\ExePartHeader}} \def\defineExePartInList{\def\@ExePartHeader{\ExePartListHeader}} \def\defineExerciseEnv{% \defineExePartInEnv \renewenvironment{Exercise}{\global\beginExerciseEnv}% {\@ExeStaredfalse\endExerciseEnv} \renewenvironment{Exercise*}{\global\@ExeStaredtrue\beginExerciseEnv}% {\@ExeStaredfalse\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} \def\QuestionTitle{} \newif\if@QuestionTitle \@QuestionTitlefalse \global\newcount\QuestionDifficulty \QuestionDifficulty=0 \newif\if@QuestionDifficulty \@QuestionDifficultyfalse \define@key{PPQuestion}{title}{% \global\@QuestionTitletrue\gdef\QuestionTitle{\string#1}} \define@key{PPQuestion}{difficulty}{% \global\@QuestionDifficultytrue\global\QuestionDifficulty=\number#1} \def\@InitQuestion{\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 .5em \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 } \def\subQuestionTitle{} \newif\if@subQuestionTitle\@subQuestionTitlefalse \global\newcount\subQuestionDifficulty\subQuestionDifficulty=0 \newif\if@subQuestionDifficulty\@subQuestionDifficultyfalse \define@key{PPsubQuestion}{title}{% \gdef\subQuestionTitle{\string#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 .5em \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{\string#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 .5em \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 } \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{\string#1}% \global\@ExePartTitletrue} \define@key{PPExePart}{name}{\gdef\@ExePartName{\string#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} \newbox\@Answerbox %% \newcommand{\AnswerHeaderRef}{Answer of \ExerciseName\ \theExercise} %% \newcommand{\AnswerListHeaderRef}{Answer (ex.\ \theExercise)\ ---\ } \newcommand{\AnswerHeader}{\medskip\centerline{\textbf{Answer of \ExerciseName \ExerciseHeaderNB}\smallskip}} \newcommand{\AnswerListHeader}{\textbf{Answer (ex.\ \ExerciseHeaderNB)\ ---\ }} \def\@InitAnswer{\@savemathindent\global\@echapqfalse% \gdef\AnswerRef{}% \global\@AnswerReffalse% \gdef\AnswerNB{}% \global\@AnswerNBfalse% \setcounter{ExePart}{0}% \setcounter{Question}{0}} \def\@getAnswerInfo{% \if@AnswerRef% \def\AnswerHeader{\ref{PP\AnswerRef}}% \def\AnswerListHeader{\ref{PP\AnswerRef}}% \else \if@AnswerNB \def\ExerciseTitle{} \def\ExerciseName{} \def\ExerciseOrigin{} \ExerciseDifficulty=0 \def\theExercise{\AnswerNB} \else \if@AswLastExe \else \PackageWarning{Exercise}% {A 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{\string#1}} \define@key{PPAnswer}{number}{\global\@AnswerNBtrue\gdef\AnswerNB{\string#1}} \def\beginAnswerEnv{\@InitAnswer\@ifnextchar[\@@AnswerEnv{\@@AnswerEnv[]}}%] \def\@@AnswerEnv[#1]{\setkeys{PPAnswer}{#1}% \global\@Answertrue\@BeginExeBox\@@@AnswerEnv} \newcommand{\@@@AnswerEnv}{% \@QuestionLevel1 \begingroup\@getExerciseInfo\@getAnswerInfo\AnswerHeader\endgroup} \def\endAnswerEnv{\termineliste{1}\@EndExeBox} \newenvironment{Answer}{}{} \def\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\@BeginExeBox% \item[\bgroup\@getAnswerInfo\AnswerListHeader\egroup]\ignorespaces } \def\defineAnswerCmd{\gdef\@AnswerHeaderRef{\AnswerListHeader}% \gdef\Answer{\AnswerCmd}} \newif\if@ExerciseSelected\@ExerciseSelectedfalse \newif\if@ExerciseNoLabelSelected\@ExerciseNoLabelSelectedtrue \newif\if@ExerciseOmitted\@ExerciseOmittedfalse \newif\if@ShipThisExercise\@ShipThisExercisetrue \newcommand{\ExerciseStartSelectNoLabel}{\@ExerciseNoLabelSelectedtrue} \newcommand{\ExerciseStopSelectNoLabel}{\@ExerciseNoLabelSelectedfalse} \newcommand{\ExerciseStopSelect}{\@ExerciseSelectedfalse} \newcommand{\ExerciseStartSelect}{\@ExerciseSelectedtrue\@ifstar{\@ExerciseOmittedtrue\def@ListOfExercise}{\@ExerciseOmittedfalse\def@ListOfExercise}} \def\def@ListOfExercise#1{\gdef\@ListOfExercise{#1}} \def\@selectExercise#1{% \ifx#1\@empty \if@ExerciseNoLabelSelected \global\@ShipThisExercisetrue \else \global\@ShipThisExercisefalse \fi \else \if@ExerciseSelected \global\@ShipThisExercisefalse \@for\@label:=\@ListOfExercise\do { \ifthenelse{\equal{\@label}{#1}}{ \message{[\@label = #1] OK !!!} \global\@ShipThisExercisetrue }{} } \if@ExerciseOmitted \if@ShipThisExercise \global\@ShipThisExercisefalse \else \global\@ShipThisExercisetrue \fi \fi \fi \fi } \newcommand{\ExeText}{\setcounter{savedQuestion}{\value{Question}}% \termineliste{1}\@echapqtrue} \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}} \@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 \def\renewcounter#1{% \@ifundefined{c@#1} {\@latex@error{counter #1 undefined}\@ehc}% \relax \let\@ifdefinable\@rc@ifdefinable \@ifnextchar[{\@newctr{#1}}{}} \endinput %% %% End of file `exercise.sty'.