多列显示的框架列表

多列显示的框架列表

有没有办法以多列(2 或 3)显示框架列表。我使用以下帖子中的以下代码 [有没有什么办法可以用投影仪生成帧列表?

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{verbatim}
\usepackage{hyperref}

\newif\ifframeinlbf
\frameinlbftrue
\makeatletter
\newcommand\listofframes{\@starttoc{lbf}}
\makeatother

\addtobeamertemplate{frametitle}{}{%
  \ifframeinlbf
  \addcontentsline{lbf}{section}{\protect\makebox[2em][l]{%
    \protect\usebeamercolor[fg]{structure}\insertframenumber\hfill}% 
  \protect\hyperlink{page.\insertpagenumber}\insertframetitle\par}
  \else\fi
}
\begin{document}
\frameinlbffalse
\begin{frame}[fragile,t,allowframebreaks]
\frametitle{List of Frames}
\listofframes
\end{frame}
\frameinlbftrue
\begin{frame}
\frametitle{Frame 1}
frame 1
\end{frame}
\begin{frame}
\frametitle{Frame 2}
frame 2
\end{frame}
\begin{frame}
\frametitle{Frame 3}
frame 3
\end{frame}
\begin{frame}
\frametitle{Frame 4}
frame 4
\end{frame}
\begin{frame}
\frametitle{Frame 5}
frame 5
\end{frame}
\begin{frame}
\frametitle{Frame 6}
frame 6
\end{frame}
\begin{frame}
\frametitle{Frame 7}
frame 7
\end{frame}
\begin{frame}
\frametitle{Frame 8}
frame 8
\end{frame}
\begin{frame}
\frametitle{Frame 9}
frame 9
\end{frame}
\begin{frame}
\frametitle{Frame 10}
frame 10
\end{frame}
\begin{frame}
\frametitle{Frame 11}
frame 11
\end{frame}
\begin{frame}
\frametitle{Frame 12}
frame 12
\end{frame}
\begin{frame}
\frametitle{Frame 13}
frame 13
\end{frame}
\begin{frame}
\frametitle{Frame 14}
frame 14
\end{frame}
\begin{frame}
\frametitle{Frame 15}
frame 15
\end{frame}
\begin{frame}
\frametitle{Frame 16}
frame 16
\end{frame}
\begin{frame}
\frametitle{Frame 17}
frame 17
\end{frame}
\begin{frame}
\frametitle{Frame 18}
frame 18
\end{frame}
\begin{frame}
\frametitle{Frame 19}
frame 19
\end{frame}
\begin{frame}
\frametitle{Frame 20}
frame 20
\end{frame}

\end{document}

当使用 multicol 时,它无法识别框架定义中的 allowframebreaks 选项,如下屏幕截图所示

在此处输入图片描述

这是我使用的代码

    \documentclass{beamer}
\beamertemplatenavigationsymbolsempty % suppress navigation bar
\usepackage{verbatim}
\usepackage{multicol}

\newif\ifframeinlbf
\frameinlbftrue
\makeatletter
\newcommand\listofframes{\@starttoc{lbf}}
\makeatother

\addtobeamertemplate{frametitle}{}{%
  \ifframeinlbf
  \addcontentsline{lbf}{section}{\protect\makebox[2em][l]{%
    \protect\usebeamercolor[fg]{structure}\insertframenumber\hfill}
  \protect\hyperlink{page.\insertpagenumber}\insertframetitle\par}
  \else\fi
}
\begin{document}
\frameinlbffalse
\begin{frame}[fragile,t,allowframebreaks]
\frametitle{List of Frames}
\begin{multicols}{3}
\listofframes
\end{multicols}
\end{frame}
\frameinlbftrue

\begin{frame}[fragile,t]
\frametitle{frame 1}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 2}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 3}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 4}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 5}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 6}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 7}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 8}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 9}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 10}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 11}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 12}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 13}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 14}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 15}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 16}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 17}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 18}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 19}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 20}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 21}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 22}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 23}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 24}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 25}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 26}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 27}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 28}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 29}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 30}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 31}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 32}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 33}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 34}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 35}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 36}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 37}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 38}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 39}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 40}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 41}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 42}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 43}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 44}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 45}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 46}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 47}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 48}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 49}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 50}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 51}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 52}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 53}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 54}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 55}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 56}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 57}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 58}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 59}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 60}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 61}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 62}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 63}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 64}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 65}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 66}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 67}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 68}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 69}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{frame 70}
\end{frame}
\end{document}

