Automatisierung des Lehrbuch-Layouts: LaTeX mit CPP- und M4-Preprocessoren
Zur Automatisierung des Layouts von Lehrbüchern oder technischer Dokumentation wird eine Kombination aus LaTeX, dem CPP-Preprozessor, GNU Make und Hilfsprogrammen wie M4 verwendet. Dies trennt Inhalt von Formatierung, ermöglicht Makros und verwaltet Builds über eine Makefile. Wichtige Tools: pdflatex aus MiKTeX, Cygwin für POSIX-Utility, Eclipse als Editor, git für Versionskontrolle.
Erforderliche Software umfasst:
- cpp — C-Preprozessor für bedingte Kompilierung und Includes.
- pdflatex — LaTeX-Kompiler (Pfad: C:\Program Files\MiKTeX\miktex\bin\x64\pdflatex.exe).
- make — Build-Orchestrator.
- m4 — alternativer Preprozessor mit Skripting.
- pandoc — Konverter zu DOCX.
- Zusätzlich: realpath, sort, tree, grep, MiKTeX.
Die Überprüfung der Verfügbarkeit von pdflatex ist entscheidend für die korrekte Handhabung von Kyrillisch.
Dateiverarbeitungs-Pipeline
Der Build ist als Pipeline strukturiert: .texi (Quellen) → Preprozessor (cpp/m4) → .tex → pdflatex → PDF. Quellen (.texi, .mk, pix/) werden in git versioniert. Jedes Kapitel ist ein separater Ordner mit .texi, .mk und Bildern.
Beispiel .texi für ein Kapitel:
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 verwaltet Abhängigkeiten und generiert .tex aus .texi mit cpp oder m4.
Grundlegende LaTeX-Elemente für technische Texte
LaTeX automatisiert Nummerierung, Einrückungen und Formeln. Minimaler Satz von Konstrukten:
- Bilder.
- Zitate.
- Code-Listings.
- Tabellen.
- Aufzählungen.
- Hyperlinks.
- Gleichungen.
- Inhaltsverzeichnis.
- Bibliografie.
Bilder einfügen
Standardblock:
\begin{figure}[h]
\centering
\includegraphics[width=0.99\textwidth]{arch}
\caption{Harvard architecture }
\label{fig:mesh1}
\end{figure}
CPP-Makro:
#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}
Bei 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
) )
Zitate und Listings
Zitat:
\begin{quote}
"In any dele important define prioritety.
Inache vtorostepennoe, khotya and nuzhnoe, otnimet all sily
and not dasetcoyti to glavnogo."
\end{quote}
Listing (Präambel-Einstellung 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}
In C-Code-Listings muss # escaped werden, um Konflikte mit dem Preprozessor zu vermeiden.
Tabellen und Listen
Akronym-Tabelle:
\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}
Nummerierte Liste:
\begin{enumerate}
\item
\item
\item
\end{enumerate}
Kopfzeilen, Verweise und Präambel
Kopfzeilen: \usepackage{fancyhdr}, \pagestyle{fancy}.
Verweise: \usepackage[hidelinks]{hyperref}, \usepackage{cleveref}. Labels \label{} und \Cref{}.
Beispiel:
\subsubsection{Upravlenie diskretnymi outputami}
\label{DOUTctrl}
...
\item Provide the ability to read discrete inputs; \Cref{DinRead}
Konfiguration von CPP als universeller Preprozessor
Wichtige Optionen für LaTeX:
| Option | Beschreibung |
|---------------------|-------------------------------|
| -E | UTF-8-Ausgabe |
| -P | Keine Zeilenmarkierer |
| -C | Kommentare erhalten |
| -traditional-cpp | Leerzeichen erhalten |
| -nostdinc | Keine Standard-Includes |
| -fexec-charset=UTF-8| UTF-8-Kodierung |
| -DHAS_XXX | Makros |
| -undef | Keine GCC-Makros |
CPP ist anwendbar für GraphViz, ASM, LD-Skripte.
Projektstruktur
Repository: Ordner nach Kapiteln (chapter.mk, chapter.texi, pix/), common: preamble.texi, library.mk.
Beispiel tree:
.
├── about_author
│ ├── about_author.mk
│ ├── about_author.texi
│ └── pix
... (12 directories, 33 files)
Die Root-.tex sammelt Kapitel via include.
Wichtige Punkte
- Trennung der Verantwortlichkeiten: Autor konzentriert sich auf Inhalt, LaTeX auf Layout.
- Preprocessing: CPP/M4 für Makros, Includes, bedingte Kompilierung.
- Automatisierung: GNU Make als Abhängigkeitsmanager für Kapitel und Bilder.
- Plattformübergreifend: Cygwin + MiKTeX für Windows.
- Erweiterbarkeit: Einfach Listings, Formeln, Bibliografie hinzufügen.
— Editorial Team
Noch keine Kommentare.