乘以长度值

乘以长度值

我正在尝试制作一个宏,它通过输入值\scalelen缩放现有长度值。但是,实际上是一个包含单位的字符串。我编写了一个代码:\len\len

\documentclass{article}

\begin{document}

\def\len{4ex}
\def\scalelen#1{\numexpr#1*\len\relax}
% \def\scalelen#1{\dimexpr#1*\len\relax}

\noindent
A\hspace{\scalelen{0.5}}B\\
A\hspace{\scalelen{1}}B\\
A\hspace{\scalelen{2}}B

\end{document}

在此处输入图片描述

此代码按预期运行,但对于带有小数点的比例因子,它会引发错误。我发现这只\numexpr适用于整数。如何有效地修复此问题?

我发现\def\len{4.0ex}所有情况都会引发错误。

答案1

如果你有合适的长度,那么你可以用任何标量作为前缀,它会根据需要进行拉伸。因此,不要\def\len{4ex}使用 ,而是使用

\newlength{\len}
\setlength{\len}{4ex}

现在您可以使用x\len任何缩放器x

在此处输入图片描述

\documentclass{article}

\setlength{\parindent}{0pt}% Just for this example

\begin{document}

\newlength{\len}
\setlength{\len}{4ex}
\newcommand{\scalelen}[1]{#1\len}

A\hspace{4ex}B

A\hspace{\scalelen{0.5}}B

A\hspace{\scalelen{1}}B

A\hspace{\scalelen{2}}B

\end{document}

如果您坚持使用\def\len{4ex},那么您将需要一个小的解决方法:

\newcommand{\len}{4ex}
\newcommand{\scalelen}[1]{#1\dimexpr\len}

当然,你也可以加入xfp执行计算。它会将所有长度更改为其point等价值(并剥离单位)。因此,

\usepackage{xfp}
\newcommand{\len}{4ex}
\newcommand{\scalelen}[1]{\fpeval{#1*\len}pt}

相关内容