Rhomben in TIKZ gleich breit

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Rhomben in TIKZ gleich breit

von esdd » So 15. Dez 2013, 15:49

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.

von dagruess » Mo 2. Dez 2013, 08:18

Hallo Elke,

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

Daniel

von esdd » Di 26. Nov 2013, 10:23

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

von dagruess » Mo 25. Nov 2013, 14:33

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.

von esdd » Do 21. Nov 2013, 08:40

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

von dagruess » Mi 20. Nov 2013, 21:55

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

Dimensionen bestimmen

von localghost » Mi 20. Nov 2013, 21:34

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

Rhomben in TIKZ gleich breit

von dagruess » Mi 20. Nov 2013, 21:00

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}

Nach oben