\NeedsTeXFormat{LaTeX2e}
 
\ProvidesClass{remixExam}
 
% classe de base
 
\LoadClassWithOptions{exam}
 
% extensions
 
\RequirePackage{/media/documents/Cours/Prof/Enseignements/2016-2017/tools/style/base}
\RequirePackage{/media/documents/Cours/Prof/Enseignements/2016-2017/tools/style/none_beamer}
\RequirePackage{/media/documents/Cours/Prof/Enseignements/2016-2017/tools/style/theme}
\RequirePackage{xifthen}
%\RequirePackage{etoolbox}
\RequirePackage{pdftexcmds}

% Generalites

% géométrie
\RequirePackage{geometry}
\geometry{left=20mm,right=20mm, top=15mm, bottom=20mm}

% Calculatrice
\newcommand{\noCalc}{{\centering \textbf{Calculatrice interdite} \par}}
\newcommand{\Calc}{{\centering \textbf{Calculatrice autorisée} \par}}

% Custumisation de la class Exam

%% Document informations
\newcommand{\op@entete}{}
\newcommand{\op@soustitre}{\op@classe{} -- \@date{}}
\newcommand{\op@typedoctmp}{}
\newcommand{\op@typedoc}{}
\newcommand{\op@classe}{}
\newcommand{\op@titre}{}
\newcommand{\op@duree}{}
\newcommand{\op@sujet}{}
\newcommand{\op@ptpres}{0}

