我有以下格式的框架(代码后跟逐项列出):
\begin{frame}[fragile]
\frametitle{Blah}
\begin{lstlisting}
Five to seven lines of code here...
\end{lstlisting}
\begin{itemize}
\item explanation
\item explanation
\item explanation
\end{itemize}
\end{frame}
我想要实现的是让 lstlisting 自动调整字体大小以占用尽可能多的空间,而不会导致水平和垂直溢出。
答案1
首先:beamer
不提供任何像 MS Power Point 那样的文本或图表的自动缩放功能,因为它的作者认为这会导致糟糕的演示。如果材料无法在一张幻灯片上显示,则无需缩放,只需将其制作成两张或更多张幻灯片即可。
调整字体或稍微缩放一些列表可能还可以,但我不会自动执行此操作。即使整个幻灯片都填满了,也并不意味着它会自动看起来不错。
您应该手动调整大小,方法是使用环境的可选参数basicstyle=<some font size command>
(例如\small
,, ...)调整字体大小,或者缩放整个列表。有些人不喜欢自由缩放文本,但我个人认为在这种情况下是可以的。包中的常规缩放宏不适用于逐字内容。您需要将其存储在盒子寄存器中,例如使用环境,或者使用包,该包在提供的宏和环境之上提供了一些扩展的盒子宏和环境。环境接受逐字内容并采用包括和、、在内的所有选项。\scriptsize
lstlisting
\scalebox{<factor>}{...}
graphics
lrbox
adjustbox
graphicx
adjustbox
\includegraphics
scale
height
width
keepsaspectratio
我会手动调整高度。您可以尝试调整解决方案以如何定义图形大小以使其占据页面的剩余部分?这样金额就会自动计算出来。但是如果在文本中间放置一个数字或列表,那么计算起来会比在文本末尾放置数字或列表困难得多。
\documentclass{beamer}
\usepackage{listings}
\usepackage{adjustbox}
\begin{document}
\newlength\someheight
\setlength\someheight{3cm}
\begin{frame}[fragile]
\frametitle{Blah}
\begin{adjustbox}{width=\textwidth,height=\someheight,keepaspectratio}
\begin{lstlisting}
function example () {
if (example) {
print "Example";
}
else {
print "Automatic Scaling in Presentations is evil anyway";
}
}
\end{lstlisting}
\end{adjustbox}
\begin{itemize}
\item explanation
\item explanation
\item explanation
\end{itemize}
\end{frame}
\end{document}