Ich stoße immer wieder auf den Befehl \strut und würde gern wissen, was der eigentlich genau macht.

gefragt 16 Aug '13, 18:05

welle's gravatar image

welle
10642431
Akzeptiert: 100%

bearbeitet 16 Aug '13, 18:08


Definiert ist \strut im LaTeX-Kernel, der Datei latex.ltx, folgendermaßen:

\newbox\strutbox
\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}

Das Makro \set@fontsize, das z.B. von \selectfont aufgerufen wird, enthält folgende Anweisung:

 \setbox\strutbox\hbox{%
  \vrule\@height.7\baselineskip
        \@depth.3\baselineskip
        \@width\z@}%

Das bedeutet, \strut ist eine Box (man erinnere sich: alles, was TeX setzt, auch jeder Buchstabe, sind in TeXs Augen Boxen), die eine vertikale Linie mit der Breite 0 aber mit einer Höhe von 70% der aktuellen \baselineskip, also dem Abstand einer Grundlinie zur nächsten, und mit einer Tiefe von 30% der aktuellen \baselineskip enthält.

Verwendet wird \strut oder die \strutbox z.B. intern in Tabellenzeilen einer tabular, um zu gewährleisten, dass eine Zeile auch dann die richtige Höhe und Tiefe hat, wenn sie z.B. nur Buchstaben ohne Unter- und Oberlänge enthält, also Kleinbuchstaben wie a, c, e, m, n usw.

Das plain TeX Format enthält übrigens eine ganz ähnliche Definition (in plain.tex):

\newbox\strutbox
\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}
\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
Permanenter link

beantwortet 16 Aug '13, 18:33

Clemens's gravatar image

Clemens
19.0k113060

bearbeitet 16 Aug '13, 18:46

Zusätzlich zur Antwort von Clemens über die Definition und Verwendung der Anweisung \strut ist vielleicht anzumerken, dass es auch den Befehl \mathstrut gibt. Wie der Name dieses Befehls andeutet, ähnelt er der Anweisung \strut sollte aber v.a. im Mathematik-Satz angewendet werden.

\mathstrut ist definiert in LaTeX und auch Plain-TeX als {\vphantom(}. D.h., es ist eine Box mit der Höhe und Tiefe einer runden Klammer, ), und mit Null Breite -- und ist somit unsichtbar (ein "Phantom", so zu sagen...). Die Gesamt-Höhe (height + depth) einer runden Klammer ist in \textstyle normalerweise gleich der nominalen Größe der Schrift, z.B., 10pt. (In \scriptstyle und \scriptscriptstyle Situationen verringert sich diese Größe automatisch auf 7pt bzw. 5pt.) Somit ist die Gesamt-Höhe von \mathstrut leicht geringer als die von \strut -- welche gleich \baselineskip ist, also ca. 12pt in einem single-spaced Dokument falls die Schrift eine Nominal-Größe von 10pt hat.

Eine gute Anwendung von \mathstrut ergibt sich etwa beim Setzen von Wurzel-Zeichen. TeX bemüht sich normalerweise sehr, die Tiefe und Höhe eines Wurzel-Zeichens dem "Inhalt" anzupassen, d.h., die Tiefe und Höhe des Zeichens sind verschieden je nachdem ob der Inhalt ein y, ein a, oder ein k ist. Dies ist normalerweise sehr wünschenswert, kreiert aber vielleicht etwas leicht Unschönes wenn mehrere Wurzel-Zeichen mit unterschiedlichen Höhen und Tiefen nahe beieinander vorkommen. Hier kann das Einsetzen von \mathstrut Anweisungen behiflich sein, wie das folgende Beispiel illustriert. Die erste Zeile zeigt den Output von \sqrt{y}, \sqrt{a}, und \sqrt{k}: die Tiefen und Höhen der drei Wurzel-Zeichen sind alle verschieden, was störend wirken magt. Die zweite Zeile zeigt das Resultat des Einsatzes von \mathstrut Befehlen -- alle drei Wurzel-Zeichen sind nun gleich gross. Die dritte Zeile zeigt was passiert falls man (inkorrekterweise) \strut anstatt \mathstrut zum Einsatz bringen würde: die Wurzel-Zeichen wären absurd gross!

alt text

\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}  
$\sqrt{y}\sqrt{a}\sqrt{k}$ 
\ \,--- nicht ganz schön\dots

$\sqrt{\mathstrut y} \sqrt{\mathstrut a} \sqrt{\mathstrut k}$ 
--- mit \texttt{\textbackslash mathstrut}: gut!

$\sqrt{\strut y} \sqrt{\strut a} \sqrt{\strut k}$ 
--- mit \texttt{\textbackslash strut}: zu viel des Guten!
\end{document}

Moral der Geschicht´: Im Text-Satz sollte man \strut verwenden, im Mathematik-Satz aber \mathstrut.

Permanenter link

beantwortet 18 Aug '13, 02:12

Mico's gravatar image

Mico
28513

bearbeitet 18 Aug '13, 04:16

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×45

Frage gestellt: 16 Aug '13, 18:05

Frage wurde angeschaut: 9,041 Mal

Zuletzt aktualisiert: 18 Aug '13, 04:16