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}的值,也许可以通过命令行将该参数传入,敬请大神给予指点。
写个脚本(例如 python 脚本)是最便利的方式。完全用 latex,可以考虑 subfiles 和 standalone 宏包提供的功能。