über Zellengrenzen hinaus zeichnen

Tabellen und Grafiken erstellen und anordnen


MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

über Zellengrenzen hinaus zeichnen

Beitrag von MoonKid »

Ich habe eine simple Tabelle.
\documentclass{scrartcl}

\usepackage{xltxtra}
\defaultfontfeatures{Mapping=tex-text}

\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\begin{document}
\begin{tabular} {c | c | c}
       & D+ & D- \\
       \hline
    E+ & a & b \\
       \hline
    E- & c & d 
\end{tabular}

\end{document}
Ich möchte nicht in die Zellen, sondern über die Zellen Pfeile zeichnen. Bspw. möchte ich von a nach d einen andersfarbigen Pfeil haben.

Geht sowas?
XeLaTeX, TeX Live, vim-latexsuite

Noch so einer

Beitrag von Noch so einer »

Sollte mit TikZ zu machen sein.
Wobei als zusätzliches Stichwort "remember picture" genannt sei, mit dem man sich Nodes zwecks späterer Verarbeitung merken kann. Näheres ist der TikZ-Anleitung zu entnehmen. Möglicherweise findest Du auch ein passendes Beispiel unter http://www.texample.net/tikz/examples/all/.

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

Mensch jetzt bin ich aber überrascht. Hätte ehr ein "Nein" erwartet.

Kann man mit TeX auch ne Frau backen? Gabs da nicht mal son Film...
:lol:
XeLaTeX, TeX Live, vim-latexsuite

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

Beitrag von esdd »

Hallo,

eventuell hilft auch dieser Thread bei mrunix weiter.

Gruß
Elke

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

Ach wie geil! :P

Sieht noch nicht hübsch aus, aber macht sinngemäß das, was ich mir vorgestellt hatte.
\documentclass{scrartcl}

\usepackage{xltxtra}
\defaultfontfeatures{Mapping=tex-text}

\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\usepackage{tikz}

\begin{document}
\begin{tabular} {c | c}
    \tikz[remember picture] \node (n1) {}; A
    &
    B \tikz[remember picture] \node (n2) {};
\end{tabular}

\begin{tikzpicture}[remember picture,overlay]
    \draw[->,very thick] (n1) -- (n2);
\end{tikzpicture}
\end{document}
XeLaTeX, TeX Live, vim-latexsuite

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

Ok, aktuell sieht der Mini-Code so aus.
\documentclass{scrartcl}

\usepackage{xltxtra}
\defaultfontfeatures{Mapping=tex-text}

\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\usepackage{tikz}

\begin{document}
\begin{tabular} {c | c}
    \tikz[remember picture] \node (nA) {}; A &
    B \tikz[remember picture] \node (nB) {}; \\
    \tikz[remember picture] \node (nC) {}; C &
    \tikz[remember picture] \node (nD) {}; D
\end{tabular}

\begin{tikzpicture}[remember picture,overlay]
    \draw[->] (nA) -- (nD);
\end{tikzpicture}
\end{document}
Problem ist, dass beide Enden des Pfeils neben den Buchstaben gezeichnet werden.

Ich möchte aber das der Ansatzpunkt für beide Enden direkt in der Mitte der Zelle und somit direkt auf (also in der Mitte) dem Buchstaben ist.
XeLaTeX, TeX Live, vim-latexsuite

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

Beitrag von esdd »

Hallo,
setz doch den Text in die Noden und lass die Pfeile dann bis zu deren center gehen:
\documentclass{scrartcl} 

\usepackage{xltxtra} 
\defaultfontfeatures{Mapping=tex-text} 

\usepackage{polyglossia} 
\setdefaultlanguage[spelling=new]{german} 

\usepackage{tikz} 
\tikzset{table/.style={remember picture,baseline,every node/.style={anchor=base}}}

\begin{document} 
\begin{tabular} {c | c} 
     \tikz[table] \node (nA) {A};& 
     \tikz[table] \node (nB) {B};\\ 
     \tikz[table] \node (nC)[anchor=base] {C};& 
     \tikz[table] \node (nD) {Dg};
\end{tabular} 

\begin{tikzpicture}[remember picture,overlay] 
     \draw[->] (nA.center) -- (nD.center); 
\end{tikzpicture} 
\end{document}
Gruß
Elke[/code]

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

Danke für die schöne Lösung. Da hast du mir ja gleich, ein paar Hausaufgaben mit aufgegeben. :D

Das ich die nodes mit .center oder den Himmelsrichtungen ansprechen kann, hab ich kapiert.

Auch das ein Style "table" definiert und später verwendet wird.

das "anchor=base" verstehe ich aber nicht (im style und im node). In der doc finde ich diesen String überall im Code, aber nirgendwo im Text erklärt.
Ich sehe auch keinen Unterschied (3fach Lauf!) ob ich das nun im Code hab oder nicht. Was steckt dahinter?

Und wozu brauch ich einen Anker, wenn ein Node mit center, north, ... schon Ansatzpunkte (Anker?) hat?
XeLaTeX, TeX Live, vim-latexsuite

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

Beitrag von esdd »

Den Unterschied siehst du nicht, so lange du keinen Text außerhalb der Noden und nur Großbuchstaben ohne Unterlängen verwendest. Nimm das folgende Beispiel und kommentiere da die beiden Zeilen abwechselnd oder gleichzeitig aus.
\documentclass{scrartcl} 

\usepackage{xltxtra} 
\defaultfontfeatures{Mapping=tex-text} 

\usepackage{polyglossia} 
\setdefaultlanguage[spelling=new]{german} 

\usepackage{tikz} 
\tikzset{table/.style={remember picture,%
  baseline,%
  every node/.style={anchor=base}%
  }}

\begin{document} 
\begin{tabular} {c | c} 
     \tikz[table] \node (nA) {A};& 
     \tikz[table] \node (nB) {B};\\ 
     \tikz[table] \node (nC)[anchor=base] {C}; Text ohne tikz g& 
     \tikz[table] \node (nD) {Dg};Text ohne tikz g
\end{tabular} 

\begin{tikzpicture}[remember picture,overlay] 
     \draw[->] (nA.center) -- (nD.center); 
\end{tikzpicture} 
\end{document}
Da wir für das Einfügen der Node keine Koordinaten vorgegeben haben, wird deren center im Ursprung des tikzbildes - also dem Punkt (0,0) - eingefügt. Mit anchor=base sorgen wir dafür, dass base anstatt center auf dem Ursprung positioniert wird.

Das tikzbild selbst wird allerdings mit seiner Unterkante auf der Grundlinie des umgebenden Textes eingefügt. Mit baseline als Synonym für baseline=0pt oder baseline=(current bounding box.base) wird das Bild nun so verschoben, dass die Linie y=0 des Bildes, die auch den Ursprung enthält, auf der Grundlinie des Textes neben dem tikzbild liegt.

Gruß
Elke

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

Mhm... Ich sehe einen Unterschied. Aber so ganz schnall ich es nicht. :D

Is für mein Problem auch erstmal nciht wichtig. Trotzdem danke.
XeLaTeX, TeX Live, vim-latexsuite

Antworten