Нема описа

polytechnique.sty 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. \NeedsTeXFormat{LaTeX2e}
  2. \ProvidesPackage{polytechnique}[2015/02/01 v1.2, standard scientific documents layout for Ecole polytechnique.]
  3. %=======================================================================================
  4. %Petit historique de la creation du package
  5. %=======================================================================================
  6. %Le binet TypographiX a ete refonde par la promotion 2013 durant son tronc commun, et parmi
  7. %ses projets se trouvait celui de faciliter la vie des eleves pour rediger leurs rapports
  8. %en tout genre. Ainsi est venue l'idee d'un package polytechnique qui donnerait une mise en
  9. %page adaptee a la nouvelle charte graphique de l'X cles en main. La maquette des pages et
  10. %surtout de la page de couverture a ete faire par une Mme Gaela Riou, infographiste de la
  11. %DIRCOM de l'X. L'auteur de ce package est Denis MERIGOUX et il a ete code fin janvier 2015.
  12. %=======================================================================================
  13. %Declaration des options.
  14. %Le code qui s'y trouve est execute plus tard (toutes les commandes ont deja ete definies)
  15. %=======================================================================================
  16. \DeclareOption{a4paper}{%Passe l'option a4paper declaree au package geometry pour action
  17. \PassOptionsToPackage{a4paper}{geometry}
  18. }
  19. \DeclareOption{fancysections}{%Si activee, modifie le formatage des titres de section et sous-sections.
  20. \AtEndOfPackage{%Voir la documentation du package titlesec pour plus d'explications
  21. \titleformat{\chapter}[display]{\Huge\bfseries\sffamily}{\LARGE\chaptertitlename{} \thechapter}{0em}{}[]
  22. \titleformat{\section}[display]{\color{rouge485}\LARGE\bfseries\sffamily\filcenter}{\thesection}{0em}{\MakeUppercase}[
  23. \vspace*{-0.5\baselineskip}\includegraphics{\polyfiletlongrouge}
  24. ]
  25. \titleformat{\subsection}[hang]{\color{bleu315}\Large\scshape}{\thesubsection}{0.5em}{}[
  26. \vspace*{-0.3\baselineskip}\includegraphics{\polyfiletcourtbleuclair}
  27. ]
  28. \titleformat{\subsubsection}[block]{\color{bleu303}\large\scshape}{\thesubsubsection}{0.5em}{\textbullet{} }[]
  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{bleu303}{\rule{\textwidth}{\epaisseurtrait}}
  48. \\\color{bleu303}\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{bleu303}{\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{bleu303}\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\\
  78. \includegraphics{\polyfiletcourtbleu}\\[0.4\baselineskip]
  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. %Packages requis
  98. %=======================================================================================
  99. \RequirePackage{ifthen}%Pour la structure conditionnelle
  100. \RequirePackage{ifpdf}%Pour detecter le mode de compilation
  101. \RequirePackage[pagestyles]{titlesec}%Pour les en-tetes - pieds de page
  102. \RequirePackage{graphicx}%Pour les logos inseres
  103. \RequirePackage{geometry}%Pour les marges
  104. \RequirePackage{calc}%Pour faire des operations sur les longueurs
  105. \RequirePackage{color}%Pour mettre les elements en bleu
  106. \RequirePackage{lmodern}%On fixe la police une fois pour toutes
  107. %=======================================================================================
  108. %Couleurs
  109. %Les valeurs RGB proviennent de la charte graphique de l'X (2014)
  110. %=======================================================================================
  111. \definecolor{bleu303}{RGB}{0,62,92}
  112. \definecolor{rouge485}{RGB}{213,43,30}
  113. \definecolor{bleu315}{RGB}{0,104,128}
  114. %=======================================================================================
  115. %Inclusion des logos
  116. %Chaque chemin vers un logo est defini par une commande speciale
  117. %=======================================================================================
  118. \ifpdf%Si la compilation se fait avec pdflatex
  119. \newcommand{\polyfiletlongrouge}{filetlongrouge.pdf}
  120. \newcommand{\polyfiletcourtbleuclair}{filetcourtbleuclair.pdf}
  121. \newcommand{\polyfiletcourtbleu}{filetcourtbleu.pdf}
  122. \newcommand{\polylogovert}{logovert.pdf}
  123. \newcommand{\polylogohori}{logohori.pdf}
  124. \newcommand{\polyarmes}{armes.pdf}
  125. \else%Si la compilation se fait avec latex, xetex ou autres
  126. \newcommand{\polyfiletlongrouge}{filetlongrouge.eps}
  127. \newcommand{\polyfiletcourtbleuclair}{filetcourtbleuclair.eps}
  128. \newcommand{\polyfiletcourtbleu}{filetcourtbleu.eps}
  129. \newcommand{\polylogovert}{logovert.eps}
  130. \newcommand{\polylogohori}{logohori.eps}
  131. \newcommand{\polyarmes}{armes.eps}
  132. \fi
  133. %=======================================================================================
  134. %Longeurs
  135. %Celles-ci sont definies manuellement, le design de la page a ete fait par la Dircom
  136. %=======================================================================================
  137. %Marges
  138. \newlength{\margehaut}\setlength{\margehaut}{40mm}
  139. \newlength{\hauteurentete}\setlength{\hauteurentete}{27mm}
  140. \newlength{\separationentete}\setlength{\separationentete}{12mm}
  141. \newlength{\margecote}\setlength{\margecote}{20mm}
  142. \newlength{\margebas}\setlength{\margebas}{35mm}
  143. \newlength{\separationpied}\setlength{\separationpied}{17.5mm}
  144. %Taille des logos
  145. \newlength{\hauteurlogohori}\setlength{\hauteurlogohori}{15mm}
  146. %Disposition de la page de titre
  147. \newlength{\separationtitre}\setlength{\separationtitre}{15mm}
  148. \newlength{\epaisseurtrait}\setlength{\epaisseurtrait}{1pt}
  149. \newlength{\separationlignestitre}\setlength{\separationlignestitre}{3mm}
  150. \newlength{\separationtitrecorps}\setlength{\separationtitrecorps}{15mm}
  151. \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 ?)
  152. %En-tetes
  153. \newlength{\separationentetelogo}\setlength{\separationentetelogo}{20mm}
  154. %=======================================================================================
  155. %Longueurs (suite)
  156. %Celles-là sont déduites des longueurs definies au dessus.
  157. %=======================================================================================
  158. %Taille des logos
  159. \newlength{\largeurlogovert}\setlength{\largeurlogovert}{\paperwidth/\real{7}}%Selon la charte graphique, la largeur est y/7 où y est la largeur de la page.
  160. \newlength{\hauteurlogovert}\setlength{\hauteurlogovert}{\largeurlogovert*\real{1.361}}%1.361 est le ration hauteur/largeur du logo vertical de l'X.
  161. \newlength{\largeurlogohori}\setlength{\largeurlogohori}{\hauteurlogohori*\real{1.859}}%1.859 est le ration hauteur/largeur du logo vertical de l'X.
  162. %Disposition des titres
  163. \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.
  164. \newlength{\separationlogotrait}\setlength{\separationlogotrait}{-\baselineskip*2+10mm}
  165. \newlength{\largeurminipage}\setlength{\largeurminipage}{(\textwidth-\largeurlogovert)/\real{2}}
  166. %En-têtes
  167. \newlength{\largeurtitreentete}\setlength{\largeurtitreentete}{\textwidth-\largeurlogohori-\separationentetelogo}
  168. \newlength{\decalageverticalentete}\setlength{\decalageverticalentete}{\hauteurlogohori/\real{2.6}}%2.6 pour que le titre soit aligne sur le "polytechnique" du logo à gauche
  169. \newlength{\distancetitrecorps}\setlength{\distancetitrecorps}{\separationtitrecorps-\baselineskip*2}
  170. %=======================================================================================
  171. %Marges, entetes et pieds de page
  172. %On utilise les package geometry et titlesec pour les regler
  173. %=======================================================================================
  174. \geometry{%Definit la geometrie de la page
  175. %Toutes les commandes en dessous sont des longueurs definies auparavant
  176. top=\margehaut,headheight=\hauteurentete,headsep=\separationentete,
  177. left=\margecote,right=\margecote,
  178. bottom=\margebas,footskip=\separationpied
  179. }
  180. \newcommand{\entetes}{%Comme l'en-tete contient le titre, on les active uniquement quand le titre est defini d'ou cette forme de commande
  181. \newpagestyle{polytechnique}{%On definit un nouveau style d'en-tetes
  182. \sethead{\includegraphics[height=\hauteurlogohori]{\polylogohori}}% left
  183. {}% center
  184. {\raisebox{\decalageverticalentete}{\begin{minipage}[b]{\largeurtitreentete}\scshape\flushright\textcolor{bleu303}{\polytitresave}\end{minipage}}}% right
  185. \setfoot{}% left
  186. {\textcolor{bleu303}{\shortstack[c]{\rule{4mm}{0.3mm}\\\thepage}}}% center, \shorstack c'est pour mettre le tiret au dessus du numero de page
  187. {}% right
  188. }
  189. \pagestyle{polytechnique}
  190. }
  191. \renewpagestyle{plain}{
  192. \sethead{}% left
  193. {}% center
  194. {}% right
  195. \setfoot{}% left
  196. {\textcolor{bleu303}{\shortstack[c]{\rule{4mm}{0.3mm}\\\thepage}}}% center, \shorstack c'est pour mettre le tiret au dessus du numero de page
  197. {}% right
  198. }
  199. \pagestyle{plain}
  200. %=======================================================================================
  201. %Commandes relatives a la page de titre
  202. %Grace a elles, on peut faire \titre{Machin} au lieu de \renewcommand{\polytitre}{machin}
  203. %=======================================================================================
  204. %Sous-titre
  205. \newboolean{subtitle}\setboolean{subtitle}{false}%Pour detecter si il existe un sous-titre, au debut on met le booleen a false
  206. \newcommand{\polysoustitresave}{}%A voir comme une variable dans laquelle on stocke une valeur
  207. \newcommand*{\subtitle}[1]{
  208. \renewcommand*{\polysoustitresave}{#1}
  209. \setboolean{subtitle}{true}%Puis on le met a true quand on definit un sous-titre
  210. }
  211. %Titre
  212. \newcommand{\polytitresave}{}%A voir comme une variable dans laquelle on stocke une valeur
  213. \renewcommand*{\title}[1]{
  214. \renewcommand*{\polytitresave}{#1}
  215. \entetes%Comme les en-tete dependent du titre, on les definit une fois qu'on connait le titre
  216. }
  217. %Auteurs
  218. \newcommand{\polyauthorsave}{}%A voir comme une variable dans laquelle on stocke une valeur
  219. \renewcommand*{\author}[1]{
  220. \renewcommand*{\polyauthorsave}{#1}
  221. }
  222. %Date
  223. \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
  224. \renewcommand*{\date}[1]{
  225. \renewcommand*{\polydatesave}{#1}
  226. }
  227. %Logo(s) de bas de page pour l'option coverpage
  228. \newcommand{\polylogosup}{\includegraphics[height=\hauteurlogovert]{\polylogovert}}%Variable de stockage initialisee par defaut au logo de l'X vertical
  229. \newcommand{\logo}[1]{%Si l'utilisateur definit un logo personnalise avec \logo{truc}
  230. \renewcommand{\polylogosup}{%On redefinit la variable
  231. \includegraphics[height=1.5\hauteurlogohori]{\polylogohori}%Avec le logo horizontal de l'X
  232. \hspace{0.05\textwidth}
  233. \includegraphics[height=\hauteurlogovert,
  234. width=1.5\largeurlogohori,
  235. keepaspectratio]{#1}%Et le logo personnalise pas trop gros
  236. }
  237. }
  238. %Divers
  239. \newcommand{\MakeUppercaseWithNewline}[1]{%Permet de mettre plusieurs lignes en majuscules (pour le titre)
  240. \begingroup
  241. \let\SavedOrgNewline\\%
  242. \DeclareRobustCommand{\\}{\SavedOrgNewline}%
  243. \MakeUppercase{#1}%
  244. \endgroup
  245. }