% camus.cls - Derniere mise a jour : 2018/01/25
%
% La classe CaMUS sert a compiler les differents articles d'un volume
% CaMUS sans (trop) se casser la tete. Elle est basee elle aussi sur
% la classe de l'AMS.
% 
% La classe camus a ete realise en suivant les instructions de :
% - La transformation de la vieille classe CaMUS en la nouvelle
% amelioree :
% http://www.latex-project.org/guides/clsguide.pdf
%
% Les deux documents suivants donnent aussi de bonnes pistes :
% - http://tutex.tug.org/pracjourn/2005-4/hefferon/hefferon.pdf
% - http://www.tug.org/TUGboat/tb28-1/tb88flynn.pdf
%
% De plus, il est bon de se referer a la documentation des packages
% comme geometry, titlesec, fancyheader et combine.


% La classe camus ne supporte que LaTeX2e
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{camus}[2012/09/24 Classe de la revue CaMUS v2.0]

% Options manuelles
\newcommand\@volno{7}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Options
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
% Packages utiles pour les options
%%
% Traduction et gestion des traits d'union
\RequirePackage[francais,english]{babel}

% Options de langue de compilation pour l'article
\newif \iffr % Flag qui donne la langue : true=francais,
             % false=anglais. false par defaut.
\DeclareOption{francais}{\AtBeginDocument{\protect\selectlanguage{francais}}
                         \frtrue}
\DeclareOption{english}{\AtBeginDocument{\protect\selectlanguage{english}}}
% En mode impression, utiliser \crop pour centrer, rapetisser et
% mettre les delimiteurs d'impression. Sinon, garder pleine page.
\newif \if@printmode

\DeclareOption{print}{\AtBeginDocument{\crop[cam]}%
                      \@printmodetrue
                      \message{Mode impression}}

