带有多栏的自定义子部分导航中有很多溢出框

带有多栏的自定义子部分导航中有很多溢出框

我希望这不会太本地化...

我需要一个垂直子部分导航,其中子部分名称仅由以三列布局打印的数字(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它绝不应该用在最终小于全宽的列结构中。

相关内容