我想要一个命令来将一个单位(pt、ex、em、in、bp、dd、pc、mm、cm)转换为另一个单位。我可以用 l3 做什么?
答案1
非常准确(也许太准确了,所以我对小数位进行了限制):
\documentclass{article}
\NewExpandableDocumentCommand{\convertto}{omm}{%
% #1 = number of decimal digits
% #2 = length
% #3 = new unit
\IfNoValueTF{#1}{%
\fpeval{\dimeval{#2}/(1#3)}\,#3%
}{%
\fpeval{round(\dimeval{#2}/(1#3),#1)}\,#3%
}%
}
\begin{document}
\convertto{1pc}{pt}
\convertto{1in}{cm}
\convertto[2]{1in}{cm}
\convertto{\textwidth}{cm}
\convertto{1ex}{mm}
{\Large\convertto{1ex}{mm}}
\end{document}
答案2
l3skip 模块提供\dim_to_decimal_in_unit:nn
。
摘自 LaTeX3 界面,第 231 页(2024-02-20 版本):
计算 ⟨dim exprs ⟩,并将 ⟨dim expr1 ⟩ 的值保留在输入流中,该值以 ⟨dim expr2 ⟩ 给出的单位表示。如果结果的小数部分为零,则将其与小数标记一起省略。结果的精度限制为最多五位小数,并省略尾随零。
例如
\dim_to_decimal_in_unit:nn { 1bp } { 1mm }
在输入流中留下 0.35278,即以毫米表示的一个大点的大小。