¡Esto parece que debería ser simple! Después de crear una tabla muy compleja usando multirow
y muchos otros beamer
paquetes relacionados con tablas que acabo de conocer, ahora quiero resaltar partes de ella durante mi charla con superposiciones exitosas (controladas por \pause
o 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 textblockcolor
sea opaco o translúcido para que el texto debajo (es decir, el texto de la tabla) sea visible.
Probé el transparent
paquete " "; 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 overlay
configuració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, textblock
pero 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 \tikzmark
para 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 \MyBox
macro 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 \MyBox
de 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: