Template complet pour manuscrit de thèse

Récemment, j’avais fait un billet sur une façon de faire sa page de garde personnelle à la mode manuscrit de thèse. Aujourd’hui, je vais aller encore plus loin en essayant de vous proposer un template « tout en un » pour des gros documents scientifiques, genre un manuscrit de thèse.

Vous vous en doutez, la réalisation de ce template m’a demandé pas mal de taf, et requis autant de principes déjà évoqués dans ce blog. Je n’irais pas jusqu’à dire qu’il représente l’aboutissement de mes travaux sur \LaTeX, mais il constitue en tout cas une excellente synthèse de mes diverses compétences en la matière. Ainsi, même si le rendu ne vous plaît pas, j’espère au moins que les astuces et indications, elles, vous plairont. Par ailleurs, si tel était le cas, vous êtes bien libres de faire ce que vous voulez des sources que je vous propose…

Objectifs

Outre une mise en forme répondant aux standards des thèses de doctorat (avec notamment une bibliographie « à la française »), le template que je propose permet :

  • une hiérarchie en chapitres
  • une bibliographie propre à chacun des chapitres
  • d’afficher au début du document :
    • Une table des matières générale (chapitres/sections)
    • Une liste des figures
    • Une liste des tableaux
  • d’afficher au début de chaque chapitre :
    • Une citation
    • Une table des matières locale détaillée (sections/sous-sections)
  • les références biblio à la fin de chaque chapitre
  • en annexe :
    • des annexes…
    • un glossaire
    • une liste des abréviations
    • une liste des symboles mathématiques

Le tout conçu de façon relativement robuste, c’est à dire respectant les règles inhérentes à la rédaction de gros documents sous \LaTeX (voir mon billet à ce propos). Avec en primes, des fichiers distincts pour :

  • le préambule
  • chaque chapitre (ben oui !)
  • les commandes personnelles
  • la page de garde
  • les entrées pour les glossaire/abréviations/symboles

Exemple minimal

Si vous voulez voir un exemple complet, c’est-à-dire mon manuscrit intégral, vous pouvez bien sûr le trouver ici.


Source téléchargeable

Ça vous épate ? Merci bien ! Pour obtenir la dernière version du template, je vous pouvez :


Édition

Préambule et informations sur l’auteur

Dans le fichier Main.tex, qui sera bien sûr le fichier à compiler, vous n’avez qu’à modifier les entrées nécessaires à la page de garde (voir ici pour plus de détails), et éventuellement les noms des fichiers des chapitres, si ça ne vous convient pas.

Compte-tenu du nombre très important de packages, j’ai pris le soin de faire un fichier spécifique aux \usepackage (preambule.tex). J’ai essayé, autant que faire se peut, de classer les packages par catégories (biblio, figures, pagination etc.). Malheureusement, il faut parfois respecter une certaine hiérarchie dans les appels de packages (sujet à polémique…).

Chapitres

Rien de particulier, si ce n’est qu’il faut penser à mettre tous les fichiers enfants de chaque chapitre dans le dossier ad-hoc, sans pour autant se soucier de cette astuce lors des appels dans le chapitre concerné (merci \includefrom !). Ce qui évite de mélanger les figures du chapitre biblio avec celles des annexes…

Avant de compiler avec (pdf)latex, pensez à vérifier le \includeonly dans le fichier maître !

Bibliographies

Oui, j’ai bien mis un ‘s’ à bibliographies, puisqu’on va en générer autant qu’il y a de chapitres, avec la liste des références en fin de chacun d’entre eux, dans un \section{Références}, donc accessibles depuis la table des matières et les mini-tables des matières (minitoc, voir plus bas). Le tout grâce au package chapterbib. Au sein d’un chapitre, la définition des différentes entrées bibliographiques se fait comme à l’accoutumée (j’utilise ici natbib), il suffit de préciser à la fin de chaque chapitre le fichier contenant les entrées, et le style de biblio voulu (oui oui, vous pouvez vous amuser à changer de style de biblio entre les différents chapitres…).

Commandes et environnements personnels

Comme je l’ai dit plus haut, j’ai pris le soin de faire un fichier spécifique pour toutes les commandes personnelles (commandesPerso.tex), ce qui évite d’avoir à farfouiller dans le préambule…

