我希望这不会太本地化...
我需要一个垂直子部分导航,其中子部分名称仅由以三列布局打印的数字(1、2、3 等)组成。
我设法通过以下代码获取我需要的内容:
\documentclass{beamer}
\usepackage{multicol}
\usetheme[left,width=1.4cm]{Goettingen}
\makeatletter
\def\insertsubsectionnavigation#1{%
\hbox to #1{%
\vbox{{%
\usebeamerfont{subsection in sidebar}
\usebeamercolor[fg]{subsection in sidebar}
\vskip0.5625ex%
\beamer@currentsubsection=0%
\def\sectionentry##1##2##3##4##5{}%
\def\slideentry##1##2##3##4##5##6{\ifnum##6=\c@part\ifnum##1=\c@section%
\ifnum##2>\beamer@currentsubsection%
\beamer@currentsubsection=##2%
\def\insertsubsectionhead{##5}%
\def\insertsectionheadnumber{##1}%
\def\insertsubsectionheadnumber{##2}%
\def\insertpartheadnumber{##6}%
\beamer@link(##4){%
\ifnum\c@subsection=##2%
{\usebeamertemplate{subsection in sidebar}}%
\else%
{\usebeamertemplate{subsection in sidebar shaded}}%
\fi\hfill}\par
\fi\fi\fi}%
\hspace{3pt}\begin{minipage}{1.1cm}\setlength{\parskip}{-3pt}%
\begin{multicols}{3}
\dohead
\end{multicols}
\end{minipage}
\space
}\hfil
}}}
\makeatother
\setbeamertemplate{sidebar left}{
\begin{beamercolorbox}[wd=1.4cm]{}
\insertsubsectionnavigation{1.4cm}
\end{beamercolorbox}
}
\begin{document}
\section{1}
\subsection{1}
\frame{content}
\subsection{2}
\frame{content}
\subsection{3}
\frame{content}
\subsection{4}
\frame{content}
\subsection{5}
\frame{content}
\subsection{6}
\frame{content}
\subsection{7}
\frame{content}
\subsection{8}
\frame{content}
\subsection{9}
\frame{content}
\end{document}
相关部分如下:
\hspace{3pt}
\begin{minipage}{1.1cm}
\setlength{\parskip}{-3pt}%
\begin{multicols}{3}
dohead
\end{multicols}
\end{minipage}
这会产生稍后在侧边栏模板中调用的三列布局,它实际上比 MWE 中显示的更复杂,但其他部分这里并不重要。
问题
问题是,使用这种方法,我会为每个子部分获得 9 个过满的水平盒子。也就是说,如果您编译我的 MWE,您将获得 81 个过满的盒子。
问题
在这种情况下,在 minipage 中添加以抑制 badbox 可以吗\hfuzz=27pt
?或者有没有更好的解决方案来实现相同的结果,而不必忽略 badbox?
答案1
我还没有详细检查它的\dohead
作用,但它似乎将每个标题的字符串格式化\subsection
为一个具有完整边距宽度的垂直框。因此,通过使用multicols
每一行,它都由太宽的框组成。现在,虽然您的标题和示例中的一样短,但这些框重叠了,但没有什么坏处,但如果您更改它,您可以看到效果,例如执行\subsection{3333333333}
。
所以总而言之,我想说,添加\hfuzz
是一个可行的解决方案,但必须意识到后台发生了什么,并且您的代码实际上正在生成此类重叠。简而言之,\dohead
它绝不应该用在最终小于全宽的列结构中。