%-------------------------------------------------------------------------------
% Module créé par Vincent Guyot pour définir un modèle de travail de maturité
% Mis à jour le 2 février 2012

% Ce fichier est soumis à la licence libre GFDL dont on peut trouver
% les conditions sur le net.
%--------------------------------------------------------------------------------

\ProvidesPackage{TM}

% Définitions générales
\usepackage[frenchb]{babel}	% Gestion de la typographie française
\usepackage[utf8]{inputenc}	% Accents
%\usepackage[OT1]{fontenc}	% Encodage
\usepackage[T1]{fontenc}	% Encodage

% Géométrie de la page
\usepackage{geometry}
%\geometry{verbose,a4paper,lmargin=2cm,rmargin=2cm}	% règle les marges de la page

% Structure du document
\usepackage[Lenny]{fncychap}	% Titres de chapitres avec un filet
\usepackage{fancybox}		% Styles de filets de boites
%\usepackage{fancyheadings}	% Entêtes et pieds de page
\usepackage{fancyhdr}

%\usepackage{minitoc}		% Minitable des matières des chapitres
\usepackage{layout}		% Redéfinition des caractéristiques de la page
\usepackage{setspace}		% Interligne du document

% Bibliographie
\usepackage{multibib}		% Plusieurs bibliographies
\usepackage{tocloft}		% Pour faire une table des crédits photographiques

% Images
\usepackage{graphicx}		% Placement des figures
\usepackage{epsfig}

% Tableaux
\usepackage{longtable}
\usepackage{multirow}		% Fusion des lignes d'un tableau
\usepackage{longtable}		% Longues tables
\usepackage{tabularx}		% Tableaux
\usepackage{rotating}		% Rotation
\usepackage{lscape}			% En format paysage

% Listes
\usepackage{paralist}		% Divers styles de listes

% Listings
\usepackage{listings}		% Listings
\usepackage{subfig}

% Couleurs
\usepackage{color}		% Couleurs

% Environnements particuliers
\usepackage{url}		% Urls
\usepackage{moreverb}		% Texte non interprété. Plus complet que verbatim
\usepackage{acronym}		% Acronymes

% Notes de bas de page
\usepackage{endnotes}

% Divers
\usepackage{ifthen}		% Tests
\usepackage{calc}		% Calculs avec latex
%\usepackage{eurosym}		% Symbole euro
\usepackage{comment}		% Commentaires sur plusieurs lignes
\usepackage{shapepar}		% Justification du texte selon une forme

\usepackage{makeidx}		% pour permettre de construire un index
\makeindex	

%--------------Définition des fontes-----------------------------------------------------------------------------------------------
% Choisissez la fonte que vous désirez : \usefont{encoding}{family}{series}{shape}
\newcommand{\courrier}{\fontfamily{pcr}\selectfont}
\newcommand{\helv}{\fontfamily{phv}\selectfont}
\newcommand{\helvbold}{\fontfamily{phv}\fontseries{b}\selectfont}
%\newcommand{\helv}{\fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont}
%\newcommand{\helv}{\fontfamily{phv}}\selectfont}
\newcommand{\palatino}{\fontfamily{ppl}\selectfont}
\newcommand{\cmdunhill}{\usefont{OT1}{cmdh}{m}{n}} % computer modern dunhill

%----------------Les éléments de la page de titre------------------------------------------------------------------------------------
% La date du travail
\newcommand{\workdate}{\workdatemonth~\workdateyear}

% Titre du travail
\newcommand{\theworktitle}{
    \begin{Huge}
        {\sf \worktitle \\}
    \end{Huge}
    \vspace{0.2cm}%
    \ifthenelse{\equal{\worksubtitle}{}}{}{\begin{Large} {\sf \worksubtitle} \end{Large}}%
}

