Sobrepondo partes da tabela do Beamer com uma caixa de texto "transparente" (ou seja, opaca)

Sobrepondo partes da tabela do Beamer com uma caixa de texto "transparente" (ou seja, opaca)

Parece que deveria ser simples! Depois de criar uma tabela muito complexa usando multirowmuitos outros beamerpacotes relacionados a tabelas que acabei de aprender, agora quero destacar partes dela durante minha palestra com sobreposições bem-sucedidas (controladas por \pauseou algo assim).

Eu imaginava fazer três chamadas de bloco de texto, como:

\begin{textblock}{14.5}(0.75,3)
   \textblockcolor{yellow}
   \vspace{.5cm}
   \center
   Above the Saddle**
   \vspace{.5cm}
\end{textblock}

Onde cada um tem uma localização xy diferente, um fundo de cor diferente, palavras diferentes.

Meu problema é que quero que textblockcolorseja opaco ou translúcido para que o texto abaixo dele (ou seja, o texto da tabela) fique visível.

Eu tentei o transparentpacote " " - com muitas falhas, tentei muitas outras pistas falsas (tantas que esqueci todas). Estudei a documentação textpos(pensando que talvez pudesse fazer o que quisesse com sua overlayconfiguração), alguma ideia?

Naturalmente não quero que o texto seja translúcido, opaco ou transparente. Parece que eu gostaria de usar "opacidade", mas pesquisar nesse tópico não me leva aonde quero - é claro, seria bom se eu pudesse variar a cor do texto em cada um, textblockmas posso conviver com preto.

Obrigado por qualquer ajuda e pensamentos.

Responder1

Uma possibilidade é usar a versão melhorada de \tikzmark(por Andrew Stacey). A ideia é simples: dentro da tabela você usa \tikzmarkpara colocar “marcas” para cada bloco (digamos, \tikzmark{start1}onde você quer que o primeiro bloco comece e \tikzmark{end1}onde o primeiro bloco deve terminar; \tikzmark{start2}onde você quer que o segundo bloco comece e \tikzmark{end2}onde o segundo bloco deveria terminar, e assim por diante).

Então, para cada bloco, basta usar a \MyBoxmacro para desenhar as caixas com seu texto; a sintaxe é

\MyBox[<left|right>]{<color>}{<start-mark>}{<end-mark>}{<text>}

onde o argumento opcional controla a posição de <text>, <color>especifica a cor usada para o bloco e o texto, <start-mark>e <end-mark>são as marcas do passo anterior, e <text>é o texto que acompanhará a caixa. Claro, você pode definir \MyBoxde uma forma diferente como desenhar a caixa colorida e posicionar o texto de acordo com suas necessidades.

\documentclass{beamer}
\usepackage{booktabs}
\usepackage{tikz}
\usetikzlibrary{calc,fit}

% code by Andrew Stacey
% http://tex.stackexchange.com/a/50054/3954    
\makeatletter
\tikzset{%
  remember picture with id/.style={%
    remember picture,
    overlay,
    save picture id=#1,
  },
  save picture id/.code={%
    \edef\pgf@temp{#1}%
    \immediate\write\pgfutil@auxout{%
      \noexpand\savepointas{\pgf@temp}{\pgfpictureid}}%
  },
  if picture id/.code args={#1#2#3}{%
    \@ifundefined{save@pt@#1}{%
      \pgfkeysalso{#3}%
    }{
      \pgfkeysalso{#2}%
    }
  }
}

\def\savepointas#1#2{%
  \expandafter\gdef\csname save@pt@#1\endcsname{#2}%
}

\def\tmk@labeldef#1,#2\@nil{%
  \def\tmk@label{#1}%
  \def\tmk@def{#2}%
}

\tikzdeclarecoordinatesystem{pic}{%
  \pgfutil@in@,{#1}%
  \ifpgfutil@in@%
    \tmk@labeldef#1\@nil
  \else
    \tmk@labeldef#1,(0pt,0pt)\@nil
  \fi
  \@ifundefined{save@pt@\tmk@label}{%
    \tikz@scan@one@point\pgfutil@firstofone\tmk@def
  }{%
  \pgfsys@getposition{\csname save@pt@\tmk@label\endcsname}\save@orig@pic%
  \pgfsys@getposition{\pgfpictureid}\save@this@pic%
  \pgf@process{\pgfpointorigin\save@this@pic}%
  \pgf@xa=\pgf@x
  \pgf@ya=\pgf@y
  \pgf@process{\pgfpointorigin\save@orig@pic}%
  \advance\pgf@x by -\pgf@xa
  \advance\pgf@y by -\pgf@ya
  }%
}
\newcommand\tikzmark[2][]{%
\tikz[remember picture with id=#2] #1;}
\makeatother
% end of code by Andrew Stacey

\newcommand<>\MyBox[5][right]{%
  \tikz[remember picture,overlay,pin distance=0cm]
  {\draw[draw=#2,fill=#2!40,line width=1pt,rectangle,rounded corners]
( $ (pic cs:#3) + (0,2ex) $ ) rectangle ( $ (pic cs:#4) + (0,-1ex) $ );
  \node[fit = (pic cs:#3) (pic cs:#4),label=#1:\textcolor{#2!80!black}{\parbox{2cm}{\raggedright#5}}] 
   {};}%
}%

\begin{document}

\begin{frame}{Test Frame}

\onslide<2>{\MyBox{blue}{start1}{end1}{Some text 1}}
\onslide<3>{\MyBox[left]{green!40!black}{start2}{end2}{Some text 2}}
\onslide<4>{\MyBox{orange}{start3}{end3}{Some text 3}}
\onslide<5>{\MyBox{yellow!70!black}{start4}{end4}{Some text 4}}

\centering
\begin{tabular}{lll}
\toprule
Header1 & Header 2 & Header 3 \\
\midrule
\tikzmark{start1}Column1a & Column2a & Column3a \\
Column1a & Column2a & Column3a\tikzmark{end1} \\
\tikzmark{start4}Column1b & Column2b & Column3b \\
Column1c & Column2c & Column3c \\
\tikzmark{start2}Column1d & Column2d & Column3d \\
Column1e & Column2e & Column3e \\
Column1f & Column2f & Column3f \\
Column1g & Column2g & Column3g \\
Column1h & Column2h & Column3h\tikzmark{end4} \\
Column1i & Column2i & Column3i \\
Column1j & \tikzmark{start3}Column2j & Column3j \\
Column1k & Column2k\tikzmark{end2} & Column3k\tikzmark{end3} \\
\bottomrule
\end{tabular}

\end{frame}

\end{document}

Aqui está uma animação do documento resultante:

insira a descrição da imagem aqui

informação relacionada