我想知道如何在等效的帧标题后面加上计数器或索引。例如,当我有两张具有相同内容的幻灯片时\frametitle
(例如“奇妙的标题“),它应该导致
Marvelous title (1)
Marvelous title (2)
我知道,手动添加“(1)”和“(2)”的工作量并不大,但我问自己是否可以自动完成。
答案1
这里有一个解决方案。每次排版框架标题时,我们都会向文件中写入一行aux
。读回时,这会给我们一个使用该框架的次数计数。如果该计数大于 1,那么当我们遇到该框架标题时,我们需要附加该框架的编号,该编号由另一个计数给出。
注意事项:我们只在第一的帧的幻灯片。因此,如果出于某种原因跳过第一张幻灯片,可能会发生奇怪的事情。同样,可以使用覆盖将标题从一张幻灯片更改为另一张幻灯片。这不会检查这一点,如果这样做,可能会出现严重错误。
这是代码,它是我回答的代码的改编版 重复使用上一张 Beamer 幻灯片的标题:
\documentclass{beamer}
%\url{https://tex.stackexchange.com/q/66274/86}
%\url{https://tex.stackexchange.com/q/65975/86}
\makeatletter
\def\beamer@checkframetitle{%
\begingroup
\edef\temp{%
\endgroup
\noexpand\frametitle
[\unexpanded\expandafter{\beamer@savedshortframetitle}]%
{\unexpanded\expandafter{\beamer@savedframetitle}}%
}
\temp
\@ifnextchar\bgroup\beamer@inlineframetitle{}}
\addtobeamertemplate{frametitle}{}{%
\only<1>{\immediate\write\@auxout{\string\beamer@countframes{max}{\beamer@frametitle}}}%
}
\long\def\beamer@@frametitle[#1]#2{%
\beamer@ifempty{#2}{}{%
\@ifundefined{beamer@framecount@max@#2}{%
\gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space\usebeamertemplate*{frametitle continuation}\fi}}%
}{%
\ifnum\csname beamer@framecount@max@#2\endcsname>1\relax
\beamer@countframes{cur}{#2}%
\gdef\insertframetitle{{#2\beamer@autobreakcount\csname beamer@framecount@cur@#2\endcsname\relax{}\space\usebeamertemplate*{frametitle continuation}}}%
\else
\gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space\usebeamertemplate*{frametitle continuation}\fi}}%
\fi}
\gdef\beamer@frametitle{#2}%
\gdef\beamer@shortframetitle{#1}%
\global\let\beamer@savedshortframetitle\beamer@shortframetitle
\global\let\beamer@savedframetitle\beamer@frametitle
}%
}
\global\let\beamer@savedshortframetitle\@empty
\global\let\beamer@savedframetitle\@empty
\def\beamer@countframes#1#2{%
\@ifundefined{beamer@framecount@#1@#2}{%
\expandafter\gdef\csname beamer@framecount@#1@#2\endcsname{1}%
}{%
\@tempcnta\csname beamer@framecount@#1@#2\endcsname\relax%
\advance\@tempcnta by 1\relax
\expandafter\xdef\csname beamer@framecount@#1@#2\endcsname{\the\@tempcnta}%
}%
}
\makeatother
\begin{document}
\begin{frame}{The Frame Title}
A frame with a title
\end{frame}
\begin{frame}
A frame without a title
\end{frame}
\begin{frame}
\frametitle{The Next Frame Title}
A frame with a title
\end{frame}
\begin{frame}
A second frame without a title
\end{frame}
\begin{frame}{The Third Frame Title}
But not the third frame
\end{frame}
\begin{frame}{The Fourth Frame Title}
Another title,\pause another frame.
\end{frame}
\end{document}
结果: