Zpět na domů

LaTeX s CPP a Make pro sazbu učebnic

Článek popisuje pipeline pro sazbu učebnic s LaTeX, CPP, M4 a GNU Make. Uvádějí se příklady maker pro obrázky, výpisy, tabulky. Rozbor struktury projektu a klíčů preprocesoru pro UTF-8.

Sazba učebnic na LaTeX s preprocesory CPP M4
Advertisement 728x90

# 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.

Google AdInline article slot

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.

Google AdInline article slot

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:

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}

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

Advertisement 728x90

Číst dál