如何创建自定义节点样式?

如何创建自定义节点样式?

我想创建一个如下所示的节点样式:

在此处输入图片描述

经过一番调查,我未能成功,并确定了实现这一目标的两个方向。我在这里问的是我应该采取哪个方向以及如何继续朝这个方向发展。

第一个方向似乎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

一种解决方案是在适当的位置添加更多边。此版本添加了沿长度均匀分布的四条垂直线:

在此处输入图片描述

笔记:

代码:

\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}

相关内容