% Pied de page dans les langues anglaise, française et allemande.
\newcommand{\titlepagefooterE}{
\ifthenelse{\equal{\domaine}{Atelier interdisciplinaire}}{\newcommand{\oc}{}}{\newcommand{\oc}{Specific option}}
\ifthenelse{\equal{\domaine}{Informatique}}{\renewcommand{\oc}{Additional option}}{\newcommand{\oc}{Specific option}}
\begin{tabular}{lcr} \hline
  \multirow{5}{*}{\includegraphics[height=1cm]{logo1}} &  & \multirow{5}{*}{\includegraphics[height=1cm]{logo2}} \\
  & \oc{} \textsc{\domaine} &  \\
  & Lycee Blaise Cendrars &  \\
  & La Chaux-de-Fonds (Switzerland) &  \\
  & & \\
\end{tabular}
}
     
\newcommand{\titlepagefooterF}{
\ifthenelse{\equal{\domaine}{Atelier interdisciplinaire}}{\newcommand{\oc}{}}{\newcommand{\oc}{Option spécifique}}
\ifthenelse{\equal{\domaine}{Informatique}}{\renewcommand{\oc}{Option complémentaire}}{\newcommand{\oc}{Option spécifique}}
\begin{tabular}{lcr} \hline
  \multirow{5}{*}{\includegraphics[height=1cm]{logo1}} &  & \multirow{5}{*}{\includegraphics[height=1cm]{logo2}} \\
  & \oc{} \textsc{\domaine} &  \\
  & Lycée Blaise Cendrars &  \\
  & La Chaux-de-Fonds (Suisse) &  \\
  & & \\
\end{tabular}
}
     
\newcommand{\titlepagefooterD}{
\ifthenelse{\equal{\domaine}{Atelier interdisciplinaire}}{\newcommand{\oc}{}}{\newcommand{\oc}{Spezifische Option}}
\ifthenelse{\equal{\domaine}{Informatique}}{\renewcommand{\oc}{Zusätzliche Möglichkeit}}{\newcommand{\oc}{Spezifische Option}}
\begin{tabular}{lcr} \hline
  \multirow{5}{*}{\includegraphics[height=1cm]{logo1}} &  & \multirow{5}{*}{\includegraphics[height=1cm]{logo2}} \\
  & \oc{} \textsc{\domaine} &  \\
  & Gymnasium Blaise Cendrars &  \\
  & La Chaux-de-Fonds (Schweiz) &  \\
  & & \\
\end{tabular}
}

%-------------------Les différentes pages---------------------------------------------------------

% Définit le style des entête et pieds de page.
\pagestyle{fancy}
% Retire le filet sous l'entête
\renewcommand{\headrulewidth}{0pt}

% Profondeur de la table des matières
\setcounter{tocdepth}{5}

% Page de pensée ou de citations
\newcommand{\pensee}{
  \ifthenelse{\equal{\unepensee}{Y}}{\include{pagesspeciales/citations}}{}
}

% Page de préambule/dédicace/remerciements
\newcommand{\dedicace}{
  \ifthenelse{\equal{\unededicace}{Y}}{\include{pagesspeciales/remerciements}}{}
}

% Page de résumé
\newcommand{\resume}{
  \ifthenelse{\equal{\unresume}{Y}}{\include{pagesspeciales/resume}}{}
}

% Liste des figures
\newcommand{\listefig}{
  \ifthenelse{\equal{\unelistefig}{Y}}{
    %\renewcommand{\listfigurename}{Liste des figures} % Nom original = Table des figures
    \newpage
    \listoffigures    % liste des figures   (fichier .lof)
    }{}
}

