這是我的程式碼:
\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
表達式的兩個。