PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tikzpicture nimmt in tabular keinen Platz ein



sysrq
05-04-2011, 11:47
Hallo,

ich möchte eine Tabelle erstellen und nutze kleine tikzpicture-Umgebungen, um Kreise zu malen. Dazu habe ich mir drei neue Kommandos gebastelt. Leider stimmt die vertikale Ausrichtung der Kreise nicht:


\documentclass{scrbook}
\usepackage{tikz}
\begin{document}

% drei TikZ-Shortcuts, um Voll-, Halb- und leeren Kreis zu zeichnen; passen sich automatisch der Zeilen-Höhe an
\newcommand\mycircle{\begin{tikzpicture}
\draw[line width=0.1em] (0,0) circle (0.4\baselineskip);
\end{tikzpicture}}
\newcommand\myfullcircle{\begin{tikzpicture}
\draw[line width=0.1em] (0,0) circle (0.4\baselineskip);
\fill[line width=0.1em] (0,0) circle (0.4\baselineskip);
\end{tikzpicture}}
\newcommand\myhalfcircle{
\begin{tikzpicture}
\draw[line width=0.1em] (0,0) circle (0.4\baselineskip);
\clip (-0.4\baselineskip,0.4\baselineskip) rectangle (0,-0.4\baselineskip);
\fill[line width=0.1em] (0,0) circle (0.4\baselineskip);
\end{tikzpicture}
}

\begin{tabular}{|c|p{1cm}|c|}
\hline
Etwas Text & \mycircle & Test danach \\
\hline
Noch mehr Text & \myfullcircle & Und noch mehr Text \\
\hline
Und noch mehr Text & \myhalfcircle & Das war alles \\
\hline
\end{tabular}

\end{document}


Die Kreise scheinen am oberen Rand zu kleben und ich habe auch eine Vermutung wieso: die tikzpicture-Umgebungen nehmen keinen Platz in der Tabelle ein. Wenn ich die Spaltendefinition von p{1cm} zu einem normalen c wechsle, verschwinden die Kreise:


\documentclass{scrbook}
\usepackage{tikz}
\begin{document}

% drei TikZ-Shortcuts, um Voll-, Halb- und leeren Kreis zu zeichnen; passen sich automatisch der Zeilen-Höhe an
\newcommand\mycircle{\begin{tikzpicture}
\draw[line width=0.1em] (0,0) circle (0.4\baselineskip);
\end{tikzpicture}}
\newcommand\myfullcircle{\begin{tikzpicture}
\draw[line width=0.1em] (0,0) circle (0.4\baselineskip);
\fill[line width=0.1em] (0,0) circle (0.4\baselineskip);
\end{tikzpicture}}
\newcommand\myhalfcircle{
\begin{tikzpicture}
\draw[line width=0.1em] (0,0) circle (0.4\baselineskip);
\clip (-0.4\baselineskip,0.4\baselineskip) rectangle (0,-0.4\baselineskip);
\fill[line width=0.1em] (0,0) circle (0.4\baselineskip);
\end{tikzpicture}
}

\begin{tabular}{|c|c|c|}
\hline
Etwas Text & \mycircle & Test danach \\
\hline
Noch mehr Text & \myfullcircle & Und noch mehr Text \\
\hline
Und noch mehr Text & \myhalfcircle & Das war alles \\
\hline
\end{tabular}

\end{document}


Ich denke wenn die tikzpicture-Umgebungen aktiv Platz einnehmen würden, dann würde auch die vertikale Ausrichtung funktionieren. Aber wie mache ich das? Da ich mit \baselineskip arbeite sollte die Höhe auch passend gewählt sein. Zumindest hoffe ich das.

Sepp99
05-04-2011, 13:43
Nur so eine Frage, warum nimmst Du nicht die Symbole aus dem wasysym Paket?

\documentclass{scrbook}
\usepackage{wasysym}
\begin{document}

\begin{tabular}{|c|p{1cm}|c|}
\hline
Etwas Text & \Circle & Test danach \\
\hline
Noch mehr Text & \CIRCLE & Und noch mehr Text \\
\hline
Und noch mehr Text & \LEFTcircle & Das war alles \\
\hline
\end{tabular}

\end{document}

Siehe eventuell dazu ftp://dante.ctan.org/tex-archive/info/symbols/comprehensive/symbols-a4.pdf

Gruß, Sepp.-

u_fischer
05-04-2011, 14:07
Tabellen setzen \baselineskip und \lineskip auf 0pt. Wegen des ersteren verschwinden in deinem zweiten Beispiel die Kreise, sie haben einfach die Größe 0. Und wegen des zweiten klebt dein Kreis oben am Rand. Ein \rule{4pt}{14pt} täte das auch.


Dein \baselineskip-Problem kannst du lösen, indem du entweder \normalsize oder \@currsize zu Begin deines Bildes aktivierst:


\makeatletter
\newcommand\mycircle{\begin{tikzpicture}
\@currsize %oder \normalsize
\draw[line width=0.1em] (0,0) circle (0.4\baselineskip);
\end{tikzpicture}}
\makeatother


Beim zweiten Problem musst du halt deinem Kreis oben etwas Leerraum hinzufügen.

esdd
05-04-2011, 14:30
Hallo,

tikz setzt die Zeichnung auf die baseline. Wenn du die gesamte Zeichnung nach unten verschieben willst, dann kannst du die Option baseline=... verwenden.



\documentclass{scrbook}
\usepackage{tikz}
\begin{document}

