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