使用 pgf 计算时,如何保留 \includegraphics 缩放使用的长度

使用 pgf 计算时,如何保留 \includegraphics 缩放使用的长度

这个问题与我之前的问题相关: 如何定义一个使用图像宽度和高度来定义变量以供以后使用的宏。您可以在那里找到有问题的代码的完整 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

相关内容