Benutzerdefinierter Knoten in TikZ

Benutzerdefinierter Knoten in TikZ

Entschuldigen Sie die einfache Frage, aber ich bin neu bei TikZ und habe große Probleme, auch nur einen einfachen Knoten zu definieren ...

Ich habe den folgenden Code:

\begin{tikzpicture}
 \draw (0,0) -- (1,-1) -- (2,0) -- (2,2) -- (0,2) -- (0,0);
\end{tikzpicture}

Ich möchte lediglich, dass die Form durch den Code definiert wird, um sie in einer Situation wie dieser verwenden zu können:

\begin{tikzpicture}[node distance = 2cm, auto]
    % Place nodes
    \node [block] (init) {initialize model};
    \node [cloud, left of=init] (expert) {expert};
    \node [cloud, right of=init] (system) {system};
    \node [block, below of=init] (identify) {identify candidate models};
    \node [block, below of=identify] (evaluate) {evaluate candidate models};
    \node [block, left of=evaluate, node distance=3cm] (update) {update model};
    \node [decision, below of=evaluate] (decide) {is best candidate better?};
    \node [block, below of=decide, node distance=3cm] (stop) {stop};
    % Draw edges
    \path [line] (init) -- (identify);
    \path [line] (identify) -- (evaluate);
    \path [line] (evaluate) -- (decide);
    \path [line] (decide) -| node [near start] {yes} (update);
    \path [line] (update) |- (identify);
    \path [line] (decide) -- node {no}(stop);
    \path [line,dashed] (expert) -- (init);
    \path [line,dashed] (system) -- (init);
    \path [line,dashed] (system) |- (evaluate);
\end{tikzpicture}

... wo ich statt z. B. „Block“ „Customnode“ (oder etwas, das ich selbst definiert habe) schreiben könnte und es auf die gleiche Weise, in der gleichen Art von Diagramm, mit Text darin, erscheinen lassen könnte.

Vielen Dank

Antwort1

TikZ hat viele vordefinierte Symbole. Das Symbol, nach dem Sie fragen, ist dem signalSymbol in der shapes.symbolsBibliothek sehr ähnlich (Abschnitt 67.4 in der Dokumentation). cloudDort ist auch ein Symbol definiert.

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.symbols}
\begin{document}
\begin{tikzpicture}[
node distance = 3cm, auto,
block/.style={signal, draw, signal to=south}]
\node [block] (init) {initialize model};
\node [cloud,draw, left of=init] (expert) {expert};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Tikz picseignet sich hervorragend für solche Dinge. Sie werden im Abschnitt 18.2 des Tikz-Handbuchs (Version 3.0.1a) ausführlich beschrieben.

Beispielsweise der Code:

\documentclass{article}
\usepackage{tikz}

\tikzset{
  pics/mynode/.style args={#1,#2,#3}{
     code={
       \draw (0,0) -- (1,-1) -- (2,0) -- (2,2) -- (0,2) -- (0,0);
       \node[#3] (#1) at (1,1) {#2};
     }
  }
}

\begin{document}

  \begin{tikzpicture}
      \draw (0,0) pic{mynode={A, Hi, blue}};
      \draw (0,3) pic{mynode={B, Hello, red}};
      \draw (2,1.5) pic{mynode={C, Bye,}};
      \draw[thick, blue] (A)--(B)--(C)--(A);
  \end{tikzpicture}

\end{document}

ergibt das Diagramm:

Bildbeschreibung hier eingeben

Ich habe Ihren „benutzerdefinierten Knoten“ als pic definiert mynode. Es benötigt drei Argumente: die Knotenbezeichnung, den Knotentext und die Stilisierung für den Knoten (alle drei Argumente müssen angegeben werden, können aber leer gelassen werden). Das pic zeichnet Ihre benutzerdefinierte Form und platziert dabei einen „echten“ Knoten darin, auf den wir dann mit der Knotenbezeichnung wie im MWE verweisen können.

Antwort3

Das Definieren neuer Knotenformen ist nicht unbedingt eine grundlegende Frage. In diesem Fall können Sie jedoch ein wenig schummeln, indem Sie die single arrowForm aus der shapes.arrowsBibliothek verwenden.

Bildbeschreibung hier eingeben

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.arrows}

\tikzset{
  mycustomnode/.style={
    draw,
    single arrow,
    single arrow head extend=0,
    shape border uses incircle,
    shape border rotate=-90,
  }
}

\begin{document}
\begin{tikzpicture}
\node [mycustomnode] {};
\node [mycustomnode] at (2,0) {abc};
\end{tikzpicture}
\end{document}

verwandte Informationen