嗨,伙计们!我为一个课程准备了 160 多张幻灯片草稿,该课程分为 10 节课,每节课 3 小时。这是一个草稿版本:我计划在接下来的几周内更改一些部分。我的源文件被(通过 \input)拆分成许多文件,每个文件都包含一个“逻辑主题”。为了猜测幻灯片和课程之间的映射,我需要“自动”计算幻灯片编号 <-> 源文件的对应关系。通过检查日志文件,我找到了每个源文件的幻灯片运行编号和加载点。我想生成一个整洁的文件,例如
- 介绍文本
- 介绍文本
- 介绍文本
- 介绍文本
- 介绍文本
- 主题
- 主题
- 主题
...
有什么提示吗?
答案1
此解决方案需要运行两次 LaTeX。代码生成两个文件。.bsl 文件是中间文件,.bsx 包含您想要的列表。
哦,差点忘了说:你需要将 every\input
改成\rinput
。
以下是文件
介绍文本
\begin{frame}{Introduction}
\begin{itemize}
\item<1-> first intro
\item<2-> second intro
\item<3-> third intro
\end{itemize}
\end{frame}
主题
\begin{frame}{Motivaton}
\begin{itemize}
\item<1-> first motiv
\item<2-> second motiv
\item<3-> third motiv
\end{itemize}
\end{frame}
主要文件如下:
\documentclass{beamer}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\makeatletter
\let\orig@beamer@writeslideentry\beamer@writeslidentry
\def\beamer@writeslidentry{%
\addtocontents{bsl}{\protect\slidelistentry{\beamer@framestartpage}{\beamer@frameendpage}}%
\orig@beamer@writeslideentry}
\AtEndDocument{\if@filesw\newwrite\tf@bsl
\immediate\openout\tf@bsl\jobname.bsl\fi}
\newcommand{\rinput}[1]{%
\addtocontents{bsl}{\protect\fileentry{#1}}%
\input{#1}}
\newcommand{\currentFile}{}
\newcommand{\fileentry}[1]{\def\currentFile{#1}}
\newcount\slidelistcnt
\newcommand{\@write@sl}{}
\def\@write@sl#1\sl@end{\@writefile{bsx}{#1}}
\newcommand{\slidelistentry}[2]{%
\slidelistcnt #1\relax
\@tempcnta #2\advance\@tempcnta\@ne
\loop\ifnum\slidelistcnt<\@tempcnta
\edef\@tempa{\the\slidelistcnt. \currentFile}%
\expandafter\@write@sl\@tempa\sl@end
\advance\slidelistcnt\@ne
\repeat}
\AtBeginDocument{\if@filesw\newwrite\tf@bsx
\immediate\openout\tf@bsx\jobname.bsx\fi
\InputIfFileExists{\jobname.bsl}{}{}}
\makeatother
%-------------------------------------------------------------------------------
\begin{document}
\rinput{intro.tex}
\rinput{motiv.tex}
\end{document}