我正在寻找一种使用条件表达式来定义 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}
得出的结果为: