교과서 레이아웃 자동화: CPP와 M4 전처리기를 사용한 LaTeX
교과서나 기술 문서의 레이아웃을 자동화하기 위해 LaTeX, CPP 전처리기, GNU Make, M4 같은 유틸리티를 조합하여 사용합니다. 이는 콘텐츠와 포맷팅을 분리하고, 매크로를 활성화하며, Makefile을 통해 빌드를 관리합니다. 주요 도구: MiKTeX의 pdflatex, POSIX 유틸리티를 위한 Cygwin, 편집기로 Eclipse, 버전 관리를 위한 git.
필요한 소프트웨어 세트에는 다음이 포함됩니다:
- cpp — 조건부 컴파일 및 include를 위한 C 전처리기.
- pdflatex — LaTeX 컴파일러 (경로: C:\Program Files\MiKTeX\miktex\bin\x64\pdflatex.exe).
- make — 빌드 오케스트레이터.
- m4 — 스크립팅이 가능한 대체 전처리기.
- pandoc — DOCX 변환기.
- 추가: realpath, sort, tree, grep, MiKTeX.
pdflatex의 가용성을 확인하는 것은 올바른 키릴 문자 처리에 중요합니다.
파일 처리 파이프라인
빌드는 파이프라인으로 구성됩니다: .texi (소스) → 전처리기 (cpp/m4) → .tex → pdflatex → PDF. 소스 (.texi, .mk, pix/)는 git으로 버전 관리됩니다. 각 장은 .texi, .mk, 이미지로 구성된 별도의 폴더입니다.
장 예시 .texi:
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는 종속성을 관리하며, cpp 또는 m4를 사용하여 .texi에서 .tex를 생성합니다.
기술 텍스트를 위한 기본 LaTeX 요소
LaTeX는 번호 매기기, 들여쓰기, 수식을 자동화합니다. 최소 구성 요소 세트:
- 이미지.
- 인용.
- 코드 목록.
- 표.
- 열거.
- 하이퍼링크.
- 방정식.
- 목차.
- 참고문헌.
이미지 삽입
표준 블록:
\begin{figure}[h]
\centering
\includegraphics[width=0.99\textwidth]{arch}
\caption{Harvard architecture }
\label{fig:mesh1}
\end{figure}
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}
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
) )
인용과 목록
인용:
\begin{quote}
"In any dele important define prioritety.
Inache vtorostepennoe, khotya and nuzhnoe, otnimet all sily
and not dasetcoyti to glavnogo."
\end{quote}
목록 (preamble 설정 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}
C 코드 목록에서 전처리기와의 충돌을 피하기 위해 #를 이스케이프합니다.
표와 리스트
약어 표:
\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}
번호 매긴 리스트:
\begin{enumerate}
\item
\item
\item
\end{enumerate}
헤더, 참조, 프리앰블
헤더: \usepackage{fancyhdr}, \pagestyle{fancy}.
참조: \usepackage[hidelinks]{hyperref}, \usepackage{cleveref}. 레이블 \label{} 및 \Cref{}.
예시:
\subsubsection{Upravlenie diskretnymi outputami}
\label{DOUTctrl}
...
\item Provide the ability to read discrete inputs; \Cref{DinRead}
범용 전처리기로서의 CPP 구성
LaTeX를 위한 키:
| 옵션 | 설명 |
|--------|-------------|
| -E | UTF-8 출력 |
| -P | 라인 마커 없음 |
| -C | 주석 보존 |
| -traditional-cpp | 공백 보존 |
| -nostdinc | 표준 include 없음 |
| -fexec-charset=UTF-8 | UTF-8 인코딩 |
| -DHAS_XXX | 매크로 |
| -undef | GCC 매크로 없음 |
CPP는 GraphViz, ASM, LD 스크립트에 적용 가능합니다.
프로젝트 구조
리포지토리: 장별 폴더 (chapter.mk, chapter.texi, pix/), 공통: preamble.texi, library.mk.
트리 예시:
.
├── about_author
│ ├── about_author.mk
│ ├── about_author.texi
│ └── pix
... (12 directories, 33 files)
루트 .tex는 include를 통해 장을 수집합니다.
주요 포인트
- 관심사 분리: 저자는 콘텐츠에 집중, LaTeX는 레이아웃 담당.
- 전처리: 매크로, include, 조건부 컴파일을 위한 CPP/M4.
- 자동화: 장과 이미지를 위한 종속성 관리자 GNU Make.
- 크로스 플랫폼: Windows를 위한 Cygwin + MiKTeX.
- 확장성: 목록, 수식, 참고문헌 쉽게 추가.
— Editorial Team
아직 댓글이 없습니다.