Rhomben in TIKZ gleich breit

Tabellen und Grafiken erstellen und anordnen


dagruess
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 20. Nov 2013, 20:32
Wohnort: Ingolstadt

Rhomben in TIKZ gleich breit

Beitrag von dagruess »

Hallo zusammen,

ich schreibe gerade meine Diplomarbeit mit Tex und muss hierfür ein Flussdiagramm erstellen. Dabei sollten die Rhomben immer gleich breit sein - unabhängig von der Menge enthaltenen Texts. Die Höhe der Rhomben kann gerne variieren. Im Moment kenne ich keine Möglichkeit, dies ohne langes Herumprobieren mit text width und aspect einzustellen.

Gibt es außerdem eine Möglichkeit, die Abstände der einzelnen Formen voneinander im Voraus festzulegen? Im Moment mache ich das über die Koordinaten, was bedeutet, dass ich bei einer Änderung am Anfang sämtliche Formen neu positionieren muss.

Anbei ein (hoffentlich aussagekräftiges) Minimalbeispiel, um mein Anliegen zu verdeutlichen.

Schon mal vielen Dank für eure Hilfe.
\documentclass[paper=a4,fontsize=12pt,]{scrreprt}
\usepackage[utf8]{inputenc}					
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}	
\usepackage{pgfplots}						
	 \pgfplotsset{width=16cm,compat=1.5}
\usepackage{tikz}
\usetikzlibrary{patterns,calc, arrows, shapes.geometric,shapes}
\usepackage {flowchart}


\begin {document}
\begin {tikzpicture}

\node (decision1) at (0,0cm) [draw,diamond, aspect=2.2,inner sep=0pt,
text width=3cm,
minimum height=0.6cm,
text centered,
] 
{\small Einzeiliger Text};

\node (decision2) at (0,-3cm) [draw,diamond, aspect=2.2, inner sep=0pt,
text width=3cm,
minimum height=0.6cm,
text centered,
] 
{\small Hier sollte ein \\dreizeiliger Text steh};

\node (decision3) at (0,-6cm) [draw,diamond, aspect=2.2,inner sep=0pt,
text width=3cm,
minimum height=0.6cm,
text centered,
] 
{\small Hier sollte ein \\vierzeiliger Text \\stehen. Hier sollte ein vi};
\end {tikzpicture}
\end {document}

Benutzeravatar
localghost
Forum-Meister
Forum-Meister
Beiträge: 825
Registriert: Di 8. Jul 2008, 15:40
Wohnort: Braunschweig

Dimensionen bestimmen

Beitrag von localghost »

Gib minimale Werte für Breite und Höhe an. Die Abstände von Knoten lassen sich mit der Bibliothek positioning relativ zu einander als Optionen für die Umgebung tikzpicture angeben.
\documentclass[
  paper=a4,
  fontsize=12pt,
  ngerman
]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
  adieresis={ä},
  germandbls={ß}
}
\usepackage{babel}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.geometric}

\begin {document}
  \begin {tikzpicture}[
    node distance=4cm,
    decision/.style={
      draw,
      diamond,
      aspect=2.2,
      inner sep=0pt,
      text width=3cm,
      minimum width=18em,
      minimum height=18ex,
      text centered,
      font=\small
    }
  ]
    \node[decision]                    (decision1) at (0,0)  {Einzeiliger Text};
    \node[decision,below of=decision1] (decision2)           {Hier sollte ein \\dreizeiliger Text steh};
    \node[decision,below of=decision2] (decision3)           {Hier sollte ein \\vierzeiliger Text \\stehen. Hier sollte ein vi};
  \end {tikzpicture}
\end {document}

Thorsten
TeX und LaTeX, Fragen und Antworten – TeXwelt

¹ Es tut mir Leid. Meine Antworten sind begrenzt. Sie müssen die richtigen Fragen stellen.
² System: openSUSE 13.1 (Linux 3.11.6), TeX Live 2013, TeXworks 0.5 (r1349)
³ Lernt gerade TeX (und versucht, es zu verstehen).

dagruess
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 20. Nov 2013, 20:32
Wohnort: Ingolstadt

Beitrag von dagruess »

Hallo Thorsten,

danke für die schnelle Antwort. Die Positionierung ist super. In deinem Code sind die Rhomben aber auch alle gleich hoch, was dann sehr viel Platz kostet. Kann man, bei gleicher Breite, deren Höhe auch dem Text anpassen?

Daniel

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Wenn die Höhe variieren darf, dann muss aus meiner Sicht keine minimale Höhe vorgegeben werden. Bei der minimalen Breite musst du allerdings beachten, dass diese wirklich nur der Minimalwert ist. Fügst du mehr Text ein, so dass mehr Zeilen in einem Rhombus notwendig sind, dann kann dieser auch breiter werden.

