So legen Sie die Breite eines Tikz-Bilds fest

So legen Sie die Breite eines Tikz-Bilds fest

Ich möchte folgendes Tikzbild erstellen:

Bildbeschreibung hier eingeben

Ich möchte, dass das Rechteck, das um das Beispielbild und die Knoten 2 und 3 passt, beispielsweise 0.6\textwidthbreit ist.

Außerdem möchte ich, dass die Knoten 1 und 2 nebeneinander liegen, aberzentriertinnerhalb dieses Rechtecks.

Ich bin aufdiese Antwortaus dem Jahr 2012 wo Peter Grill sagt, dass es seiner Meinung nach keinen Sinn macht, die Höhe oder Breite eines Tikzpicture anzugeben.

Dem stimme ich bis zu einem gewissen Grad zu, aber ich möchte mein Tikz-Bild nicht in ein packen resizebox.

Was ich jetzt habe, ist Folgendes:

% !TEX TS-program = pdflatex
\documentclass{article}
\usepackage{tikz,lipsum}
\usetikzlibrary{positioning,fit}

\begin{document}
\lipsum[1]
\vskip 10pt

\noindent
\begin{tikzpicture}
\node(n0) [draw=black,outer sep=0pt] {node 1};
\node (n1) [below right = 1pt and 0pt of n0.south west,outer sep=0pt]  {\includegraphics[width=0.3\textwidth]{example-image}};
\node (n2) [below right = 10pt and 20pt of n1,draw=black] {node 2};
\node (n3) [right = 1pt of n2,draw=black] {node 3};
\node (n4) [below left = 0pt and 130pt of n3.south west,outer sep=0pt,draw=black] {node 4};

%draw a rectangle as the border
\node[draw, fit=(n1) (n3),inner sep=0pt](rect1) {};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Jeder Vorschlag ist herzlich willkommen.

Antwort1

Sie können den Begrenzungsrahmen festlegen, indem \pathSie Elemente relativ zu seinen Ankerpunkten platzieren. In diesem Fall ist bis zum Ende nur die Breite von Bedeutung.

\documentclass{article}
\usepackage{tikz,lipsum}
\usetikzlibrary{positioning,fit}

\begin{document}
\lipsum[1]
\vskip 10pt

\noindent
\begin{tikzpicture}
\path (0,0) (0.6\textwidth,0);% set bounding box
\node(n0) [draw=black,outer sep=0pt, below right] at (current bounding box.west) {node 1};
\node (n1) [below right = 1pt and 0pt of n0.south west,outer sep=0pt]  {\includegraphics[width=0.3\textwidth]{example-image}};
\node (n2) [below left=1pt, draw=black] at (current bounding box.center |- n1.south) {node 2};
\node (n3) [right = 1pt of n2,draw=black] {node 3};
\coordinate (n4) at (current bounding box.south east);% set other corner

%draw a rectangle as the border
\node[draw, fit=(n1) (n4),inner sep=0pt](rect1) {};
\end{tikzpicture}
\end{document}

Leichte Vereinfachung:

\documentclass{article}
\usepackage{tikz,lipsum}
\usetikzlibrary{positioning}

\begin{document}
\lipsum[1]
\vskip 10pt

\noindent
\begin{tikzpicture}
\path (0,0) (0.6\textwidth,0);% set bounding box
\node(n0) [draw=black,outer sep=0pt, below right] at (current bounding box.west) {node 1};
\node (n1) [below right = 1pt and 0pt of n0.south west,outer sep=0pt]  {\includegraphics[width=0.3\textwidth]{example-image}};
\node (n2) [below left=1pt, draw=black] at (current bounding box.center |- n1.south) {node 2};
\node (n3) [right = 1pt of n2,draw=black] {node 3};

%draw a rectangle as the border
\draw (n1.north west) rectangle (current bounding box.south east);
\end{tikzpicture}
\end{document}

Antwort2

Ich möchte nur hinzufügen

([xshift=.3\textwidth-.5\pgflinewidth]$(n2)!.5!(n3)$)

zur Passform (und ggf.

([xshift=-.3\textwidth+.5\pgflinewidth]$(n2)!.5!(n3)$)

um auf der sicheren Seite zu sein, wenn n1es nicht .3\textwidth(oder weiter) vom Zentrum entfernt ist).

Ich habe einige Regeln hinzugefügt, um zu zeigen, dass die Mitte von n2und von der rechten Seite entfernt n3ist .3\textwidth.

Wenn sich kein Element weiter links oder rechts von Ihrem rect1Knoten befindet, können Sie outer sep=0ptdies auch festlegen und trim left=(rect1.west), trim right=(rect1.east)als Optionen für das TikZ-Bild verwenden, wodurch der Begrenzungsrahmen auf beiden Seiten nicht die halbe Linienbreite umfasst.

Code

% !TEX TS-program = pdflatex
\documentclass{article}
\usepackage{tikz, lipsum}
\usetikzlibrary{calc, fit, positioning}
\begin{document}
\lipsum[1]
\vskip 10pt

\noindent
\begin{tikzpicture}
\node (n0) [draw=black, outer sep=0pt] {node 1};
\node (n1) [below right = 1pt and 0pt of n0.south west, outer sep=0pt]
  {\includegraphics[width=0.3\textwidth]{example-image}};
\node (n2) [below right = 10pt and 20pt of n1, draw=black] {node 2};
\node (n3) [right = 1pt of n2, draw=black] {node 3};
\node (n4) [below left = 0pt and 130pt of n3.south west,
  outer sep=0pt, draw=black] {node 4};

%draw a rectangle as the border
\node[draw,
      fit={(n1)(n3)([xshift=.3\textwidth-.5\pgflinewidth]$(n2)!.5!(n3)$)},
      inner sep=0pt](rect1) {};
\end{tikzpicture}%
\llap{\rule{.6\textwidth}{1pt}}%
\llap{\clap{\rule[2pt]{.1pt}{2em}}\rule[2pt]{.3\textwidth}{.5pt}}
\end{document}

Ausgabe

Bildbeschreibung hier eingeben

verwandte Informationen