我正在准备一份关于函数序列的讲义。我想在其中添加函数图作为序列的每个项。以下 MWE 是我目前正在使用的代码片段。
\documentclass[aspectratio=169,10pt, notheorems]{beamer}
\usetheme{EastLansing}
\usefonttheme{serif}
\usecolortheme{beetle}
\usepackage{xcolor}
\setbeamertemplate{navigation symbols}{}
\setbeamercolor{background canvas}{bg=black}
\setbeamercolor{normal text}{fg=white}
\usepackage{tikz}
\usepackage{pgf}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepackage{ragged2e}
\begin{document}
\begin{frame}{Sequences of functions}
\begin{columns}
\column{0.5\linewidth}
\begin{figure}
\begin{tikzpicture}[scale=5]
\draw [->] (0,0) -- (1.1,0);
\draw [->] (0,0) -- (0,1.1);
\foreach \n in {1,2,...,10}
{
\onslide<+->
{
\draw [yellow, samples=100, domain=0:1] plot (\x,{(\x)^(\n)});
}
}
\end{tikzpicture}
\caption{$ f_n(x)=x^{n} $}
\end{figure}
\column{0.5\linewidth}\pause
\begin{figure}
\begin{tikzpicture}[yscale=2.5]
\draw [->] (-3.14,0) -- (3.14,0);
\draw [->] (0,-1.1) -- (0,1.1);
\foreach \n in {1,2,...,10}
{
\onslide<+->
{
\draw [yellow, samples=100, domain=-3.14:3.14] plot (\x,{(sin((\n*\x)r))/\n});
}
}
\end{tikzpicture}
\caption{$ f_n(x)=\frac{\sin nx}{n} $}
\end{figure}
\end{columns}
\end{frame}
\end{document}
我在这里想要的是更改每张幻灯片中新添加的图表的颜色。我理解这可以通过插入另一个循环来实现,例如
\foreach \k in {1,...,\n}
\draw [red, samples=100, domain=0:1] plot (\x,{(\x)^(\k)});
但这样一来,渲染时间就会不受控制地急剧增加。这也是一个值得关注的问题,因为我将添加更多序列。现在为了解决这个问题,我碰巧想到了用 来控制颜色draw
(yellow
这里)\n
。但我不知道如何实现这一点(或者是否有可能实现!)。请帮忙。
附言:我们也欢迎任何其他不增加渲染时间就能实现目标的方法。
答案1
以下代码在10秒内编译完成。
\documentclass[aspectratio=169,10pt,notheorems]{beamer}
\setbeamertemplate{navigation symbols}{}
\setbeamercolor{background canvas}{bg=black}
\setbeamercolor{normal text}{fg=white}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
\foreach\n in{1,...,10}{
\path[save path=\temppowerpath]
plot[scale=5,samples=100,domain=0:1](\x,{(\x)^(\n)});
\expandafter\global\expandafter\let\csname powerpath\n\endcsname=\temppowerpath
}
\foreach\n in{1,...,10}{
\path[save path=\tempsinepath]
plot[yscale=2.5,samples=100,domain=-3.14:3.14](\x,{(sin((\n*\x)r))/\n});
\expandafter\global\expandafter\let\csname sinepath\n\endcsname=\tempsinepath
}
\end{tikzpicture}
\begin{frame}{Sequences of functions}
$$\begin{tikzpicture}[scale=5]
\draw [->] (0,0) -- (1.1,0);
\draw [->] (0,0) -- (0,1.1);
\foreach\n in{1,...,10}{
\expandafter\let\expandafter\temppowerpath\csname powerpath\n\endcsname
\pgfmathtruncatemacro\nplusone{\n+1}
\pgfmathsetmacro\tenn{10*\n}
\draw<\nplusone-22>[use path=\temppowerpath,yellow!\tenn!green];
}
\end{tikzpicture}
\qquad
\begin{tikzpicture}[yscale=2.5]
\draw [->] (-3.14,0) -- (3.14,0);
\draw [->] (0,-1.1) -- (0,1.1);
\foreach\n in {1,...,10}{
\expandafter\let\expandafter\tempsinepath\csname sinepath\n\endcsname
\pgfmathtruncatemacro\npluseleven{\n+11}
\pgfmathsetmacro\tenn{10*\n}
\draw<\npluseleven-22>[use path=\tempsinepath,yellow!\tenn!green];
}
\end{tikzpicture}$$
\end{frame}
\end{document}
答案2
这里有两种方法可以强调不同的功能。第一种方法是,我使用键evaluate
来计算可用于颜色声明的色调因子,从而可以在这种颜色声明中使用表达式。第二种方法,我使用 TikZ 库overlay-beamer-styles
根据幻灯片所在的位置来修改样式。
因此,在第一组函数中,颜色各不相同,但每个单独的函数在所有幻灯片中始终具有相同的颜色。在第二组中,最新的函数突出显示为黄色,而所有其他函数都为红色。
\documentclass[aspectratio=169,10pt, notheorems]{beamer}
%\url{https://tex.stackexchange.com/q/568629/86}
\usetheme{EastLansing}
\usefonttheme{serif}
\usecolortheme{beetle}
\usepackage{xcolor}
\setbeamertemplate{navigation symbols}{}
\setbeamercolor{background canvas}{bg=black}
\setbeamercolor{normal text}{fg=white}
\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}
\usepackage{pgf}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepackage{ragged2e}
\usepackage{xparse}
\ExplSyntaxOn
\tikzset{
conditional~ style/.code~ n~ args={3}{
\int_compare:nTF {#1}
{\pgfkeysalso{#2}}
{\pgfkeysalso{#3}}
}
}
\ExplSyntaxOff
\begin{document}
\begin{frame}{Sequences of functions}
\begin{columns}
\column{0.5\linewidth}
\begin{figure}
\begin{tikzpicture}[scale=5]
\draw [->] (0,0) -- (1.1,0);
\draw [->] (0,0) -- (0,1.1);
\foreach[evaluate=\n as \tint using 10*\n] \n in {1,2,...,10}
{
\onslide<+->
{
\draw [yellow!\tint!red, samples=100, domain=0:1] plot (\x,{(\x)^(\n)});
}
}
\end{tikzpicture}
\caption{$ f_n(x)=x^{n} $}
\end{figure}
\column{0.5\linewidth}\pause
\begin{figure}
\begin{tikzpicture}[yscale=2.5]
\draw [->] (-3.14,0) -- (3.14,0);
\draw [->] (0,-1.1) -- (0,1.1);
\foreach \n in {1,2,...,10}
{
\onslide<+->
{
\draw [
alt=<.>{yellow}{red},
conditional style={\n = 10}{yellow}{},
samples=100,
domain=-3.14:3.14
] plot (\x,{(sin((\n*\x)r))/\n});
}
}
\end{tikzpicture}
\caption{$ f_n(x)=\frac{\sin nx}{n} $}
\end{figure}
\end{columns}
\pause
\pause
\pause
\pause
\end{frame}
\end{document}
编辑中添加:我添加了一个额外的样式conditional on
,可用于有条件地应用样式。有多种方法可以让最后一个函数保持黄色并在幻灯片上显示额外的内容,额外的样式conditional on
只是其中之一。