Der Textfluss in Latex zeichnet sich gerade durch seine Anpassungsfähigkeit aus, welches einem Arbeit ersparen soll. Absolute Positionierungen sind hier also nicht vorteilhaft. Jedoch habe ich ein ziemlich großes Objekt, erstellt mit TikZ, das rechts viel Platz bietet, z.B. für eine Legende, Beschreibungsliste... o. Ä. Gäbe es eine Möglichkeit, bezogen auf das Objekt/ Trapez (als Ortsangabe), diesen Platz auf der unteren rechten Seite zu nutzen? Quelltext für das Objekt/ Trapez:

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\begin{document}
\begin{table}

\begin{tikzpicture}[every node/.append style={minimum width=1cm, minimum height=1cm}]

% Eckpunkte
\node (1) at (17,16)    {1};
\node (2) at (1,16)     {2};
\node (3) at (2,0)      {3};
\node (4) at (9,0)      {4};

\def \s{8} % Zwischenspaltenanzahl (Senkrechten)
\def \w{6} % Zwischenzeilenanzahl (Waagerechten)

% Gitterpunkte der oberen und unteren Seite:
\foreach \n in {1, ..., \s}
{
  \node (O\n) at ($ (1) !.{(1 / (\s + 1)) * \n}! (2) $) {O\n}; 
  \node (U\n) at ($ (4) !.{(1 / (\s + 1)) * \n}! (3) $) {U\n};
}

% Gitterpunkte der linken und rechten Seite: 
\foreach \n in {1, ..., \w}
{
  \node (L\n) at ($ (2) !.{(1 / (\w + 1)) * \n}! (3) $) {L\n}; 
  \node (R\n) at ($ (1) !.{(1 / (\w + 1)) * \n}! (4) $) {R\n};
}

% Festlegung senkrechter und waagerechter Reihen: 
\foreach \n in {1, ..., \s}
  \path [name path global/.expanded=O\n--U\n] (O\n) -- (U\n);
\foreach \n in {1, ..., \w}
  \path [name path global/.expanded=L\n--R\n] (L\n) -- (R\n);

% Schnittpunkte der senkrechen mit den waagerechten Reihen als neue Gitterpunkte:  
\foreach \i in {1, ..., \w}
{
  \foreach \n in {1, ..., \s}
  {
    \path [name intersections/.expanded = {of=O\n--U\n\space and L\i--R\i, by=\n\i}];
    \node at (\n\i) {\n\i};
  }
}

\end{tikzpicture}

\end{table}
\end{document}

gefragt 02 Mär '14, 22:10

rix's gravatar image

rix
39051823
Akzeptiert-Rate: 0%

bearbeitet 02 Mär '14, 23:34

esdd's gravatar image

esdd
17.7k254256

@rix Du brauchst nicht <pre><code> ... </pre></code>. Einfach markieren und Strg-K drücken, oder den Code-Button. Oder mit 4 Leerzeichen einrücken. (Markdown-Hilfe).

(02 Mär '14, 22:15) stefan ♦♦

Solltest Du mit Legende die \caption gemeint haben so ist auch das möglich. Hierzu muss man nur eine minipage in eine TikZ-Node packen. Im folgenden Beispiel habe ich die Tabelle in eine Abbildung geändert, da mir das passender erscheint.

alt text

Open in writeLaTeX
\documentclass{article}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}

\usepackage[margin=1.5cm]{geometry}
\usepackage{blindtext}

\begin{document}
\blindtext
\begin{figure}
\centering
\begin{tikzpicture}[every node/.append style={minimum width=1cm, minimum height=1cm}]

% Eckpunkte
\node (1) at (17,16)    {1};
\node (2) at (1,16)     {2};
\node (3) at (2,0)      {3};
\node (4) at (9,0)      {4};

\def \s{8} % Zwischenspaltenanzahl (Senkrechten)
\def \w{6} % Zwischenzeilenanzahl (Waagerechten)

% Gitterpunkte der oberen und unteren Seite:
\foreach \n in {1, ..., \s}
{
  \node (O\n) at ($ (1) !.{(1 / (\s + 1)) * \n}! (2) $) {O\n}; 
  \node (U\n) at ($ (4) !.{(1 / (\s + 1)) * \n}! (3) $) {U\n};
}

% Gitterpunkte der linken und rechten Seite: 
\foreach \n in {1, ..., \w}
{
  \node (L\n) at ($ (2) !.{(1 / (\w + 1)) * \n}! (3) $) {L\n}; 
  \node (R\n) at ($ (1) !.{(1 / (\w + 1)) * \n}! (4) $) {R\n};
}

