202 lines
6.8 KiB
TeX
202 lines
6.8 KiB
TeX
\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}
|
|
|