按部分自定义导航侧栏

按部分自定义导航侧栏

我正在寻找一个命令来随意删除侧边栏中显示的目录中的第一个或最后一个 X 个项目。

当侧边栏中的项目太多时,就会出现我的问题。例如,上图显示的是小侧边栏。

小导航侧边栏

但是,稍后在我的演示中(见上文),我将显示如此多的子部分,以至于最后一个目录项消失(并且 TeX 发出过满的 vbox......)

导航侧边栏过满

理想情况下,我希望得到一些建议,以便编写一些宏,当我在有问题的部分(Méthode ...)时,该宏将删除前 1 或 2 个 TOC 项目(此处为 Sommaire 和 Objectifs pédagogiques)。

我已经检查了这个问题有点类似,但它并不能解决我的问题,因为总是只显示 3 个部分。

答案1

供参考,以下是我为解决问题所做的事情

1/ 我定义了几个计数器

\newcounter{numsection}  % count the index of the sections
\newcounter{skipsection} % number of the section to remove at the beginning
\newcounter{lastsection} % index of the last section to display
\def\tmp@skipsection{0}  % temporary variable
\def\tmp@lastsection{0}  % temporary variable

2/ 定义设置计数器的函数;必须在命令之前调用\section它们

\newcommand{\setskipsection}[1]{\gdef\tmp@skipsection{#1}}
\newcommand{\setlastsection}[1]{\gdef\tmp@lastsection{#1}}

3/ 使用命令安装钩子\AtBeginSection

\AtBeginSection[]{
    \setcounter{skipsection}{\tmp@skipsection}
    \setcounter{lastsection}{\tmp@lastsection}
    \setskipsection{0}
    \setlastsection{0}
    \sectionframe
}

4/ 重新定义相关模板:a) 重置节索引的计数器

\defbeamertemplate*{sidebar left}{modele-name}
{%
    \setcounter{numsection}{0}%
    \insertverticalnavigation{\beamer@leftsidebar}%
}

b) 普通部分的代码,主要用来计算部分的索引

\defbeamertemplate*{section in sidebar}{modele-name}
{%
    \stepcounter{numsection}%
    \ifnum\value{numsection}>\value{skipsection}%
        % code for typesetting section name
    \fi%
}

c) 阴影部分的代码

\defbeamertemplate*{section in sidebar shaded}{modele-name}
{%
    \stepcounter{numsection}%
    \ifnum\value{lastsection}=0%
        \ifnum\value{numsection}=\value{skipsection}%
            % code to display the *collapsed* sections at the beginning of the sidebar
        \fi%
        \ifnum\value{numsection}>\value{skipsection}%
            % code to display a normal shaded section
        \fi%
    \else%
        \ifnum\value{numsection}=\value{skipsection}%
            % code to display the *collapsed* sections at the beginning of the sidebar
        \fi%
        \ifnum\value{numsection}>\value{skipsection}%
            \ifnum\value{numsection}<\value{lastsection}%
                % code to display a normal shaded section
            \fi%
            \ifnum\value{numsection}=\value{lastsection}%
                % code to display the *collapsed* sections at the end of the sidebar
            \fi%
        \fi%
    \fi%
}

相关内容