我想将长度(cm(厘米))转换为bp(大点)。 有没有命令可以转换cm
为bp
?
答案1
您可以将其存储cm
在寄存器中,将其转换为内部pt
格式,然后使用 72/72.27 因子转换pt
为(使用 .99626)。bp
graphic/x
你可以使用 eTeX 宏\dimexpr
来实现这一点。这样它甚至还可以扩展:
\def\converttobp#1{\the\dimexpr .99626\dimexpr #1\relax\relax}
这将获取 acm
或任何其他尺寸并将其转换为,bp
但返回时不bp
带单位。然而,两次转换(cm->pt->bp)将添加舍入误差。
cm
您可以通过去掉并将其替换为 来避免其中之一pt
,以使 TeX 改为接受点,然后使用 cm-to-bp 因子 28.3464567 进行转换:
\makeatletter
\def\strip@cm#1cm{#1}
\def\cmtobp#1{\strip@pt\dimexpr 28.3464567\dimexpr\strip@cm #1 pt\relax\relax}
\makeatother
% Usage: \cmtobp{1cm} (returns value in bp without trailing unit)
如果您想使用cm
没有单位的值并获取有单位的维度,bp
请使用:
\def\cmtobp#1{\strip@pt\dimexpr 28.3464567\dimexpr #1 pt\relax\relax bp}
答案2
如果需要对结果进行“上限”:
\makeatletter
\def\strip@cm#1cm{#1}
\def\cmtobp#1{\expandafter\@ceil
\the\dimexpr 28.3464567\dimexpr\strip@cm #1 pt\relax\relax}
\begingroup\catcode`P=12 \catcode`T=12
\lowercase{\endgroup
\def\@ceil#1.#2PT{\number\numexpr#1+0\ifnum#2>\z@ 1\fi\relax}}
\makeatother
\cmtobp{3cm} % -> 86
\cmtobp{2.54cm} % -> 72
\cmtobp{2.541cm} % -> 73
\the<dimen>
这利用了始终至少有一个十进制数字(可能是 0)的事实。
根据要求,以下版本具有不同的输入和输出:
\makeatletter
\def\cmtobp#1{\expandafter\@ceil
\the\dimexpr 28.3464567\dimexpr #1pt\relax\relax}
\begingroup\catcode`P=12 \catcode`T=12
\lowercase{\endgroup
\def\@ceil#1.#2PT{\number\numexpr#1+0\ifnum#2>\z@ 1\fi\relax bp}}
\makeatother
\cmtobp{3} % -> 86bp
\cmtobp{2.54} % -> 72bp
\cmtobp{2.541} % -> 73bp