Automatiser la mise en page des manuels : LaTeX avec les préprocesseurs CPP et M4
Pour automatiser la mise en page des manuels ou de la documentation technique, une combinaison de LaTeX, du préprocesseur CPP, GNU Make et d'utilitaires comme M4 est utilisée. Cela sépare le contenu de la mise en forme, permet les macros et gère les constructions via Makefile. Outils clés : pdflatex de MiKTeX, Cygwin pour les utilitaires POSIX, Eclipse comme éditeur, git pour le contrôle de version.
L'ensemble des logiciels requis inclut :
- cpp — préprocesseur C pour la compilation conditionnelle et les inclusions.
- pdflatex — compilateur LaTeX (chemin : C:\Program Files\MiKTeX\miktex\bin\x64\pdflatex.exe).
- make — orchestrateur de construction.
- m4 — préprocesseur alternatif avec scripting.
- pandoc — convertisseur vers DOCX.
- De plus : realpath, sort, tree, grep, MiKTeX.
Vérifier la disponibilité de pdflatex est crucial pour une gestion correcte du cyrillique.
Pipeline de traitement des fichiers
La construction est structurée comme un pipeline : .texi (sources) → préprocesseur (cpp/m4) → .tex → pdflatex → PDF. Les sources (.texi, .mk, pix/) sont versionnées dans git. Chaque chapitre est un dossier séparé avec .texi, .mk et images.
Exemple de .texi pour un chapitre :
sinclude(`latex_m4_preproc_utils.texi')
\graphicspath{ {PATH_CHAPTER_X_DIR/pix} }
\chapter{Name Glavy}
\section{Prolog}
khkhkhkhkhkhkhkhkhkhkhkhkh
\section{Paragraf_1}
khkhkhkhkhkhkhkhkhkh
\section{Itog}
khkhkhkhkhkhkhkhkhkhkhkh
\section{Giperssylki}
\begin{enumerate}
\item \href{wwwwwwwwwwwwwwwww}{zzzzzzzzzzzz}
\end{enumerate}
GNU Make gère les dépendances, générant .tex à partir de .texi en utilisant cpp ou m4.
Éléments de base LaTeX pour les textes techniques
LaTeX automatise la numérotation, les retraits et les formules. Ensemble minimal de constructions :
- Images.
- Citations.
- Listes de code.
- Tableaux.
- Énumérations.
- Hyperliens.
- Équations.
- Table des matières.
- Bibliographie.
Insertion d'images
Bloc standard :
\begin{figure}[h]
\centering
\includegraphics[width=0.99\textwidth]{arch}
\caption{Harvard architecture }
\label{fig:mesh1}
\end{figure}
Macro CPP :
#define INSERT_PIX(FILE_NAME,HINT ) \
\begin{figure}[h] \
\centering \
\includegraphics[width=0.99\textwidth]{FILE_NAME} \
\caption{HINT } \
\label{fig:FILE_NAME} \
\end{figure}
Avec M4 :
define(INSERT_PIX2, format(
\begin{figure}[h!]
\centering
\includegraphics[width=0.75 \textwidth]{%s}
\caption{%s }
\label{fig:%s }
\end{figure}
, $1, $2, $1
) )
Citations et listes de code
Citation :
\begin{quote}
"In any dele important define prioritety.
Inache vtorostepennoe, khotya and nuzhnoe, otnimet all sily
and not dasetcoyti to glavnogo."
\end{quote}
Liste de code (configuration du préambule lstset : breaklines=true, frame=single) :
\begin{lstlisting}[label=some-code,caption=Ruleilnyy if]
int ret = NVRAM_Get(ID_IPv4_ROLE, tmp, 1, &tmp_len);
if (MM_RET_CODE_OK != ret) {
return ERROR_CODE_HARDWARE_FAULT;
}
\end{lstlisting}
Dans les listes de code C, échapper # pour éviter les conflits avec le préprocesseur.
Tableaux et listes
Table des acronymes :
\begin{tabular} {ll}
Akronim & Rasshifrovka \\
\hline
TUI & Text-based user interface \\
CLI & command-line interface \\
UART & universal asynchronous receiver / transmitter \\
JTAG & Joint Test Action Group \\
LED & light-emitting diode \\
CIC & Cascaded integrator–comb \\
\end{tabular}
Liste numérotée :
\begin{enumerate}
\item
\item
\item
\end{enumerate}
En-têtes, références et préambule
En-têtes : \usepackage{fancyhdr}, \pagestyle{fancy}.
Références : \usepackage[hidelinks]{hyperref}, \usepackage{cleveref}. Étiquettes \label{} et \Cref{}.
Exemple :
\subsubsection{Upravlenie diskretnymi outputami}
\label{DOUTctrl}
...
\item Provide the ability to read discrete inputs; \Cref{DinRead}
Configuration de CPP comme préprocesseur universel
Clés pour LaTeX :
| Option | Description |
|--------|-------------|
| -E | Sortie UTF-8 |
| -P | Pas de marqueurs de ligne |
| -C | Préserver les commentaires |
| -traditional-cpp | Préserver les espaces |
| -nostdinc | Pas d'inclusions standard |
| -fexec-charset=UTF-8 | Codage UTF-8 |
| -DHAS_XXX | Macros |
| -undef | Pas de macros GCC |
CPP est applicable pour GraphViz, ASM, scripts LD.
Structure du projet
Dépôt : dossiers par chapitres (chapter.mk, chapter.texi, pix/), commun : preamble.texi, library.mk.
Exemple d'arborescence :
.
├── about_author
│ ├── about_author.mk
│ ├── about_author.texi
│ └── pix
... (12 directories, 33 files)
Le .tex racine collecte les chapitres via include.
Points clés
- Séparation des préoccupations : L'auteur se concentre sur le contenu, LaTeX sur la mise en page.
- Préprocessing : CPP/M4 pour macros, inclusions, compilation conditionnelle.
- Automatisation : GNU Make comme gestionnaire de dépendances pour chapitres et images.
- Multiplateforme : Cygwin + MiKTeX pour Windows.
- Extensibilité : Facile d'ajouter listes de code, formules, bibliographie.
— Editorial Team
Aucun commentaire pour le moment.