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

发布于 2021-03-26 13:47:05

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

0 条评论

发布
问题