利用ifcase实现Beamer中include多文件中的单个tex文件的编译

beamer 2019-09-12 15:43  浏览 :9530

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}的值,也许可以通过命令行将该参数传入,敬请大神给予指点。

发布评论
登录后方可评论!点击登录
全部评论 (1)
Carcino
1楼 · 2019-09-13 00:10

写个脚本(例如 python 脚本)是最便利的方式。完全用 latex,可以考虑 subfiles 和 standalone 宏包提供的功能。