我喜欢定义表示二进制数据的函数,但我陷入了这个相当简单的任务......我的 NWME 是:
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\pgfmathdeclarefunction{data}{2}{%
\pgfmathifthenelse{(or(\x<#1, \x>#2))}{1}{0}%
}
\begin{tikzpicture}
\draw [red, thick] (0,0) --
plot [domain= 0:80, samples=160, smooth] (\x,data(20,40));
\end{tikzpicture}
\end{document}
这个例子给出错误:“放弃这条路径。......” 似乎我不明白如何使用 pgfmath 来绘制这样一个简单的函数。
手工绘制这个数据函数很简单,但后来我喜欢给这个函数添加噪音。
答案1
在这里,我完成了优秀的 cmhuges 的回答,以展示如何使用密钥declare function
:
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\tikzset{declare function={
data(\a,\b,\x)=or(\x<\a, \x>\b)?1:0;
}}
\draw [red,thick] (0,0) -- plot [domain= 0:80,samples=160,smooth] (\x,{data(20,40,\x)});
\end{tikzpicture}
\end{document}
答案2
你pgfmath
没问题,但你需要使用
\draw [red, thick] plot [domain= 0:80, samples=160, smooth] (\x,{data(20,40)});
注意{}
中的(\x,{data(20,40)})
。以下是完整的 MWE:
% arara: pdflatex
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\pgfmathdeclarefunction{data}{2}{%
\pgfmathifthenelse{(or(\x<#1, \x>#2))}{1}{0}%
}
\begin{tikzpicture}
\draw [red, thick] plot [domain= 0:80, samples=160, smooth] (\x,{data(20,40)});
\end{tikzpicture}
\end{document}
顺便说一句,你可能想探索pgfplots
包(基于tikz
),因为它简化了一些符号。