Travailler avec des sous-fichiers

De nombreux manuels et cours sur LaTeX conseillent de travailler avec des sous-fichiers, permettant de scinder ses documents de travail en plusieurs fichiers (e.g. un fichier par chapitre pour l’écriture d’un livre).

Prendre l’habitude d’une telle pratique peut-être une très bonne idée, mais il peut également être très intéressant de pousser plus loin la réflexion. Dans la mesure où le document va être scinder, il peut être intéressant de pouvoir compiler chaque sous-fichier de manière indépendante. Pour cela j’ai écrit un petit package (que vous ne trouverez pas sur le CTAN) qui permet de compiler un fichier à l’intérieur d’un plus général ou de manière indépendante, sans avoir à modifier à chaque fois le code source.

Concernant l’appel des packages

Il est nécessaire d’écrire l’ensemble des appels de packages dans un fichier à part puisque ce dernier sera appelé par le document maître à la compilation, mais également par les sous-documents lorsqu’on les compilera de manière indépendante.

Dans ce fichier vous pouvez appeler les packages que vous souhaitez, aucun n’étant nécessaire au bon fonctionnement du package que j’ai écrit. Vous pouvez également y indiquer votre nom avec la commande \author{} et éventuellement une date avec la commande \date{}.

Avec le fichier maître…

Le fichier principal se construit globalement de la même manière que d’habitude, seulement il est nécessaire d’initialiser un compteur particulier qui servira lors de la compilation du document et d’appeler le fichier de préambule créé préalablement. Le compteur en question s’initialise de la manière suivante :

\newcounter{multipart}

Ainsi, un exemple minimal de fichier maître se présenterait comme suivant :

\documentclass{book}
\input{preambule} % le fichier indépendant qui contient l'appel des packages et la définition de l'auteur grâce à la commande \author{}
\newcounter{multipart}
\title{Le titre}

\begin{document}
\maketitle
\input{le sous-fichier}
\end{document}

… et les fichiers esclaves

Il s’agit à présent de nous arrêter sur les sous-fichiers. Il s’agit tout d’abord d’intégrer le fichier multipart.tex qui contient les indications nécessaires au bon fonctionnement du processus (et que nous développerons plus bas). Ce fichier doit se trouver dans le même dossier que le fichier compilé. En cas d’utilisation de sous-dossiers pour les fichiers, il est nécessaire que ce fichier se trouve également dans ces dossiers. (Un simple lien symbolique permet de simuler la présence de ce fichier sans avoir à les mettre à jour à chaque modification.)

Il convient ensuite d’appeler la commande \debutmultipart{}{} qui demande deux arguments. Le premier correspond au titre du document. Il apparaîtra comme un titre de chapitre lorsque le document sera compilé en même temps que le fichier maître (qui correspond à un livre), mais il deviendra le titre d’un article lorsque le fichier sera compilé seul (le document prenant alors la classe article). Le second argument correspond simplement au chemin du fichier de préambule créé plus tôt (ce chemin est le chemin relatif depuis le sous-fichier, il servira lors de la compilation autonome).

À la suite de cela vous n’avez qu’à écrire votre document (avec un premier niveau de titre commençant à la section).

En fin de fichier, il vous suffit d’indiquer la fin du sous-fichier par la commande \finmultipart{}.

Un exemple minimal serait le suivant :

\input{./multipart}
\debutmultipart{Mon titre de chapitre (d'article)}{../preambule}

Le corps de texte de mon document.

\finmultipart{}

Le package multipart

Il ne nous reste pus qu’à créer (dans votre cas copier) le package en lui-même, dans un fichier multipart.tex.

\ifdefined\debutmultipart
\else
  \newcommand{\debutmultipart}[2]{%
    % Définition du titre du document
    \ifdefined\titre
      \renewcommand{\titre}[0]{#1}
    \else
      \newcommand{\titre}[0]{#1}
    \fi
    % si le compteur 'multipart' existe...
    \ifcsname c@multipart\endcsname\stepcounter{multipart}
      % ...alors c'est que le document est chargé par le document principal
      % et le préambule a déjà été chargé par le document principal
      % le titre est donc un chapitre
      \chapter*{\titre{}}
      \addcontentsline{toc}{chapter}{\titre{}}
    \else    
    % ...sinon c'est que le document est compilé en autonomie

      % on définit le type du document
      \documentclass[a4paper]{article}

      % on charge le préambule
      \input{#2}

      % le titre est donc le titre du document
      \title{\titre{}}

      % on commence le contenu
      \begin{document}

      % on met en place le titre du document
      \maketitle
    \fi
  }

  \newcommand{\finmultipart}[0]{%
    % si le compteur 'principal' existe...
    \ifcsname c@multipart\endcsname \stepcounter{multipart}    
      % ...alors ne rien faire car le document continue dans le document principal
    \else
      % sinon on termine le contenu
      \end{document}
    \fi
  }
\fi

Voilà, il ne vous reste plus qu’à compiler à votre convenance le document principal ou le sous-document pour obtenir le fichier de votre choix.