答案1

新答案

改编

(与下面的旧答案相比)

  • 通过使用: \addtocontents{lbf}{xyz}而不是\addcontentsline{...}{xyz}{...}
  • 问题:multicols无法与一起使用allowframebreaks,请参见:
  • 解决方法:
    • 使用minipage宽度0.49\textwidth代替multicols
    • minipage使用计数器将最多 16 个条目放在一个中lbfi
    • 最后一个minipage必须在最后使用\lbfend最后一帧 关闭

代码

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{forloop}
\usepackage{multicol}
\usepackage{etoolbox}

\newif\ifframeinlbf
\frameinlbftrue
\makeatletter
\newcommand\listofframes{\@starttoc{lbf}}
\makeatother

\newcounter{lbfi}
\setcounter{lbfi}{0}
\addtobeamertemplate{frametitle}{}{%
    \ifframeinlbf%
        \ifnumequal{\value{lbfi}}{16}{%
            \setcounter{lbfi}{0}
            \addtocontents{lbf}{%
                \end{minipage}
            }%
        }{}%
        \ifnumequal{\value{lbfi}}{0}{%
            \addtocontents{lbf}{%
                \begin{minipage}{.49\textwidth}%
            }%
        }{}%
        %
        \addtocontents{lbf}{%
            \protect\makebox[2em][l]{%
                \protect\usebeamercolor[fg]{structure}\insertframenumber\hfill%
            }%
            \protect\hyperlink{page.\insertpagenumber}\insertframetitle\par%
        }%
        \stepcounter{lbfi}

    \else\fi%
}

\newcommand{\lbfend}{
    \addtocontents{lbf}{%
        \end{minipage}
    }%
}

\begin{document}
\frameinlbffalse
\begin{frame}[fragile,t,allowframebreaks]{List of Frames}
    \listofframes
\end{frame}
\frameinlbftrue

\newcounter{ct}
\forloop{ct}{1}{\value{ct} < 40}{%
    \begin{frame}{Frame \arabic{ct}}
        frame \arabic{ct}
    \end{frame}
}

\begin{frame}{last}
    \lbfend% this command must be in the last frame
\end{frame}

\end{document}

结果

在此处输入图片描述

原始答案

  • 您可以使用包multicol和环境multicols
  • 我使用循环创建了 20 个测试帧(包forloop
  • 我删除了未使用的包
  • (不适用于 texlive >=2022)

代码

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{forloop}
\usepackage{multicol}

\newif\ifframeinlbf
\frameinlbftrue
\makeatletter
\newcommand\listofframes{\@starttoc{lbf}}
\makeatother

\addtobeamertemplate{frametitle}{}{%
  \ifframeinlbf
  \addcontentsline{lbf}{section}{\protect\makebox[2em][l]{%
    \protect\usebeamercolor[fg]{structure}\insertframenumber\hfill}% 
  \protect\hyperlink{page.\insertpagenumber}\insertframetitle\par}
  \else\fi
}

\begin{document}
\frameinlbffalse
\begin{frame}[fragile,t,allowframebreaks]
    \frametitle{List of Frames}
    \begin{multicols}{2} % number of columns
    \listofframes
    \end{multicols}
\end{frame}
\frameinlbftrue

\newcounter{ct}
\forloop{ct}{1}{\value{ct} < 21}%
{%
    \begin{frame}{Frame \arabic{ct}}
        frame \arabic{ct}
    \end{frame}
}

\end{document}

结果

在此处输入图片描述

相关内容