Newer
Older
\ProvidesPackage{polytechnique}[2015/02/01 v1.2, standard scientific documents layout for Ecole polytechnique.]
%=======================================================================================
%Petit historique de la creation du package
%=======================================================================================
%Le binet TypographiX a ete refonde par la promotion 2013 durant son tronc commun, et parmi
%ses projets se trouvait celui de faciliter la vie des eleves pour rediger leurs rapports
%en tout genre. Ainsi est venue l'idee d'un package polytechnique qui donnerait une mise en
%page adaptee a la nouvelle charte graphique de l'X cles en main. La maquette des pages et
%surtout de la page de couverture a ete faire par une Mme Gaela Riou, infographiste de la
%DIRCOM de l'X. L'auteur de ce package est Denis MERIGOUX et il a ete code fin janvier 2015.
%=======================================================================================
%Declaration des options.
%Le code qui s'y trouve est execute plus tard (toutes les commandes ont deja ete definies)
%=======================================================================================
\DeclareOption{a4paper}{%Passe l'option a4paper declaree au package geometry pour action
\PassOptionsToPackage{a4paper}{geometry}
}
\DeclareOption{fancysections}{%Si activee, modifie le formatage des titres de section et sous-sections.
\AtEndOfPackage{%Voir la documentation du package titlesec pour plus d'explications
\titleformat{\chapter}[display]{\Huge\bfseries\sffamily}{\LARGE\chaptertitlename{} \thechapter}{0em}{}[]
\titleformat{\section}[display]{\color{rouge485}\LARGE\bfseries\sffamily\filcenter}{\thesection}{0em}{\MakeUppercase}[
\vspace*{-0.5\baselineskip}\includegraphics{\polyfiletlongrouge}
]
\titleformat{\subsection}[hang]{\color{bleu315}\Large\scshape}{\thesubsection}{0.5em}{}[
\vspace*{-0.3\baselineskip}\includegraphics{\polyfiletcourtbleuclair}
]
\titleformat{\subsubsection}[block]{\color{bleu303}\large\scshape}{\thesubsubsection}{0.5em}{\textbullet{} }[]
}
}
\DeclareOption{shorttitle}{%Option activee par defaut, titre avec logo vertical sur 1/2 page
\AtBeginDocument{
\renewcommand*{\maketitle}{
\thispagestyle{plain}
\vspace*{\distancetitrelogo}
%Bloc de gauche (auteurs)
\noindent
\begin{minipage}[b]{\largeurminipage}\polyauthorsave\end{minipage}%La minipage permet les sauts de ligne pour avoir plusieurs auteurs
\hspace*{\fill}
%Centre (logo)
\includegraphics[width=\largeurlogovert]{\polylogovert}\hspace*{\fill}
%Bloc de droite (date)
\begin{minipage}[b]{\largeurminipage}\flushright\polydatesave\end{minipage}%Idem ci-dessus
\\[\separationlogotrait]
%Deux filets horizontaux, le titre et le sous-titre sont au milieu
\begin{center}
\textcolor{bleu303}{\rule{\textwidth}{\epaisseurtrait}}
\\\color{bleu303}\Huge\scshape\MakeUppercaseWithNewline{\polytitresave}%Le titre
\ifthenelse{\boolean{subtitle}}{%Si il y a un sous-titre
\\[\separationlignestitre]
\Large\upshape\polysoustitresave\\\normalsize
}{%S'il n'y en a pas
\\\normalsize
}
\textcolor{bleu303}{\rule{\textwidth}{\epaisseurtrait}}
\end{center}
\vspace*{\distancetitrecorps}
}
}
}
\DeclareOption{coverpage}{%Option qui active une page de garde où le titre prend toute la page
\AtBeginDocument{
\renewcommand*{\maketitle}{
%On met les armes de l'Ecole en arriere-plan
\noindent\makebox[\textwidth][c]{%
\raisebox{-\totalheight}[0pt][0pt]{%
\includegraphics[height=\hauteurlogopage]{\polyarmes}}}%
\vspace*{0.125\textheight}
\begin{center}
%Le titre
\Huge\sffamily\bfseries\color{bleu303}\MakeUppercaseWithNewline{\polytitresave}\\
\vspace*{0.2\textheight}
%Le sous-titre
\LARGE\polysoustitresave\\
\vspace*{0.15\textheight}
%La date
\Large\mdseries\polydatesave\\
\includegraphics{\polyfiletcourtbleu}\\[0.4\baselineskip]
%Les auteurs
\rmfamily\polyauthorsave\\[\fill]
%Le(s) logo(s) en bas de la page
$\;$\polylogosup{}
\vspace*{-0.5\margebas}%On rabote la marge basse habituelle
\end{center}
\thispagestyle{empty}
\clearpage
\setcounter{page}{1}
}
}
}
\DeclareOption*{%Toute autre option sera donnee en argument au package geometry (si differentes tailles de papier)
\PassOptionsToPackage{\CurrentOption}{geometry}
}
\ExecuteOptions{a4paper,shorttitle}%Par defaut, papier A4 et petit titre
\ProcessOptions\relax
%=======================================================================================
%Packages requis
%=======================================================================================
\RequirePackage{ifthen}%Pour la structure conditionnelle
\RequirePackage{ifpdf}%Pour detecter le mode de compilation
\RequirePackage[pagestyles]{titlesec}%Pour les en-tetes - pieds de page
\RequirePackage{graphicx}%Pour les logos inseres
\RequirePackage{geometry}%Pour les marges
\RequirePackage{calc}%Pour faire des operations sur les longueurs
\RequirePackage{color}%Pour mettre les elements en bleu
\RequirePackage{lmodern}%On fixe la police une fois pour toutes
%=======================================================================================
%Couleurs
%Les valeurs RGB proviennent de la charte graphique de l'X (2014)
%=======================================================================================
\definecolor{bleu303}{RGB}{0,62,92}
\definecolor{rouge485}{RGB}{213,43,30}
\definecolor{bleu315}{RGB}{0,104,128}
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
%=======================================================================================
%Inclusion des logos
%Chaque chemin vers un logo est defini par une commande speciale
%=======================================================================================
\ifpdf%Si la compilation se fait avec pdflatex
\newcommand{\polyfiletlongrouge}{filetlongrouge.pdf}
\newcommand{\polyfiletcourtbleuclair}{filetcourtbleuclair.pdf}
\newcommand{\polyfiletcourtbleu}{filetcourtbleu.pdf}
\newcommand{\polylogovert}{logovert.pdf}
\newcommand{\polylogohori}{logohori.pdf}
\newcommand{\polyarmes}{armes.pdf}
\else%Si la compilation se fait avec latex, xetex ou autres
\newcommand{\polyfiletlongrouge}{filetlongrouge.eps}
\newcommand{\polyfiletcourtbleuclair}{filetcourtbleuclair.eps}
\newcommand{\polyfiletcourtbleu}{filetcourtbleu.eps}
\newcommand{\polylogovert}{logovert.eps}
\newcommand{\polylogohori}{logohori.eps}
\newcommand{\polyarmes}{armes.eps}
\fi
%=======================================================================================
%Longeurs
%Celles-ci sont definies manuellement, le design de la page a ete fait par la Dircom
%=======================================================================================
%Marges
\newlength{\margehaut}\setlength{\margehaut}{40mm}
\newlength{\hauteurentete}\setlength{\hauteurentete}{27mm}
\newlength{\separationentete}\setlength{\separationentete}{12mm}
\newlength{\margecote}\setlength{\margecote}{20mm}
\newlength{\margebas}\setlength{\margebas}{35mm}
\newlength{\separationpied}\setlength{\separationpied}{17.5mm}
%Taille des logos
\newlength{\hauteurlogohori}\setlength{\hauteurlogohori}{15mm}
%Disposition de la page de titre
\newlength{\separationtitre}\setlength{\separationtitre}{15mm}
\newlength{\epaisseurtrait}\setlength{\epaisseurtrait}{1pt}
\newlength{\separationlignestitre}\setlength{\separationlignestitre}{3mm}
\newlength{\separationtitrecorps}\setlength{\separationtitrecorps}{15mm}
\newlength{\hauteurlogopage}\setlength{\hauteurlogopage}{0.6\textheight}%La hauteur de l'image armes.pdf est fausse, 1.5cm doit donner a peu pres 10 cm (bug ?)
%En-tetes
\newlength{\separationentetelogo}\setlength{\separationentetelogo}{20mm}
%=======================================================================================
%Longueurs (suite)
%Celles-là sont déduites des longueurs definies au dessus.
%=======================================================================================
%Taille des logos
\newlength{\largeurlogovert}\setlength{\largeurlogovert}{\paperwidth/\real{7}}%Selon la charte graphique, la largeur est y/7 où y est la largeur de la page.
\newlength{\hauteurlogovert}\setlength{\hauteurlogovert}{\largeurlogovert*\real{1.361}}%1.361 est le ration hauteur/largeur du logo vertical de l'X.
\newlength{\largeurlogohori}\setlength{\largeurlogohori}{\hauteurlogohori*\real{1.859}}%1.859 est le ration hauteur/largeur du logo vertical de l'X.
%Disposition des titres
\newlength{\distancetitrelogo}\setlength{\distancetitrelogo}{\separationtitre-\margehaut}%Hauteur reglee pour qu'il y ait 10mm entre le haut de la page et le haut du logo.
\newlength{\separationlogotrait}\setlength{\separationlogotrait}{-\baselineskip*2+10mm}
\newlength{\largeurminipage}\setlength{\largeurminipage}{(\textwidth-\largeurlogovert)/\real{2}}
%En-têtes
\newlength{\largeurtitreentete}\setlength{\largeurtitreentete}{\textwidth-\largeurlogohori-\separationentetelogo}
\newlength{\decalageverticalentete}\setlength{\decalageverticalentete}{\hauteurlogohori/\real{2.6}}%2.6 pour que le titre soit aligne sur le "polytechnique" du logo à gauche
\newlength{\distancetitrecorps}\setlength{\distancetitrecorps}{\separationtitrecorps-\baselineskip*2}
%=======================================================================================
%Marges, entetes et pieds de page
%On utilise les package geometry et titlesec pour les regler
%=======================================================================================
\geometry{%Definit la geometrie de la page
%Toutes les commandes en dessous sont des longueurs definies auparavant
top=\margehaut,headheight=\hauteurentete,headsep=\separationentete,
left=\margecote,right=\margecote,
bottom=\margebas,footskip=\separationpied
}
\newcommand{\entetes}{%Comme l'en-tete contient le titre, on les active uniquement quand le titre est defini d'ou cette forme de commande
\newpagestyle{polytechnique}{%On definit un nouveau style d'en-tetes
\sethead{\includegraphics[height=\hauteurlogohori]{\polylogohori}}% left
{}% center
{\raisebox{\decalageverticalentete}{\begin{minipage}[b]{\largeurtitreentete}\scshape\flushright\textcolor{bleu303}{\polytitresave}\end{minipage}}}% right
{\textcolor{bleu303}{\shortstack[c]{\rule{4mm}{0.3mm}\\\thepage}}}% center, \shorstack c'est pour mettre le tiret au dessus du numero de page
{}% right
}
\pagestyle{polytechnique}
}
\renewpagestyle{plain}{
\sethead{}% left
{}% center
{}% right
\setfoot{}% left
{\textcolor{bleu303}{\shortstack[c]{\rule{4mm}{0.3mm}\\\thepage}}}% center, \shorstack c'est pour mettre le tiret au dessus du numero de page
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
{}% right
}
\pagestyle{plain}
%=======================================================================================
%Commandes relatives a la page de titre
%Grace a elles, on peut faire \titre{Machin} au lieu de \renewcommand{\polytitre}{machin}
%=======================================================================================
%Sous-titre
\newboolean{subtitle}\setboolean{subtitle}{false}%Pour detecter si il existe un sous-titre, au debut on met le booleen a false
\newcommand{\polysoustitresave}{}%A voir comme une variable dans laquelle on stocke une valeur
\newcommand*{\subtitle}[1]{
\renewcommand*{\polysoustitresave}{#1}
\setboolean{subtitle}{true}%Puis on le met a true quand on definit un sous-titre
}
%Titre
\newcommand{\polytitresave}{}%A voir comme une variable dans laquelle on stocke une valeur
\renewcommand*{\title}[1]{
\renewcommand*{\polytitresave}{#1}
\entetes%Comme les en-tete dependent du titre, on les definit une fois qu'on connait le titre
}
%Auteurs
\newcommand{\polyauthorsave}{}%A voir comme une variable dans laquelle on stocke une valeur
\renewcommand*{\author}[1]{
\renewcommand*{\polyauthorsave}{#1}
}
%Date
\newcommand{\polydatesave}{\today}%A voir comme une variable dans laquelle on stocke une valeur. \today est la date du jour dans la langue qu'il faut si babel est active
\renewcommand*{\date}[1]{
\renewcommand*{\polydatesave}{#1}
}
%Logo(s) de bas de page pour l'option coverpage
\newcommand{\polylogosup}{\includegraphics[height=\hauteurlogovert]{\polylogovert}}%Variable de stockage initialisee par defaut au logo de l'X vertical
\newcommand{\logo}[1]{%Si l'utilisateur definit un logo personnalise avec \logo{truc}
\renewcommand{\polylogosup}{%On redefinit la variable
\includegraphics[height=1.5\hauteurlogohori]{\polylogohori}%Avec le logo horizontal de l'X
\hspace{0.05\textwidth}
\includegraphics[height=\hauteurlogovert,
width=1.5\largeurlogohori,
keepaspectratio]{#1}%Et le logo personnalise pas trop gros
}
}
%Divers
\newcommand{\MakeUppercaseWithNewline}[1]{%Permet de mettre plusieurs lignes en majuscules (pour le titre)
\begingroup
\let\SavedOrgNewline\\%
\DeclareRobustCommand{\\}{\SavedOrgNewline}%
\MakeUppercase{#1}%
\endgroup
}