% Commande de crédit photographique
\newcommand{\listcreditsname}{Crédits photographiques}
\newlistof{credits}{exp}{\listcreditsname}
\newcommand{\credit}[1]{%
		\refstepcounter{credits}
		\addcontentsline{exp}{credits}
		{\protect\numberline{\thefigure } #1}\par}

% Crédits photographiques
\newcommand{\listecredits}{
  \ifthenelse{\equal{\unelistecredits}{Y}}{
  	\newpage
    \listofcredits    % liste des crédits photographiques
    \newpage
    }{}
}

% Liste des tables
\newcommand{\listetbl}{
  \ifthenelse{\equal{\unelistetbl}{Y}}{
    %\renewcommand{\listtablename}{Liste des tables} % Nom original = Liste des tableaux
    \newpage
    \listoftables    % liste des tables    (fichier .lot)
    }{}
}

% Liste des listings
\newcommand{\listelst}{
  \ifthenelse{\equal{\unelistelst}{Y}}{
    %\renewcommand{\lstlistlistingname}{Liste des codes sources}  % Nom original = Listings
    \newpage
    \lstlistoflistings    % liste des listings    (fichier .lol)
    }{}
}

% Liste des acronymes
\newcommand{\acronyme}{
  \ifthenelse{\equal{\unacronyme}{Y}}{\include{pagesspeciales/acronymes}}{}
}

% Page de licence
\newcommand{\licence}{
  \ifthenelse{\equal{\unelicence}{Y}}{\include{pagesspeciales/licence}}{}
}

% Page de site officiel
\newcommand{\site}{
  \ifthenelse{\equal{\unsite}{Y}}{\include{pagesspeciales/website}}{}
}

% Page de cdrom officiel
\newcommand{\cdrom}{
  \ifthenelse{\equal{\uncdrom}{Y}}{\include{pagesspeciales/cdrom}}{}
}

% Pages d'index
\newcommand{\lindex}{
  \ifthenelse{\equal{\unindex}{Y}}{\printindex}{}
}

% Pages d'annexes
\newcommand{\annexes}{
  \ifthenelse{\equal{\lesannexes}{Y}}{\touteslesannexes}{}
}

%------------------Les chapitres-------------------------------------------------------
\newcommand{\leschapitres}{
  \ifthenelse{\not{\equal{\nbchap}{}}}{
    \newcounter{comptechap}
    \def\StartValue{1}
    \def\MaxValue{\nbchap}

    \setcounter{comptechap}{\StartValue}
    \whiledo{\not{\value{comptechap}>\MaxValue}}{
      \include{chapitres/chapter\thecomptechap}
      \stepcounter{comptechap}
    }
  }{}
}

%------------------Les annexes-------------------------------------------------------
\newcommand{\touteslesannexes}{
  \ifthenelse{\not{\equal{\nbannexes}{}}}{
    \newcounter{compteannexes}
    \def\StartValue{1}
    \def\MaxValue{\nbannexes}

    \setcounter{compteannexes}{\StartValue}
    \whiledo{\not{\value{compteannexes}>\MaxValue}}{
      \include{chapitres/annexe\thecompteannexes}
      \stepcounter{compteannexes}
    }
  }{}
}

%------------------Environnements-----------------------------------------
% Redéfinition de l'environnement de citations
\newcounter{Citctr} \newsavebox{\Citname}
\newenvironment{Citation}[1]
  {\sbox\Citname{\emph{#1}}%
   \refstepcounter{Citctr}\begin{description}
   \item[Citation \arabic{Citctr}]}
  {\hspace*{\fill}\nolinebreak[1]%
   \quad\hspace*{\fill}%
   \finalhyphendemerits=0
   \usebox{\Citname}\end{description}}

%------------------Commandes diverses------------------------------------------
% Redéfinition de la commande \url
\renewcommand\url{\begingroup \small \urlstyle{sf}\Url}

% Commande pour les urls dans la bibliographie des sites web
% Par exemple \biburl{http://www.cvgg.org/}{1}{January}{2012}
\newcommand{\lastVisited}[3]{(dernière consultation le #1 #2 #3)}
\newcommand{\biburl}[4]{{\apath{#1} \lastVisited{#2}{#3}{#4}}}

% Par exemple \biburlarticle{http://www.cvgg.org/article.html}{14}{juillet}{2012}
\newcommand{\biburlarticle}[4]{[Obtenu le #2 #3 #4 de {\small\apath{#1}}]}

\newcommand{\online}{[online]}

%  Prints your review date and 'Draft Version' (From Josullvn, CS, CMU)
%  Seems no to work properly on Linux. On Windows OK !
\newcommand{\reviewtimetoday}[2]{\special{!userdict begin
/bop-hook{gsave 20 710 translate 45 rotate 0.8 setgray
/Times-Roman findfont 12 scalefont setfont 0 0   moveto (#1) show
0 -12 moveto (#2) show grestore}def end}}

% Entête et pied de page
\renewcommand{\chaptermark}[1]{  % pour avoir Chapter 1. Introduction
\markboth{\chaptername\
\thechapter.\ #1}{}}

\renewcommand{\sectionmark}[1]{ % pour avoir 1.2. Strucutre du document
\markright{\thesection.\ #1}{}}

%\lhead[\fancyplain{} \rmfamily \thepage]{\fancyplain{} \itshape \rightmark}
%\lhead[\fancyplain{} \itshape \rightmark]{\fancyplain{} \itshape \rightmark}
%\chead{}
%\rhead[\fancyplain{} \itshape \leftmark]{\fancyplain{} \rmfamily \thepage}
%\rhead{}
\fancyhead[RO,LE]{\fancyplain{} \itshape \rightmark}
\fancyfoot[C]{\fancyplain{}  \rmfamily \thepage}
%\lfoot{}
%\cfoot{}
%\cfoot[\fancyplain{} \rmfamily \thepage]{\fancyplain{}  \rmfamily \thepage}
%\rfoot{}

% Pour les énumérations à l'intérieur d'un paragraphe, par exemple, "il y a trois possibilités :
% (i) blabla1 (ii) blabla2 (iii) blabla3"
\newenvironment{sinparaenum}%
{\begin{inparaenum}[\itshape(i)\upshape]}%
{\end{inparaenum}}

%-------------Les figures---------------------------------------------------
% Dimensions des figures insérées.
\newlength{\bigfigurewidth}
\setlength{\bigfigurewidth}{0.96\textwidth}

\newlength{\normalfigurewidth}
\setlength{\normalfigurewidth}{0.77\textwidth}

\newlength{\smallfigurewidth}
\setlength{\smallfigurewidth}{0.57\textwidth}

\newlength{\tinyfigurewidth}
\setlength{\tinyfigurewidth}{0.27\textwidth}

% La structure pour insérer les figures.
\newcommand{\tmfigure}[5]{
  \begin{figure} [t]
    \begin{center}
       \includegraphics[width=#2]{#1}
       \caption{\label{#4} #3}
       \credit{#5}
     \end{center}
  \end{figure}
}

% Quatre types de figures sont possibles : grande (B), normale (N), petite (S) et très petite (T).
\newcommand{\tmfigureB}[4]{\tmfigure{#1}{\bigfigurewidth}{#2}{#3}{#4}}
\newcommand{\tmfigureN}[4]{\tmfigure{#1}{\normalfigurewidth}{#2}{#3}{#4}}
\newcommand{\tmfigureS}[4]{\tmfigure{#1}{\smallfigurewidth}{#2}{#3}{#4}}
\newcommand{\tmfigureT}[4]{\tmfigure{#1}{\tinyfigurewidth}{#2}{#3}{#4}}

%----------------Les références-----------------------------------------------------------------
% Commande pour référencer les figures
% Je préfère sans le mot 'figure' automatiquement devant car on peut devoir le mettre au pluriel
\newcommand{\afigurelabel}{\figurename}
\newcommand{\figref}[1]{\ref{#1}}
%\newcommand{\figref}[1]{\afigurelabel~\ref{#1}}

% Commande pour référencer les tables
\newcommand{\atablelabel}{\tablename}
\newcommand{\tableref}[1]{\ref{#1}}
%\newcommand{\tableref}[1]{\atablelabel~\ref{#1}}
%\newcommand{\tableref}[1]{\tablename~\ref{#1}}

% Commande pour référencer les codes
\newcommand{\alistinglabel}{\lstlistingname}
\newcommand{\listingref}[1]{\ref{#1}}
%\newcommand{\listingref}[1]{\alistinglabel~\ref{#1}}

%----------------Le code en ligne-------------------------------------------------------------
% On peut utiliser cette commande pour le code en ligne
%\newcommand{\src}[1]{\begin{sf}\small{#1}\end{sf}}
\newcommand\src[1]{{\helv{\footnotesize{#1}}}}           % le code source est mis en Helvetica
% Une meilleures solution pourrait être :
% \newcommand{\src}[1]{\listinline!#1!}
% Finalement, il est plus simple de mettre directement : \lstinline|code|


\newcommand\footsrc[1]{{\helv{\scriptsize{#1}}}}  % le code source est mis en Helvetica - dans les notes de bas de page

% On peut utiliser cette commande pour les url, chemins, ...
\newcommand{\apath}[1]{\url{#1}}


\newcommand*{\indexsection}[1]{%
  \ifx\empty#1\empty\else
  \hspace{0pt plus 2fil}{{\sectfont #1}}\hspace{0pt plus
    1fil}\nopagebreak
  \fi
}

% Pour mettre le texte entre guillemets. Par exemple : \squote{de facto}
\newcommand{\squote}[1]{``#1''}


% Définition et configuration de l'environnement listings
\definecolor{listinggray}{gray}{0.9}
\definecolor{commentgreen}{rgb}{0,0.7,0} 

\lstset {
showstringspaces=false,
frame=none,
extendedchars=true,
basicstyle=\normalfont\helv\footnotesize,
numbers=left,
numberstyle=\tiny,
numbersep=5pt,
stepnumber=2,
language=Java,
breaklines,
tabsize=2,
backgroundcolor=\color{listinggray},
rulecolor=\color{blue},
linewidth=\linewidth,
keywordstyle=\bfseries\color{blue},
commentstyle=\color{commentgreen},
captionpos=b,
abovecaptionskip=\medskipamount,
belowcaptionskip=\medskipamount,
escapeinside={(*@}{@*)},
}

% Ce code permet de compiler avec latex ou pdflatex en changeant le suffix du nom
% de fichier des figures :
%.eps si latex est utilisé et .pdf, .jpg ou .png si pdflatex est utilisé
%%%%%%%%%% Attention, j'ai rajouté les lignes : \ifnum\pdfoutput=0 \pdffalse \else pour corriger le fait qu'il ne choisissait pas
%%%%%%%%%% les eps à la compilation latex
\newif\ifpdf
\ifx\pdfoutput\undefined
\pdffalse % on ne compile pas en pdflatex
\DeclareGraphicsExtensions{.eps} \else
\ifnum\pdfoutput=0
      \pdffalse
   \else
\pdfoutput=1 % on compile en pdflatex
\pdfcompresslevel=9     % niveau de compression pour le texte et les images ;
\pdftrue \DeclareGraphicsExtensions{.pdf,.jpg,.png} \fi

\ifpdf

%%% passer les références en lien
%\usepackage[pdftex,pagebackref=true,plainpages=false,colorlinks=false,pdfborder=0]{hyperref}
\usepackage[pdftex,pagebackref=true,plainpages=false,colorlinks=true,pdfborder=0,linkcolor=blue, citecolor=blue, urlcolor=blue]{hyperref}
%plainpages=false: activer les liens même si la numérotation est réinitialisée après le titre
%autres options... backref, pagebackref (liens en retour de l'index vers les chapitres/pages) urlcolor=blue,citecolor=red

\else

\fi

% Définition des valeurs de pénalités pour éléminer les coupures de premières et dernières lignes de page.
\clubpenalty=9999
\widowpenalty=9999

\newcommand{\corrbug}{
% --------------------------------------------------------
% Correction d'un petit bug de listings qui mène sans cela à un : Undefined control sequence. \lstlistoflistings
\makeatletter
\@ifundefined{float@listhead}{}{%
    \renewcommand*{\lstlistoflistings}{%
        \begingroup
    	    \if@twocolumn
                \@restonecoltrue\onecolumn
            \else
                \@restonecolfalse
            \fi
            \float@listhead{\lstlistlistingname}%
            \setlength{\parskip}{\z@}%
            \setlength{\parindent}{\z@}%
            \setlength{\parfillskip}{\z@ \@plus 1fil}%
            \@starttoc{lol}%
            \if@restonecol\twocolumn\fi
        \endgroup
    }%
}
\makeatother
% --------------------------------------------------------
}