投影仪演示文稿中的所有元素都整齐地布局,以便它们不会互相重叠。
有没有一种方法,例如覆盖规范,允许出现位于幻灯片其他元素上方的框、注释或气泡?(可能类似于工具提示)
答案1
如果您想在 TikZ 中绘制叠加层,则不需要任何额外的包来进行绝对定位。只需添加选项[overlay,remember picture]
即可将图像绝对定位在框架上(您需要编译两次才能获得正确的定位)。特殊节点(current page)
是一个矩形节点,它简单地跨越整个页面,可以轻松访问页面中的各个位置。您\pgftransformshift{\pgfpointanchor{current page}{center}}
可以选择一个坐标系,使其(0,0)
位于页面的中心。
这是一个例子(用xelatex
或编译lualatex
以获取字体)。
\documentclass{beamer}
\usepackage{tikz,lipsum,fontspec}
\usetikzlibrary{shapes.callouts,decorations.pathmorphing}
\newfontfamily\comic{Comic Sans MS}
\begin{document}
\begin{frame}
\lipsum[1]
\begin{tikzpicture}[overlay,remember picture]
\pgftransformshift{\pgfpointanchor{current page}{center}}
\node[
ellipse callout,
draw=red,
ultra thick,
fill=yellow,
decoration=zigzag,
decorate,
callout relative pointer=(315:2cm),
font=\Huge\comic,
text width=0.6\textwidth,
align=center,
anchor=center
] at (0,0) {Presentations without speech bubbles are BORING!};
\end{tikzpicture}
\end{frame}
\end{document}
当然,你可以将其与 Andrew 的解决方案结合起来,“如何在投影仪幻灯片中打开临时的漫画状气球?”。
答案2
基本上有两个问题需要解决:
- 如何将内容放置在任意位置的普通内容之上。
- 如何在那里绘制标注框。
对于 (1),beamer 文档推荐使用该textpos
软件包,该软件包(使用选项)提供了[absolute, overlay]
将“某些内容”置于高于其他所有内容的绝对位置的必要方法。
对于 (2),有很多选择。我个人更喜欢使用一些 TikZ 代码片段来排版框,这给了我足够的灵活性来在特定情况下影响排版。
综上所述,我的通常设置如下:
\documentclass{beamer}
\usepackage[absolute,overlay]{textpos}
\usepackage{tikz}
\usetikzlibrary{shadows}
%**
% \PutAt<overlay spec>[<box width>]{(<x>, <y>)}{<content>}
%
% real absolute positioning of <content> on a slide, if content is a figure,
% minipage or whatever kind of LR-box, the <box width> argument may be omitted
%
%
% implementation notes:
% - based on \usepackage[absolute,overlay]{textpos}
% - NOT combinable with any beamer feature that is based on pgfpages
% (such as dual-screen support, built-in 2up handouts, etc.), as textpos
% and pgfpates interfere at the shippout-level.
%
\newcommand<>{\PutAt}[3][0pt]{%
{\only#4{\begin{textblock*}{#1}#2%
#3
\end{textblock*}}}%
}
%**
% \ShowPutAtGrid
%
% draws a helpful grid on the current slide to figure <x> and <y> parameters for \PutAt
%
\newcommand{\ShowPutAtGrid}{
\begin{textblock*}{128mm}(0cm,0cm)
\tikz[color=red!20!white]\draw[very thin, step=5mm] (0mm,0mm) grid (130mm,100mm);
\end{textblock*}
\begin{textblock*}{128mm}(0cm,0cm)
\begin{tikzpicture}[color=red]
\draw[step=1cm] (0,0mm) grid (130mm,100mm);
\foreach \n in {0,...,12}
\draw[xshift=.5mm,yshift=-1.5mm, inner sep=0pt, anchor=west] (\n,10) node {\scriptsize{\textbf{\n}}};
\foreach \n in {1,...,9}
\draw[xshift=.5mm,yshift=-1.5mm, inner sep=0pt, anchor=west] (0,10-\n) node {\scriptsize{\textbf{\n}}};
\end{tikzpicture}
\end{textblock*}
}
%**
% \NormalBox<overlay spec>[tikz picture/node options]{<content>}
%
% draws content boxed in a nice box
%
\newcommand<>{\NormalBox}[2][]{%
\only#3{\tikz[#1, every node/.style={shape=rectangle,draw,fill=white, drop shadow, #1}]\node []{#2};}
}
%**
% \OrangeBox<overlay spec>[tikz picture/node options]{<content>}
%
% draws content boxed in an orange call-out box
%
\newcommand<>{\OrangeBox}[2][]{%
\onslide#3{\NormalBox[fill=orange!30,draw=black!30,rounded corners=4pt,#1]{#2}}%
}
\begin{document}
\begin{frame}{My frame}
\begin{itemize}
\item Foo
\item Bar
\item Baz
\end{itemize}
\PutAt<+>{(2cm,2cm)}{
\NormalBox[text width=4cm, font=\footnotesize]{A absolute positioned overlay box}
}
\PutAt<+>{(5cm,4cm)}{
\OrangeBox[text width=4cm, font=\footnotesize]{A more callout-like orange box that provides some really helpfull content}
}
\end{frame}
\begin{frame}{My frame}
\begin{itemize}
\item Foo
\item Bar
\item Baz
\end{itemize}
\PutAt{(2cm,2cm)}{
\NormalBox[text width=4cm, font=\footnotesize]{A absolute positioned overlay box}
}
\PutAt{(5cm,4cm)}{
\OrangeBox[text width=4cm, font=\footnotesize]{A more callout-like orange box that provides some really helpfull content}
}
\ShowPutAtGrid
\end{frame}
\end{document}
答案3
尝试fancytooltips
和ocgtools
包。文档目录中有完整的示例。