在回答刷新 PGF 命令和局部变量马修建议使用\IfNoValueTF
TikZ\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}};
}