Nodo personalizado en TikZ

Nodo personalizado en TikZ

Perdón por la pregunta básica, pero soy nuevo en TikZ y tengo muchos problemas para definir un nodo simple...

Tengo el siguiente código:

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

Todo lo que quiero hacer es tener la forma definida por el código para poder usarlo en una situación como esta:

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

... donde en lugar de, por ejemplo, "bloquear", podría escribir "nodo personalizado" (o algo que yo mismo haya definido) y que aparezca de la misma manera, en el mismo tipo de diagrama, con texto dentro.

Muchas gracias

Respuesta1

TikZ tiene muchos símbolos predefinidos. El que estás preguntando es muy similar al signalsímbolo de la shapes.symbolsbiblioteca (sección 67.4 de la documentación). cloudAllí también se define un símbolo.

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

ingrese la descripción de la imagen aquí

Respuesta2

Los Tikz picsson geniales para este tipo de cosas. Se describen con gran detalle en la sección 18.2 del manual de tikz (versión 3.0.1a).

Por ejemplo, el código:

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

produce el diagrama:

ingrese la descripción de la imagen aquí

He definido su "nodo personalizado" como la imagen mynode. Se necesitan tres argumentos: la etiqueta del nodo, el texto del nodo y el estilo del nodo (se deben proporcionar los tres argumentos, pero se pueden dejar en blanco). La imagen dibuja su forma personalizada y, como parte de esto, coloca un nodo "real" dentro de ella, al que luego podemos referirnos usando la etiqueta de nodo como en MWE.

Respuesta3

Definir nuevas formas de nodos no es necesariamente una cuestión básica. Pero en este caso puedes hacer un poco de trampa usando la single arrowforma de la shapes.arrowsbiblioteca.

ingrese la descripción de la imagen aquí

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

información relacionada