TIKZ/PGF:如何覆盖节点内文本的不透明度?

TIKZ/PGF:如何覆盖节点内文本的不透明度?

我试图在图中一次逐步显示一个节点,同时保留两个节点之间的文本对齐。

以下是一个例子:

\documentclass[presentation]{beamer}
\usepackage{tikz}
\usepackage{transparent}
\usepackage{xcolor}

\tikzset{
  invisible/.style={opacity=0},
  visible on/.style={alt={#1{}{invisible}}},
  alt/.code args={<#1>#2#3}{%
    \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
  },
}
\newcommand{\x}{{\color{blue}\ensuremath{x}}}

\begin{document}
\begin{frame}
\begin{figure}
    \centering
    \begin{tikzpicture}
      \begin{scope}
        \node[visible on=<1>] (b00) at (0, 0) {
            {\transparent{0}$3 \cdot ($}
            $f(\x)$
            {\transparent{0}$) + 5$}
            {$=$}
            {\transparent{0}$3 \cdot ($}
            $g(\x) * h(\x)$
            {\transparent{0}$) + 5$}
        };
        \node[visible on=<2>] (b00) at (0, 0) {
            {\transparent{0.5}$3 \cdot ($}
            $f(\x)$
            {\transparent{0.5}$) + 5$}
            {$=$}
            {\transparent{0.5}$3 \cdot ($}
            $g(\x) * h(\x)$
            {\transparent{0.5}$) + 5$}
        };
      \end{scope}
    \end{tikzpicture}
\end{figure}
\end{frame}
\end{document}

我试图在第一张幻灯片中获取:f(x) = g(x) ∗ h(x),在第二张幻灯片中获取 3·(f(x)) + 5 = 3.(g(x)∗h(x)) + 5,同时在两张幻灯片中保持 f(x) = g(x) ∗ h(x) 的对齐。

这是期望的结果

在 TIKZ/PGF 中有没有一种干净的方法可以做到这一点?

答案1

你可以让 beamer 帮你揭开谜底:

\documentclass[presentation]{beamer}
\usepackage{tikz}
\setbeamercovered{transparent}

\newcommand{\x}{{\color{blue}\ensuremath{x}}}

\setbeamercovered{still covered={\opaqueness<1>{30}\opaqueness<2->{0}}}

\begin{document}
\begin{frame}<-2>
\begin{figure}
    \begin{tikzpicture}
      \begin{scope}
        \node (b00) at (0, 0) {
          $
            \uncover<3->{3 \cdot (}
            f(\x)
            \uncover<3->{) + 5}
            =
            \uncover<3->{3 \cdot (}
            g(\x) * h(\x)
            \uncover<3->{) + 5}
          $
        };
      \end{scope}
    \end{tikzpicture}
\end{figure}
\end{frame}
\end{document}

在此处输入图片描述

答案2

欢迎来到 TeX.SX!您可以简单地为数学部分着色。没有必要将它们分开那么多。使用begingroup\endgroup(如建议的那样这个答案为了保持二元运算符的间距正确(无论如何,这对您来说不是问题)。

我建议你使用overlay-beamer-stylesTi库Z 而不是提供您自己的visible on样式。在下面的代码中,我添加了一个没有颜色的幻灯片来显示间距是否正确。

\documentclass[presentation]{beamer}
\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}

%\newcommand{\x}{{\color{blue}\ensuremath{x}}}

\newcommand{\makeblue}[1]{\begingroup\color{blue}\ensuremath{#1}\endgroup}
\newcommand{\maketransparent}[2][0]{\begingroup\color{black!#1}\ensuremath{#2}\endgroup}

\begin{document}
\begin{frame}
\begin{figure}
    \centering
    \begin{tikzpicture}
      \begin{scope}
        \node[visible on=<1>] (b00) at (0, 0) {
            $\maketransparent{3 \cdot (}
            f(\makeblue{x})
            \maketransparent{) + 5}
            =
            \maketransparent{3 \cdot (}
            g(\makeblue{x}) * h(\makeblue{x})
            \maketransparent{) + 5}$
        };
        \node[visible on=<2>] (b00) at (0, 0) {
            $\maketransparent[50]{3 \cdot (}
            f(\makeblue{x})
            \maketransparent[50]{) + 5}
            =
            \maketransparent[50]{3 \cdot (}
            g(\makeblue{x}) * h(\makeblue{x})
            \maketransparent[50]{) + 5}$
        };
        \node[visible on=<3>] (b00) at (0, 0) {
            $3 \cdot (f(x)) + 5 = 3 \cdot (g(x) * h(x)) + 5$
        };
      \end{scope}
    \end{tikzpicture}
\end{figure}
\end{frame}
\end{document}

在此处输入图片描述


更灵活的命令可能是:

\NewDocumentCommand{\maketransparent}{ O{0} O{black} m }{\begingroup\color{#2!#1}\ensuremath{#3}\endgroup}

它需要三个参数,其中两个是可选的,可用于设置颜色和不透明度。第三个参数需要设置应该着色的内容。以下是几个示例:

\maketransparent{a}           % print an invisible a

\maketransparent[25]{a}       % print an a with 25 % opacity

\maketransparent[25][red]{a}  % print a red a with 25 % opacity

相关内容