Powrót do strony głównej

LaTeX z CPP i Make do składania podręczników

Artykuł opisuje potok do składania podręczników z LaTeX, CPP, M4 i GNU Make. Przykłady makr dla obrazów, listingów, tabel. Analiza struktury projektu i kluczy preprocesora dla UTF-8.

Składanie podręczników w LaTeX z preprocesorami CPP M4
Advertisement 728x90

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

Google AdInline article slot

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.

Google AdInline article slot

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:

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}

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

Advertisement 728x90

Czytaj dalej