% Unused options
\DeclareOption*{\PackageWarning{camus}{Unknown option `\CurrentOption'}}

\ProcessOptions\relax
% Classe de base
\LoadClass[11pt,twoside]{article}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Packages requis pour la classe CaMUS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{etex}              % Empeche certaines erreurs louches
                                   % qui parle d'un manque d'espace.
\RequirePackage[utf8]{inputenc}    % Oblige les auteurs a encoder leur texte en utf8
\RequirePackage[T1]{fontenc}       % Imprime les accents correctement
\RequirePackage{lmodern}

%%
% Mise en page 
%%
% Imprimer les pages format CaMUS sur du papier lettre,
% centrer. Le package geometry definit la page, le package crop
% s'occupe d'ajouter les lignes de decoupe.
\RequirePackage[papersize={7in,10in},
        	left=0.875in,textwidth=5.25in,
                top=0.8125in,textheight=8.4375in,
                foot=0.375in,headsep=.1in]{geometry}
\RequirePackage[pdflatex,letter,center]{crop}

% Fait quelques modifications aux titres de sections
\RequirePackage{titlesec}
\titleformat*{\section}{\Large\bfseries\centering}
\titleformat*{\subsection}{\large\bfseries}
\titlespacing*{\subsection}{0pt}{1.25ex plus 1ex minus .2ex}{1.5ex
  plus .2ex}

%%
% En-tetes et pieds-de-page
%%
\RequirePackage{fancyhdr}
\setlength{\headheight}{15pt} % Empeche fancyhds de crier...
\pagestyle{fancy}   % fancy est le style du document en general, sauf la premiere page.

% Modifie le style 'fancy'
\fancyhf{} % Clear all header and footer fields
\fancyhead[LE,RO]{\thepage}
\fancyhead[RE]{\@camusshorttitle}
\fancyhead[LO]{\textit{\@camusshortauthor}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}

% En-tete et pied de page de la premiere page
\fancypagestyle{firstpage}{
  \fancyhf{}
  \fancyhead[L]{CaMUS \textbf{\@volno}, \thepage~--~\pageref{\@camuslp}}
  \fancyfoot[R]{\copyright Universit\'e de Sherbrooke}
  \renewcommand{\headrulewidth}{0pt}
  \renewcommand{\footrulewidth}{0pt}}

%%
% Choix de langue
%%
% Utilisation \langchoice{mot francais}{mot anglais}
\newcommand \langchoice[2]{\iffr #1 \else #2 \fi}

%%%%%%%%%%%%%%%%%%%%%%
%% Bibliographie
%%%%%%%%%%%%%%%%%%%%%%
%NOTE : Voir ce qui est fait.
%\RequirePackage{cite} % Meilleures citations

%%
% Autres modules interessant
%%

% Utilise des nombres francais/anglais (virgules vs point)
\langchoice{\RequirePackage{icomma}}{}
\RequirePackage{graphicx}
\graphicspath{{img/}}
\if@printmode  
\else 
 %\RequirePackage{hyperref} 
\fi
\RequirePackage{amsmath}
\RequirePackage{url}
\RequirePackage{amsfonts}
\RequirePackage{amsthm}
\RequirePackage{amssymb}
\RequirePackage[french,onelanguage,vlined,linesnumbered,ruled,boxed]{algorithm2e}
\SetAlCapSkip{2ex}
\RequirePackage{mathrsfs}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Environement theoreme
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\theoremstyle{plain}
  \newtheorem{thm}{\langchoice{Th\'eor\`eme}{Theorem}}[section]
  \newtheorem{lem}[thm]{\langchoice{Lemme}{Lemma}}
  \newtheorem{crl}[thm]{\langchoice{Corollaire}{Corollary}}
  \newtheorem{prp}[thm]{Proposition}
  \newtheorem{cjt}[thm]{Conjecture}
  \newtheorem{crt}[thm]{\langchoice{Crit\`ere}{Criterion}}
        
  \newtheorem*{thm*}{\langchoice{Th\'eor\`eme}{Theorem}}
  \newtheorem*{lem*}{\langchoice{Lemme}{Lemma}}
  \newtheorem*{crl*}{\langchoice{Corollaire}{Corollary}}
  \newtheorem*{prp*}{Proposition}
  \newtheorem*{cjt*}{Conjecture}
  \newtheorem*{crt*}{\langchoice{Crit\`ere}{Criterion}}
        
\theoremstyle{definition}
  \newtheorem{dfn}[thm]{\langchoice{D\'efinition}{Definition}}
  \newtheorem{cnd}[thm]{Condition}
  \newtheorem{pbm}[thm]{\langchoice{Probl\`eme}{Problem}}
  \newtheorem{ex}[thm]{\langchoice{Exemple}{Example}}
  \newtheorem{exc}[thm]{Exercice}
		
  \newtheorem*{dfn*}{\langchoice{D\'efinition}{Definition}}
  \newtheorem*{cnd*}{Condition}
  \newtheorem*{pbm*}{\langchoice{Probl\`eme}{Problem}}
  \newtheorem*{ex*}{\langchoice{Exemple}{Example}}
  \newtheorem*{exc*}{Exercice}

\theoremstyle{remark}
  \newtheorem{rmk}[thm]{\langchoice{Remarque}{Remark}}
  \newtheorem{nte}[thm]{Note}
  \newtheorem{ntt}[thm]{Notation}
  \newtheorem{rmd}[thm]{\langchoice{Rappel}{Reminder}}
	
  \newtheorem*{rmk*}{\langchoice{Remarque}{Remark}}
  \newtheorem*{nte*}{Note}
  \newtheorem*{ntt*}{Notation}
  \newtheorem*{rmd*}{\langchoice{Rappel}{Reminder}}


 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Macros de formatage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definit l'en-tete de la page titre de chacun des articles
\renewcommand{\maketitle}{
    	\thispagestyle{firstpage}
        \phantom{}
        \vspace{7ex}
 	\begin{center}
 	\textbf{\textsc{\LARGE \@camustitle}}
 	\end{center}
 	\begin{center}
 	\textbf{\textsc{\large \@camusauthor}}
    \end{center}
    \begin{center}
    \scriptsize Reçu le \@datesoumise \space et accepté le \@dateaccepte
    \end{center}
 
        % Thanks footnote, taken from flynn, p.117
        \begingroup
        \global\@topnum\z@ % Prevents figures from going at top of page.
        \@thanks
        \endgroup
        \setcounter{footnote}{0}
        \setcounter{section}{0}
        \setcounter{figure}{0}
        \setcounter{table}{0}
        \setcounter{algocf}{0}
        \setcounter{equation}{0}
      }


% Abstract multilingue
\renewenvironment{abstract}{%
  \begin{center}
  \begin{minipage}[c]{0.89\textwidth}
  \textsc{\langchoice{Résumé}{Abstract}}
  \small
}
{
  \end{minipage} 
  \end{center}
}


%%
% Titre
%%
% Variables contenant les informations sur l'article
\newcommand \@camusauthor{None}       % Les auteurs, afficher dans le titre
\newcommand \@camusshortauthor{None}  % Initiales du prenom et nom de
                                       % famille, pour les headers
\newcommand \@camustitle{None}         % Titre, sur la premiere page
\newcommand \@camusshorttitle{None}    % Titre court, pour les headers

\newcommand \@datesoumise{AAAA-MM-JJ}
\newcommand \@dateaccepte{AAAA-MM-JJ}

\renewcommand{\date}[2]{
    \renewcommand \@datesoumise{#1}
    \renewcommand \@dateaccepte{#2}
}

\renewcommand{\author}[2]{%
    \renewcommand \@camusauthor{#1}%
    \renewcommand \@camusshortauthor{#2}%
}

\renewcommand\title[2]{
  \renewcommand \@camustitle{#1}
  \renewcommand \@title{#1}
  \renewcommand \@camusshorttitle{#2}
}



\renewcommand\thanks[1]{
  \renewcommand\@thanks{
    \begingroup
    \renewcommand\thefootnote{
      \fnsymbol{footnote}}
    \footnote[0]{#1}
    \endgroup}}

% A utiliser a la fin du document pour ecrire les infos sur l'auteur.
% Utilisation : \authorInfos{Nom complet}{Departement}{Universite}{courriel}
\newcommand \authorInfos[4]{
  \vspace{2ex}

  \noindent \parbox{\linewidth}{
    \small{\noindent \textsc{#1}
         
      \noindent \textsc{#2}, \textsc{#3}

      \noindent \textit{Courriel:} \texttt{#4}}}}

\newcommand\bibliocamus[1]{
  \langchoice{\bibliographystyle{alpha-fr}}{\bibliographystyle{alpha}}
  \bibliography{#1}}

% Variable contenant l'etiquette de la derniere page courante
\newcommand\@camuslp{camuslp}

\newcommand\CamusImport[1]{
  \cleardoublepage
  \renewcommand{\@camuslp}{#1}
  \include{#1}
}

\newcommand\SetLastPage{
  \label{\@camuslp}
}