% drei TikZ-Shortcuts, um Voll-, Halb- und leeren Kreis zu zeichnen; passen sich automatisch der Zeilen-Höhe an
\newcommand\mycircle{\tikz[baseline=(n.210)]%
\node[line width=0.1em, circle,minimum size= 0.4\baselineskip,draw](n){};%
}
\newcommand\myfullcircle{\tikz[baseline=(n.210)]%
\node[line width=0.1em, circle,minimum size= 0.4\baselineskip,draw,fill](n){};%
}

\newcommand\myhalfcircle{%
\begin{tikzpicture}[baseline=(n.210)]%
\node[line width=0.1em, circle,minimum size=0.4\baselineskip,draw,use as bounding box](n){};%
\clip(n.south)rectangle(n.west|-n.north);
\node[line width=0.1em, circle,minimum size=0.4\baselineskip,fill]at(n.center){};%
\end{tikzpicture}
}

\begin{tabular}{|c|p{1cm}|c|}
\hline
Etwas Text & \mycircle & Test danach \\
\hline
Noch mehr Text & \myfullcircle & Und noch mehr Text \\
\hline
Und noch mehr Text & \myhalfcircle & Das war alles \\
\hline
\end{tabular}

\huge

\begin{tabular}{|c|c|c|}
\hline
Etwas Text & \mycircle & Test danach \\
\hline
Noch mehr Text & \myfullcircle & Und noch mehr Text \\
\hline
Und noch mehr Text & \myhalfcircle & Das war alles \\
\hline
\end{tabular}

\end{document}


Gruß
Elke

sysrq
05-04-2011, 18:10
Nur so eine Frage, warum nimmst Du nicht die Symbole aus dem wasysym Paket?


Danke für den Tipp, das Paket kannte ich noch nicht. Ursprünglich wollte ich Unicode-Zeichen verwenden, aber habe dort nur den ausgefüllten Kreis gefunden. Als Notlösung habe ich dann TikZ benutzt.


Tabellen setzen \baselineskip und \lineskip auf 0pt. Wegen des ersteren verschwinden in deinem zweiten Beispiel die Kreise, sie haben einfach die Größe 0. Und wegen des zweiten klebt dein Kreis oben am Rand.

Danke für die Erklärung. Jetzt verstehe ich wo das Problem liegt.



tikz setzt die Zeichnung auf die baseline. Wenn du die gesamte Zeichnung nach unten verschieben willst, dann kannst du die Option baseline=... verwenden.


Danke für die Erklärung und die Lösung mit [baseline=(n.210)].


Ich denke ich werde die Symbole aus dem wasysym Paket verwenden, da es sich hier anbietet. Wenn ich in Zukunft andere Symbole brauche, die ich nur mit TikZ malen kann, dann werden mir die oberen Erklärungen in Zukunft sicherlich noch sehr hilfreich sein. Vielen Dank dafür!

esdd
05-04-2011, 20:08
Ja, wasysym ist hier sicher die beste Lösung. In meiner fehlte ohnehin auch das \@currsize. Die Kreise waren zwar abhängig von der Schriftgröße, aber nur weil inner sep=0.3333em gilt. Deshalb hier trotzdem mein korrigierter Vorschlag, mit dem zum Beispiel auch ein zu einem Drittel gefüllter Kreis möglich wäre.



\documentclass{scrbook}
\usepackage{tikz}

\begin{document}

% zwei TikZ-Shortcuts um leere und (zum Teil) gefuellte Kreise zu zeichnen;
% passen sich automatisch der Zeilen-Höhe an
\makeatletter
\newcommand\mycircle{\@currsize\tikz[baseline=(n.210),inner sep=0pt]%
\node[line width=0.1em, circle,minimum size=0.7\baselineskip,draw](n){};%
}

%\myfillcircle[zufüllender Winkel in Grad]
\newcommand\myfillcircle[1][360]{%
\@currsize\tikz[baseline=(n.210),inner sep=0pt]%
\fill(0,0)%
node[line width=0.1em, circle,minimum size=0.7\baselineskip,draw](n){}%
--+(0,0.35\baselineskip)%
arc[start angle=90,end angle=90+#1, radius=0.35\baselineskip];%
}

\makeatother

\begin{tabular}{|c|p{1cm}|c|}
\hline
Etwas Text & \mycircle & Test danach \\
\hline
Noch mehr Text & \myfillcircle & Und noch mehr Text \\
\hline
Und noch mehr Text & \myfillcircle[180] & Das war alles \\
\hline
\end{tabular}

\LARGE

\begin{tabular}{|c|c|c|}
\hline
Etwas Text & \mycircle & Test danach \\
\hline
Noch mehr Text & \myfillcircle & Und noch mehr Text \\
\hline
Und noch mehr Text & \myfillcircle[180] & Das war alles \\
\hline
und noch etwas & \myfillcircle[120] & \\
\hline
\end{tabular}

\end{document}

Sepp99
05-04-2011, 22:40
Ja, wasysym ist hier sicher die beste Lösung. In meiner fehlte ohnehin auch das \@currsize. Die Kreise waren zwar abhängig von der Schriftgröße, aber nur weil inner sep=0.3333em gilt. Deshalb hier trotzdem mein korrigierter Vorschlag, mit dem zum Beispiel auch ein zu einem Drittel gefüllter Kreis möglich wäre.


Also Elke, dein Beispiel ist auch genial. Ich staune immer wieder, was in TIKZ steckt.
Gruß, Sepp.-