将幻灯片编号映射到源文件

将幻灯片编号映射到源文件

嗨,伙计们!我为一个课程准备了 160 多张幻灯片草稿,该课程分为 10 节课,每节课 3 小时。这是一个草稿版本:我计划在接下来的几周内更改一些部分。我的源文件被(通过 \input)拆分成许多文件,每个文件都包含一个“逻辑主题”。为了猜测幻灯片和课程之间的映射,我需要“自动”计算幻灯片编号 <-> 源文件的对应关系。通过检查日志文件,我找到了每个源文件的幻灯片运行编号和加载点。我想生成一个整洁的文件,例如

  1. 介绍文本
  2. 介绍文本
  3. 介绍文本
  4. 介绍文本
  5. 介绍文本
  6. 主题
  7. 主题
  8. 主题

...

有什么提示吗?

答案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}

相关内容