使用framezoom
命令时,同时使图像居中;\
\documentclass{beamer}
\mode<presentation>{\usetheme{Warsaw}}
\begin{document}
\begin{frame}
\begin{center}
\framezoom<2><3>[border](3.5cm, 1.5cm)(1cm, 1cm)
\pgfimage[height=5cm]{example-image}
\end{center}
\end{frame}
\end{document}
图像将居中并且边框的定位好像中心为 0。但缩放实际上是在图片的一部分上进行缩放,就好像 0 位于幻灯片的左侧一样。
简而言之,边框和缩放不再匹配。我的问题是:我可以在将图像居中时使用带边框的 framezoom 吗
答案1
在我看来,这似乎是个 bug beamer
。\framezoom
可能使用了某种形式的锚点,而这种锚点会受到居中的影响。
解决这个问题的一个方法是\framezoom
外部环境center
:
\documentclass{beamer}
\usetheme{Warsaw}
\begin{document}
\begin{frame}
\framezoom<2><3>[border](3.5cm, 1.5cm)(1cm, 1cm)
\begin{center}
\pgfimage[height=5cm]{example-image}
\end{center}
\end{frame}
\end{document}
请注意,如果您使用该选项,您可以使用我的adjustbox
包非常轻松地将图像置于中心。无论如何,据我所知,它用于PDF 输出。export
\includegraphics
\pgfimage
\includegraphics
\documentclass{beamer}
\usetheme{Warsaw}
\usepackage[export]{adjustbox}
\begin{document}
\begin{frame}
\framezoom<2><3>[border](3.5cm, 1.5cm)(1cm, 1cm)
\includegraphics[height=5cm,center]{example-image}
\end{frame}
\end{document}
答案2
马丁·沙雷尔已经为这个问题提供了很好的解决方法,所以我想填写一些关于为什么会发生这种情况的信息:
相关代码\framezoom
可以在beamerbaseframesize.sty
,第39-135行:
\def\beamer@framezoom<#1><#2>[#3](#4,#5)(#6,#7){%
% [...]
\only<#1>{%
{\hypersetup{pdfhighlight={/P},pdfborder={0 0 \beamer@zoomborderwidth}}%
\global\setbox\@tempboxa=\vbox{\hyperlink{\beamer@labelzoomed}{\vbox to #7{\hbox
to#6{\hfil}\vfil}}}}%
\ht\@tempboxa=0pt%
\wd\@tempboxa=0pt%
\dp\@tempboxa=0pt%
\setbox\@tempboxa=\vbox{\moveright#4\hbox{\lower#5\vbox{\box\@tempboxa}}}%
\ht\@tempboxa=0pt%
\wd\@tempboxa=0pt%
\dp\@tempboxa=0pt%
\global\setbox\beamer@zoombox=\vbox to0pt{\unvbox\beamer@zoombox\box\@tempboxa}%
}%
% [...]
}
上述代码片段生成可点击的缩放框并将其存储在框中\beamer@zoombox
,该框稍后插入到框的开头(在beamerbaseframe.sty
\framezoom
,l. 144)。因此,一般来说,在框架的任何地方使用它都没有问题,因为参考点始终是框架文本的开头。
但是,在您的示例中,这显然不是事实。原因是您\framezoom
在环境中使用 和center
更改段落边距。这会弄乱行\leftskip
\rightskip
\global\setbox\@tempboxa=\vbox{\hyperlink{\beamer@labelzoomed}{\vbox to #7{\hbox
to#6{\hfil}\vfil}}}}%
在上述代码中:由于边距变化有效,\hyperlink
在 内居中\vbox
,导致缩放框放置错误。为了解决这个问题,您必须将链接放在另一个 中\hbox
,如下所示:
\global\setbox\@tempboxa=\vbox{\hbox{\hyperlink{\beamer@labelzoomed}{\vbox to #7{\hbox
to#6{\hfil}\vfil}}}}}%
这可以\patchcmd
通过使用etoolbox
包裹:
\documentclass{beamer}
\usetheme{Warsaw}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\beamer@framezoom}{\hyperlink{\beamer@labelzoomed}{\vbox to #7{\hbox to#6{\hfil}\vfil}}}{\hbox{\hyperlink{\beamer@labelzoomed}{\vbox to #7{\hbox to#6{\hfil}\vfil}}}}{}{}
\makeatother
\begin{document}
\begin{frame}
\begin{center}
\framezoom<2><3>[border](3.5cm, 1.5cm)(1cm, 1cm)
\pgfimage[height=5cm]{example-image}
\end{center}
\end{frame}
\end{document}
但是,仍有一些特殊的段落参数,这种解决方法也会失败。所以,最好还是遵循beamer
手动的:
这个命令[即
\framezoom
]应该在帧的开始处给出。