通过编号调用部分名称或:手动创建导航栏

通过编号调用部分名称或:手动创建导航栏

我想要一个文本行,以灰色显示所有章节标题,并以黑色或粗体突出显示当前章节,如下所示:

sec1 的标题 |sec2 的标题| sec3 的标题 | sec4 的标题

到目前为止我已经到了这一步

\documentclass{beamer}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tikz}
\usepackage{totcount}       
\regtotcounter{section}             % total amount of sections

\begin{document}

\begin{frame}
  \section{First section} \label{sec:first_section}
    \foreach \x in {1,...,\totvalue{section}}{
            \ifnum\x=1
                \ifnum\x=\value{section}
                    \textcolor{black}{\insertsection}
                 \else
                    \textcolor{gray}{\insertsection}
                 \fi 
            \else
                \ifnum\x=\value{section}
                    | \textcolor{black}{\insertsection}
                 \else
                    | \textcolor{gray}{\insertsection}
                \fi
            \fi}
            \\
            Text of first section.\\
            \vspace{2mm}

  \section{Second section} \label{sec:second_section}
    \foreach \x in {1,...,\totvalue{section}}{
            \ifnum\x=1
                \ifnum\x=\value{section}
                    \textcolor{black}{\insertsection}
                 \else
                    \textcolor{gray}{\insertsection}
                 \fi 
            \else
                \ifnum\x=\value{section}
                    | \textcolor{black}{\insertsection}
                 \else
                    | \textcolor{gray}{\insertsection}
                \fi
            \fi}
            \\
            Text of second section.\\
            \vspace{2mm}

  \section{Third section} \label{sec:Third_section}
        \foreach \x in {1,...,\totvalue{section}}{
            \ifnum\x=1
                \ifnum\x=\value{section}
                    \textcolor{black}{\insertsection}
                 \else
                    \textcolor{gray}{\insertsection}
                 \fi 
            \else
                \ifnum\x=\value{section}
                    | \textcolor{black}{\insertsection}
                 \else
                    | \textcolor{gray}{\insertsection}
                \fi
            \fi}
            \\    
            Text of third section.\\
\end{frame}
\end{document}

它突出显示了章节的正确位置,但是使用 \insertsection I - 当然 - 只能获取当前章节的名称。

我如何才能获得正确的部分名称?我可以通过其编号调用部分名称,类似\insertsection[\x](但这不是它的工作方式!)或者我可以将部分名称(或其标签)存储在存储数组中,然后使用 \x 从 for 循环中“挑选”出正确的部分名称吗?

编辑:

谢谢,我又向前迈了一步

\setbeamercolor{section in toc}{fg=black}(在 \begin{document} 之后)并替换\insertsection\tableofcontents[sections={\x}](表示黑色)和\tableofcontents[sections={\x}, sectionstyle=shaded]表示灰色。

有没有办法可以防止 \tableofcontents 条目后的换行?

答案1

在此处输入图片描述

Beamer 已经提供了复杂的导航(带有链接和所有内容),您可以使用它:

\documentclass{beamer}

\setbeamertemplate{headline}{%
  \begin{beamercolorbox}[colsep=1.5pt]{upper separation line head}
  \end{beamercolorbox}
  \begin{beamercolorbox}{section in head/foot}
    \vskip2pt\insertnavigation{\paperwidth}\vskip2pt
  \end{beamercolorbox}%
  \begin{beamercolorbox}[colsep=1.5pt]{lower separation line head}
  \end{beamercolorbox}
}

\begin{document}

\section{test}
\begin{frame}
    abc
\end{frame} 

\section{testt}
\begin{frame}
    abc
\end{frame} 

\section{testtt}
\begin{frame}
    abc
\end{frame} 

\end{document}

在此处输入图片描述

答案2

谢谢你们,

@Skillmon:你的回答完全合适(参见编辑- 部分是我的问题),只是我真的需要它是一条线。

@samcarter:是的,我最终要找的是导航栏。不幸的是,我不能使用内置导航栏,因为 \useoutertheme[subsection=false]{miniframes} 我必须使用自己的主题。(我不能加载 2 个外部主题,可以吗?这似乎不太对劲。)

所以,最后链接到tex.stackexchange.com/a/303968/36296并使用\nameref完成了这项工作。最终代码如下:

\documentclass{beamer}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tikz}
\usepackage{totcount}       
\regtotcounter{section}             % total amount of sections

\begin{document}
\setbeamercolor{section in toc}{fg=black}
\begin{frame}
  \section{First section} \label{sec:\thesection}
    \foreach \x in {1,...,\totvalue{section}}{%
            \ifnum\x=1%
                \ifnum\x=\value{section}%
                    \textcolor{black}{\nameref{sec:\x} }%
                 \else
                    \textcolor{gray}{\nameref{sec:\x} }%
                 \fi 
            \else
                \ifnum\x=\value{section}%
                    | \textcolor{black}{\nameref{sec:\x} }%
                 \else
                    | \textcolor{gray}{\nameref{sec:\x} }%
                \fi
            \fi}
            \\
            Text of first section.\\
            \vspace{2mm}

  \section{Second section} \label{sec:\thesection}
    \foreach \x in {1,...,\totvalue{section}}{%
            \ifnum\x=1%
                \ifnum\x=\value{section}%
                    \textcolor{black}{\nameref{sec:\x} }%
                 \else
                    \textcolor{gray}{\nameref{sec:\x} }%
                 \fi 
            \else
                \ifnum\x=\value{section}%
                    | \textcolor{black}{\nameref{sec:\x} }%
                 \else
                    | \textcolor{gray}{\nameref{sec:\x} }%
                \fi
            \fi}
            \\
            Text of second section.\\
            \vspace{2mm}

  \section{Third section} \label{sec:\thesection}
        \foreach \x in {1,...,\totvalue{section}}{%
            \ifnum\x=1%
                \ifnum\x=\value{section}%
                    \textcolor{black}{\nameref{sec:\x} }%
                 \else
                    \textcolor{gray}{\nameref{sec:\x} }%
                 \fi 
            \else
                \ifnum\x=\value{section}%
                    | \textcolor{black}{\nameref{sec:\x} }%
                 \else
                    | \textcolor{gray}{\nameref{sec:\x} }%
                \fi
            \fi}
            \\
            Text of third section.
\end{frame}
\end{document}

对于每个想将其用作导航栏的人来说,这是我在 outertheme.sty 文件中实现它的方法:

\begin{beamercolorbox}[wd=\paperwidth, ht=\1cm];
    \begin{tikzpicture}
        \useasboundingbox[](0,0) rectangle(\the\paperwidth,1.0);            
        {\node[anchor=west, gray, font=\tiny] at (1.0, 0.70){%
           \foreach \x in {1,...,\totvalue{section}}{%
              \ifnum\x=1%
                 \ifnum\x=\value{section}%
                    \textcolor{black}{\nameref{sec:\x} }%
                 \else
                    \textcolor{gray}{\nameref{sec:\x} }%
                 \fi 
              \else
                 \ifnum\x=\value{section}%
                    | \textcolor{black}{\nameref{sec:\x} }%
                 \else
                    | \textcolor{gray}{\nameref{sec:\x} }%
                 \fi
              \fi}
        };}         
    \end{tikzpicture}
\end{beamercolorbox}

我仍然希望能够按编号调用部分(\nameref{sec:\x}此处的用法取决于标签的编号)或创建一个存储部分名称/标签的存储阵列。因此,如果有人对此仍有想法,我们仍然会很感激 :)

相关内容