在 TikZ 样式规范中使用 \IfNoValueTF。

在 TikZ 样式规范中使用 \IfNoValueTF。

在回答刷新 PGF 命令和局部变量马修建议使用\IfNoValueTFTikZ\node规范来确定文本。这个解决方案对我来说很有效。

但是,我还希望能够在样式中拥有这些类型的条件,而不必定义临时样式。因此,在下文中,我希望使用 来LabelPointZ确定要使用的样式,就像工作LabelPointY在没有中间变量的情况下确定文本一样。

\documentclass{articles}
\usepackage{pgfplots}
\usepackage{xparse}

\begin{document}

\NewDocumentCommand{\LabelPointY}{o o m m g}{
  \addplot [#1] coordinates{(#3,#4)} 
    node [#2]
        {\IfNoValueTF{#5}{$(#3,#4)$}{#5}};
}

\NewDocumentCommand{\LabelPointZ}{o g m m g}{
  \addplot [#1] coordinates{(#3,#4)} 
    node [\IfNoValueTF{#2}{color=red,right}{right, #2}]
        {\IfNoValueTF{#5}{$(#3,#4)$}{#5}};
}

\begin{tikzpicture}
\begin{axis}
    %\LabelPointZ[mark=*,color=red]{0.2}{0.2}
    %\LabelPointZ[mark=*,color=red][color=green]{0.3}{0.3} 
    \LabelPointY[mark=*,color=red][color=blue, below right]{0.5}{0.5} % default label
    \LabelPointY[mark=*,color=red][color=blue, below]{1  }{1  }{top}  % given label
\end{axis}
\end{tikzpicture}
\end{document}

答案1

在样式中包含一些代码(即使是可扩展的样式)效果不佳。只需将其\IfNoValueTF从 TikZ 样式中移出即可:

\NewDocumentCommand{\LabelPointZ}{o o m m g}{%
  \IfNoValueTF{#2}{%
    \addplot [#1] coordinates{(#3,#4)} 
        node [color=red,right]
  }{%
    \addplot [#1] coordinates{(#3,#4)} 
        node [right, #2]
  }%
        {\IfNoValueTF{#5}{$(#3,#4)$}{#5}};
}

然而,这样做的缺点是你必须编写两次代码。

或者使用/utils/exec键执行\IfNoValueIF切换,然后使用 键\tikzset设置样式。它看起来很有趣,但工作稳定。

\NewDocumentCommand{\LabelPointZ}{o o m m g}{
  \addplot [#1] coordinates{(#3,#4)} 
    node [/utils/exec={\IfNoValueTF{#2}{\tikzset{color=red,right}}{\tikzset{right, #2}}}]
        {\IfNoValueTF{#5}{$(#3,#4)$}{#5}};
}

相关内容