6

I'm within a beamer presentation (again) and trying to get a frame title to automatically print the title of the section from within a subsection. The code (with example of what I'd like to do) looks like this:

\documentclass{beamer}
\mode<presentation>
\title[Title]{Title}
\author{My Name}
\institute{Where I am}
\date{September 2013}
\begin{document}
\begin{frame}
\section{SECTION NAME}
\subsection{Subsection Name}
\begin{frame}{"SECTION NAME": Title of Frame}
Content
\end{frame}

To be clear, I'd like the "SECTION NAME" in quote marks to automatically pull the text of \section{SECTION NAME}

Thanks!

UPDATE:

Thanks to moewe, the solution was found. It comes from this article. The updated code looks like this:

\documentclass{beamer}
\usepackage{nameref}
\mode<presentation>
\title[Title]{Title}
\author{My Name}
\institute{Where I am}
\date{September 2013}
\begin{document}
\begin{frame}
\section{SECTION NAME}\label{itsname}
\subsection{Subsection Name}
\begin{frame}{\label{itsname}: Title of Frame}
Content
\end{frame}
  • 1
  • Yep - \nameref labels seem to work; however, they do require labels, which is labour intensive. For my purposes, this solution will work, though! Thanks. – putins Sep 23 '13 at 14:58
  • 1
    Well, you will have to have a label, otherwise you have no way of referring to (the title); you can read “Automatic” section labeling? about automatic labelling. – moewe Sep 23 '13 at 15:01
  • 1
    Your updated code can’t work as expected since you used \label twice but the second one should be a \ref ;-) – Tobi Sep 23 '13 at 22:44
5

An alternative is without \nameref and without intensive labeling. This is possible because the section name is called from within a subsection and thus its higher level counter is available to utilized.

 \documentclass[]{beamer}

 \makeatletter
 \newcommand\newsection[1]{%
 \section{#1}    
 \@namedef{\thesection}{#1}         
 }

 \newcommand\newsec{% 
 \@nameuse{\thesection}
 }
 \makeatother

 \mode<presentation>
 \title[Title]{Title}
 \author{My Name}
 \institute{Where I am}
 \date{September 2013}

 \begin{document}
 \begin{frame}[t]
 \maketitle
 \end{frame}
 \begin{frame}[t]
 \tableofcontents
 \end{frame}
 \begin{frame}[t]
 \newsection{SECTION NAME}
 \subsection{Subsection Name}{\newsec: Title of Frame}

 Content
 \end{frame}
 \end{document}

For cross-section call, then a label is needed. All one needs to do is to do the following minor modifications.

 \makeatletter
 \newcommand\newsection[2]{%
 \section{#1}\label{#2}
 \@namedef{#2}{#1}
 }

 \newcommand\newsec[1]{% 
 \@nameuse{#1}
 }
 \makeatother

 \newsection{SECTION NAME}{tag}
 \subsection{Subsection Name}{\newsec{tag}: Title of Frame}

enter image description here

12

The beamer class offers macros such as \insertsection and \insertsubsection to access the current section’s name. They can be used in templates or manually.

\documentclass{beamer}

\begin{document}
\section{SECTION NAME}
\subsection{Subsection Name}
\begin{frame}{\insertsection: \insertsubsection}
    Content
\end{frame}
\end{document}

Search the manual for \insert to find more of these macros.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.