
\documentclass{article}
\begin{document}
\newdimen\mylength
\mylength=1in
\the\mylength
\end{document}
Die Ausgabe lautet: 72,27 pt
Ich möchte die Ausgabe aber mithilfe von VTeX in Zentimetern anzeigen.
Antwort1
Verwenden von Makros von Claudio Beccari in 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}
Über drei Ziffern hinaus ist die Genauigkeit nicht garantiert, sollte aber ausreichend sein.
Antwort2
Wenn ich Ihre Frage richtig verstehe, müssen Sie die Einheitenumrechnung in einem obskuren TeX-System durchführen, in dem eTeX-Grundelemente nicht verfügbar sind. Fragen Sie sich zunächst, ob das eine gute Idee ist. Die meisten aktuellen LaTeX-Pakete benötigen eTeX-Grundelemente.
Wenn Sie TeX-Einheiten wirklich ohne eTeX konvertieren müssen, müssen Sie den Genauigkeitsverlust in Kauf nehmen, da die 64-Bit-Ganzzahlarithmetik nicht verfügbar ist. Sie können beispielsweise das folgende Makro \printin
mit der Verwendung verwenden:
\printin{unit}\register
Zum Beispiel:
\printin{cm}\hsize
druckt \hsize
Register in cm. Das \printin
Makro kann implementiert werden durch:
{\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%
}