Superponer partes de la tabla Beamer con un cuadro de texto "transparente" (es decir, opaco)

Superponer partes de la tabla Beamer con un cuadro de texto "transparente" (es decir, opaco)

¡Esto parece que debería ser simple! Después de crear una tabla muy compleja usando multirowy muchos otros beamerpaquetes relacionados con tablas que acabo de conocer, ahora quiero resaltar partes de ella durante mi charla con superposiciones exitosas (controladas por \pauseo algo así).

Había imaginado hacer tres llamadas de bloques de texto como:

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

Donde cada uno tiene una ubicación xy diferente, un fondo de diferente color, diferentes palabras.

Mi problema es que quiero que textblockcolorsea opaco o translúcido para que el texto debajo (es decir, el texto de la tabla) sea visible.

Probé el transparentpaquete " "; con muchos fracasos, probé muchas otras pistas falsas (tantas que las he olvidado todas). He estudiado la documentación textpos(pensando que tal vez podría hacer lo que quería con su overlayconfiguración), ¿alguna idea?

Naturalmente no quiero que el texto sea translúcido, opaco o transparente. Parece que me gustaría usar "opacidad", pero buscar en ese hilo no me lleva a donde quiero. Por supuesto, sería bueno si pudiera variar el color del texto en cada uno, textblockpero puedo vivir con negro.

Gracias por cualquier ayuda y pensamientos.

Respuesta1

Una posibilidad es utilizar la versión mejorada de \tikzmark(de Andrew Stacey). La idea es simple: dentro de la tabla usas \tikzmarkpara poner "marcas" para cada bloque (por ejemplo, \tikzmark{start1}dónde quieres que comience el primer bloque y \tikzmark{end1}dónde debe terminar el primer bloque; \tikzmark{start2}dónde quieres que comience el segundo bloque y \tikzmark{end2}dónde debe terminar el segundo bloque). debería terminar, etc.).

Luego, para cada bloque, simplemente usas la \MyBoxmacro para dibujar los cuadros con su texto; la sintaxis es

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

donde el argumento opcional controla la posición de <text>, <color>especifica el color utilizado para el bloque y el texto, <start-mark>y <end-mark>son las marcas del paso anterior, y <text>es el texto que acompañará al cuadro. Por supuesto, puedes definir \MyBoxde otra manera cómo dibujar el cuadro de color y colocar el texto según tus necesidades.

\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}

Aquí hay una animación del documento resultante:

ingrese la descripción de la imagen aquí

información relacionada