我想创建一个如下所示的节点样式:
经过一番调查,我未能成功,并确定了实现这一目标的两个方向。我在这里问的是我应该采取哪个方向以及如何继续朝这个方向发展。
第一个方向似乎append after command
在我的风格定义中使用如下:
channel/.style={
fifo,minimum size=4mm,minimum width=10mm,
append after command={
(\tikzlastnode.north west)edge(\tikzlastnode.north east)
(\tikzlastnode.south west)edge(\tikzlastnode.south east)
(\tikzlastnode.north east)edge(\tikzlastnode.south east)
}
}
我对这个解决方案的问题是,我不知道如何扩展它以在我的节点中绘制“其他”垂直线。
第二个方向是声明一个新的形状,正如这里明确描述的那样如何使用节点样式在 TikZ 节点内部绘图?我对这个解决方案的疑问是它的相对复杂性以及如何使用\pgf
原语绘制这些线条。
请随意添加任何其他可能更适合此需求的解决方案。
答案1
一种解决方案是在适当的位置添加更多边。此版本添加了沿长度均匀分布的四条垂直线:
笔记:
- 正如我在类似情况下发现的问题在 TikZ 中剪切矩形节点的一侧,需要对末端进行调整,
0.5\pgflinewidth
以使角落恰到好处。
代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\tikzset{channel/.style={
minimum size=4mm, minimum width=10mm,
append after command={
(\tikzlastnode.north west)edge(\tikzlastnode.north east)
(\tikzlastnode.south west)edge(\tikzlastnode.south east)
([shift={(0,+0.5\pgflinewidth)}]\tikzlastnode.north east)edge
([shift={(0,-0.5\pgflinewidth)}]\tikzlastnode.south east)
([shift={(0,+0.5\pgflinewidth)}]
$(\tikzlastnode.north west)!0.8!(\tikzlastnode.north east)$)edge
([shift={(0,-0.5\pgflinewidth)}]
$(\tikzlastnode.south west)!0.8!(\tikzlastnode.south east)$)
([shift={(0,+0.5\pgflinewidth)}]
$(\tikzlastnode.north west)!0.6!(\tikzlastnode.north east)$)edge
([shift={(0,-0.5\pgflinewidth)}]
$(\tikzlastnode.south west)!0.6!(\tikzlastnode.south east)$)
([shift={(0,+0.5\pgflinewidth)}]
$(\tikzlastnode.north west)!0.4!(\tikzlastnode.north east)$)edge
([shift={(0,-0.5\pgflinewidth)}]
$(\tikzlastnode.south west)!0.4!(\tikzlastnode.south east)$)
([shift={(0,+0.5\pgflinewidth)}]
$(\tikzlastnode.north west)!0.2!(\tikzlastnode.north east)$)edge
([shift={(0,-0.5\pgflinewidth)}]
$(\tikzlastnode.south west)!0.2!(\tikzlastnode.south east)$)
}
}
}
\begin{document}
\begin{tikzpicture}
\node [channel] (Channel1) at (0, 0) {};
\node [channel, minimum width=20mm] (Channel1) at (0, -0.5) {};
\end{tikzpicture}
\end{document}