# Automatizace sazby učebnic: LaTeX s preprocesory CPP a M4
Pro automatizaci sazby učebnic nebo technické dokumentace se používá kombinace LaTeX, preprocesoru CPP, GNU Make a utilit jako M4. To umožňuje oddělit obsah od formátování, používat makra a řídit sestavení přes Makefile. Hlavní nástroje: pdflatex z MiKTeX, Cygwin pro POSIX utilit, Eclipse jako editor, git pro verzování.
Potřebný soubor softwaru zahrnuje:
- cpp — preprocesor C pro podmínkovou kompilaci a include.
- pdflatex — kompilátor LaTeX (cesta: C:\Program Files\MiKTeX\miktex\bin\x64\pdflatex.exe).
- make — orchestrátor sestavení.
- m4 — alternativní preprocesor se skriptováním.
- pandoc — konvertor do DOCX.
- Doplňkové: realpath, sort, tree, grep, MiKTeX.
Kontrola dostupnosti pdflatex je kritická pro správné zpracování cyrilice.
Konvejér zpracování souborů
Sestavení je postaveno jako pipeline: .texi (zdrojáky) → preprocesor (cpp/m4) → .tex → pdflatex → PDF. Zdrojáky (.texi, .mk, pix/) se versionují v git. Každá kapitola — samostatná složka s .texi, .mk a obrázky.
Příklad .texi pro kapitolu:
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 řídí závislosti a generuje .tex z .texi pomocí cpp nebo m4.
Základní prvky LaTeX pro technické texty
LaTeX automatizuje číslování, odsazení a vzorce. Minimální sada konstrukcí:
- Obrázky.
- Citace.
- Výpisy kódu.
- Tabulky.
- Výčty.
- Hypertextové odkazy.
- Rovnice.
- Obsah.
- Bibliografie.
Vložení obrázků
Standardní blok:
\begin{figure}[h]
\centering
\includegraphics[width=0.99\textwidth]{arch}
\caption{Harvard architecture }
\label{fig:mesh1}
\end{figure}
Makra v 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}
V 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
) )
Citace a výpisy
Citace:
\begin{quote}
"In any dele important define prioritety.
Inache vtorostepennoe, khotya and nuzhnoe, otnimet all sily
and not dasetcoyti to glavnogo."
\end{quote}
Výpis (nastavení v preambuli 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}
Ve výpisech C kódu escapovat #, aby se vyhnuli konfliktu s preprocesorem.
Tabulky a seznamy
Tabulka akronymů:
\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}
Číslovaný seznam:
\begin{enumerate}
\item
\item
\item
\end{enumerate}
Záhlaví a zápatí, odkazy a preambule
Záhlaví a zápatí: \usepackage{fancyhdr}, \pagestyle{fancy}.
Odkazy: \usepackage[hidelinks]{hyperref}, \usepackage{cleveref}. Štítky \label{} a \Cref{}.
Příklad:
\subsubsection{Upravlenie diskretnymi outputami}
\label{DOUTctrl}
...
\item Poskytnout možnost čtení diskrétních vstupů; \Cref{DinRead}
Konfigurace CPP jako univerzálního preprocesoru
Klíče pro LaTeX:
| Volba | Popis |
|-------|-------|
| -E | UTF-8 výstup |
| -P | Bez linemarkers |
| -C | Zachovat komentáře |
| -traditional-cpp | Zachovat mezery |
| -nostdinc | Bez std include |
| -fexec-charset=UTF-8 | Kódování UTF-8 |
| -DHAS_XXX | Makra |
| -undef | Bez GCC maker |
CPP je použitelný pro GraphViz, ASM a LD-skripty.
Struktura projektu
Repozitář: složky podle kapitol (chapter.mk, chapter.texi, pix/), společné: preamble.texi, library.mk.
Příklad tree:
.
├── about_author
│ ├── about_author.mk
│ ├── about_author.texi
│ └── pix
... (12 directories, 33 files)
Kořenový .tex sbírá kapitoly přes include.
Co je důležité
- Oddělení odpovědnosti: Autor se soustředí na obsah, LaTeX na layout.
- Předzpracování: CPP/M4 pro makra, include a podmínkovou kompilaci.
- Automatizace: GNU Make jako správce závislostí pro kapitoly a obrázky.
- Křížová platforma: Cygwin + MiKTeX pro Windows.
- Rozšiřitelnost: Snadno přidávat výpisy, vzorce a bibliografii.
— Editorial Team
Zatím žádné komentáře.