Anzeige:
Ergebnis 1 bis 7 von 7

Thema: tikzpicture nimmt in tabular keinen Platz ein

  1. #1
    Registrierter Benutzer
    Registriert seit
    24.03.2011
    Beiträge
    4

    tikzpicture nimmt in tabular keinen Platz ein

    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:
    Code:
    \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:
    Code:
    \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.

  2. #2
    Registrierter Benutzer
    Registriert seit
    10.07.2010
    Ort
    Offenhausen
    Beiträge
    654
    Nur so eine Frage, warum nimmst Du nicht die Symbole aus dem wasysym Paket?
    Code:
    \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/inf...symbols-a4.pdf

    Gruß, Sepp.-
    Geändert von Sepp99 (05-04-2011 um 12:47 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    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:

    Code:
    \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.

  4. #4
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,

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

    Code:
    \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

  5. #5
    Registrierter Benutzer
    Registriert seit
    24.03.2011
    Beiträge
    4
    Zitat Zitat von Sepp99 Beitrag anzeigen
    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.

    Zitat Zitat von u_fischer Beitrag anzeigen
    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.

    Zitat Zitat von esdd Beitrag anzeigen
    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!

  6. #6
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    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.

    Code:
    \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}

  7. #7
    Registrierter Benutzer
    Registriert seit
    10.07.2010
    Ort
    Offenhausen
    Beiträge
    654
    Zitat Zitat von esdd Beitrag anzeigen
    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.-

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •