我正在使用以下方式同时创建讲义和幻灯片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