So fügen Sie links einen zusätzlichen Rahmen und in der rechten Ecke zusätzliche Felder mit einer Beschriftung hinzu

So fügen Sie links einen zusätzlichen Rahmen und in der rechten Ecke zusätzliche Felder mit einer Beschriftung hinzu

Der Versuch, Diagramme zu zeichnen ausProblemrahmenPapier.

Wie kann ich diese Ränder links erstellen und in der rechten Ecke zusätzliche Felder mit einer Beschriftung hinzufügen? Ist es auch möglich, auf beiden Seiten eine zusätzliche Linie hinzuzufügen?

So sollte es aussehen:

So sollte es aussehen

Hier hänge ich jetzt fest:

\documentclass[tikz]{standalone}
\usepackage{tikz}

\usetikzlibrary{calc,arrows,shapes.geometric,positioning}

\tikzset{element/.style={
  draw,
  thick,
  node distance=1.5cm,
  minimum width=1.5cm,
  minimum height=1cm
  },
 desinedDomain/.style={element},
 machine/.style={element},
 requirement/.style={element,circle,dotted}
}

\begin{document}
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
  \node (m) [machine] {machine};
  \node (d1) [desinedDomain, above right=of m] {domain1};
  \node (d2) [element, below right=of m] {domain2};
  \node (r1) [requirement, below right=of d1] {domain3};

  \draw (m) -- (d1) node[midway,left] {a};
  \draw (m) -- (d2) node[midway,above] {b};
  \draw[dashed,->] (r1) -- (d1) node[midway,below] {c};
  \draw[dashed,->] (r1) -- (d2) node[midway,above] {d};
\end{tikzpicture}
\caption{Problem Frames}
\label{fig:pf}
\end{figure}
\end{document}

Antwort1

Eine andere, ausgefeiltere und deutlich andere (im Vergleich zu meiner ersten Antwort, aus diesem Grund habe ich mich für eine neue Antwort entschieden) Lösung.

In dieser Lösung werden die „Unterelemente“ als Beschriftungen innerhalb des Knotens „Element“ definiert. Sie können beliebig innerhalb des Knotens positioniert werden, genauso wie Standardbeschriftungen außerhalb des Knotens positioniert werden können, mit dem Unterschied, dass sie an der Innenseite der Anker des Knotens verankert sind. Für das Design der Knoten-„Maschine“ nutze ich multipartden Knoten und die Möglichkeit, Knoteninhalte zwischen anderen Knotenparametern einzufügen.

Der Bildcode ist dadurch deutlich prägnanter als die erste Lösung. Das komplette MWE lautet nun:

\documentclass[border=3mm,tikz]{standalone}
    \usetikzlibrary{positioning,shapes.multipart}

\makeatletter
\def\tikzsavelastnodename#1{\let#1=\tikz@last@fig@name}
\makeatother

