使用 \expr 乘以长度

使用 \expr 乘以长度

我有一个希望缩放的长度,但是我不确定如何进行,并且我在网上找到的答案都没有帮助。

我尝试从中得出这个结论的函数是:

% #1 is the unit to convert to
% #2 is the length to convert
\makeatletter
\def\convertto#1#2{\strip@pt\dimexpr #2*65536/\number\dimexpr 1#1}
\makeatother

进入:

% #1 is the length
% #2 is the multiple
% #3 is the output units
\makeatletter
\def\multlen#1#2#3{\strip@pt\dimexpr #1*65536*\numexpr #2/\number\dimexpr 1#3}
\makeatother

使用示例如下:

\begin{document}
\multlen{.5in}{2}{in}
... other content
\end{document}

一些期望的输出如下:

\multlen{.5in}{2}{in}返回 1in

\multlen{1in}{2}{in}返回 2in

\multlen{.5in}{5}{in}返回 2.5in

结果是算术溢出

答案1

TeX 长度不记录任何单位,因此对于计算来说,“返回单位”是无用的,您只需在其前面加上一个因子就可以将长度乘以2\textwidth两倍,因此\textwidth2\dimexpr 5in\relax10 英寸。

对于调试和文档目的,重新缩放以显示特定单位的长度可能很有用,并且 latex 提供了\dim_to_decimal_in_unit:nn

在此处输入图片描述

\documentclass{article}
\ExplSyntaxOn
\newcommand\lengthunit[2]{\dim_to_decimal_in_unit:nn{#1}{1#2}#2}
\ExplSyntaxOff
\begin{document}

\lengthunit{\textwidth}{cm}

\lengthunit{2\textwidth}{cm}

\lengthunit{1in}{cm}

\lengthunit{5\dimexpr 1in\relax}{cm}

\end{document}

相关内容