如何在路径中间的 TikZ 的新命令中使用可选参数?

如何在路径中间的 TikZ 的新命令中使用可选参数?

我正在尝试定义一个新命令,使我能够自动格式化图表的某些部分。这些部分由在路径上方和下方添加的两个节点组成。我有一个默认值作为pos节点的键,但我希望能够根据需要使用可选参数动态调整它。我通常在路径的末尾使用我的新命令,以便节点沿着路径放置。

不幸的是,我幼稚的方法(以及来自pgfkeys 中的可选参数?) 导致Did you forget a semicolon?TikZ 出错,所以我怀疑我处理这个问题的方法不对。我该如何指定一个可选参数来newcommand更改节点的位置,或者,我该如何使用 TikZ 的功能为键分配一个默认值,以便以后可以覆盖该默认值?

\documentclass[tikz]{standalone}
\newcommand*{\testone}[3][0.6]{node[pos={#1}, above] {#2} node[pos={#1}, below] {#3}}
\newcommand*{\testtwo}[2]{node[pos=0.6, above] {#1} node[pos=0.6, below] {#2}}
\newcommand*{\testthr}[2][test]{\node {#1 + #2}}
\newcommand*{\flux}[1]{\pgfkeys{/flux,position,fluxabove,fluxbelow,#1,print}} % https://tex.stackexchange.com/q/39834/32374
\pgfkeys{
    /flux/.is family, /flux,
    position/.default=0.6,
    position/.store in=\position,
    fluxabove/.store in=\fluxabove,
    fluxbelow/.store in=\fluxbelow,
    print/.code={node[pos=\position, above] {\fluxabove} node[pos=\position, below] {\fluxbelow}}
}
\begin{document}
\begin{tikzpicture}
% \draw (0,0) -- (1,0) \testone[0.9]{another}{text}; % This doesn't work
\draw (2,0) -- (3,0) \testtwo{text}{text};
\testthr{another};
% \draw (4,0) -- (6,0) \flux{fluxabove=10.0, fluxbelow=9.0}; % This doesn't work
\end{tikzpicture}
\end{document}

相关问题:
TikZ:\newcommand 带有可选的 TikZ 选项
是否可以为 TikZ 样式中的参数设置默认值?
pgfkeys 中的可选参数?

答案1

由于 TikZ 解析路径命令的方式,使用定义的东西\newcommand在 TikZ 路径中总是会出现问题。

在这种情况下,我认为最好的方法是使用密钥,特别是密钥insert path

\documentclass[tikz, border=5]{standalone}
\tikzset{%
  test 1/.style args={#1#2#3}{insert path={
    node[pos={#1}, above] {#2} node[pos={#1}, below] {#3}
  }},
  test 2/.style 2 args={insert path={
      node[pos=0.6, above] {#1} node[pos=0.6, below] {#2}
  }},
  flux/.style={flux/.cd,#1, print},
  flux/.cd,
    position/.store in=\position,
    position/.default=0.6, position=,
    fluxabove/.store in=\fluxabove,
    fluxbelow/.store in=\fluxbelow,
    print/.style={/tikz/.cd, insert path={
      node [pos=\position, above] {\fluxabove} node[pos=\position, below] {\fluxbelow}
    }}
 }

\begin{document}
\begin{tikzpicture}
\draw (0,0) -- (1,0) [test 1={0.9}{another}{text}]; 
\draw (2,0) -- (3,0) [test 2={text}{text}];
\draw (4,0) -- (6,0) [flux={fluxabove=10.0, fluxbelow=9.0}];
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容