Latex에서 \number를 사용한 이유는 무엇입니까?

Latex에서 \number를 사용한 이유는 무엇입니까?

내 코드는 다음과 같습니다.

\documentclass{article}

\makeatletter
\def\Printdimen#1#2{\strip@pt \dimexpr #2 *65526 /\number\dimexpr 1#1}
\makeatother

\begin{document}

\Printdimen{mm}{\hsize} mm
\end{document}

답변1

매크로는 \strip@pt그 뒤에 차원 레지스터를 원합니다. pt추출된 값 이후의 최종 값을 제거합니다 .

e-TeX에서는 \dimexpr"이름이 지정되지 않은" 차원 레지스터로 동작하므로 \strip@pt. 의 구문 규칙에 따라 \dimexpr내부 차원(암시적 또는 명시적) 뒤에는 곱셈 또는 (반올림) 나눗셈을 나타내는 *또는 가 올 수 있습니다. /그러나 승수/제수는~ 해야 하다정수가 되십시오.

그래서 \dimexpr 3pt/2유효하지만 \dimexpr3pt/1.5그렇지 않습니다.

TeX가 정수를 기대하는 상황에서 나타나는 차원 레지스터는 스케일링된 포인트의 값을 사용하여 강제로 적용됩니다. 65536 스케일 포인트는 1pt이므로 승수는 65536입니다.

따라서 \number실제로는 필요하지 않으며

\makeatletter
\def\Printdimen#1#2{\strip@pt\dimexpr (#2) * 65536 / \dimexpr 1#1\relax\relax}
\makeatother

역시 좋다. 표현을 \relax끝내는 두 개를 추가하는 것이 좋습니다 \dimexpr.

관련 정보