Ich bekomme mal wieder die vertikale Ausrichtung in einer Tabelle nicht hin.

Folgendes hab ich probiert:

Open in Online-Editor
\documentclass[12pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{tabularx}
\begin{document}
\renewcommand\tabularxcolumn[1]{m{#1}}
\begin{tabularx}{\textwidth}{>{\raggedright}X>{\raggedright}X}
  \mbox{$(a,b) = \{x \in \mathbb{R} \mid a < x < b\}$} &
  \begin{tikzpicture}[line cap=round, line join=round, x=1cm, y=1cm, scale=1, baseline=(O)]
    \coordinate (O) at (0,0);
    \draw [->] (0,0) -- (4,0);
    \foreach \x/\y/\z in {1/{{(}}/$a$,3/{{)}}/$b$}
    \draw [shift={({\x},0)}] node {\y} node[below=7mm,anchor=base,font=\small] {\z};
  \end{tikzpicture}
\end{tabularx}
\end{document}

Das hat leider nicht die Achse des Bilds auf die Mitte des Textes gebracht.

gefragt 12 Feb '15, 17:59

tom75's gravatar image

tom75
2.2k277984
Akzeptiert-Rate: 57%

bearbeitet 07 Jan '16, 14:27

saputello's gravatar image

saputello
11.1k174365


Bei m-Spalten werden die Inhalte der Tabellenzellen vertikal zentriert. Die Achse liegt allerdings nicht in der Mitte der Zeichnung, weshalb sie dann auch nicht vertikal mittig zur Formel ausgegeben wird.

alt text

Deshalb sind m-Spalten hier nicht sinnvoll. Man könnte jetzt X-Spalten ohne die Umdefinition von \tabularxcolumn verwenden, da aber zum einen der Inhalt der Tabellenzellen einzeilig sein soll und zum anderen momentan die linke Tabellenspalte zu schmal ist - Du verwendest \mbox um den eigentlich nötigen Zeilenumbruch zu verhindern - ist es vermutlich sinnvoller zwei r Spalten zu nutzen.

Damit würde dann die Zeichnung so ausgerichtet, dass sich die Koordinate O auf Höhe der Grundlinie der Matheformel befindet. Da O in dem Beispiel den Punkt (0,0) bezeichnet, kann man sogar nur einfach baseline statt baseline=(O) schreiben.

alt text

Die Achse muss nun noch um die halbe Höhe einer \strutbox nach oben und die halbe Tiefe einer \strutbox nach unten verschoben werden, d.h. die baseline der Zeichnung muss gegenüber der Achse um die halbe Höhe einer \strutbox nach unten und die halbe Tiefe einer \strutbox nach oben wandern. Geht die Achse durch den Punkt (0,0) kann man das erreichen, in dem man sich entweder eine Koordinate B bei (0,-.5\ht\strutbox+.5\dp\strutbox) definiert und baseline=(B) verwendet oder aber, in dem man für baseline diese Verschiebung direkt angibt: baseline={-.5*\ht\strutbox+.5*\dp\strutbox}

alt text

Open in Online-Editor
\documentclass[12pt]{beamer}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{tabular}{rr}
  $(a,b) = \{x \in \mathbb{R} \mid a < x < b\}$ &
  \begin{tikzpicture}[line cap=round, line join=round,
      baseline={-.5*\ht\strutbox+.5*\dp\strutbox}
    ]
    \draw [->] (0,0) -- (4,0);
    \foreach \x/\y/\z in {1/(/$a$,3/)/$b$}
    \draw [shift={({\x},0)}] node {\y} node[below=7mm,anchor=base,font=\small] {\z};
  \end{tikzpicture}
\end{tabular}
\end{frame}
\end{document}

Da die beiden Klammern ( ) hier nur als Nodetext dienen und nicht in Koordinatenangaben landen, kannst Du die geschweiften Klammern um diese runden Klammern hier weglassen.

Permanenter link

beantwortet 13 Feb '15, 01:57

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 13 Feb '15, 16:29

Danke für die Antwort!

Versteh ich das richtig, dass wenn ich zwei m-Spalten nehme, dann richtet er die beiden Boxen an der Mitte der jeweiligen Höhe aus, völlig egal wo die baseline gesetzt ist?

Danke für den Hinweis mit den geschweiften Klammern, das hatte ich vom letzten Beispiel einfach blind kopiert, da waren noch Koordinatenangaben drin. :-)

Darf man eigentlich \dimexpr und \relax weglassen?

(13 Feb '15, 10:54) tom75
1

Da die baseline Option von pgfmath ausgewertet wird, kannst Du \dimexpr und \relax weglassen. Habe ich jetzt oben so geändert.

Das mit den m-Spalten dürfte vom Prinzip her so sein, allerdings wird vermutlich vor und nach dem angegebenen Inhalt noch ein \strut eingefügt, weshalb die Position der baseline bei Zeichnungen, die keine größere Höhe als \ht\strutbox und keine größere Tiefe als \dp\strutbox haben, doch eine Rolle spielt.

(13 Feb '15, 16:34) esdd

Zwei Dinge:

  • Zum einen muss für \tabularxcolumn eine Spalte verwendet werden, die den Inhalt oben ausrichtet, wie zum Beispiel p{...}. Die von Dir gewählte Spalte m{...} zentriert alles um eine gemeinsame Achse.
  • Die Baseline vom tikzpicture muss entweder mit baseline=(O.base) gesetzt werden oder mit egreg's Formel (siehe unten). Für baseline=(O.base) muss O eine Node mit Inhalt sein, z.B. \node (O) {\strut};, ansonsten liegt (O.base) einfach bei (0,0).

egreg's Formel: Der TeX.SX Benutzer egreg hat in einem Kommentar vorgeschlagen die Baseline eines tikzpicture mittels baseline=-\the\dimexpr\fontdimen22\textfont2\relax zu setzen. Der fontdimen 22 von textfont 2 ist Höhe der Mathematik Achse. Wenn man also die Baseline um diesen Wert nach unten schiebt (durch das vorangestellte Minus) erhält man die Koordinate (0,0) auf Mathematik-Achse (ungefähr Zeilenmitte) zentiert.

Open in Online-Editor
\documentclass[12pt]{beamer}
\usepackage{tikz}
\usepackage{tabularx}
\begin{document}
\renewcommand\tabularxcolumn[1]{p{#1}}
\begin{tabularx}{\textwidth}{>{\raggedright}X>{\raggedright}X}
  \mbox{$(a,b) = \{x \in \mathbb{R} \mid a < x < b\}$} &
  \begin{tikzpicture}[baseline=-\the\dimexpr\fontdimen22\textfont2\relax]
    \draw [->] (0,0) -- (4,0);
    \foreach \x/\y/\z in {1/{{(}}/$a$,3/{{)}}/$b$}
    \draw [shift={({\x},0)}] node {\y} node[below=7mm,anchor=base,font=\small] {\z};
  \end{tikzpicture}
\end{tabularx}
\end{document}

alt text

Permanenter link

beantwortet 12 Feb '15, 23:00

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

Erstmal danke für deine Lösungsmöglichkeit. Der erste Punkt ist mir nach wie vor nicht klar. Du schreibst, dass die m-Spalte alles um eine gemeinsame Achse zentriert. Ist die Achse nicht die baseline?

(13 Feb '15, 10:43) tom75
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:

×69
×32
×30
×15

gestellte Frage: 12 Feb '15, 17:59

Frage wurde gesehen: 12,904 Mal

zuletzt geändert: 07 Jan '16, 14:27