Retour à l'accueil

LaTeX avec CPP et Make pour la typographie de manuels

L'article décrit un pipeline pour la typographie de manuels avec LaTeX, CPP, M4 et GNU Make. Exemples de macros pour images, listings, tableaux sont fournis. Analyse de la structure du projet et des options du préprocesseur pour UTF-8.

Typographie de manuels en LaTeX avec préprocesseurs CPP M4
Advertisement 728x90

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.

Google AdInline article slot

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.

Google AdInline article slot

É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 :

Google AdInline article slot
#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

Advertisement 728x90

Lire ensuite