Zurück zur Startseite

LaTeX mit CPP und Make für den Satz von Lehrbüchern

Der Artikel beschreibt eine Pipeline für den Satz von Lehrbüchern mit LaTeX, CPP, M4 und GNU Make. Beispiele für Makros für Bilder, Listings, Tabellen werden bereitgestellt. Analyse der Projektstruktur und Präprozessor-Schlüssel für UTF-8.

Satz von Lehrbüchern in LaTeX mit CPP M4-Präprozessoren
Advertisement 728x90

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.

Google AdInline article slot

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.

Google AdInline article slot

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:

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}

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

Advertisement 728x90

Weiterlesen