Volver al inicio

LaTeX con CPP y Make para composición de libros de texto

El artículo describe un pipeline para composición de libros de texto con LaTeX, CPP, M4 y GNU Make. Se proporcionan ejemplos de macros para imágenes, listados, tablas. Análisis de la estructura del proyecto y claves del preprocesador para UTF-8.

Composición de libros de texto en LaTeX con preprocesadores CPP M4
Advertisement 728x90

Automatizando la maquetación de libros de texto: LaTeX con preprocesadores CPP y M4

Para automatizar la maquetación de libros de texto o documentación técnica, se utiliza una combinación de LaTeX, el preprocesador CPP, GNU Make y utilidades como M4. Esto separa el contenido del formato, permite macros y gestiona las compilaciones a través de Makefile. Herramientas clave: pdflatex de MiKTeX, Cygwin para utilidades POSIX, Eclipse como editor, git para control de versiones.

El conjunto de software requerido incluye:

  • cpp — preprocesador C para compilación condicional e includes.
  • pdflatex — compilador LaTeX (ruta: C:\Program Files\MiKTeX\miktex\bin\x64\pdflatex.exe).
  • make — orquestador de compilaciones.
  • m4 — preprocesador alternativo con scripting.
  • pandoc — convertidor a DOCX.
  • Adicionalmente: realpath, sort, tree, grep, MiKTeX.

Verificar la disponibilidad de pdflatex es crítico para el manejo correcto del cirílico.

Google AdInline article slot

Pipeline de procesamiento de archivos

La compilación se estructura como un pipeline: .texi (fuentes) → preprocesador (cpp/m4) → .tex → pdflatex → PDF. Las fuentes (.texi, .mk, pix/) se versionan en git. Cada capítulo es una carpeta separada con .texi, .mk e imágenes.

Ejemplo de .texi para un capítulo:

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 gestiona las dependencias, generando .tex a partir de .texi usando cpp o m4.

Google AdInline article slot

Elementos básicos de LaTeX para textos técnicos

LaTeX automatiza la numeración, sangrías y fórmulas. Conjunto mínimo de construcciones:

  • Imágenes.
  • Citas.
  • Listados de código.
  • Tablas.
  • Enumeraciones.
  • Hipervínculos.
  • Ecuaciones.
  • Tabla de contenidos.
  • Bibliografía.

Inserción de imágenes

Bloque estándar:

\begin{figure}[h]
    \centering
    \includegraphics[width=0.99\textwidth]{arch}
    \caption{Harvard architecture }
    \label{fig:mesh1}
\end{figure}

Macro 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}

En 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
                          )     )

Citas y listados

Cita:

\begin{quote}
    "In any dele important define prioritety. 
    Inache vtorostepennoe, khotya and nuzhnoe, otnimet all sily 
    and not dasetcoyti to glavnogo."
\end{quote}

Listado (configuración en preámbulo 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}

En listados de código C, escapar # para evitar conflictos con el preprocesador.

Tablas y listas

Tabla de acrónimos:

\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}

Lista numerada:

\begin{enumerate}
    \item 
    \item 
    \item 
\end{enumerate}

Encabezados, referencias y preámbulo

Encabezados: \usepackage{fancyhdr}, \pagestyle{fancy}.

Referencias: \usepackage[hidelinks]{hyperref}, \usepackage{cleveref}. Etiquetas \label{} y \Cref{}.

Ejemplo:

\subsubsection{Upravlenie diskretnymi outputami}
\label{DOUTctrl}
...
\item Provide the ability to read discrete inputs; \Cref{DinRead}

Configurando CPP como preprocesador universal

Claves para LaTeX:

| Option | Description |

|--------|-------------|

| -E | UTF-8 output |

| -P | No linemarkers |

| -C | Preserve comments |

| -traditional-cpp | Preserve whitespace |

| -nostdinc | No standard includes |

| -fexec-charset=UTF-8 | UTF-8 encoding |

| -DHAS_XXX | Macros |

| -undef | No GCC macros |

CPP es aplicable para GraphViz, ASM, scripts LD.

Estructura del proyecto

Repositorio: carpetas por capítulos (chapter.mk, chapter.texi, pix/), común: preamble.texi, library.mk.

Ejemplo tree:

.
├── about_author
│   ├── about_author.mk
│   ├── about_author.texi
│   └── pix
... (12 directories, 33 files)

El .tex raíz recopila capítulos vía include.

Puntos clave

  • Separación de preocupaciones: El autor se centra en el contenido, LaTeX en la maquetación.
  • Preprocesamiento: CPP/M4 para macros, includes, compilación condicional.
  • Automatización: GNU Make como gestor de dependencias para capítulos e imágenes.
  • Multiplataforma: Cygwin + MiKTeX para Windows.
  • Extensibilidad: Fácil agregar listados, fórmulas, bibliografía.

— Editorial Team

Advertisement 728x90

Leer después