为什么在 \onlyenv 中使用时文本块环境不遵循覆盖设置?

为什么在 \onlyenv 中使用时文本块环境不遵循覆盖设置?

我有一张想要用浮动文本、箭头和圆圈来解释的图片。为此,我考虑创建一个textblock环境(用于放置文本)和一个图片环境(用于放置箭头和椭圆),并将其嵌套在一个onlyenv环境中。在一个独特的框架中,我可以放置\onlyenv任意数量的文本、箭头和圆圈,以便在图片周围移动。

预期行为:textblock和图片环境应该只出现在环境定义的层中onlyenv

观察到的行为:只有图片环境遵循\onlyenv设置。textblock环境出现在所有图层中。

例如,考虑以下LaTeX文件

\documentclass{beamer}
\usepackage{lipsum}
\usepackage[absolute,overlay]{textpos}
% graphical config
\setlength{\unitlength}{1cm} % set default length
\thicklines

\begin{document}
\begin{frame}{Title}
    \begin{onlyenv}<+>
        \begin{figure}
            \vspace{3cm}
            % \centering
            \includegraphics[scale=0.25]{example-image-a}
        \end{figure}
        \begin{picture}(1,1)
            \put(6.5,5){\vector(1,-1){0.85}}
            \put(8.7,3.1){\oval(3.1,2.5)}
            \put(8.7,3.1){\thebeamerpauses}
        \end{picture}
        
        \begin{textblock}{10}(1,3)
            \lipsum[66] \thebeamerpauses
        \end{textblock}
    \end{onlyenv}
    
    \begin{onlyenv}<+>
        \begin{figure}
            \vspace{3cm}
            % \centering
            \includegraphics[scale=0.25]{example-image-b}
        \end{figure}
        \begin{picture}(1,1)
            \put(6.5,1){\vector(1,-1){0.85}}
            \put(6.7,2.1){\oval(3.1,2.5)}
            \put(6.7,2.1){\thebeamerpauses}
        \end{picture}
        
        \begin{textblock}{10}(1,9)
            \lipsum[75] \thebeamerpauses
        \end{textblock}
    \end{onlyenv}
\end{frame}
\end{document}

这得出

在此处输入图片描述

答案1

[overlay]选项textpos使用一种相当简单的机制来控制元素添加到输出页面的顺序。环境beamer会执行相当复杂的操作来控制页面上的定位,而这些操作不太可能与 [overlay] 模式很好地交互。

相反,使用textpos不带选项:\usepackage{textpos}。在此模式下,{textblock}环境只会向页面添加一个零尺寸框,偏移量(hpos,ypos)相对于此框在页面上的位置。具体来说,在此模式下,textpos添加材料时不会采取任何巧妙措施,因此不会混淆或被 beamer 混淆。

如果你将 移动{textblock}到 的开头{frame},它将具有一致、可预测的位置,并写入

\begin{onlyenv}<+>
    \begin{textblock}{10}(0,0)
        \lipsum[66] \thebeamerpauses
    \end{textblock}
    \begin{figure}
    ....

那么您可能会得到您想要的效果。

相关内容