Beamer:多列 ToC 的垂直对齐

Beamer:多列 ToC 的垂直对齐

在我的 LaTeX 中beamer演示文稿我有一个很长的目录,它被分成两列,使用multicol包。问题是我还没有找到任何方法来控制环境中的垂直对齐multicols。现在左列的起始位置低于右列,这看起来很奇怪。相反,我希望左列或两列都垂直对齐到顶部。

我发现了一些相关问题,但没有一个能解决我的问题。

看看下面显示的 MWE。正如您在第 3 节之前看到的,我尝试添加一个\vfill沿手动分栏符的分栏符,但没有帮助……(添加手动分栏符是为了将第 3 节的子节与目录中的节放在一起)。

你有什么诀窍吗?

ToC 幻灯片的屏幕截图:

在此处输入图片描述

梅威瑟:

% MWE showing problems with vertical spacing in multicol ToC
\pagenumbering{arabic}
\documentclass[compress,14pt,t]{beamer}
\usepackage[latin1]{inputenc}
\usepackage{multicol}
\usepackage{charter}
\frenchspacing

\begin{document}

\begin{frame}
    \frametitle{Outline}
    \begin{multicols}{2}
        \tableofcontents
    \end{multicols}
\end{frame}

\section{Section 1}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 4}
    \begin{frame}Test\end{frame}

\section{Section 2}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}

\addtocontents{toc}{\newpage}           % Splits manually the ToC into 2 columns
%\addtocontents{toc}{\vfill\newpage}    % No difference
\section{Section 3}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}

\section{Section 4}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 4}
    \begin{frame}Test\end{frame}

\section{Section 5}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}

\end{document}

答案1

如果您不介意自己设置“断点”,那么这种方法应该可行。至少使用这种方法您不必弄乱 ToC 条目。

\pagenumbering{arabic}
\documentclass[compress,14pt,t]{beamer}
\usepackage[latin1]{inputenc}
\usepackage{multicol}
\usepackage{charter}
\frenchspacing

\begin{document}

\begin{frame}
    \frametitle{Outline}
    \begin{columns}[t]
        \begin{column}{.5\textwidth}
            \tableofcontents[sections={1-3}]
        \end{column}
        \begin{column}{.5\textwidth}
            \tableofcontents[sections={4-5}]
        \end{column}
    \end{columns}
\end{frame}

    \section{Section 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 4}
    \begin{frame}Test\end{frame}

    \section{Section 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}

    \section{Section 3}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}

    \section{Section 4}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 4}
    \begin{frame}Test\end{frame}

    \section{Section 5}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}

\end{document}

在此处输入图片描述

答案2

除非有人能找到合适的解决方案,否则你可能需要考虑以下肮脏的黑客手段:

\pagenumbering{arabic}
\documentclass[compress,14pt,t]{beamer}
\usepackage[latin1]{inputenc}
\usepackage{multicol}
\usepackage{charter}
\frenchspacing

\begin{document}

\begin{frame}
    \frametitle{Outline}
    \begin{multicols}{2}
      \tableofcontents
      \end{multicols}
\end{frame}
\addtocontents{toc}{\vskip -1.9cm}  %new code
\section{Section 1}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 4}
    \begin{frame}Test\end{frame}
\addtocontents{toc}{\vskip -1.9cm}     %new code
\section{Section 2}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}

\addtocontents{toc}{\vfill\newpage}
\section{Section 3}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}

\section{Section 4}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 4}
    \begin{frame}Test\end{frame}

\section{Section 5}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}

\end{document}

在此处输入图片描述

这个想法是尝试\addtocontents{toc}在目录的第一部分和第二部分之前添加负的 vskips,以便手动确定它们的垂直对齐方式。这仅在使用 a 调用列分隔符时才有效\vfill\newpage,当然,只要您添加或删除一个部分/子部分,它就会中断(您必须重新计算所需的 vskips)。不要忘记编译两次以获得最终结果(如屏幕截图所示)。

卑鄙手段 #2

\pagenumbering{arabic}
\documentclass[compress,14pt,t]{beamer}
\usepackage[latin1]{inputenc}
\usepackage{multicol}
\usepackage{charter}
\frenchspacing

\begin{document}
\begin{frame}
    \frametitle{Outline}
    \begin{multicols}{2}
      \tableofcontents
      \end{multicols}
\end{frame}
\addtocontents{toc}{\vskip -0.1cm} %new code
\section{Section 1}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 4}
    \begin{frame}Test\end{frame}
\section{Section 2}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}
\section{Section 3}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}
\addtocontents{toc}{\vfill\newpage} %new code
\section{Section 4}
\begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 3}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 4}
    \begin{frame}Test\end{frame}    
\section{Section 5}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 1}
    \begin{frame}Test\end{frame}
    \subsection{Subsection 2} 
\addtocontents{toc}{\vskip 3cm} %new code   
    \begin{frame}Test\end{frame}

\end{document}

在此处输入图片描述
这次我只是添加了\newpage(和以前一样)并将第 5 节向上移动一些正 vskip,位于\section{Section 5}第 5 节最后一帧之后但之前。否则它不起作用。因为我觉得第二列比第一列高一点,所以我在第一节之前添加了一个小的负 vskip。

相关内容