Wie kann ich mehrere Beschriftungen übereinander setzen?

Am Ende soll es dann aussehen wie hier: alt text bei der 3. Zeile Massenmarktstrategie sollte drüber stehen (am besten auch mittig) und drunter bei den jeweiligen Kreisen total und partial.

Minimalbeispiel:

\begin{tikzpicture}
  % Matrix der Kreise zeichnen:
\matrix (m) [matrix of nodes, nodes={circle,draw}, column sep=5em, row sep=2cm]{
{} &  & {} &  & {} &  & {} \\ 
 &  & {} &  & {} &  &  \\ 
{} &  & {} &  & {} &  & {} \\ 
{} & {} & {} & {} & {} & {} & {}\\
  };
 % Beschriftungen:
  \begin{scope}[every node/.style={above=1ex,text width=2cm,align=center,
                execute at begin node=\hspace{0pt}}]

    \node at (m-3-1) {(totale)};
    \node at (m-3-3) {(partiale)};
    \node at (m-3-5) {(totale)};
    \node at (m-3-7) {(partiale)};

  \end{scope}
 \end{tikzpicture}

gefragt 20 Aug '13, 19:48

BineMaja's gravatar image

BineMaja
99447
Akzeptiert-Rate: 0%

Je nachdem, wie du sie genau platzieren willst (mittig über was?), kannst du die calc-Library oder einfach nur: \path (m-3-1.north east) -- node[above] {Massenmarktstrategie} (m-3-3.north west); Ah, ich sehe gerade, dass die Nodes in der Matrix die Kreise sind, nicht die Beschriftungen. Also benenne die Nodes auch nochmal und benutze sie dann als Referenz.

(20 Aug '13, 20:06) Qrrbrbirlbel

Wie in dem Bild mittig über m-3-1 und m-3-2 Dein Vorschlag sieht schon gut ganz gut, wenn hier das Wort dann nicht getrennt werden würde.

(20 Aug '13, 20:10) BineMaja

@BineMaja Es wird vermutlich getrennt, weil du es noch in dem Scope mit dem text width=2cm verwendest, oder? Das sollte außerhalb, also nach dem Scope, nicht passieren. Mein „mittig über was” ist hier irrelevant, da alle Nodes ja eh die gleiche Breite haben.

(21 Aug '13, 05:15) Qrrbrbirlbel

Das einfachste wäre es, die Beschriftungen als label hinzuzufügen (kein Raten des above-Werts nötig und man kann global die label position sowie die label distance angeben) und diesen Namen zu geben, die dann wiederum verwendet werden können um ein weiteres Label hinzuzufügen.

\path (m-3-1-label.north) -- node [above] {Massenmarktstrategie} (m-3-3-label.north);

macht dann das Gleiche wie

\node[above] at ($(m-3-1-label.north)!.5!(m-3-3-label.north)$) {Massenmarktstrategie};

mithilfe der calc-Library, da standardmäßig ein midway (pos=.5) for Nodes entlang des Pfades gilt.


Mithilfe der fit-Library kann das Ganze auch wieder als label gesetzt werden, wenn man eine unsichtbare Nodes eng (seps auf null) um die bereits vorhandenen Labels setzt:

\node[outer sep=+0pt, inner sep=+0pt, fit=(m-3-1-label)(m-3-3-label), label=Massenmarktstrategie] {};

Eine weitere Möglichkeit bietet meine positioning-plus-Library, die intern auch die fit-Library benutzt, und zwar kann man hier die Keys der positioning-Library für eine Pseudo-Node verwenden, die sich (eben wie fit) um die angegeben Nodes schließt.

\node[above=0pt of (m-3-1-label)(m-3-3-label)] {Massenmarktstrategie};

Code

\documentclass[tikz,convert=false]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of nodes, nodes={circle,draw}, column sep=5em, row sep=2cm]{
  {} &    & {} &    & {} &    & {} \\
     &    & {} &    & {} &    &    \\
  {} &    & {} &    & {} &    & {} \\
  {} & {} & {} & {} & {} & {} & {} \\
};
\begin{scope}[every label/.style={text width=2cm,align=center, execute at begin node=\hspace{0pt}}]
  \foreach \pos/\Text in {3-1/(totale), 3-3/(partiale), 3-5/(totale), 3-7/(partiale)}
  \path (m-\pos) [late options={label={[name=m-\pos-label]\Text}}];
\end{scope}

\path (m-3-1-label.north) -- node [above] {Massenmarktstrategie} (m-3-3-label.north);
\end{tikzpicture}
\end{document}

Resultat

alt text

Permanenter link

beantwortet 21 Aug '13, 05:28

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815
Akzeptiert-Rate: 53%

bearbeitet 21 Aug '13, 05:45

Das sieht genauso aus wie ich es haben will :) Habe den Code bei mir eingefügt, nur leider spuckt es bei mir einen Fehler aus: ! Undefined control sequence. <argument> m-pos l.31 path (m-pos) [late options={label={[name=m-pos-label]Text}}]; The control sequence at the end of the top line of your error message was never def'ed. If you have misspelled it (e.g., \hobx'), typeI' and the correct spelling (e.g., `Ihbox'). Otherwise just continue, and I'll forget about whatever was undefined. ! Package pgf Error: No shape named m- is known.

Kannst du mir da helfen? Kenn mich leider 0 aus:(

(21 Aug '13, 10:27) BineMaja
1

@BineMaja Ein Tipp, du kannst das gleiche Markdown in den Kommentaren verwenden wie in Fragen und Antworte, sprich: Ein `Gravis` markiert Inline-Code.: Ein Gravis markiert Inline-Code. (Und zwei Gravise können verwendet werden, um einzelne zu schützen.) Oder du verwendest die typischen vier Leerzeichen vor Zeilen um Blockcode zu erstellen.

Es sieht so aus, als würdest du in der Definition der \foreach-Variablen ein anderes Makro als in der Schleife selbst verwenden.
Der Fehler wird bestimmt ersichtlich, wenn du die ganze Schleife postest.

(21 Aug '13, 11:27) Qrrbrbirlbel

Hab jetzt das Problem gelöst. Etwas so simples wie eine Leerzeile war der Grund. Danke für die Hilfe :)

(21 Aug '13, 12:11) BineMaja
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×76
×58
×50

gestellte Frage: 20 Aug '13, 19:48

Frage wurde gesehen: 18,113 Mal

zuletzt geändert: 21 Aug '13, 12:11