[NTG-context] externalfigure and width/height scaling
Hans Hagen
pragma at wxs.nl
Sun Mar 12 20:02:44 CET 2006
nico wrote:
> Hello,
>
> I am new to ConTeXt, so please be patient with my newbie questions.
> Looking at the \externalfigure capabilities, I haven't found any option
> allowing to scale only one dimension (or scale both dimensions in an
> anamorphous way).
>
> Am I right, and if so what is the best method to perform this?
>
> I thought about using the \getfiguredimensions macro to get the natural
> dimensions, and then use something like
> width=0.2\imgwidth,height=0.8\imgheight, but it is a pity that the
> externalfigure interface does not allow this directly (something like
> wscale and hscale options).
>
there is indeed no xscale and yscale (although
\scale[sx=1.5,sy=2,3]{...} is available)
% put this in cont-new.tex
\unprotect
\let\@@efxscale\empty
\let\@@efyscale\empty
\def\setnaturalfiguresize
{\doifsomething\@@efwidth
{\global\figwid\@@efwidth}%
\doifsomething\@@efheight
{\global\fighei\@@efheight}%
\doifsomething\@@efscale
{\figxsca\@@efscale
\figysca\@@efscale}%
\doifsomething\@@efxscale
{\figxsca\@@efxscale}%
\doifsomething\@@efyscale
{\figxsca\@@efyscale}}
\def\setscalefiguresize
{\doifsomething{\@@efscale\@@efxscale\@@efxscale}
{\doapplyfigurescale\figwid\@@epw\figxsca\@@efxscale
\doapplyfigurescale\fighei\@@eph\figysca\@@efyscale
\global\figwid\zeropoint
\global\fighei\zeropoint
\doifelsenothing\@@efmaxwidth
{\doifsomething\@@efmaxheight
{\ifdim\@@eph>\@@efmaxheight
\global\fighei\@@efmaxheight
\fi}}
{\ifdim\@@epw>\@@efmaxwidth
\global\figwid\@@efmaxwidth
\fi}}}
\def\doapplyfigurescale#1#2#3#4%
{\ifcase0#4\relax % @@ef.scale kan empty zijn
\ifcase0\@@efscale\relax % @@efscale kan empty zijn
#3=\plusthousand
\else
#3=\@@efscale
\fi
\else
#3=#4%
\fi
\relax % important !
\global#1\ifnum#3=\plusthousand#2\else\dimexpr#3\dimexpr#2/\plusthousand\relax\relax\fi
\relax}
\def\setdimensionfiguresize
{\ifdim\figwid>\zeropoint\relax
\ifdim\fighei>\zeropoint\relax
\dosetdimensionfiguresize
{\docalculatefigurescale\fighei\@@eph\figysca
\docalculatefigurescale\figwid\@@epw\figxsca}%
{\docalculatefigurescale\fighei\@@eph\figysca
\docalculatefigurescale\figwid\@@epw\figxsca}%
{\docalculatefigurescale\fighei\@@eph\figysca
\docalculatefigurescale\figwid\@@epw\figxsca}%
\else
\dosetdimensionfiguresize
{\docalculatefigurescales\figwid\@@epw\fighei\@@eph}%
{\docalculatefigurescales\figwid\@@epw\fighei\@@eph}%
{\docalculatefigurescales\figwid\@@epw\fighei\@@eph}%
\fi
\else
\ifdim\fighei>\zeropoint\relax
\dosetdimensionfiguresize
{\docalculatefigurescales\fighei\@@eph\figwid\@@epw}%
{\docalculatefigurescales\fighei\@@eph\figwid\@@epw}%
{\docalculatefigurescales\fighei\@@eph\figwid\@@epw}%
\else
\dosetdimensionfiguresize
{\doapplyfigurescale\figwid\@@epw\figxsca\@@efxscale
\doapplyfigurescale\fighei\@@eph\figysca\@@efyscale}%
{\docalculatefigurescales\figwid\@@epw\fighei\@@eph}%
{\docalculatefigurescales\fighei\@@eph\figwid\@@epw}%
\fi
\fi}
\protect
% end of patch
\starttext
\externalfigure[cow][scale=1000]
\externalfigure[cow][scale=200]
\externalfigure[cow][yscale=200]
\externalfigure[cow][xscale=800,yscale=200]
\stoptext
More information about the ntg-context
mailing list