我正在尝试制作一个宏,它通过输入值\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
执行计算。它会将所有长度更改为其p
oint
等价值(并剥离单位)。因此,
\usepackage{xfp}
\newcommand{\len}{4ex}
\newcommand{\scalelen}[1]{\fpeval{#1*\len}pt}