当目录中有 9 个以上的小节时,会出现缺少空格的问题(使用 beamer 类)

当目录中有 9 个以上的小节时,会出现缺少空格的问题(使用 beamer 类)

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

两者似乎都可以与我所拥有的文档配合使用。

相关内容