Selaa lähdekoodia

Initial version of package

Denis Merigoux 10 vuotta sitten
commit
9d9db116e9
1 muutettua tiedostoa jossa 251 lisäystä ja 0 poistoa
  1. 251 0
      polytechnique.sty

+ 251 - 0
polytechnique.sty

@@ -0,0 +1,251 @@
1
+\NeedsTeXFormat{LaTeX2e}
2
+\ProvidesPackage{polytechnique}[2015/01/29 v1.0, standard scientific documents layout for Ecole polytechnique.]
3
+
4
+%=======================================================================================
5
+%Petit historique de la creation du package
6
+%=======================================================================================
7
+%Le binet TypographiX a ete refonde par la promotion 2013 durant son tronc commun, et parmi
8
+%ses projets se trouvait celui de faciliter la vie des eleves pour rediger leurs rapports
9
+%en tout genre. Ainsi est venue l'idee d'un package polytechnique qui donnerait une mise en
10
+%page adaptee a la nouvelle charte graphique de l'X cles en main. La maquette des pages et 
11
+%surtout de la page de couverture a ete faire par une Mme Gaela Riou, infographiste de la 
12
+%DIRCOM de l'X. L'auteur de ce package est Denis MERIGOUX et il a ete code fin janvier 2015.
13
+
14
+%=======================================================================================
15
+%Declaration des options.
16
+%Le code qui s'y trouve est execute plus tard (toutes les commandes ont deja ete definies)
17
+%=======================================================================================
18
+\DeclareOption{a4paper}{%Passe l'option a4paper declaree au package geometry pour action
19
+	\PassOptionsToPackage{a4paper}{geometry}
20
+}
21
+\DeclareOption{redsections}{%Si activee, modifie le formatage des titres de section et sous-sections.
22
+	\AtEndOfPackage{%Voir la documentation du package titlesec pour plus d'explications
23
+		\titleformat{\section}[block]{\color{rougepoly}\LARGE\scshape\filcenter}{}{0em}{}[
24
+			\vspace*{-0.5\baselineskip}\includegraphics{\polyfiletlongrouge}
25
+		]
26
+		\titleformat{\subsection}[hang]{\color{bleuclairpoly}\Large\scshape}{}{0em}{
27
+			\raisebox{0.15\baselineskip}{\includegraphics{\polyfiletcourtbleuclair}}
28
+		}[]
29
+	}
30
+}
31
+\DeclareOption{shorttitle}{%Option activee par defaut, titre avec logo vertical sur 1/2 page
32
+	\AtBeginDocument{
33
+		\renewcommand*{\maketitle}{
34
+			\thispagestyle{plain}
35
+			\vspace*{\distancetitrelogo}
36
+			%Bloc de gauche (auteurs)
37
+			\noindent
38
+			\begin{minipage}[b]{\largeurminipage}\polyauthorsave\end{minipage}%La minipage permet les sauts de ligne pour avoir plusieurs auteurs
39
+			\hspace*{\fill}
40
+			%Centre (logo)
41
+			\includegraphics[width=\largeurlogovert]{\polylogovert}\hspace*{\fill}
42
+			%Bloc de droite (date)
43
+			\begin{minipage}[b]{\largeurminipage}\flushright\polydatesave\end{minipage}%Idem ci-dessus
44
+			\\[\separationlogotrait]
45
+			%Deux filets horizontaux, le titre et le sous-titre sont au milieu
46
+			\begin{center}
47
+				\textcolor{bleupoly}{\rule{\textwidth}{\epaisseurtrait}}
48
+				\\\color{bleupoly}\Huge\scshape\MakeUppercaseWithNewline{\polytitresave}%Le titre
49
+				\ifthenelse{\boolean{subtitle}}{%Si il y a un sous-titre
50
+					\\[\separationlignestitre]
51
+					\Large\upshape\polysoustitresave\\\normalsize
52
+				}{%S'il n'y en a pas
53
+					\\\normalsize
54
+				}
55
+				\textcolor{bleupoly}{\rule{\textwidth}{\epaisseurtrait}}
56
+			\end{center}
57
+			\vspace*{\distancetitrecorps}
58
+		}
59
+}
60
+}
61
+\DeclareOption{coverpage}{%Option qui active une page de garde où le titre prend toute la page
62
+	\AtBeginDocument{
63
+		\renewcommand*{\maketitle}{
64
+			%On met les armes de l'Ecole en arriere-plan
65
+			\noindent\makebox[\textwidth][c]{%
66
+  			\raisebox{-\totalheight}[0pt][0pt]{%
67
+    		\includegraphics[height=\hauteurlogopage]{\polyarmes}}}%
68
+			\vspace*{0.125\textheight}
69
+			\begin{center}
70
+				%Le titre
71
+				\Huge\sffamily\bfseries\color{bleupoly}\MakeUppercaseWithNewline{\polytitresave}\\
72
+				\vspace*{0.2\textheight}
73
+				%Le sous-titre
74
+				\LARGE\polysoustitresave\\
75
+				\vspace*{0.15\textheight}
76
+				%La date
77
+				\large\mdseries\polydatesave\\[-0.5\baselineskip]
78
+				\includegraphics{\polyfiletcourtbleu}\\
79
+				%Les auteurs
80
+				\rmfamily\polyauthorsave\\[\fill]
81
+				%Le(s) logo(s) en bas de la page
82
+				$\;$\polylogosup{}
83
+				\vspace*{-0.5\margebas}%On rabote la marge basse habituelle
84
+			\end{center}
85
+			\thispagestyle{empty}
86
+			\clearpage
87
+			\setcounter{page}{1}
88
+		}
89
+	}
90
+}
91
+\DeclareOption*{%Toute autre option sera donnee en argument au package geometry (si differentes tailles de papier)
92
+	\PassOptionsToPackage{\CurrentOption}{geometry}
93
+}
94
+\ExecuteOptions{a4paper,shorttitle}%Par defaut, papier A4 et petit titre
95
+\ProcessOptions\relax
96
+
97
+%=======================================================================================
98
+%Packages requis
99
+%=======================================================================================
100
+\RequirePackage{ifthen}%Pour la structure conditionnelle
101
+\RequirePackage{ifpdf}%Pour detecter le mode de compilation
102
+\RequirePackage[pagestyles]{titlesec}%Pour les en-tetes - pieds de page
103
+\RequirePackage{graphicx}%Pour les logos inseres
104
+\RequirePackage{geometry}%Pour les marges
105
+\RequirePackage{calc}%Pour faire des operations sur les longueurs
106
+\RequirePackage{color}%Pour mettre les elements en bleu
107
+
108
+%=======================================================================================
109
+%Couleurs
110
+%Les valeurs RGB proviennent de la charte graphique de l'X (2014)
111
+%=======================================================================================
112
+\definecolor{bleupoly}{RGB}{0,62,92}
113
+\definecolor{rougepoly}{RGB}{169,32,33}
114
+\definecolor{bleuclairpoly}{RGB}{0,104,128}
115
+
116
+%=======================================================================================
117
+%Inclusion des logos
118
+%Chaque chemin vers un logo est defini par une commande speciale
119
+%=======================================================================================
120
+\ifpdf%Si la compilation se fait avec pdflatex
121
+	\newcommand{\polyfiletlongrouge}{filetlongrouge.pdf}
122
+	\newcommand{\polyfiletcourtbleuclair}{filetcourtbleuclair.pdf}
123
+	\newcommand{\polyfiletcourtbleu}{filetcourtbleu.pdf}
124
+	\newcommand{\polylogovert}{logovert.pdf}
125
+	\newcommand{\polylogohori}{logohori.pdf}
126
+	\newcommand{\polyarmes}{armes.pdf}
127
+\else%Si la compilation se fait avec latex, xetex ou autres
128
+	\newcommand{\polyfiletlongrouge}{filetlongrouge.eps}
129
+	\newcommand{\polyfiletcourtbleuclair}{filetcourtbleuclair.eps}
130
+	\newcommand{\polyfiletcourtbleu}{filetcourtbleu.eps}
131
+	\newcommand{\polylogovert}{logovert.eps}
132
+	\newcommand{\polylogohori}{logohori.eps}
133
+	\newcommand{\polyarmes}{armes.eps}
134
+\fi
135
+
136
+%=======================================================================================
137
+%Longeurs
138
+%Celles-ci sont definies manuellement, le design de la page a ete fait par la Dircom
139
+%=======================================================================================
140
+%Marges
141
+\newlength{\margehaut}\setlength{\margehaut}{40mm}
142
+\newlength{\hauteurentete}\setlength{\hauteurentete}{27mm}
143
+\newlength{\separationentete}\setlength{\separationentete}{12mm}
144
+\newlength{\margecote}\setlength{\margecote}{20mm}
145
+\newlength{\margebas}\setlength{\margebas}{35mm}
146
+\newlength{\separationpied}\setlength{\separationpied}{17.5mm}
147
+%Taille des logos
148
+\newlength{\hauteurlogohori}\setlength{\hauteurlogohori}{15mm}
149
+\newlength{\hauteurlogovert}\setlength{\hauteurlogovert}{40mm}
150
+%Disposition de la page de titre
151
+\newlength{\separationtitre}\setlength{\separationtitre}{15mm}
152
+\newlength{\epaisseurtrait}\setlength{\epaisseurtrait}{1pt}
153
+\newlength{\separationlignestitre}\setlength{\separationlignestitre}{3mm}
154
+\newlength{\separationtitrecorps}\setlength{\separationtitrecorps}{15mm}
155
+\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 ?)
156
+%En-tetes
157
+\newlength{\separationentetelogo}\setlength{\separationentetelogo}{20mm}
158
+
159
+%=======================================================================================
160
+%Longueurs (suite)
161
+%Celles-là sont déduites des longueurs definies au dessus.
162
+%=======================================================================================
163
+%Taille des logos
164
+\newlength{\largeurlogohori}\setlength{\largeurlogohori}{\hauteurlogohori*\real{1.859}}%1.859 est le ration hauteur/largeur du logo vertical de l'X.
165
+\newlength{\largeurlogovert}\setlength{\largeurlogovert}{\hauteurlogovert/\real{1.361}}%1.361 est le ration hauteur/largeur du logo vertical de l'X.
166
+%Disposition des titres
167
+\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.
168
+\newlength{\separationlogotrait}\setlength{\separationlogotrait}{-\baselineskip*2+10mm}
169
+\newlength{\largeurminipage}\setlength{\largeurminipage}{(\textwidth-\largeurlogovert)/\real{2}}
170
+%En-têtes
171
+\newlength{\largeurtitreentete}\setlength{\largeurtitreentete}{\textwidth-\largeurlogohori-\separationentetelogo}
172
+\newlength{\decalageverticalentete}\setlength{\decalageverticalentete}{\hauteurlogohori/\real{2}}
173
+\newlength{\distancetitrecorps}\setlength{\distancetitrecorps}{\separationtitrecorps-\baselineskip*2}
174
+
175
+%=======================================================================================
176
+%Marges, entetes et pieds de page
177
+%On utilise les package geometry et titlesec pour les regler
178
+%=======================================================================================
179
+\geometry{%Definit la geometrie de la page
180
+	%Toutes les commandes en dessous sont des longueurs definies auparavant
181
+	top=\margehaut,headheight=\hauteurentete,headsep=\separationentete,
182
+	left=\margecote,right=\margecote,
183
+	bottom=\margebas,footskip=\separationpied
184
+}
185
+\newcommand{\entetes}{%Comme l'en-tete contient le titre, on les active uniquement quand le titre est defini d'ou cette forme de commande
186
+	\newpagestyle{polytechnique}{%On definit un nouveau style d'en-tetes
187
+	\sethead{\includegraphics[height=\hauteurlogohori]{\polylogohori}}% left
188
+	        {}% center
189
+	        {\raisebox{\decalageverticalentete}{\begin{minipage}[t]{\largeurtitreentete}\scshape\flushright\textcolor{bleupoly}{\polytitresave}\end{minipage}}}% right
190
+	\setfoot{}% left
191
+ 	        {\textcolor{bleupoly}{\shortstack[c]{\rule{4mm}{0.3mm}\\\thepage}}}% center, \shorstack c'est pour mettre le tiret au dessus du numero de page
192
+ 	        {}% right
193
+	}
194
+	\pagestyle{polytechnique}
195
+}
196
+\renewpagestyle{plain}{
197
+	\sethead{}% left
198
+	        {}% center
199
+	        {}% right
200
+	\setfoot{}% left
201
+	        {\textcolor{bleupoly}{\shortstack[c]{\rule{4mm}{0.3mm}\\\thepage}}}% center, \shorstack c'est pour mettre le tiret au dessus du numero de page
202
+	        {}% right
203
+}
204
+\pagestyle{plain}
205
+
206
+%=======================================================================================
207
+%Commandes relatives a la page de titre
208
+%Grace a elles, on peut faire \titre{Machin} au lieu de \renewcommand{\polytitre}{machin}
209
+%=======================================================================================
210
+%Sous-titre
211
+\newboolean{subtitle}\setboolean{subtitle}{false}%Pour detecter si il existe un sous-titre, au debut on met le booleen a false
212
+\newcommand{\polysoustitresave}{}%A voir comme une variable dans laquelle on stocke une valeur
213
+\newcommand*{\subtitle}[1]{
214
+	\renewcommand*{\polysoustitresave}{#1}
215
+	\setboolean{subtitle}{true}%Puis on le met a true quand on definit un sous-titre
216
+}
217
+%Titre
218
+\newcommand{\polytitresave}{}%A voir comme une variable dans laquelle on stocke une valeur
219
+\renewcommand*{\title}[1]{
220
+	\renewcommand*{\polytitresave}{#1}
221
+	\entetes%Comme les en-tete dependent du titre, on les definit une fois qu'on connait le titre
222
+}
223
+%Auteurs
224
+\newcommand{\polyauthorsave}{}%A voir comme une variable dans laquelle on stocke une valeur
225
+\renewcommand*{\author}[1]{
226
+	\renewcommand*{\polyauthorsave}{#1}
227
+}
228
+%Date
229
+\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
230
+\renewcommand*{\date}[1]{
231
+	\renewcommand*{\polydatesave}{#1}
232
+}
233
+%Logo(s) de bas de page pour l'option coverpage
234
+\newcommand{\polylogosup}{\includegraphics[height=\hauteurlogovert]{\polylogovert}}%Variable de stockage initialisee par defaut au logo de l'X vertical
235
+\newcommand{\logo}[1]{%Si l'utilisateur definit un logo personnalise avec \logo{truc}
236
+	\renewcommand{\polylogosup}{%On redefinit la variable
237
+	\includegraphics[height=1.5\hauteurlogohori]{\polylogohori}%Avec le logo horizontal de l'X
238
+		\hspace{0.05\textwidth}
239
+		\includegraphics[height=\hauteurlogovert,
240
+			width=1.5\largeurlogohori,
241
+			keepaspectratio]{#1}%Et le logo personnalise pas trop gros
242
+	}
243
+}
244
+%Divers
245
+\newcommand{\MakeUppercaseWithNewline}[1]{%Permet de mettre plusieurs lignes en majuscules (pour le titre)
246
+  	\begingroup
247
+    	\let\SavedOrgNewline\\%
248
+    	\DeclareRobustCommand{\\}{\SavedOrgNewline}%
249
+    	\MakeUppercase{#1}%
250
+	\endgroup
251
+}