通常在frame
(的beamer
) 中,我会在顶部放置一些文本,tikzpicture
在底部放置调整大小的文本:
\begin{frame}
\frametitle{...}
some texts
...
some texts
\[\resizebox{!}{???}{
\begin{tikzpicture}
...
\end{tikzpicture}
}\]
\end{frame}
我想知道如何确定???
部分,使tikzpicture
占据剩余的部分frame
,以便总高度图片加文字占据了整个空间frame
。
有谁知道这是怎么做到的吗?
答案1
您可以使用它zref
来测量剩余空间,方法是保存文本的底部位置和框架的底部位置。以下代码对我有用。每次更改文本后都需要运行两次。它似乎适用于不同的主题。如果您希望图像居中,请取消注释\centering
。我添加了较低的边距以使其不接触底部边缘。如果您愿意,您还可以使用一个可以center
自行添加(在我看来相当大的)边距的环境。
请注意,该环境restofframe
可以多次使用,并且一张幻灯片上的所有实例将平等共享剩余空间。
\documentclass{beamer}
\usetheme{Berlin}
\usepackage{tikz}
\usepackage{zref-savepos}
\newcounter{restofframe}
\newsavebox{\restofframebox}
\newlength{\mylowermargin}
\setlength{\mylowermargin}{2pt}
\newenvironment{restofframe}{%
\par%\centering
\stepcounter{restofframe}%
\zsavepos{restofframe-\arabic{restofframe}-begin}%
\begin{lrbox}{\restofframebox}%
}{%
\end{lrbox}%
\setkeys{Gin}{keepaspectratio}%
\raisebox{\dimexpr-\height+\ht\strutbox\relax}[0pt][0pt]{%
\resizebox*{!}{\dimexpr\zposy{restofframe-\arabic{restofframe}-begin}sp-\zposy{restofframe-\arabic{restofframe}-end}sp-\mylowermargin\relax}%
{\usebox{\restofframebox}}%
}%
\vskip0pt plus 1filll\relax
\mbox{\zsavepos{restofframe-\arabic{restofframe}-end}}%
\par
}
\begin{document}
\begin{frame}
\frametitle{Title}
some texts
some texts
some text
some text
\begin{restofframe}
\begin{tikzpicture}
\draw (0,0) -- (1,1);
\draw (0,1) -- (1,0);
\end{tikzpicture}%
\end{restofframe}
\end{frame}
\begin{frame}
\frametitle{Title}
\framesubtitle{Subtitle}
some texts
some texts
some text
some text
\begin{restofframe}
\begin{tikzpicture}
\draw (0,0) -- (1,1);
\draw (0,1) -- (1,0);
\end{tikzpicture}%
\end{restofframe}
\end{frame}
\begin{frame}
\frametitle{Title}
\framesubtitle{Subtitle}
some texts
some texts
\begin{restofframe}
\begin{tikzpicture}
\draw (0,0) -- (1,1);
\draw (0,1) -- (1,0);
\end{tikzpicture}%
\end{restofframe}
some text
some text
\end{frame}
\end{document}