\newcommand{\classe}[1]{\renewcommand{\op@classe}{#1}}
\newcommand{\titre}[1]{\renewcommand{\op@titre}{#1}}
\newcommand{\duree}[1]{\renewcommand{\op@duree}{#1}}
\newcommand{\sujet}[1]{\renewcommand{\op@sujet}{Sujet #1}}
\newcommand{\ptpres}[1]{\renewcommand{\op@ptpres}{#1}}
\newcommand{\typedoc}[1]{\renewcommand{\op@typedoctmp}{#1}
    %DS
    \ifthenelse{\equal{\op@typedoctmp}{DS}}%
        {\renewcommand{\op@typedoc}{Devoir surveillé: }
        \renewcommand{\op@soustitre}{\op@classe{} -- \@date{} -- Durée : \op@duree}%
        \renewcommand{\op@entete}{\@date}}{}        
    %Correction DS
    \ifthenelse{\equal{\op@typedoctmp}{DSCorr}}%
        {\renewcommand{\op@typedoc}{Devoir surveillé (correction): }
        \renewcommand{\op@soustitre}{\op@classe{} -- \@date{} -- Correction}%
        \renewcommand{\op@entete}{\@date}}{}        
    % Devoir maison
    \ifthenelse{\equal{\op@typedoctmp}{DM}}%
        {\renewcommand{\op@typedoc}{Devoir maison: }
        \renewcommand{\op@soustitre}{\op@classe{} -- À rendre le \@date}%
        \renewcommand{\op@entete}{À rendre le \@date}}{} 
    % Correction devoir maison
    \ifthenelse{\equal{\op@typedoctmp}{DMCorr}}%
        {\renewcommand{\op@typedoc}{Devoir maison (correction): }
        \renewcommand{\op@soustitre}{\op@classe{} -- \@date{} -- Correction}%
        \renewcommand{\op@entete}{\@date}}{}        
    % Examen
    \ifthenelse{\equal{\op@typedoctmp}{other}}%
        {\renewcommand{\op@typedoc}{}
        \renewcommand{\op@soustitre}{\op@classe{} -- \@date{}}%
        \renewcommand{\op@entete}{\@date}}{}        
    }

%% Redéfinition de maketitle 
\renewcommand{\maketitle}{%
    \noindent{\huge \color{title}\bfseries \op@typedoc \op@titre}\par
    \noindent{\color{line}\rule{\linewidth}{1ex}}\par
    \noindent{\color{subtitle}\bfseries \op@soustitre \hfill \large\op@sujet}\par
    \vspace{2.5\baselineskip}
}

% Page de garde
\renewcommand{\titlepage}{%
    \begin{center}
        %~\\[1cm]
        \Huge \op@typedoc \op@titre \\
        \Huge \op@classe\\[1cm]
        \LARGE \@date \\[1cm]

        \fbox{
            \parbox{0.7\textwidth}{~\\[1cm] \large Épreuve de : \\  \Huge MATHÉMATIQUES \\ \Large Durée de l'épreuve: \op@duree % 
            \ifprintanswers \Huge\center \textbf{Correction} \fi \\[1cm]}
    }

        ~\\[1cm]
        \normalsize
        Ce sujet comporte \numpages\, pages, numérotées de 1 / \numpages \; à \numpages / \numpages \\
        Dès qu'il vous est remis, assurez-vous qu'il est complet.
        \\[0.5cm]

        L'utilisation de la calculatrice est autorisée.\\
        L'échange de calculatrice entre les élèves est strictement interdit.\\
        L'usage du dictionnaire n'est pas autorisé. \\[1cm]

        \pointtable[h][questions]

        ~\\[0.5cm]
        \ifthenelse{\equal{\op@ptpres}{0}}%
        {}%
        {\textbf{\op@ptpres\, points} sont réservés à la présentation et à la rédaction.}
    \end{center}
    \clearpage
}

%% Les en-tête et les pieds de pages
\newcommand{\op@boiteentete}{\makebox[0pt][l]{\hspace*{-3ex}%
    \color{bgentete}\rule[-0.8ex]{\linewidth+6ex}{3ex}%
    }}

\pagestyle{headandfoot}
\header{\op@boiteentete\small\scshape\op@entete}{}{\small \op@titre}
\footer{\scriptsize\op@classe{} -- \op@annee}{}{\scriptsize\thepage / \numpages} 

%% En tête de la première page
\firstpageheader{}{}{} % Header de la première page
\runningheader{\op@boiteentete\small\scshape\op@entete}{}{\small\op@typedoc \op@titre} % header des autres pages
\firstpagefooter{\scriptsize\op@classe{} -- \op@annee}{}{\scriptsize\thepage / \numpages}  % Footer de la première page
\runningfooter{\scriptsize\op@classe{} -- \op@annee}{}{\scriptsize\thepage / \numpages} % footer des autres pages


%% Questions and parts

%%% Numbering
\renewcommand{\thepartno}{\arabic{partno}} % numérotation de part
\renewcommand{\thechoice}{\alph{choice}} % numérotation de choice
\renewcommand{\thesubpart}{\alph{subpart}}  % numérotation de subpart
\renewcommand{\thesubsubpart}{\greeknum{subsubpart}} % numérotation de subsubpart

%%% Display numbering
\renewcommand{\partlabel}{\colorbox{exercice}{\color{highlightbg}\thepartno}}
%\renewcommand{\choicelabel}{\color{exercice}\thechoice.}}
%\newcommand{\partlabel}{\thepartno.}
\renewcommand{\subpartlabel}{\color{exercice}\thesubpart.\color{text}}
\renewcommand{\subsubpartlabel}{\color{exercice}\thesubsubpart)}

%%% Reformat questions
\qformat{\Large \textbf{\color{exercice}{Exercice \thequestion}} \hspace{0.5cm} \color{line}\hrulefill \hspace{0.5cm} \color{exercice} \thepoints}

%%% Points table
\addpoints
\vqword{Éxercice}

%% Saved solutions environment

\newbox\allsolutions
\setbox\allsolutions=\vbox{}

\edef\iniq{}
\edef\inip{}
\edef\inisp{}

\newenvironment{savedSolution}
{%
  \ifprintanswers
  % s'il y a printanswers on veut que les solutions soient au milieu des questions.
    \begin{solution}
  \else
    \global\setbox\allsolutions=\vbox\bgroup
    \unvbox\allsolutions
    % à partir de là, on enregistre des truc dans la boite. Je suis pas convaincu que le truc avec minipage va bien marcher mais bon...
    \begin{minipage}{0.45\textheight}
    \ifnum\pdf@strcmp{\iniq}{\thequestion}=0
    \else
    \Large \textbf{\color{exercice}{Exercice \thequestion}} \hspace{0.5cm} {\color{line}\hrulefill} \hspace{0.5cm} {\color{exercice} Solution} \normalsize
    \global\edef\iniq{\thequestion}%
    \fi

    \ifnum\pdf@strcmp{\inip}{\thepartno}=0
    \else
    \partlabel \;
    \global\edef\inip{\thepartno}%
    \fi
    \ifnum\pdf@strcmp{\inisp}{\thesubpart}=0
    \else
    \subpartlabel \;
    \global\edef\inisp{\thesubpart}%
    \fi%
  \fi%
}%
{%
    \ifprintanswers
        \end{solution}
    \else
        \end{minipage}
        \bigbreak
        \egroup
    \fi
}

\newcommand{\showallsolutions}{\par\unvbox\allsolutions}

