
私は、dimexpr と numexpr の構文を理解するために etex マニュアルを注意深く読みましたが、私の理解力は限られています... 式「\dimexpr」は、前述のマニュアルに 3 回しか登場せず、正式な定義はどこにもありません (つまり、私の質問に答えているのです)。
したがって、詳細については、このマクロをネット上で見つけることができます。
\newcommand\dimtomm[1]{%
\strip@pt\dimexpr 0.352777778\dimexpr#1\relax\relax
}
寸法を mm に変換します。問題は、#1 の初期単位が考慮されていないように見えることです...? 実際、この newcommand を、sp にある zsavepos から発行された位置で使用すると、あたかも newcommand に pt の寸法を指定した場合のように機能します。
次元に関するより一般的な質問がありますが、文献 (ソース ブックなど) やインターネットで答えを見つけることができません。変数が次元を含むように定義されている場合、それには単位が付けられるのでしょうか、それとも単なる数値で「次元」というラベルが付いているのでしょうか。私の考えでは... いいえ! \strip@pt があるためですが、これは上記の \dimtomm の動作と矛盾しています (もちろん、私によると)。
次元、座標 (zsavepos...)、pt の次元を使用して sp に zsavepos を追加する方法、dimexpr の機能などについて、明確なトポロジを作成できる人はいますか?
編集回答があまり一般的にならないよう、私の質問についてより正確に述べると、点の zsavepos を取得し、sp の長さである x と y にアクセスできます。次に、次のようなものを使用して、描画内のオブジェクトを描画して配置します。
$(current page.north west) + (0cm,\xcoordtodim{\zposy{pointA}})$
そこで私は、異なるタイプの 2 つの問題に直面します。
1) \xcoordtodim が dim を返すようにしたいのですが、どうやら私の現在の知識ではそれができないようです...
2) \xcoordtodim は、通常 pt で表される指定された長さの点 (sp 内) の zposy を追加します。これは、\dimtomm および \dimexpr にリンクされた単位の「混合」の問題です...
答え1
寸法は単位付きで保存されません (実際には、常に単位付きの整数として保存されますsp
)。長さを設定するときに使用する単位が何であれ (単位が使用される場合)、単位\the
を使用して長さが表示されますpt
。
明示的な単位を使用しない設定には次のようなものがあります
\setbox0\hbox{abc} \dimen0=\wd0