如何在投影仪演示文稿的部分目录中实现链接?

如何在投影仪演示文稿的部分目录中实现链接?

我红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}

相关内容