这个问题与我之前的问题相关: 如何定义一个使用图像宽度和高度来定义变量以供以后使用的宏。您可以在那里找到有问题的代码的完整 MWE。为了简洁起见,我在这里跳过了。
\newlength
我使用和的混合\setlength
来\pgfmathsetmacro
计算我想要绘制的两个图形的最佳高度。代码运行良好,并且生成的图像显示正确。然而,我收到错误信息:
ERROR: Illegal unit of measure (pt inserted).
当使用计算出的高度(此处\finalheight
)时:
\includegraphics[height=\finalheight] .
我的猜测是使用例如
\pgfmathsetmacro{\finalheight}{\effwidth/\sumratio} ,
我将具有物理单位的长度改为一个数字。对吗?但是我在\setlength
计算比率时遇到了问题,这就是我开始使用它的原因\pgfmathsetmacro
。有人知道一种干净的方法来执行下面的计算,使结果\finalheight
有一个单位吗?
\newlength\firstheight%
\newlength\firstwidth%
\newlength\secondheight%
\newlength\secondwidth%
\def\firstim{\includegraphics{pathToImage}}%
\def\secondim{\includegraphics{pathToImage}}%
\setlength{\firstheight}{\heightof{\firstim}}%
\setlength{\firstwidth}{\widthof{\firstim}}%
\pgfmathsetmacro{\firstratio}{\firstwidth/\firstheight}%
\setlength{\secondheight}{\heightof{\secondim}}%
\setlength{\secondwidth}{\widthof{\secondim}}%
\pgfmathsetmacro{\secondratio}{\secondwidth/\secondheight}%
\pgfmathsetmacro{\gapspace}{0.5cm}%
\pgfmathsetmacro{\effwidth}{\textwidth-\gapspace}%
\pgfmathsetmacro{\sumratio}{\firstratio+\secondratio}%
\pgfmathsetmacro{\finalheight}{\effwidth/\sumratio}%
答案1
您混淆了宏和长度分配。\pgfmathsetmacro
结果输出的数字没有任何度量单位。如果您坚持使用\pgfmathsetmacro
,那么您需要使用
\includegraphics[height=\finalheight pt]{<image>}
或者,pgfmath
提供\pgfmathsetlength
在计算中保留尺寸组件的功能。但是,这需要您根据需要预先定义其他长度。请尝试以下操作:
\newlength\firstheight%
\newlength\firstwidth%
\newlength\secondheight%
\newlength\secondwidth%
\newlength\effwidth% <--- Added
\newlength\finalheight% <--- Added
\def\firstim{\includegraphics{<imageA>}}%
\def\secondim{\includegraphics{<imageB>}}%
\setlength{\firstheight}{\heightof{\firstim}}%
\setlength{\firstwidth}{\widthof{\firstim}}%
\pgfmathsetmacro{\firstratio}{\firstwidth/\firstheight}%
\setlength{\secondheight}{\heightof{\secondim}}%
\setlength{\secondwidth}{\widthof{\secondim}}%
\pgfmathsetmacro{\secondratio}{\secondwidth/\secondheight}%
\pgfmathsetmacro{\gapspace}{0.5cm}%
\pgfmathsetlength{\effwidth}{\textwidth-\gapspace}% <--- Changed
\pgfmathsetmacro{\sumratio}{\firstratio+\secondratio}%
\pgfmathsetlength{\finalheight}{\effwidth/\sumratio}% <--- Changed