Überlagern von Teilen der Beamer-Tabelle mit einem „durchsichtigen“ (d. h. undurchsichtigen) Textfeld

Überlagern von Teilen der Beamer-Tabelle mit einem „durchsichtigen“ (d. h. undurchsichtigen) Textfeld

Das scheint ganz einfach zu sein! Nachdem ich eine sehr komplexe Tabelle mit multirowund vielen anderen Tabellen-bezogenen beamerPaketen erstellt habe, die ich gerade kennengelernt habe, möchte ich in meinem Vortrag nun Teile davon mit erfolgreichen Overlays (gesteuert durch \pauseoder so ähnlich) hervorheben.

Ich hatte mir drei Textblockaufrufe vorgestellt, wie zum Beispiel:

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

Wobei jedes eine andere xy-Position, einen anderen farbigen Hintergrund und andere Wörter hat.

Mein Problem besteht darin, dass ich möchte, textblockcolordass es undurchsichtig oder durchscheinend ist, sodass der Text darunter (also der Tabellentext) sichtbar ist.

Ich habe das Paket " " ausprobiert transparent- mit vielen Misserfolgen. Ich habe viele andere falsche Fährten ausprobiert (so viele, dass ich sie alle vergessen habe). Ich habe die Dokumentation dazu studiert textpos(und dachte, dass ich mit den Einstellungen vielleicht das machen könnte, was ich wollte overlay). Irgendwelche Ideen?

Natürlich möchte ich nicht, dass der Text durchscheinend, undurchsichtig oder transparent ist. Ich würde wahrscheinlich „Undurchsichtigkeit“ verwenden wollen, aber die Suche in diesem Thread führt mich nicht dorthin, wo ich hin möchte – natürlich wäre es schön, wenn ich die Textfarbe in jedem Fall variieren könnte, textblockaber mit Schwarz kann ich leben.

Vielen Dank für jede Hilfe und jeden Gedanken.

Antwort1

\tikzmarkEine Möglichkeit besteht darin, die verbesserte Version von (von Andrew Stacey) zu verwenden . Die Idee ist einfach: In der Tabelle \tikzmarksetzen Sie „Markierungen“ für jeden Block (z. B. \tikzmark{start1}wo der erste Block beginnen und \tikzmark{end1}wo der erste Block enden soll, \tikzmark{start2}wo der zweite Block beginnen und \tikzmark{end2}wo der zweite Block enden soll usw.).

Dann verwenden Sie für jeden Block einfach das \MyBoxMakro, um die Kästchen mit ihrem Text zu zeichnen. Die Syntax lautet

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

wobei das optionale Argument die Position von steuert <text>, <color>die für den Block und den Text verwendete Farbe angibt, <start-mark>die <end-mark>Markierungen aus dem vorherigen Schritt sind und <text>der Text ist, der die Box begleiten wird. Natürlich können Sie \MyBoxdie farbige Box auch anders zeichnen und den Text entsprechend Ihren Anforderungen platzieren.

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

Hier ist eine Animation des resultierenden Dokuments:

Bildbeschreibung hier eingeben

verwandte Informationen