10 `beamer`自定义`\insertsectionstartnumber`,`\insertsectionendnumber`命令

发布于 2025-12-08 16:59:36

查阅了beamer手册,发现有\insertsectionstartpage\insertsectionendpage,但我想要的是\insertsectionstartnumber\insertsectionendnumber这两个命令,即返回section所在的帧的序号而不是页面的页码,目的是为了自定义写类似于\usebeamertemplate{miniframes}的效果。

请问大佬们,如何写这样的命令?

查看更多

关注者
0
被浏览
156
1 个回答
Sagittarius Rover
Sagittarius Rover 1小时前
这家伙很懒,什么也没写!

要避免模糊的描述让别人做猜测,同时要小心XY-problem

提问最好给个具体的例子,并指明预期效果,否则让人很难理解...

试试...

\documentclass{beamer}
\usetheme{moloch}
\usepackage{etoolbox}
\makeatletter
\newcount\beamer@sectionstartframe
\beamer@sectionstartframe=1
\apptocmd{\beamer@section}{\addtocontents{nav}{\protect\headcommand{%
            \protect\beamer@sectionframes{\the\beamer@sectionstartframe}{\the\c@framenumber}}}}{}{}
\apptocmd{\beamer@section}{\beamer@sectionstartframe=\c@framenumber\advance\beamer@sectionstartframe by1\relax}{}{}
\AtEndDocument{\immediate\write\@auxout{\string\@writefile{nav}%
        {\noexpand\headcommand{\noexpand\beamer@sectionframes{\the\beamer@sectionstartframe}{\the\c@framenumber}}}}}{}{}
\def\beamer@startframeofsection{1}
\def\beamer@endframeofsection{1}
\def\beamer@sectionframes#1#2{%
    \ifnum\c@framenumber<#1%
    \else%
    \ifnum\c@framenumber>#2%
    \else%
    \gdef\beamer@startframeofsection{#1}%
    \gdef\beamer@endframeofsection{#2}%
    \fi%
    \fi%
}
\newcommand\insertsectionstartframe{\beamer@startframeofsection}
\newcommand\insertsectionendframe{\beamer@endframeofsection}
\makeatother

\setbeamertemplate{headline}{
    \Large\sffamily 
    \inteval{\insertframenumber - \insertsectionstartframe + 1} 
    /
    \inteval{\insertsectionendframe - \insertsectionstartframe + 1}
}

\begin{document}
\begin{frame}sec=0,framenumber=1\end{frame}
\begin{frame}sec=0,framenumber=2\end{frame}
\begin{frame}sec=0,framenumber=3\end{frame}
\section{Sec1}
\begin{frame}sec=1,framenumber=1
    \begin{itemize}
        \item<1-> First item
        \item<2> Second item
        \item<3-> Third item
    \end{itemize}
\end{frame}
\begin{frame}sec=1,framenumber=2\end{frame}
\begin{frame}sec=1,framenumber=3\end{frame}
\section{Sec2}
\begin{frame}sec=2,framenumber=1\end{frame}
\begin{frame}sec=2,framenumber=2\end{frame}
\section{Sec3}
\begin{frame}sec=3,framenumber=1\end{frame}
\begin{frame}sec=3,framenumber=2\end{frame}
\begin{frame}sec=3,framenumber=3\end{frame}
\begin{frame}sec=3,framenumber=4
    \begin{itemize}
        \item<1-> First item
        \item<2-> Second item
        \item<3> Third item
        \item<4-> Third item
    \end{itemize}
\end{frame}
\begin{frame}sec=3,framenumber=5\end{frame}
\end{document}

output_1.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览