我试图在图中一次逐步显示一个节点,同时保留两个节点之间的文本对齐。
以下是一个例子:
\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-styles
Ti库钾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