定义更复杂的节点形状

定义更复杂的节点形状

我经常需要制作涉及单元格和/或其他中等复杂形状的图表。为此,我使用节点,因为它们易于定位和连接。为了制作单元格形状,我tikzfigure在节点内使用了额外的环境。请参阅以下最小示例。

这不是最佳选择,我想知道是否有更简单的解决方案。我试过\pic把它们比节点更不灵活。这可能\pgfdeclareshape是可行的方法,不是吗?但这对我来说有点太复杂了。有没有简单的解释或其他解决方案?最简单的方法是tikzstyle为整个单元制作一个。

平均能量损失

\documentclass[]{minimal}
\usepackage{tikz} 
\usetikzlibrary{positioning}
\usetikzlibrary{shapes}

\tikzstyle{cytosol} = [thick, draw=red!60, fill = red!20, ellipse, minimum width=35, minimum height= 22, align=center, rotate = 30]
\tikzstyle{nucleus} = [thick, draw=olive!80, fill = brown!20, circle, minimum width=10, align=center]

\begin{document}
\begin{tikzpicture}
    \node[] (Cell1) {
        \begin{tikzpicture}
            \node[cytosol] at(0,0) (cytosol) {};
            \node[nucleus, shift={(0.15,0.1)}] () at(cytosol) {};
        \end{tikzpicture}{}
    };

    \node[right of= Cell1, xshift = 1 cm] (Cell2) {
        \begin{tikzpicture}
            \node[cytosol, draw=gray!40, fill = gray!60] at(0,0) (cytosol) {};
            \node[nucleus, shift={(0.15,0.1)}] () at(cytosol) {};
        \end{tikzpicture}{}
    };

    \node[right of= Cell2, xshift = 1 cm] (Cell3) {
        \begin{tikzpicture}
            \node[cytosol] at(0,0) (cytosol) {};
            \node[nucleus, shift={(0.15,0.1)}] () at(cytosol) {};
        \end{tikzpicture}{}
    };

    \draw[->] (Cell1) --(Cell2); 
    \draw[->] (Cell2) --(Cell3); 

\end{tikzpicture}
\end{document} 

得到如下图片:

在此处输入图片描述

答案1

有很多方法可以实现这一点。你可以使用pics,如评论中所述,参见例如这个答案. 这是一个更奇特的可能性:使用path picture

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{chains,shapes.geometric}
\tikzset{cytosol/.style={thick, draw=red!60, fill = red!20, ellipse, minimum
width=35, minimum height= 22, align=center,rotate = 30},
nucleus/.style={path picture={\draw[draw=olive!80,fill = brown!20,#1]
    ([xshift=0.15cm,yshift=0.1cm]path picture bounding box.center) 
     circle[radius=5pt];}}}
\begin{document}
\begin{tikzpicture}
 \begin{scope}[start chain=Cell placed {at={(\tikzchaincount*2,0)}},
    nodes={on chain,join= by {semithick,-stealth}}]
  \node[cytosol,nucleus]{};
  \node[cytosol, draw=gray!40, fill = gray!60,nucleus]{};
  \node[cytosol,nucleus]{};
 \end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如您所见,该选项nucleus添加了点。其他奇特选项包括append after command

还请注意,您的代码嵌套tikzpicture环境,这确实应该避免,并且\tikzstyle已被弃用。

相关内容