\tikzset{%
    node distance=0mm and 15mm,
element/.style={%
    draw, thick,
    minimum size=11mm, inner xsep=5mm,
    append after command={\pgfextra{\tikzsavelastnodename\tikzsavednodename}},#1
                },
subelement/.style args={#1:#2}{%
    append after command =
    {node[draw,thick,minimum size=3mm,
          inner sep=2pt] at (\tikzsavednodename.#1) [anchor=#1] {#2}}
                            },
machine/.style={%
     shape=rectangle split, rectangle split horizontal,
     rectangle split parts=3,
     rectangle split empty part width=-3mm,
     draw, thick, 
     minimum height=11mm, inner sep=2mm, outer sep=0mm,
     node contents={\nodepart{three}\ #1\ }
             },
requirement/.style={%
    element, inner sep=2mm, circle, dotted}
        }% end of tikzset

\begin{document}
    \begin{tikzpicture}
\node (m)  [machine=machine];
\node (d1) [element,
            subelement=south east:C,
            above right=of m]   {domain1};
\node (d2) [element,
            subelement=south east:B,
            below right=of m]   {domain2};
\node (r1) [requirement, 
            below right=of d1]  {domain3};
%
  \draw (m) -- node[above] {a}   (d1)
        (m) -- node[above] {b}   (d2);
  \draw[dashed,->] (r1) -- node[above] {c} (d1);
  \draw[dashed,->] (r1) -- node[above] {d} (d2);
\end{tikzpicture}
    \end{document}

Das erhaltene Bild ist ähnlich wie in meiner ersten Antwort:

Bildbeschreibung hier eingeben

Bearbeiten:Heute stelle ich fest, dass ich mein MWE zweimal hochgeladen habe. Also entferne ich überschüssiges MWE und verbessere (hoffentlich) die Beschreibung leicht.

Antwort2

Eine einfache Lösung besteht darin, zwei kleine Knoten innerhalb der Knoten „domain1“ und „domain2“ hinzuzufügen:

Bildbeschreibung hier eingeben

Für das obige Bild definiere ich subelementden Stil für kleine Knoten. Daneben gehe ich node distancezum allgemeinen Parameter in tikzset, ändere ihn leicht (das Ergebnis ähnelt mehr dem in Frage geschobenen Bild) und verwende für alle Knoten mit rechteckiger Form den Stil element. Und das ist:

Bearbeiten:ups, ich habe eine der Unterfragen vergessen. Jetzt ist sie hinzugefügt. Für die Zeilen auf der linken Seite des Knotens „Maschine“ definiere ich einen neuen Stil machineund füge zwei dieser Knoten auf dem linken Knoten „Maschine“ hinzu.

\documentclass[border=3mm,tikz]{standalone}
    \usetikzlibrary{calc,arrows,shapes.geometric,positioning}

\tikzset{%
    node distance=3mm and 15mm,
element/.style={
    draw,
    thick,
    minimum width=1.7cm,
    minimum height=1cm
    },
machine/.style={
    element,
    minimum width=0cm, outer sep=0pt,

subelement/.style={
  draw,
  thick,
  inner sep= 1pt, 
  minimum size=3mm,
  }, 
requirement/.style={element,circle,dotted}
        }% end of tikzset

\begin{document}
\begin{tikzpicture}
    \node (m)  [element] {machine};
    \node (d1) [element,above right=of m] {domain1};
\node[subelement,above left] at (d1.south east) {C};
    \node (d2) [element,below right=of m] {domain2};
\node[subelement,above left] at (d2.south east) {B};
    \node (r1) [requirement, below right=of d1] {domain3};
%
  \draw (m) -- node[above] {a}   (d1) 
        (m) -- node[above] {b}   (d2);
  \draw[dashed,->] (r1) -- node[above] {c} (d1);
  \draw[dashed,->] (r1) -- node[above] {d} (d2);
\end{tikzpicture}
\end{document}

Antwort3

Für die Linien können Sie \pgfextradie Anker des Knotens verwenden und Linien zeichnen. Für die Beschriftung können Sie eine Beschriftung als Argument für den Stil verwenden.

Ausgabe

Bildbeschreibung hier eingeben

Code

\documentclass[tikz]{standalone}

\usetikzlibrary{calc,arrows,shapes.geometric,positioning}

\tikzset{
    element/.style={
        draw,
        thick,
        node distance=1.5cm,
        minimum width=1.5cm,
        minimum height=1cm
    },
    desinedDomain/.style={element,
        label={[draw, anchor=south east, thick, inner sep=0, minimum size=3mm, shift={(\tikzlastnode.south east)}]#1}
    },
    machine/.style={element,append after command={\pgfextra{
        \draw[thick] (\tikzlastnode.south west)++(0,.5\pgflinewidth) --++ (-1mm,0) |- ($(\tikzlastnode.north west)+(0,-.5\pgflinewidth)$);
        \draw[thick] (\tikzlastnode.south west)++(0,.5\pgflinewidth) --++ (-2mm,0) |- ($(\tikzlastnode.north west)+(0,-.5\pgflinewidth)$);
    }}},
    requirement/.style={element,circle,dotted}
}

\begin{document}
\begin{tikzpicture}
  \node (m) [machine] {machine};
  \node (d1) [desinedDomain=c, above right=of m] {domain1};
  \node (d2) [element, below right=of m] {domain2};
  \node (r1) [requirement, below right=of d1] {domain3};

  \draw (m) -- (d1) node[midway,left] {a};
  \draw (m) -- (d2) node[midway,above] {b};
  \draw[dashed,->] (r1) -- (d1) node[midway,below] {c};
  \draw[dashed,->] (r1) -- (d2) node[midway,above] {d};
\end{tikzpicture}
\end{document}

verwandte Informationen