有没有办法以多列(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
最后一帧 关闭- 注意:
\addtocontents
只能与排版后的材料一起使用(见Beamer:allowframebreaks 与列相撞?)- 我无法找到可用的解决方案
\AtEndDocument
- 我无法找到可用的解决方案
- 注意:
- 使用
代码
\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}