Figures et tableaux

J’ai créé un environnement figureth . De fait, la commande :

\begin{figureth}
	%commande quelconque
\end{figureth}

est strictement identique à :

\begin{figure}[htbp]
\centering
	%commande quelconque
\end{figure}

Avantages : je suis certain que toutes mes figures sont placées suivant la même règle, et si je veux changer leur placement, je n’ai qu’à modifier ma commande perso. De plus, elle me fait économiser 12  caractères par figure ! De la même manière, j’ai défini l’environnement tableth en lieu et place de table.

Sous-figures

Suite à la remarque de Luneart, j’ai abandonné subfig pour subcaption. Et j’ai ainsi défini l’environnement subfigureth.

Glossaire, liste de symboles et liste des acronymes

On utilise ici le package glossaries, qui vient remplacer glossary. Comme son nom l’indique, il permet de -relativement- facilement générer plusieurs glossaires distincts (autant que voulu).

Pour le français, il vous est fortement conseillé d’avoir installé xindy sur votre ordinateur, ce qui va permettre une meilleure compatibilité avec les caractères accentués. Que vous l’ayez ou non, c’est la commandes makeglossaries que l’on va utiliser ici (voir partie « Compilation »).

Dans mon cas, j’ai décidé d’utiliser 3 types de glossaires :

  • le glossaire standard (qui permet de donner une définition d’un mot),
  • la liste des acronymes (rappelle la signification d’un acronyme),
  • la liste des symboles mathématiques (rappelle le nom donné à chaque symbole).

Pour les trois types, les entrées seront accompagnées des pages où chacune d’elle apparaît. Si vous souhaitez plus d’informations à propos de l’utilisation de glossaries, je vous invite à aller voir mon billet à ce propos.

Glossaire standard

Pour chaque entrée, il faut préciser le nom à afficher dans le document, et une description, qui apparaîtra dans le glossaire. Ex :

\newglossaryentry{ordi}{
	name=ordinateur,
	description={machine électronique qui fonctionne par la lecture séquentielle d'un ensemble d'instructions, organisées en programmes, qui lui font exécuter des opérations logiques et arithmétiques sur des chiffres binaires.}
}

Pour afficher le mot « ordinateur », il faudra alors utiliser la commande \gls{ordi}.

Acronymes

La signification d’un acronyme sera donné totalement à sa première occurrence, puis utilisée sous sa forme réduite ensuite. Ex :

\newacronym{ebsd}{EBSD}{\emph{Electron Backscatter Diffraction}}

Utiliser \gls{ebsd} pour afficher « EBSD » ou « Electron Backscatter Diffraction (EBSD) » (selon le cas).

Symboles mathématiques

Afin de gagner en souplesse d’utilisation, il convient de définir le symbole dans une commande \ensuremath, ce qui permettra par la suite d’utiliser le symbole indifféremment dans le texte ou dans un environnement mathématique. Ex :

\newglossaryentry{pi}{
	type=notation,
	name={\ensuremath{\pi}},
	description={Rapport constant de la circonférence d’un cercle à son diamètre dans un plan euclidien},
	sort=pi
}

Cette fois encore, pour afficher « π », il faut utiliser \gls{pi}. L’option « sort » permettra de définir un ordre alphabétique pour les symboles mathématiques. Pour plus d’infos sur le package glossaries, vous pouvez voir mon billet à ce propos.


Compilation

Génération du document

Comme je l’ai dit plus haut, en ce qui concerne la compilation avec (pdf)latex, c’est toujours le fichier maître qui vous intéresse (Main.tex).

Bibliographies

Comme on va en générer autant de bibliographies qu’il y a de chapitres, il faudra lancer bibtex pour chacun d’eux. Si vos chapitres s’appellent Chapitre1.tex, Chapitre2.tex etc., alors il faudra lancer :

bibtex Chapitre1
bibtex Chapitre2

etc.

Conseil sur Texmaker

Par défaut, une fois un document maître défini, toutes les commandes se font sur celui-ci (pdflatex, bibtex etc.). Dans les options de Texmaker, onglet « compilation », dans la ligne de commande correspondant à bib(la)tex, remplacez le «  % » par « # », ce qui aura pour effet de compiler le fichier courant, et non le fichier maître.

