Aquí está mi código:
\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}
Respuesta1
La macro \strip@pt
necesita un registro de dimensiones; eliminará el final pt
después del valor extraído.
En e-TeX, \dimexpr
se comporta como un registro de dimensión "sin nombre", por lo que es bueno después de \strip@pt
. De acuerdo con las reglas de sintaxis de \dimexpr
, una dimensión (implícita o explícita) dentro de ella puede ir seguida de *
o /
para denotar multiplicación o división (redondeada). Sin embargo el multiplicador/divisordebeser un número entero.
Así \dimexpr 3pt/2
es válido, pero \dimexpr3pt/1.5
no lo es.
Un registro de dimensión que aparece en un contexto donde TeX espera que un número entero sea forzado a acceder a él utilizando el valor en puntos escalados; 65536 puntos escalados son 1 punto, que es el motivo del multiplicador 65536.
Por lo tanto, \number
no es realmente necesario y
\makeatletter
\def\Printdimen#1#2{\strip@pt\dimexpr (#2) * 65536 / \dimexpr 1#1\relax\relax}
\makeatother
es bueno también. Es mejor agregar los dos \relax
que terminan la \dimexpr
expresión.