Wie kann ich in VTEX eine Länge in Zentimetern drucken?

Wie kann ich in VTEX eine Länge in Zentimetern drucken?
\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.

Bildbeschreibung hier eingeben

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 \printinmit der Verwendung verwenden:

\printin{unit}\register

Zum Beispiel:

\printin{cm}\hsize  

druckt \hsizeRegister in cm. Das \printinMakro 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%                
}

verwandte Informationen