Glossaires

Afin de générer la liste des entrées des glossaires (et de les ordonner), il faut lancer la commande makeglossaries, après une compilation avec (pdf)latex :

makeglossaries Main

Puis recompiler deux fois avec (pdf)latex pour mettre à jours les références croisées (même combat qu’avec bibtex).

Compilation générale !

Pour résumer, si vous voulez mettre à jours toutes les biblios, les glossaires et les références croisées, on a :

pdflatex Main.tex
bibtex Chapitre1
bibtex Chapitre2
bibtex Chapitre3
makeglossaries Main
pdflatex Main.tex
pdflatex Main.tex

Ouf ! Autant vous prévenir, entres les .bbl, les .aux, les fichiers des glossaires, les minitocs, ça va être la Foir’Fouille dans le dossier de compilation ! Et vous serez contents d’avoir des sous-dossiers pour les figures. A titre indicatif : à la fin de ma rédaction, une compilation complète me générait 167 fichiers de compilation…

Tout compiler en un clic

Au fur et à mesure de votre rédaction, les temps de chaque compilation va vite devenir plus que conséquent. Pour automatiser le tout, et aller boire un café en attendant, j’ai fait un script qui fait toutes les compilations nécessaires en un clic. Et dans sa grande mansuétude, votre serviteur a pris le soin de l’écrire en bash (pour Unix/Linux/Mac) et en batch (pour les Windowsiens mais néanmoins amis).


Extras

Un trait d’esprit en début de chapitre

Le package epigraph nous permet de rajouter une citation au début de chaque chapitre. Cette fois encore, afin de gagner en répétabilité de mise en forme, j’ai défini la commande \citationChap, qui prend en premier argument ladite citation, et l’auteur en second.

Numéros des pages où apparaissent les citations biblio

Trop peu connue de hyperref, l’option backref permet d’ajouter à chaque référence les numéros des pages où celle-ci a été citée. Ça facilite la lecture (sur un fichier PDF, on peut ainsi retourner à la page qu’on était en train de lire) et montre que vous n’avez pas cheaté votre biblio, par exemple en utilisant un \nocite{*}

Caractères mathématiques dans les titres

A priori, rien ne vous empêche d’utiliser un caractère mathématique dans un titre de sectionnement. Sauf que le rendu de celui-ci ne sera pas exceptionnel dans le menu de navigation du lecteur PDF (les « bookmarks »), et vous aurez à la compilation le warning suivant :

Package hyperref Warning :
Token not allowed in a PDFDocEncoded string :

Il est donc possible de remplacer ce caractère par un autre lors de la génération dudit bookmark grâce à la commande \texorpdfstring. Celle-ci prend deux arguments : le premier correspond au contenu que vous voulez dans le document imprimable, le second étant le texte de remplacement dans l’éventuel bookmark.

Par exemple, si je veux créer une section nommée « ductilité de la phase α », alors, plutôt que de faire :

\section{Ductilité de la phase $\alpha$}

Je vais plutôt taper :

\section{Ductilité de la phase \texorpdfstring{$\alpha$}{alpha}}

Mais pour être certain de ne pas me planter, je vais même ouvrir mon fichier commandesPerso.tex, et y mettre :

\newcommand{\alphap}{
	\texorpdfstring{
		\ensuremath{\alpha}
	}{
		alpha
	}
	\xspace
}

Et comme ça je pourrai par la suite utiliser allègrement la commande \alphap (dans un environnement math ou non, grâce au \ensuremath) sans me soucier des menus du lecteur PDF. Pour rappel, \xspace permet de gérer automatiquement l’espacement après une commande perso.

Table des matières en début de chapitre

C’est le package minitoc qui nous fait gentiment ça. Si vous trouvez votre minitoc trop ou pas assez exhaustive, changez la valeur de sa profondeur :

\setcounter{minitocdepth}{2}

Pour conclure

Je ne vous avais pas menti : il y a du boulot derrière tout ça :-)
Comme je l’ai dit en introduction, libre à vous de perfectionner/customiser à votre convenance le contenu de ce template. Toute remarque étant la bienvenue !

Là, je peux vraiment le dire : bonnes compilations !

[EDIT]

