¿Cómo puedo imprimir una longitud en centímetros en VTEX?

¿Cómo puedo imprimir una longitud en centímetros en VTEX?
\documentclass{article}
\begin{document}
\newdimen\mylength
 \mylength=1in
 \the\mylength
 \end{document}

La salida es: 72,27 pt

Pero quiero mostrar la salida en centímetros usando VTeX.

Respuesta1

Usando macros de Claudio Beccari en widetable.sty:

\documentclass{article}

\makeatletter
\dimendef\wt@Numer=2
\dimendef\wt@Denom=4
\countdef\wt@Num=2
\countdef\wt@Den=4
\countdef\wt@I=6
\def\wt@segno{}

\def\dividi#1\per#2\in#3{%
  \begingroup
  \wt@Numer #1\relax \wt@Denom #2\relax
  \ifdim\wt@Denom<\z@ \wt@Denom -\wt@Denom \wt@Numer -\wt@Numer\fi
  \ifdim\wt@Numer<\z@ \def\wt@segno{-}\wt@Numer -\wt@Numer\fi
  \ifdim\wt@Denom=\z@
    \edef\wt@Q{\ifdim\wt@Numer<\z@-\fi\strip@pt\maxdimen}%
  \else
    \wt@Num=\wt@Numer \wt@Den=\wt@Denom \divide\wt@Num\wt@Den
    \edef\wt@Q{\number\wt@Num.}%
    \advance\wt@Numer -\wt@Q\wt@Denom \wt@I=6
    \@whilenum \wt@I>\z@ \do{\wt@dividiDec\advance\wt@I\m@ne}%
  \fi
  \edef\x{\noexpand\endgroup\noexpand\def\noexpand#3{\wt@segno\wt@Q}}
  \x
}

\def\wt@dividiDec{%
  \wt@Numer=10\wt@Numer \wt@Num=\wt@Numer \divide\wt@Num\wt@Den
  \edef\wt@q{\number\wt@Num}\edef\wt@Q{\wt@Q\wt@q}%
  \advance\wt@Numer -\wt@q\wt@Denom}

\makeatletter

\newcommand{\convert}[2]{\dividi#1\per 1#2\in\temp\temp\,#2}

\begin{document}

\convert{1in}{pt}

\convert{1in}{cm}

\newlength\mylength
\setlength\mylength{.3in}

\convert{\mylength}{cm}

\end{document}

La precisión no está garantizada más allá de tres dígitos, pero debería ser suficiente.

ingrese la descripción de la imagen aquí

Respuesta2

Si entiendo su pregunta, debe realizar la conversión de unidades en un sistema TeX oscuro donde las primitivas eTeX no están disponibles. En primer lugar, pregúntate si es una buena idea. La mayoría de los paquetes LaTeX actuales necesitan primitivas eTeX.

Si realmente necesita convertir unidades TeX sin eTeX, debe aceptar la pérdida de precisión porque la aritmética de enteros de 64 bits no está disponible. Y puedes usar, por ejemplo, la siguiente macro \printincon el uso:

\printin{unit}\register

Por ejemplo:

\printin{cm}\hsize  

Registro de impresiones \hsizeen cm. La \printinmacro se puede implementar mediante:

{\lccode`\?=`\p \lccode`\!=`\t  \lowercase{\gdef\ignorept#1?!{#1}}}
\newdimen\tmpdim
\newcount\tmpnum

\def\printin#1#2{%
    \tmpnum=1073741824 \tmpdim=1#1
    \divide\tmpdim by4
    \divide\tmpnum by\tmpdim
    \tmpdim=\the\tmpnum sp
    \tmpdim=\expandafter\ignorept\the#2\tmpdim
    \expandafter\ignorept\the\tmpdim#1%                
}

información relacionada