`\settoheight` verwendet intern eine `\hbox` welche nur eine einzelne Zeile darstellen kann. Um mehrere Zeilen zu erhalten muss man den Inhalt in eine `\vbox` packen. Um die gesamte Höhe (`\ht+\dp`) der Box zu erhalten muss man `\settototalheight` aus dem `calc` Paket verwenden.
*N.B.*: `\\` beginnt keinen neuen Absatz, sondern fügt nur eine Penalty mit Wert -10000 ein, um einen Zeilenumbruch zu erzwingen. Die Definition von `\\` ist effektiv `\penalty10000\hfil\penalty-10000`. Zunächst wird mit `\penalty10000` ein Zeilenumbruch unterdrückt, dann wird mit `\hfil` die Zeile aufgefüllt und schließlich mit `\penalty-10000` der Zeilenumbruch erzwungen.
erzwungen. Man sollte stattdessen immer `\par` oder einfach eine leere Zeile verwenden.
\documentclass[]{book}
\usepackage{calc}
\parindent0pt
\begin{document}
\newlength\myheight
\def\mybox{Zeile 1\par Zeile 2\par Zeile 3}
\settototalheight\myheight{\vbox{\mybox}}
Wert: \the\myheight ~(falsch!)
Inhalt:
\mybox
\bigskip
\newlength\Myheight
\def\Mybox{Zeile 1}
\settototalheight\Myheight{\vbox{\Mybox}}
Wert: \the\Myheight
Inhalt:
\Mybox
\end{document}
[![alt text][1]][1]
[1]: https://texwelt.de/wissen/upfiles/test_460.png