% Festlegung senkrechter und waagerechter Reihen: 
\foreach \n in {1, ..., \s}
  \path [name path global/.expanded=O\n--U\n] (O\n) -- (U\n);
\foreach \n in {1, ..., \w}
  \path [name path global/.expanded=L\n--R\n] (L\n) -- (R\n);

% Schnittpunkte der senkrechen mit den waagerechten Reihen als neue Gitterpunkte:  
\foreach \i in {1, ..., \w}
{
  \foreach \n in {1, ..., \s}
  {
    \path [name intersections/.expanded = {of=O\n--U\n\space and L\i--R\i, by=\n\i}];
    \node at (\n\i) {\n\i};
  }
}
\draw (current bounding box.south east) node[anchor=south east]
    { \begin{minipage}{5.5cm}
        \caption{Diese Abbildung zeigt ein Trapez, nach dem Formalismus nach Sonundso. Man beachte das es sehr groß ist und fast eine ganze Seite füllt. Man könnte natürlich noch viel mehr dazu sagen, wenn
        man denn wüsste was es zu bedeuten hat.}
    \end{minipage}
    };
\end{tikzpicture}

\end{figure}
\end{document}

EDIT: Alternativ kann man auch anstelle der minipage, die Breite der Node mit text width= angeben. Vielen Dank für diesen Tip an Clemens!

Open in writeLaTeX
\draw (current bounding box.south east) 
    node[anchor=south east, align=justify, text width=5.5cm]
    {\caption{Diese Abbildung zeigt ein Trapez, nach dem Formalismus
                nach Sonundso. Man beachte das es sehr groß ist und
                fast eine ganze Seite füllt. Man könnte natürlich noch
                viel mehr dazu sagen, wenn man denn wüsste was es zu
                bedeuten hat.}\label{trapez}
    };
Permanenter link

beantwortet 02 Mär '14, 23:25

quinmars's gravatar image

quinmars
11615
Akzeptiert-Rate: 66%

bearbeitet 03 Mär '14, 21:24

Der Node die Optionen align=justify,text width=5.5cm zu geben, sollte eigentlich reichen, ohne dass man extra eine minipage verwenden muss.

(03 Mär '14, 18:22) cgnieder

eingebaut, ausprobiert und geklappt; hab dank! :-)

(03 Mär '14, 20:22) rix

@Clemens, vielen Dank für den Tipp! Irgendwie habe ich gedacht, dass das nicht funktionieren kann, darum hab ich es erst gar nicht ohne minipage probiert.

(03 Mär '14, 21:26) quinmars

@rix, freut mich, dass ich helfen konnte.

(03 Mär '14, 21:27) quinmars

@quinmars soweit ich mich erinnere, setzt die option align (zumindest mei den meisten Werten) den Inhalt der Node in eine \parbox (oder eine minipage, was letztlich dasselbe ist)... wahrscheinlich hat pgf sein eigenes Lowlevel-Konstrukt, aber das Konzept ist das gleiche

(03 Mär '14, 22:03) cgnieder

Für relative Positionierung empfiehlt sich das Laden der positioning-library, hier also:

Open in writeLaTeX
\usetikzlibrary{calc,intersections,positioning}

Dann kannst Du in Deinem Bild einfach einen neuen Node setzen, mit Bezug auf einen existenten Node und dort hinein Text oder Grafik schreiben, wie z.B.:

Open in writeLaTeX
\node [right=2cm of U1] {mehr Text};

Das geht sogar in anderen TikZ-Bildern. Und man kann mit TikZ auch Bezug auf Stellen in klassischen Tabellen, Gleichungen uvm. nehmen, für Beschriftungen, Pfeile u.a.

Permanenter link

beantwortet 02 Mär '14, 22:25

stefan's gravatar image

stefan ♦♦
18.1k143048
Akzeptiert-Rate: 48%

bearbeitet 02 Mär '14, 22:26

Herzlichsten Dank, auch was ich gesucht habe (unter anderem zur Beschriftung), echt stark, wie einfach und zugleich mächtig die Befehle sind ;-)

(03 Mär '14, 20:17) rix
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:

×728
×41

gestellte Frage: 02 Mär '14, 22:10

Frage wurde gesehen: 10,882 Mal

zuletzt geändert: 03 Mär '14, 22:03