Como posso imprimir um comprimento em centímetros na VTEX?

Como posso imprimir um comprimento em centímetros na VTEX?
\documentclass{article}
\begin{document}
\newdimen\mylength
 \mylength=1in
 \the\mylength
 \end{document}

A saída é: 72,27 pt

Mas quero mostrar a saída em centímetros usando VTeX.

Responder1

Usando macros de Claudio Beccari em 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}

A precisão não é garantida além de três dígitos, mas deve ser suficiente.

insira a descrição da imagem aqui

Responder2

Se entendi sua pergunta, você precisa fazer a conversão de unidades em um sistema TeX obscuro onde os primitivos eTeX não estão disponíveis. Em primeiro lugar, pergunte-se se esta é uma boa ideia. A maioria dos pacotes LaTeX atuais precisa de primitivas eTeX.

Se você realmente precisa converter unidades TeX sem eTeX, então você deve se reconciliar com a perda de precisão porque a aritmética inteira de 64 bits não está disponível. E você pode usar, por exemplo, a seguinte macro \printincom o uso:

\printin{unit}\register

por exemplo:

\printin{cm}\hsize  

imprime \hsizeregistro em cm. A \printinmacro pode ser implementada por:

{\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%                
}

informação relacionada