我问另一个问题percusse 不仅解释了代码,还进一步为我编写了代码。这真是太棒了。我所需要做的就是切换每个第 n 个点代码所作用的图的部分。我能够以一种迂回的方式做到这一点:
\documentclass{standalone}
\usepackage{pgfplots}
\makeatletter
\pgfplotsset{
my filter/.style args={every#1between#2and#3}{%
/pgfplots/x filter/.append code={%
\ifnum\coordindex<#2%
\pgfmathsetmacro\temp{int(mod(\coordindex,#1))}%
\ifnum0=\temp\relax
%pass
\else
\let\pgfmathresult\pgfutil@empty
\fi%
\else
\ifnum\coordindex>#3%
\pgfmathsetmacro\temp{int(mod(\coordindex,#1))}%
\ifnum0=\temp\relax
%pass
\else
\let\pgfmathresult\pgfutil@empty
\fi%
\else
%pass
\fi%
\fi%
}
}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{axis}[my filter=every 50 between 600 and 1050]
\addplot[samples=1501] {sin(deg(5*x))};
\end{axis}
\end{tikzpicture}
\end{document}
这达到了我想要的效果:
不幸的是,我破解的代码非常肮脏。不仅代码重复,而且样式参数读起来好像代码执行了相反的操作。有人知道我可以使用什么语法将其更改为every#1between#2and#3
相反的语法吗?我尝试了every#1except between#2and#3
、、、、、以及every#1!between#2and#3
诸如此类every#1not between#2and#3
的事情。它们都没有用every#1outside#2and#3
,而且就我而言,除了之外,我在 TikZ 手册中找不到否定样式参数关键字。every#1out of#2and#3
every#1below#2or above#3
without
答案1
样式名称是你自己想出来的。因此,当你尝试反转这些单词时,TikZ 将无法识别它们。实际名称在定义中,因此我将其更改为你在问题中给出的其他名称。
对于反转,由于我们试图进入两个嵌套的 if,并且结果什么都不做,因此 if 之外的默认操作无论如何都应该为真。然后,您可以按如下方式分离测试和操作
\documentclass{standalone}
\usepackage{pgfplots}
\makeatletter
\pgfplotsset{
my filter/.style args={every#1except#2and#3}{%
/pgfplots/x filter/.append code={%
\def\myswitch{1}% Switch is by default on, you can do this with a TeX \if too
\ifnum\coordindex>#2%Ready to turn off the filter?
% Yes but are we still in the desired interval?
\ifnum\coordindex<#3
\def\myswitch{0}% Turn it off
\fi%
\fi%No else
% Now if the switch is on
\ifnum1=\myswitch%
\pgfmathsetmacro\temp{int(mod(\coordindex,#1))}%
\ifnum0<\temp
\let\pgfmathresult\pgfutil@empty
\fi%
\fi%
}
}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{axis}[my filter=every 50 except 600 and 1050]% Note this name matches the definiton
\addplot[samples=1501] {sin(deg(5*x))};
\end{axis}
\end{tikzpicture}
\end{document}
我最近也在这个回答中回答了多个论点风格的问题
如果你需要更多详细信息。但 TikZ 手册始终是最有用的。