LaTex/TikZ — выравнивание коробки

Я создал следующий скрипт LaTeX/TikZ для рисования фигуры:

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

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
    \node[draw, fill=yellow!96!black, rectangle, 
      align=center, inner sep=3ex, font=\sffamily, label=below: Label1] (Box1) {
      \begin{tikzpicture}
        \node[draw, shape=rectangle split, rectangle split parts=2,
          inner sep=1ex, rounded corners=0pt,
          fill=white, font=\vphantom{Q}\sffamily] (Innerbox) {One \nodepart{two} Two};
    \end{tikzpicture}};
    \node[draw, inner sep=1ex, right=of Box1, label=below: Label2] (Box2) {
    \begin{tikzpicture}
\end{tikzpicture}

{\begin{tikzpicture}
    \node[draw, fill=yellow!96!black, rectangle, 
      align=center, inner sep=3ex, font=\sffamily, label=below: Label3] (Box3) {Four};
\end{tikzpicture}}};

    \draw (Box1) -- (Box2) -- (Box3);
    \draw[dashed] (Innerbox.one east) -- (Box2);
    \draw[dashed] (Innerbox.two east) -- (Box2);

\end{tikzpicture}
\end{document}

выходное изображение

Я хочу решить следующие проблемы:

  1. Как можно выровнять блоки так, чтобы нижняя метка всегда находилась на одном уровне?

  2. Как можно добавить блок «Четыре» (не внутри, а как блок, подобный блоку 1) справа от блока 2, в идеале с помощью пунктирной линии от блока 2 до блока 3?

    Желаемая структура:

    [Ящик1] -- [Ящик2] -- [Ящик3]


person Johnny Joe    schedule 09.01.2018    source источник
comment
Привет! Не забудьте отметить ответ ниже как принятый, если он решил проблему! :)   -  person MattAllegro    schedule 19.04.2019


Ответы (1)


Мой элементарный подход к этой картинке:

\documentclass[tikz,border=2mm]{standalone}

\begin{document}

\begin{tikzpicture}
% left box
\filldraw [fill=yellow, draw=black, ultra thick] (0,0) rectangle (8,-10);
\filldraw [fill=white, draw=black, ultra thick] (2,-2) rectangle (6,-5);
\filldraw [fill=white, draw=black, ultra thick] (2,-5) rectangle (6,-8);
\node at (4,-3.5) [font=\sffamily] {\Huge One};
\node at (4,-6.5) [font=\sffamily] {\Huge Two};
% right box
\filldraw [fill=white, draw=black, ultra thick] (12,0) rectangle (20,-10);
\filldraw [fill=yellow, draw=black, ultra thick] (13,-1) rectangle (19,-6);
\node at (16,-3.5) [font=\sffamily] {\Huge Four};
% labels
\node at (4,-11) {\Huge 1};
\node at (16,-11) {\Huge 2};
\node at (16,-7) {\Huge 3};
% lines
\draw [ultra thick] (8,-5) -- (12,-5);
\draw [loosely dashed, ultra thick] (6,-3.5) -- (12,-4);
\draw [loosely dashed, ultra thick] (6,-6.5) -- (12,-6);
\end{tikzpicture}

\end{document}

И его вывод:

скриншот вывода

Здесь вы можете играть с координатами, чтобы выровнять блоки по своему усмотрению.

Это попытка ответить на часть 1 вашего вопроса, в то время как часть 2 мне не очень ясна. В любом случае, если вам нравится этот код, вы можете разработать его и отредактировать поле Four, просто используя \filldraw, \draw и \node, как указано выше.

person MattAllegro    schedule 27.01.2018