TikZ 节点属性内的宏

TikZ 节点属性内的宏

我正在寻找一种使用条件表达式来定义 TikZ 中的节点类型的方法。具体来说,我想根据节号执行某些操作。

 \def\checksectionshape#1{\ifthenelse{\value{section}=#1}{typea}{typeb}}
 ...
 \begin{tikzpicture}
 \node[\checksectionshape{1}] at (0,0) {Test};
 \end{tikzpicture}

从一些类似的问题及其答案来看,我猜这是因为\ifthenelse调用宏时该部分可能未展开。但我无法找到适合我情况的答案。

有解决方法吗?

答案1

我怀疑这是由于扩展造成的。通常,我会避免在实际参数中要求扩展\node或其他 TikZ 路径组件。但是,很容易将扩展移出一层,使其正常工作。这是使用键完成的。该键执行一些相应设置形状的代码。

\documentclass{article}
\usepackage{ifthen}
\usepackage{tikz}

\tikzset{
  check section shape/.code={
    \ifthenelse{\value{section}=#1}{%
      \tikzset{rectangle}%
    }{%
      \tikzset{circle}%
    }
  }
}

\begin{document}
\section{Introduction}
\begin{tikzpicture}
\node[check section shape=1,draw] at (0,0) {Section 1};
\node[check section shape=2,draw] at (3,0) {Section 2};
\end{tikzpicture}
\section{Main Part}
\begin{tikzpicture}
\node[check section shape=1,draw] at (0,0) {Section 1};
\node[check section shape=2,draw] at (3,0) {Section 2};
\end{tikzpicture}
\end{document}

得出的结果为:

条件节点形状

相关内容