有没有将 cm 转换为 bp 的命令?

有没有将 cm 转换为 bp 的命令?

我想将长度(cm(厘米))转换为bp(大点)。 有没有命令可以转换cmbp

答案1

您可以将其存储cm在寄存器中,将其转换为内部pt格式,然后使用 72/72.27 因子转换pt为(使用 .99626)。bpgraphic/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

相关内容