我在 Google 上搜索了很多次,但还是没有找到我具体问题的答案。我的问题是:我正在使用课程创建讲座幻灯片beamer
。我的样式文件是大学专用的。在我的第一个中\section
,有超过 9 个\subsections
。当我创建时\tableofcontents
,它看起来像这样:
请注意,编号 >9 的子部分在编号和子部分名称之间缺少一个空格(或至少不可见)(例如:1.10Vibromyogramm (VMG))。
我该如何防止这种情况并使我的目录更清晰易读?
编辑1
在遵循一些初步答案之后,\usepackage{tocloft}
这不是解决方案,因为它不适用于该类beamer
(其他人也注意到了这一点 - 请参阅人物列表 + Beamer?)。使用tocloft
会导致 pdflatex 失败!LaTeX Error: \l@section undefined
(它在文件中失败tocloft.sty
- 并且,正如之前的发帖人所说,通过事先将命令定义为空来欺骗 tocloft 也没有任何好处)。
编辑2
回复我的 Latex 同事的一些评论:如果我只有 3 \subsections
,间距完全相同。另外,我不认为原因不仅仅是样式文件;但是,这里有一行beamer font theme
需要理解答案:
% Schriftart Helvetica
\usepackage[scaled]{helvet}
\renewcommand*{\familydefault}{\sfdefault} % Standard ist serifenlos
编辑3
感谢 Heiko 的回答(见下文),我现在找到了问题的解决方案。非常感谢!
答案1
该解决方案创建了一个新的subsections numbered with max number
模板选项subsection in toc
,该选项以部分编号作为参数,用于数字的最大宽度。
\documentclass{beamer}
% from beamerfontthemefau-4-3.sty
\usepackage[scaled]{helvet}
\renewcommand*{\familydefault}{\sfdefault}
% Define a new option `subsections numbered with max number'
% for template `subsection in toc'. The original code for
% `subsections numbered' can be found in beamerbaseauxtemplates.sty:
%
% \defbeamertemplate{subsection in toc}{subsections numbered}{%
% \leavevmode
% \leftskip=2em%
% \rlap{%
% \hskip-2em%
% \inserttocsectionnumber.\inserttocsubsectionnumber
% }%
% \inserttocsubsection
% \par
% }
\defbeamertemplate{subsection in toc}{subsections numbered with max number}[1]{%
\leavevmode
\settowidth{\leftskip}{#1~}%
\rlap{%
\hskip-\leftskip
\inserttocsectionnumber.\inserttocsubsectionnumber~%
}%
\inserttocsubsection
\par
}
\setbeamertemplate{section in toc}[sections numbered]
\setbeamertemplate{subsection in toc}[subsections numbered with max number]{1.10}
\begin{document}
\begin{frame}
\tableofcontents
\end{frame}
\begin{frame}
\section{Foo}
\subsection{Test}
\addtocounter{subsection}{8}
\subsection{Ten}
\end{frame}
\end{document}
答案2
其中似乎负责设置子部分。我没有使用过 beamer,所以我不知道是否有充分的理由不执行以下操作,或者它是否适合您,但请尝试在您的序言中包含以下内容beamerbasetoc.sty
:\def\subsectionintoc{}
toc
\makeatletter
\def\subsectionintoc{}
\long\def\beamer@subsectionintoc#1#2#3#4#5#6{%
\ifnum\c@tocdepth>1%
\ifnum#5=\beamer@showpartnumber%
{
\beamer@saveanother%
\gdef\beamer@todo{}%
\beamer@slideinframe=#1\relax%
\expandafter\only\beamer@tocsections{\gdef\beamer@todo{%
\ifbeamer@pausesubsections\pause\fi%
\beamer@tempcount=#6%
\advance\beamer@tempcount by\beamer@sectionadjust%
\edef\inserttocsectionnumber{\the\beamer@tempcount}%
\def\inserttocsubsectionnumber{#2}%
%
% the following line originally read
% \def\inserttocsubsection{\hyperlink{Navigation#4}{#3}}%
% you can add a skip before printing the subsection name
%
\def\inserttocsubsection{\hyperlink{Navigation#4}{\hskip 5pt #3}}%
\beamer@tocifnothide{\ifnum\c@section=#1\beamer@toc@oss\else\beamer@toc@ooss\fi}%
{%
\def\beamer@breakhere{\\}%
\beamer@tocact{\ifnum\c@section=#1\ifnum\c@subsection=#2\beamer@toc@css\else\beamer@toc@oss\fi\else\beamer@toc@ooss\fi}
{subsection in toc}%
}%
}}%
\beamer@restoreanother%
}
\beamer@todo%
\fi\fi%
}
\makeatother
或者,您可以尝试通过以下方式手动添加跳过。
\subsection{\unexpanded{\hskip 5pt}title}
或者,
\subsection{\hskip 5pt title}
两者似乎都可以与我所拥有的文档配合使用。