
\documentclass{article}
\begin{document}
\newdimen\mylength
\mylength=1in
\the\mylength
\end{document}
출력은 72.27pt입니다.
하지만 VTeX를 사용하여 출력을 센티미터 단위로 표시하고 싶습니다.
답변1
Claudio Beccari의 매크로 사용 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}
3자리를 초과하면 정확도가 보장되지 않지만 충분할 것입니다.
답변2
귀하의 질문을 이해한다면 eTeX 기본 요소를 사용할 수 없는 모호한 TeX 시스템에서 단위 변환을 수행해야 합니다. 우선, 이것이 좋은 생각인지 자문해 보십시오. 현재 LaTeX 패키지의 대부분에는 eTeX 기본 요소가 필요합니다.
eTeX 없이 TeX 단위를 정말로 변환해야 한다면 64비트 정수 연산을 사용할 수 없기 때문에 정밀도 손실을 조정해야 합니다. 예를 들어 다음 매크로를 \printin
사용법과 함께 사용할 수 있습니다.
\printin{unit}\register
예를 들어:
\printin{cm}\hsize
cm 단위로 레지스터를 인쇄합니다 \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%
}