当存在短章节标题时,在 beamerarticle ToC 中显示完整章节标题

当存在短章节标题时,在 beamerarticle ToC 中显示完整章节标题

我正在使用以下方式同时创建讲义和幻灯片beamerarticle。 在 投影机,我使用的主题是“柏林”,它将所有章节标题放在幻灯片标题中。由于某些章节标题太长,不适合,我指定了短标题,例如:

\section[short title 1]{First Section's Full Title}

短标题现在出现在幻灯片标题中。然而,这对文章:默认情况下,简短章节标题现在显示在文章的目录中。

我读,因此尝试使用 \sectionmark ,如下所示:

\section{First Section's Full Title}
\sectionmark{short title 1}

然而,投影机无法识别章节标记,现在恢复将完整的章节标题放在幻灯片标题中。

我觉得我需要以某种方式编辑 documentclass 文章中的目录或 beamer 中的 Berlin 主题的默认选项。不幸的是,我对 LaTeX 还很陌生,不知道该怎么做。非常感谢您的帮助。

我使用的软件包包括 titlesec 和 tocloft,但无论是否使用这些软件包,我的问题都会发生,因此我在下面的最小工作示例中将它们注释掉了。mwe 的代码需要保存为三个独立的 tex 文件在同一个文件夹中,如下所示。编译 example.article.tex 和 example.beamer.tex,而不是 example.tex

%NOTE: The following should be saved as example.article.tex:
\documentclass{article}
\usepackage{beamerarticle}
\input{example.tex}

%NOTE: The following should be saved as example.beamer.tex:
\documentclass[ignorenonframetext]{beamer}
\input{example.tex} 

%NOTE: The following should be saved as example.tex:
%\mode<article>{
% \usepackage{tocloft}
% \usepackage[compact]{titlesec}
%}
\mode<presentation>{\usetheme{Berlin}}
% everyone:
\usepackage[english]{babel}

\begin{document}
 \begin{frame}
  \title{Title}
  \maketitle
 \end{frame}
 \begin{frame}{\only<presentation>{Outline}}
  \setcounter{tocdepth}{1}
  \tableofcontents
 \end{frame}
 \section[short title 1]{First Section's Full Title}
 %\sectionmark{short title 1}
 \begin{frame}{First Frame}
  Blah blah text
 \end{frame}
 \begin{frame}{Second Frame}
  Blah blah text 2
 \end{frame}
 \section[short title 2]{Second Section's Full Title}
 %\sectionmark{short title 2}
 \begin{frame}{Third Frame}
  Blah blah text 3
 \end{frame}
\end{document}

答案1

一种可能的解决方案是使用模式并定义一个\Section带有两个参数的命令:一个(第一个)可选参数将保存presentation模式下导航栏的短标题,第二个强制参数将保存模式下presentation和模式下部分的标题article。下面是一个完整的示例。

处理以下测试文档:

    %\documentclass{article}
    \documentclass{beamer}
    %\usepackage{beamerarticle}


    \newcommand\Section[2][]{%
      \section<presentation>[#1]{#2}
      \section<article>{#2}
    }
    \usetheme{Berlin}

    \begin{document}

    \begin{frame}
    \tableofcontents
    \end{frame}
    \Section[Short title 1]{First Section's Full Title}
    \begin{frame}
    test
    \end{frame}

    \end{document}

生成以下框架(导航栏中的短标题,目录中的完整标题):

在此处输入图片描述

现在,使用文章版本:

\documentclass{article}
%\documentclass{beamer}
\usepackage{beamerarticle}


\newcommand\Section[2][]{%
  \section<presentation>[#1]{#2}
  \section<article>{#2}
}
\usetheme{Berlin}

\begin{document}

\begin{frame}
\tableofcontents
\end{frame}
\Section[Short title 1]{First Section's Full Title}
\begin{frame}
test
\end{frame}

\end{document}

我们收到以下目录(目录中的完整标题):

在此处输入图片描述

答案2

类别koma有选项headings=optiontohead。通过此选项,您可以让较长的章节名称出现在目录中:

\documentclass[headings=optiontohead]{scrartcl}
\usepackage{beamerarticle}

\mode<presentation>{\usetheme{Berlin}}

\usepackage[english]{babel}
\author{sd}

\begin{document}
 \begin{frame}
  \title{Title}
  \maketitle
 \end{frame}
 \begin{frame}{\only<presentation>{Outline}}
  \setcounter{tocdepth}{1}
  \tableofcontents
 \end{frame}
 \section[short title 1]{First Section's Full Title}
 %\sectionmark{short title 1}
 \begin{frame}{First Frame}
  Blah blah text
 \end{frame}
 \begin{frame}{Second Frame}
  Blah blah text 2
 \end{frame}
 \section[short title 2]{Second Section's Full Title}
 %\sectionmark{short title 2}
 \begin{frame}{Third Frame}
  Blah blah text 3
 \end{frame}
\end{document}

在此处输入图片描述

答案3

Gonzalo Medina 的想法很天才,但还不够成熟。它需要修改您现有的演示文稿以\Section代替标准\section。以下代码对我来说非常完美。它重新定义了\section和依赖\section*命令。您应该将此代码放在文档的序言中beamerarticle,因此无需使用或来指定模式。感谢 Gonzalo Medina 的上述帖子,并且Christian Hupfer 的帖子启发我编写了以下代码。您也可以将此代码扩展\part\subsection\subsubsection

这也回答了这个相关问题

\makeatletter
\let\OriginalSection\section
\newcommand{\starredsection}[1]{%
\OriginalSection*{#1}%
}

\newcommand\unstarredsection[2][]{%
\OriginalSection{#2}
}

\renewcommand{\section}{%
\@ifstar{\starredsection}{\unstarredsection}%
}%
\makeatother

相关内容