Le template est maintenant hébergé sur GitHub. Vous pour donc voir l’historique des modifications en consultant le journal des commits.

[/EDIT]

Template complet pour manuscrit de thèse
4.62 (92.38 %) 21 votes
  • Quentin

    Pour mon template perso, travaillant sous windows xp, j’avais dû installer un environnement perl pour utiliser glossaries. (Par contre je n’ai pas testé le tiens sous windows sans l’environnement perl, mais le problème semble connu : http://tex.stackexchange.com/questions/25950/how-to-use-makeglossaries).

    • Salut,
      Effectivement, la commande makeglossaries nécessite un interpréteur Perl. Je crois que xindy installe automatiquement Perl.

  • Pingback: Page de garde pour manuscrit de thèse | Le Blog de Dorian()

  • raph

    Salut,
    pour ma thèse, j’avais pris des trucs à droite et à gauche et obtenu un truc assez similaire au tien, au moins en terme de fonctionnalités (voir [1] sur GitHub, le README détaille la plupart des trucs). Pour le script d’automatisation, j’avais utilisé Fabric, qui permet de remplacer le Bash par du Python, beaucoup plus lisible et maintenable à mon avis (voir [2])

    (liens en anglais)
    [1] https://github.com/raphaelfournier/PhD-Dissertation-Template
    [2] http://raphael.fournier-sniehotta.fr/blog/2012/08/15/switch_from_makefile_to_fabric_file_for_latex_projects/

  • Pingback: Externalisation et includeonly | Le Blog de Dorian()

  • Pingback: Utilisation du package Glossaries | Le Blog de Dorian()

  • luneart

    package minitoc et warnings: à cause d’hyperref les definitions des sections, parts,… sont modifiées et par défaut minitoc previent l’utilisateur. En ajoutant ‘nohints’ dans les options du paquet, on se débarrasse des warnings, et donc on peut aussi degager silence.

  • luneart

    package minitoc, encore: si les n « glossaires » (eg nomenclature, acronymes, ou encore.. glossaire) sont avant les chapitres, et comme minitoc genere une toc pour chaque section, les n premiers chapitres n’ont pas de minitoc (en fait, ils ont la minitoc vide du n-ieme glossaire) et le n+1-ieme chapitre recoit la minitoc du chapitre 1. Pour regler ca, rien de tel qu’un petit setcounter{mtc}{} juste apres les glossaires.

  • Rupi

    Salut,
    Pour automatiser les compilations, il est aussi possible de passer par un Makefile.
    Ça permet, outre le fait de gérer toutes les compilations du document principal, de gérer des « variantes » de compilation* (pour mettre à jour seulement la biblio/les acronymes… -> make biblio), de nettoyer les fichiers de compilations par un simple « make clean », de gérer des compilations conditionnelles « complexes »…

    Bon, ceci-dit, en adaptant le script SH pour utiliser des paramètres facultatifs, on doit pouvoir arriver au même résultat.

  • GustouristE

    Ave,
    Sous MacOS X.10, avec TexMaker, apparaît un « Undefined control sequence » incompréhensible (par exemple qui renvoie « @calc@post@scan …fi fi fi fi fi calc@next » sans retourner de ligne de code précise, au niveau du begin{document}).

    Pour éviter cet inconvénient, désactiver le package « silence » importé dans le préambule (ligne 167).

    • Merci pour cette trouvaille. Voir le commentaire de Luneart pour se passer de silence tout en évitant les warning dus aux minitoc.

  • cmonat

    Bonjour,

    je trouve ton document superbe !
    J’ai télécharger ton archive pour voir la structuration des différents fichiers que tu proposes, ça à l’air vraiment chouette comme réalisation. J’aimerai beaucoup m’en inspirer pour ma propre thèse, mais j’avoue que par rapport à toi je débute en LaTeX, du coup j’ai quelques questions.
    Avant de me lancer dans un ajustement adéquat à mon sujet/domaine de thèse, je voulais tester sur ton dossier d’exemple. Mais … impossible de modifier ne serai-ce que ton nom !
    Lors de la compilation du document Main.tex avec le script bash que tu proposes, il me demande les noms de fichiers (j’ai supposé qu’il fallait mettre ceux que tu indiques dans la « compilation générale ! » mais ça n’a pas l’air de suffir). De plus, régulièrement le terminal attend avec un « ? » que j’appuie sur la touche « entrée » pour poursuivre la compilation (enfin je crois =/). Ma question: comment fais-tu exactement pour re-compiler le contenu du dossier exampleManuscrit en changeant par exemple le nom du doctorant ?

    En espérant que toi, ou une âme charitable, pourra prendre quelques minutes pour m’expliquer tout ça !

    Quoiqu’il en soit bravo pour ton travail en LaTeX et félicitations pour ta thèse !

    • Salut ! Je suis en déplacement jusqu’à lundi, donc je vais pas pouvoir t’aider outre mesure d’ici là.
      Pour ce qui est de la compilation, tu peux te contenter de faire « pdflatex main » pour voir ce que ça donne. Pour changer les informations de la page de garde, regarde dans le main.tex. N’hésite pas si tu bloques encore.

    • Bonjour,
      Les bugs dont tu fais allusion sont maintenant corrigés
      (voir mon [EDIT] en fin d’article), mais vu mon retard, j’espère que tu
      les avais corrigés avant moi…

  • Nicolas Roelandt (Professionne

    Bonjour,

    Travail impressionnant !
    Fonctionne très bien dans texmaker ! (en général, quand je teste un template venu d’internet, il manque toujours des packages)

    Petit bug: le fichier Bordure.png est appelé par « bordure.png », en renommant le fichier ça fonctionne sans accroc.

    Il y a une ref qui ne passe pas (chap1, ligne 19) mais c’est mineur.

    Par contre Biber ne fonctionne pas du tout, et par conséquent la biblio, glossaire, liste des acronymes n’apparaissent pas

    • Bonjour,
      Si tu n’arrives pas à voir la référence, je pense que c’est parce que tu ne compiles pas le bon fichier avec bibtex (il ne faut pas compiler le Main, mais chaque chapitre).

      J’utilise ici natbib, donc a priori tu n’as pas besoin de biber pour ta biblio.

  • Rym

    Bonjour Dorian Merci beaucoup pour le template et tout le travail derrièrevue que c’est le premier template français sur lequel je tombe et que je rame pour traduire le mien en anglais (j’ai laissé tomber) . Mais j’arrive pas à  » le compiler j’obtiens cette erreur  »
    ! LaTeX Error: This NFSS system isn’t set up properly.

    Merci de bien vouloir m’aider

    • Salut ! Vu de loin, je vois pas trop d’où ça pourrait venir. Ca ressemble à un problème de packages pour certaines fontes mathématiques. Commence par commenter les paquets qui chargent ces fontes et regarde si ça fonctionne mieux.

    • Ca ressemble à une fonte manquante. Essaye en virant le package fourier (l.44 de Preambule.tex)

  • Timothée

    Salut Dorian,
    D’après les commentaires de cet article, j’ai l’impression d’être le seul (avec ma co-bureau, doctorante aussi) à rencontrer un problème concernant les labels newpage qui sont inactifs et ne renvoient aucune erreur particulière. On utilise TeXMaker sur Windows 7 et TeXShop sur OSX Yosemite.
    Est-ce que quelqu’un sait d’où ce problème pourrait venir ?
    Merci beaucoup pour cet excellent template !

    • Bonjour,
      Je ne comprends pas bien ton problème. Qu’entends-tu par « labels newpages » ?

    • Timothée

      ça a l’air d’être une histoire de package fancy et de pagestyle « plain » mais nous n’avons toujours pas résolu le problème. Des idées ? Encore merci ! Timothée

    • Bonjour,
      Je ne comprends pas trop ton problème. Qu’entends-tu par « les labels newpage » ?

  • Pingback: Ajouter un chapitre d’intro non numéroté à la table des matières | Le Blog de Dorian()

  • Bernard

    Merci beaucoup pour ce template, très chouette, beau travail!
    Apparemment je suis le premier à avoir le problème, le glossaire n’apparaissait pas. Si d’autres ont le problème, il suffit d’ajouter dans la macro de compilation la ligne juste après le « makeglossaries Main »:

    xindy -L french-C utf8 -I xindy -M Main-t Main.glg -o Main.gls Main.glo

    Tout marche nickel maintenant,
    Encore merci!

  • luxia

    Bonjour ! Déjà, merci, pour ce travail ! *_*
    Maintenant, j’ai une question : comment peut-on facilement inclure des .texayant une mise en forme différentes ? je pense notamment à une thèse sur article ou on doit joindre les articles deja publiés ou en cours de publication ? Je sèche sur le sujet.
    Merci d’avance !

    • Bonjour,
      J’avoue que je n’ai pas trop d’idée à te proposer.

      Une façon un peu sale consisterait à importer les PDF des articles (avec \includepdf).

      Une façon plus propre consisterait à modifier provisoirement la mise en page pour qu’elle ressemble à celle de l’article (ex : passer en double colonne avec le package multicol). Dans ce cas, attention au changement de langue pour babel [1].

      [1] http://www.kronto.org/thesis/tips/multiple-languages.html

    • Bonjour,
      Pour ton problème, je pense que le mieux est de changer localement la mise en forme pour que le texte ressemble à l’article en question.

      Tu peux par exemple passer en double colonne au milieu d’un document grâce au package multicol [1]. Par ailleurs, si tu veux basculer d’une langue à une autre, sache que babel permet ce genre de fantaisies [2].

      Bon courage pour ta rédaction !

      [1] https://www.ctan.org/pkg/multicol
      [2] http://www.kronto.org/thesis/tips/multiple-languages.html

  • Olivier

    Salut et merci pour ton travail, décortiquer ton code m’a juste fait faire un bond en avant (et m’avance énormément par la même occasion 😀 ).
    Du coup j’ai quelques questions:
    -Comment as tu inséré ton intro dans ta thèse? je pense que c’est un chapter* mais il ne veut pas apparaître dans ma table des matières…
    -j’ai également un souci de numérotation de page, les chiffres pairs sont bien à gauche de la page, mais les impairs sont centrés :s une idée de mon erreur?

    Encore merci!!!!!

    • Olivier

      En fait je viens de me rendre compte que sur ton exemple comme sur ton manuscrit j’observe la même chose:
      -sur la première partie en chiffres romains, les pairs sont à gauches et les impairs centrés.
      -sur la partie en chiffres arabes, seule la première page est centrée, la page 3 est correctement placée à droite.
      sauf que je ne vois pas de changement dans ton code…
      Chez moi j’ai tout mis en chiffres arabes, et tous les impairs sont centrés .

  • Simon

    Salut,
    Tout d’abord, un grand merci pour ton template bien foutu, ça m’a fait gagner un temps fou !
    J’ai cependant un problème avec le style de la bibliographie. J’aimerais utiliser le style « apalike » mais lorsque je remplace bibliographystyle{francaissc} par bibliographystyle{apalike} dans les chapitres 1 et 2, je reste dans le style « français ».

    J’ai essayé de bidouiller (je suis pas encore un expert en latex 😉 ) mais rien n’a marché ..

    Aurais-tu une idée pour me décoincer ?
    Cdlt,

  • ahlam

    Un très grand merci pour tous tes efforts et surtout pour le partage… Ta Template m’a beaucoup aidé et m’a aider un temps fou dans ma rédaction…

    J’ai juste un petit problème au niveau des nouveaux chapitres que j’ai ajouté moi même: les accents n’apparaissent pas!!! comment pourais-je régler le problème?

  • ahlam

    Un très grand merci pour tous tes efforts et surtout pour le partage… Ta Template m’a beaucoup aidé et m’a fait gagner un temps fou dans ma rédaction…

    J’ai juste un petit problème au niveau des nouveaux chapitres que j’ai ajouté moi même: les accents n’apparaissent pas!!! comment pourrais-je régler le problème?

    • Vu de loin, ça ressemble à un problème d’encodage. Vérifie que tes fichiers soient bien en UTF8.

  • Souhir

    Bonjour,
    Je vous remercie pour cette partage, mais je trouves des difficultés à utiliser votre template, et puisque je ne suis pas experte en latex, j’ai besoin de votre aide.
    Lors de la compilation, j’ai 4 types de warning
    1-frenchb.ldf error frenchb requires babel v.3.9i.
    2-package siunitx Error : Support package expl3 too old
    3-unkown option load-configurations = abbreviations
    4-Emergency stop RequirePackage{textcase}
    Merci d’avance.