Mit zum Beispiel below of=... wird der Abstand zwischen den Mittelpunkten der Elemente vorgegeben. Wenn du statt dessen den Abstand zwischen den äußeren Punkten der Rhomben vorgeben möchtest, dann verwende below=of ... Nur für letzteres wird die Bibliothek positioning benötigt. Siehe auch: Was ist der Unterschied zwischen right of= und right=of in TikZ?.
\documentclass[ 
   fontsize=12pt, 
   ngerman 
]{scrreprt} 
\usepackage[T1]{fontenc} 
\usepackage{selinput} 
\SelectInputMappings{ 
   adieresis={ä}, 
   germandbls={ß} 
} 
\usepackage{babel} 
\usepackage{tikz} 
\usetikzlibrary{positioning,shapes.geometric} 

\begin {document} 
   \begin {tikzpicture}[ 
     %node distance=4cm, 
     decision/.style={ 
       draw, 
       diamond, 
       aspect=2.2, 
       inner sep=0pt, 
       text width=3cm, 
       minimum width=18em, 
       %minimum height=18ex, 
       text centered, 
       font=\small 
     } 
   ] 
     \node[decision]                     (decision1)  {Einzeiliger Text}; 
     \node[decision,below= of decision1] (decision2)  {Hier sollte ein dreizeiliger Text stehen.}; 
     \node[decision,below= of decision2] (decision3)  {Hier sollte ein vierzeiliger Text stehen. Er steht da.}; 
   \end {tikzpicture} 
\end {document}
Gruß
Elke

dagruess
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 20. Nov 2013, 20:32
Wohnort: Ingolstadt

Beitrag von dagruess »

Genau das ist mein Problem - ich möchte - wie das ja in MS Office problemlos möglich ist - eine bestimmte Breite vorgeben können und die Höhe dabei dem enthaltenen Text anpassen.

Auch wenn ich keine Höhe angebe, variiert die Breite. Um bei gleicher Breite die Höhe variiernen zu können, muss ja auch der Aspekt variabel sein.

In meinem Diagramm habe ich momentan mehrere Entscheidungsrhomben, die nur eine Zeile Text enthalten und je einen mit zwei drei und vier Zeilen. Um ein gleichmäßiges Bild zu erzeugen und um das Bild noch auf eine Seite packen zu können hätte ich gerne die oben beschiebene Form.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Hier ist ein Vorschlag, bei dem aspect berechnet wird:
\documentclass[margin=5mm]{standalone} 

\usepackage{tikz} 
\usetikzlibrary{positioning,shapes.geometric}

\tikzset{
  decision/.style={draw,inner sep=0pt,diamond,minimum width=\diamondbreite,aspect=\aspect}
}

\newbox\mybox
\newlength\Boxhoehe

\newcommand\diamondbreite{2cm}
\newcommand\diamondtextbreite{1cm}
\newcommand\aspect{1}

\newcommand\tikzDiamondBox[2][]{%
  \sbox\mybox{\pgfinterruptpicture\parbox{\diamondtextbreite}{\centering \strut#2}\endpgfinterruptpicture}%
  \setlength\Boxhoehe{\dimexpr\ht\mybox+\dp\mybox\relax}%
  \pgfmathsetmacro\aspect{(\diamondbreite-\diamondtextbreite)/\the\Boxhoehe}
  \node[decision,#1]{\usebox\mybox};
}


\begin {document}
\begin{tikzpicture}
  \renewcommand\diamondbreite{4cm}
  \renewcommand\diamondtextbreite{2cm}
  \tikzDiamondBox[name=decision1]{Mein Text}
  \tikzDiamondBox[below=of decision1,name=decision2]{Hier sollte ein dreizeiliger Text stehen.}
  \tikzDiamondBox[below=of decision2]{Hier sollte dann ein wirklich vierzeiliger Text stehen.}
\end {tikzpicture} 
\end {document}
Gruß
Elke
Zuletzt geändert von esdd am So 15. Dez 2013, 13:44, insgesamt 2-mal geändert.

dagruess
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 20. Nov 2013, 20:32
Wohnort: Ingolstadt

Beitrag von dagruess »

Hallo Elke,

das ist genau das, was ich mir vorgestellt habe. Vielen Dank!

Daniel

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Noch besser geht es mit diesem Vorschlag: Rhomben mit konstanter Breite mit TikZ zeichnen
Damit kann dann alternativ zur Breite auch die Höhe fest vorgeben werden.

Antworten