Hier ist mein Code:
\documentclass{article}
\makeatletter
\def\Printdimen#1#2{\strip@pt \dimexpr #2 *65526 /\number\dimexpr 1#1}
\makeatother
\begin{document}
\Printdimen{mm}{\hsize} mm
\end{document}
Antwort1
Das Makro \strip@pt
möchte danach ein Dimensionsregister; es entfernt das Finale pt
nach dem extrahierten Wert.
In e-TeX \dimexpr
verhält sich wie ein „unbenanntes“ Dimensionsregister, also ist es nach gültig \strip@pt
. Gemäß den Syntaxregeln von kann einer Dimension (implizit oder explizit) darin oder \dimexpr
folgen, um eine Multiplikation oder (gerundete) Division anzuzeigen. Der Multiplikator/Divisor ist jedoch*
/
musseine ganze Zahl sein.
Dies \dimexpr 3pt/2
ist gültig, \dimexpr3pt/1.5
ist es aber nicht.
Ein Dimensionsregister, das in einem Kontext erscheint, in dem TeX eine Ganzzahl erwartet, wird mithilfe des Werts in skalierten Punkten auf diese Zahl gezwungen; 65536 skalierte Punkte sind 1pt, was der Grund für den Multiplikator 65536 ist.
Das ist also \number
nicht wirklich notwendig und
\makeatletter
\def\Printdimen#1#2{\strip@pt\dimexpr (#2) * 65536 / \dimexpr 1#1\relax\relax}
\makeatother
ist auch gut. Es ist besser, die beiden hinzuzufügen, \relax
die den Ausdruck beenden \dimexpr
.