按顺序显示 \draw 命令的各个部分

按顺序显示 \draw 命令的各个部分

我想按顺序显示一个 \draw 命令的各个部分。使用以下代码,我想仅在第一张幻灯片上显示轴,然后在第二张幻灯片上显示轴和蓝线,然后在第三张幻灯片上显示轴和红线以及蓝线。

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{frame}[fragile,t]
\frametitle{}
\begin{tikzpicture}[scale=.9, transform shape]
\draw [thick,-latex](0,0) -- (8,0);
\draw [thick,-latex](0,0) -- (0,8.);
\draw [very thick,blue] (4.,4.) +(-45:4cm) node [black, xshift=.24cm, yshift=-.05cm] {$D$} -- +(135:4cm) +(45:4cm) node [black, xshift=0cm, yshift=.05cm] {$S$} edge[very thick, red] ++(-135:4cm);
\end{tikzpicture}
\end{frame}
\end{document}

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

答案1

Till Tantau 是 的创建者BEAMER并与 合作Tikz-PGF。只需在命令名称后添加覆盖规范即可。overlaytikz

例如,这里使透明度在第二张和所有后续图像上可见: draw<2->(0,0)--(2,0);

编辑2:Beamer 手册第 85 页:

9.6.1 使命令和环境覆盖规范感知

beamer 扩展了 LaTeX 标准命令的语法\newcommand

\newcommand<>{< command name>}[< argument number>][< default optional value>]{< text>}

[...]

另外允许的参数是覆盖规范

Till Tantau 以这种方式编写所有Tikz命令。因此,overlay命令名称后面必须跟有。所以我们不能按顺序追踪路径。需要写出几条路径,每条路径都用给定的覆盖层写出。

然后,就无法\draw按顺序显示命令的各个部分。必须\draw按顺序编写尽可能多的命令。

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{frame}[fragile,t]
\frametitle{}
\begin{tikzpicture}[scale=.9, transform shape]
\useasboundingbox(0,0)rectangle(8,8);
\draw [thick,-latex](0,0) -- (8,0)(0,0) -- (0,8.);
\draw<2-> [very thick,blue] (4.,4.) +(-45:4cm) node [black, xshift=.24cm, yshift=-.05cm] {$D$} -- +(135:4cm) +(40:4cm) node [black, xshift=0cm, yshift=.05cm] {$S$} edge[very thick, purple!90!black, solid] ++(-140:4cm);
\draw<3-> [thick, black, densely dashed] (0,4.) node [black, xshift=-.28cm, yshift=-.05cm] {$P_0$} -- ++(0:4.) node [circle, draw, solid, black, fill=black, scale=0.2, xshift=0cm, yshift=0cm]{} -- +(-90:4.);
\end{tikzpicture}
\end{frame}
\end{document}

注意:不需要写两个\draw命令:

 \draw [thick,-latex](0,0) -- (8,0);
 \draw [thick,-latex](0,0) -- (0,8.);

您只能写一个draw命令

\draw [thick,-latex](0,0) -- (8,0)(0,0) -- (0,8.);

答案2

你想要这三张图吗?

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{tikz}
\usepackage{pgfplots}
\newcommand{\achses}{\draw [thick,-latex](0,0) -- (8,0);\draw [thick,-latex](0,0) -- (0,8.);}
\newcommand{\blueline}{\draw [very thick,blue] (4.,4.) +(-45:4cm) node [black, xshift=.24cm, yshift=-.05cm] {$D$} -- +(135:4cm) +(45:4cm);}
\newcommand{\redline}{\draw [very thick,blue] (4.,4.) +(-45:4cm) node [black, xshift=.24cm, yshift=-.05cm] {$D$} -- +(135:4cm) +(45:4cm) node [black, xshift=0cm, yshift=.05cm] {$S$} edge[very thick, red] ++(-135:4cm);
}% needs removal of blueline!
\newcommand{\myframe}[2]{\frametitle{#1}\begin{tikzpicture}[scale=.9, transform shape]#2\end{tikzpicture}}
\begin{document}
\begin{frame}[fragile,t]\myframe{}{\achses}
\end{frame}
\newpage
\begin{frame}[fragile,t]\myframe{}{\achses\blueline}
\end{frame}
\newpage
\begin{frame}[fragile,t]\myframe{}{\achses\blueline\redline}
\end{frame}
\end{document}

应该从\redline代码中删除蓝线(否则蓝线会被绘制两次)。

的第一个参数\myframe是的参数\frametitle,在最小示例中它是空的。

使用\pause命令(参见https://tex.stackexchange.com/a/9160/6865(感谢 Bobyandbob 指出这一点)也有可能:

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{frame}[fragile,t]
\frametitle{}
\begin{tikzpicture}[scale=.9, transform shape]
\draw [thick,-latex](0,0) -- (8,0);
\draw [thick,-latex](0,0) -- (0,8.);\pause
\draw [very thick,blue] (4.,4.) +(-45:4cm) node [black, xshift=.24cm, yshift=-.05cm] {$D$} -- +(135:4cm) +(45:4cm);\pause
\draw [very thick,blue] (4.,4.) +(-45:4cm) node [black, xshift=.24cm, yshift=-.05cm] {$D$} -- +(135:4cm) +(45:4cm) node [black, xshift=0cm, yshift=.05cm] {$S$} edge[very thick, red] ++(-135:4cm);
\end{tikzpicture}
\end{frame}
\end{document}

相关内容