我红Beamer 中 \part 命令中的 \tableofcontents,这非常有帮助。但是,我希望部分标题是指向部分开始页面的链接。没有这个的示例也可以正常工作:
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,decorations.pathreplacing}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{kerkis}
\usetheme{Darmstadt}
\makeatletter
\AtBeginPart{%
\addtocontents{toc}{\protect\beamer@partintoc{\the\c@part}{\beamer@partnameshort}{\the\c@page}}%
}
%% number, shortname, page.
\providecommand\beamer@partintoc[3]{%
\ifnum\c@tocdepth=-1\relax
% requesting onlyparts.
\makebox[6em]{Part #1:} #2
\par
\fi
}
\define@key{beamertoc}{onlyparts}[]{%
\c@tocdepth=-1\relax
}
\makeatother%
\begin{document}
\title[Short Title]{Long Title}
\subtitle[Short Subtitle]{Long Subtitle}
\date{\today}
\author{Tom B.}
\subject{Math. Questions.}
\begin{frame}[t]
\titlepage
\end{frame}
\begin{frame}[t]
\frametitle{Overview}
\tableofcontents[onlyparts]
\end{frame}
\part{Beginners}
\begin{frame}[t,shrink=0]
\frametitle{\insertpart}
\tableofcontents[subsectionstyle=hide]
\end{frame}
\section[Nat Num]{Natural Numbers}
\begin{frame}[t]
\frametitle{\insertsection}
\tableofcontents[sectionstyle={show/hide}]
\end{frame}
\subsection{Add}
\frame{easy example for calculating with natural numbers...}
\subsection{Subtract}
\frame{easy example for calculating with natural numbers...}
\end{document}
我以为我只需使用\ref
和\label
即可实现此目的。所以我改了一行:
\makebox[6em]{Part #1:} \ref{#2}
我在命令后添加了另一个\part
(我考虑使用它\AtBeginPart
来实现自动化):
\part{Beginners}
\label{\insertpart}
但是如果我编译这个(MikTeX 2.9,pdfTeX 3.1415926-1.40.11),我会得到 74 个错误。有人能解释一下为什么吗?或者告诉我如何修复它,或者提供一个实现链接部分的替代方案吗?
编辑:嗯,问题似乎是\includepart
。当我使用
\makebox[6em]{Part #1:} \textcolor{green!30!blue}{\hyperlink{#2}{#2}}
和
\frame{\partpage \hypertarget{Beginners}{}}
相反,它确实有效。由于我不打算放置很多部件,因此手动设置它们并不太麻烦,但不太整洁。此外,每当我使用时,它似乎都会发生冲突 \insertpart
。beamer 手册指出它是 的一个有用命令\partpage
,因此您可能只能\insertpage
在重新定义 时使用\partpage
?
答案1
好的,我明白了,毕竟这并没有那么复杂:
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[english]{babel}
\usetheme{Darmstadt}
\usepackage{hyperref}
\makeatletter
\AtBeginPart{%
\addtocontents{toc}{\protect\beamer@partintoc{\the\c@part}{\beamer@partnameshort}{\the\c@page}}%
}
%% number, shortname, page.
\providecommand\beamer@partintoc[3]{%
\ifnum\c@tocdepth=-1\relax
% requesting onlyparts.
\makebox[6em]{Part #1:} \textcolor{green!30!blue}{\hyperlink{#2}{#2}}
\par
\fi
}
\define@key{beamertoc}{onlyparts}[]{%
\c@tocdepth=-1\relax
}
\makeatother%
\newcommand{\nameofthepart}{}
\newcommand{\nupart}[1]%
{ \part{#1}%
\renewcommand{\nameofthepart}{#1}%
\frame{\partpage \hypertarget{\nameofthepart}{}}%
}
\begin{document}
\title[Short Title]{Long Title}
\subtitle[Short Subtitle]{Long Subtitle}
\date{\today}
\author{Tom B.}
\subject{Math. Questions.}
\begin{frame}[t]
\titlepage
\end{frame}
\begin{frame}[t]
\frametitle{Overview}
\tableofcontents[onlyparts]
\end{frame}
\nupart{Beginners}
\nupart{Advanced}
\nupart{Pros}
\end{document}
基本上,我所要做的就是创建一个\nupart
命令,该命令稍后会提供包含章节名称的宏。它还会自动插入超链接,因此只需使用\nupart
而不是即可实现链接\part
。
答案2
这个解决办法可以吗?
\begin{frame}
\frametitle{Outline}
\tableofcontents
\tableofcontents[part=1]
\tableofcontents[part=2]
%....
\end{frame}