Как напечатать длину в сантиметрах в VTEX?

Как напечатать длину в сантиметрах в VTEX?
\documentclass{article}
\begin{document}
\newdimen\mylength
 \mylength=1in
 \the\mylength
 \end{document}

Результат: 72,27 пт.

Но я хочу показать вывод в сантиметрах, используя VTeX.

решение1

Использование макросов Клаудио Беккари в 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}

Точность не гарантируется за пределами трех цифр, но этого должно быть достаточно.

введите описание изображения здесь

решение2

Если я правильно понял ваш вопрос, вам нужно сделать преобразование единиц в малоизвестной системе TeX, где примитивы eTeX недоступны. Прежде всего, спросите себя, хорошая ли это идея. Большинству текущих пакетов LaTeX нужны примитивы eTeX.

Если вам действительно нужно преобразовать единицы TeX без eTeX, то вам придется смириться с потерей точности, поскольку 64-битная целочисленная арифметика недоступна. И вы можете использовать, например, следующий макрос \printinс использованием:

\printin{unit}\register

например:

\printin{cm}\hsize  

печатает \hsizeрегистр в см. \printinМакрос можно реализовать следующим образом:

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

Связанный контент