
다음 비머 코드
\documentclass{beamer}
\setbeamertemplate{section in toc}[sections numbered]
\begin{document}
\frame{\tableofcontents}
\section{section one}
\frame{\insertsectionnumber\quad\insertsection}
\section*{section two}
\frame{\insertsectionnumber\quad\insertsection}
\section{section three}
\frame{\insertsectionnumber\quad\insertsection}
\end{document}
다음 결과를 제공하십시오.
나는 그것이 명령을 \tableofcontents
호출한다는 것을 알고 있습니다 \inserttocsectionnumber
. 몇 가지 \section*
명령이 있을 \inserttocsectionnumber
때\insertsectionnumber
다른 결과를 제공하는2 섹션 3그리고3 섹션 3. 왜?
답변1
이것은 beamerbasesection.sty
주석이 포함된 의 일부 코드입니다.
와 같은 표준 클래스와는 달리 카운터 의 스테핑과 관련하여 \section
차이 가 없습니다 . 따라서 명령 을 실행해도 카운터가 증가합니다 .\section*
section
article
section
\section*
이것은 버그인가요? 아니요, 내 생각에는 Google의 다양한 고급 기능을 모두 장부에 기록하는 것이 더 쉬운 것 같습니다.beamer
\newcommand<>{\section}{\alt#1{\@ifnextchar[\beamer@section\beamer@@section}{\beamer@secgobble}}
\def\beamer@@section{\@ifnextchar*\beamer@@ssection\beamer@@@section}
\long\def\beamer@@ssection*#1{\beamer@section[{#1}]{}} %% starred section
\long\def\beamer@@@section#1{\beamer@section[{#1}]{#1}}
\long\def\beamer@section[#1]#2{%
\beamer@savemode%
\mode<all>%
\ifbeamer@inlecture
\refstepcounter{section}% used in any case of \section or \section*
\beamer@ifempty{#2}%
{\long\def\secname{#1}\long\def\lastsection{#1}}%
{\global\advance\beamer@tocsectionnumber by 1\relax%
\long\def\secname{#2}%
\long\def\lastsection{#1}%
\addtocontents{toc}{\protect\beamer@sectionintoc{\the\c@section}{#2}{\the\c@page}{\the\c@part}%
{\the\beamer@tocsectionnumber}}}%
{\let\\=\relax\xdef\sectionlink{{Navigation\the\c@page}{\noexpand\secname}}}%
\beamer@tempcount=\c@page\advance\beamer@tempcount by -1%
\beamer@ifempty{#1}{}{%
\addtocontents{nav}{\protect\headcommand{\protect\sectionentry{\the\c@section}{#1}{\the\c@page}{\secname}{\the\c@part}}}%
\addtocontents{nav}{\protect\headcommand{\protect\beamer@sectionpages{\the\beamer@sectionstartpage}{\the\beamer@tempcount}}}%
\addtocontents{nav}{\protect\headcommand{\protect\beamer@subsectionpages{\the\beamer@subsectionstartpage}{\the\beamer@tempcount}}}%
}%
\beamer@sectionstartpage=\c@page%
\beamer@subsectionstartpage=\c@page%
\def\insertsection{\expandafter\hyperlink\sectionlink}%
\def\insertsubsection{}%
\def\insertsubsubsection{}%
\def\insertsectionhead{\hyperlink{Navigation\the\c@page}{#1}}%
\def\insertsubsectionhead{}%
\def\insertsubsubsectionhead{}%
\def\lastsubsection{}%
\Hy@writebookmark{\the\c@section}{\secname}{Outline\the\c@part.\the\c@section}{2}{toc}%
\hyper@anchorstart{Outline\the\c@part.\the\c@section}\hyper@anchorend%
\beamer@ifempty{#2}{\beamer@atbeginsections}{\beamer@atbeginsection}%
\fi%
\beamer@resumemode}%
편집하다:
사용되는 \refstepcounter
경우 작동하지 않도록 일부 패치\section*
\documentclass{beamer}
\usepackage{xpatch}
\makeatletter
\newif\ifisstarred% new if command
\isstarredfalse% % No starred section by default
\xpretocmd{\beamer@@ssection}{\isstarredtrue}{}{} % enable `*` mode
\xpatchcmd{\beamer@@ssection}{\beamer@section[{#1}]{}}{\beamer@section[{#1}]{}\isstarredfalse}{\typeout{Patch success beamer@@ssection}}{\typeout{Patch failure}}
\xpatchcmd{\beamer@section}{%
\refstepcounter{section}%
}{%
\ifisstarred%
% Do nothing in here
\else
\refstepcounter{section}%
\fi
}{\typeout{Patch success beamer@section}}{}
\makeatother
\setbeamertemplate{section in toc}[sections numbered]
\begin{document}
\frame{\tableofcontents}
\section{section one}
\frame{\insertsectionnumber\quad\insertsection}
%\inserttocsectionnumber
\section*{section two}
\typeout{Starred section}
\frame{\insertsectionnumber\quad\insertsection}
\section{section three}
\frame{\insertsectionnumber\quad\insertsection}
\end{document}