LaTeX中,常将大型文档分解为不同的小文档,然后通过\include命令将多个文件联合编译为一个文档。为了简化调试中的编译过程,可以使用\includeonly命令指定特定的需要编译的文件。
在使用Beamer宏包制作演示文稿时,将不同章节的tex代码分解在不同的小文件中。
当需要多带带将每一章的内容独自生成PDF文档时,往往需要为每一个独立的PDF文档设置不同的子标题。此时,如果用\includeonly命令则无法实现这一需求。
在此,可以使用LaTeX提供的\ifcase\or\fi结构,实现这一需求,如:
\documentclass{ctexbeamer}
\def\chnum{1}
% 根据需要载入宏包
\ifcase\chnum\relax
% 第0章
\usepackage{multirow}
\or % 第1章
\usepackage{multirow}
\usepackage{pifont}
\or % 第2章
\usepackage{minted}
\usepackage[os=win]{menukeys}
\fi
% 设置标题==================================================
\title[\textsc{C Language Programming}] % (可选,仅当标题过长时使用)
{C语言程序程序设计}
\ifcase\chnum\relax
% 第0章
\subtitle[绪论]{绪论} % (可选,仅当标题过长时使用)
\or % 第1章
\subtitle[基础知识]{基础知识} % (可选,仅当标题过长时使用)
\or % 第2章
\subtitle[算法简介]{算法简介} % (可选,仅当标题过长时使用)
\fi
\author[XXX]{XXX} % (可选,仅当有多个作者时使用)
\date{2019年秋}
% 定义章选择命令
\newcommand\seledchap[1]{%
\ifcase#1\relax
% 第0章
\include{data/ch00} % 绪论
\or % 第1章
\include{data/ch01} % 基础知识
\or % 第2章
\include{data/ch02} % 算法
\fi
}
\begin{document} %在document环境中撰写文档
% plain选项移除标题页的边栏和页眉
\begin{frame}[plain,noframenumbering]
\titlepage
\end{frame}
% 插入章节
\seledchap{\chnum}
\end{document}
采用\ifcase\or\fi结构,同时可以实现为不同的子文件添加不同宏包的需求,以减少宏包依赖或解决宏包冲突。
这种方式,在每次编译时,仍需手动调整\def\chnum{1}的值,也许可以通过命令行将该参数传入,敬请大神给予指点。