我想要一个文本行,以灰色显示所有章节标题,并以黑色或粗体突出显示当前章节,如下所示:
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}
此处的用法取决于标签的编号)或创建一个存储部分名称/标签的存储阵列。因此,如果有人对此仍有想法,我们仍然会很感激 :)