# Automatyzacja składania podręczników: LaTeX z preprocesorami CPP i M4
Do automatyzacji składania podręczników lub dokumentacji technicznej stosuje się kombinację LaTeX, preprocesora CPP, GNU Make oraz narzędzi takich jak M4. Pozwala to oddzielić treść od formatowania, stosować makra i zarządzać budowaniem za pomocą Makefile. Główne narzędzia: pdflatex z MiKTeX, Cygwin dla narzędzi POSIX, Eclipse jako edytor, git do kontroli wersji.
Wymagany zestaw oprogramowania obejmuje:
- cpp — preprocesor C do warunkowej kompilacji i dyrektyw include.
- pdflatex — kompilator LaTeX (ścieżka: C:\Program Files\MiKTeX\miktex\bin\x64\pdflatex.exe).
- make — koordynator budowania.
- m4 — alternatywny preprocesor z elementami skryptowymi.
- pandoc — konwerter do DOCX.
- Dodatkowo: realpath, sort, tree, grep, MiKTeX.
Sprawdzenie dostępności pdflatex jest kluczowe dla poprawnego przetwarzania cyrylicy.
Potok przetwarzania plików
Budowa jest zorganizowana jako potok: .texi (źródła) → preprocesor (cpp/m4) → .tex → pdflatex → PDF. Źródła (.texi, .mk, pix/) są wersjonowane w git. Każda rozdział to osobny folder z .texi, .mk i grafikami.
Przykład .texi dla rozdziału:
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 zarządza zależnościami, generując .tex z .texi za pomocą cpp lub m4.
Podstawowe elementy LaTeX dla tekstów technicznych
LaTeX automatyzuje numerację, wcięcia, formuły. Minimalny zestaw konstrukcji:
- Grafiki.
- Cytaty.
- Listingu kodu.
- Tabele.
- Wyliczenia.
- Hiperłącza.
- Równania.
- Spis treści.
- Bibliografia.
Wstawianie grafik
Standardowy blok:
\begin{figure}[h]
\centering
\includegraphics[width=0.99\textwidth]{arch}
\caption{Harvard architecture }
\label{fig:mesh1}
\end{figure}
Makro w 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}
W 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
) )
Cytaty i listingi
Cytat:
\begin{quote}
"In any dele important define prioritety.
Inache vtorostepennoe, khotya and nuzhnoe, otnimet all sily
and not dasetcoyti to glavnogo."
\end{quote}
Listing (ustawienia w preambule 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}
W listingach kodu C należy ekranować #, aby uniknąć konfliktu z preprocesorem.
Tabele i listy
Tabela akronimów:
\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}
Wyliczenie numerowane:
\begin{enumerate}
\item
\item
\item
\end{enumerate}
Kolontytuły, odsyłacze i preambuła
Kolontytuły: \usepackage{fancyhdr}, \pagestyle{fancy}.
Odsyłacze: \usepackage[hidelinks]{hyperref}, \usepackage{cleveref}. Etykiety \label{} i \Cref{}.
Przykład:
\subsubsection{Upravlenie diskretnymi outputami}
\label{DOUTctrl}
...
\item Predostavit vozmozhnost chteniya diskretnykh vkhodov; \Cref{DinRead}
Konfiguracja CPP jako uniwersalnego preprocesora
Opcje dla LaTeX:
| Opcja | Opis |
|-------|------|
| -E | Wyjście UTF-8 |
| -P | Bez znaczników linii |
| -C | Zachowaj komentarze |
| -traditional-cpp | Zachowaj białe znaki |
| -nostdinc | Bez standardowych include |
| -fexec-charset=UTF-8 | Kodowanie UTF-8 |
| -DHAS_XXX | Makra |
| -undef | Bez makr GCC |
CPP nadaje się do GraphViz, ASM, skryptów LD.
Struktura projektu
Repozytorium: foldery według rozdziałów (chapter.mk, chapter.texi, pix/), wspólne: preamble.texi, library.mk.
Przykład tree:
.
├── about_author
│ ├── about_author.mk
│ ├── about_author.texi
│ └── pix
... (12 directories, 33 files)
Główny .tex składa rozdziały za pomocą include.
Co ważne
- Podział odpowiedzialności: Autor skupia się na treści, LaTeX na layout.
- Praprzetwarzanie: CPP/M4 do makr, include, warunkowej kompilacji.
- Automatyzacja: GNU Make jako menedżer zależności dla rozdziałów i grafik.
- Wieloplatformowość: Cygwin + MiKTeX na Windows.
- Rozszerzalność: Łatwo dodawać listingi, formuły, bibliografię.
— Editorial Team
Brak komentarzy.