Hi, in an example document I’m trying to get pictures of random size and placement. Unfortunately the expansion is over my head: %%%%%%%%%%%%%%%%% \useMPlibrary[dum] \usemodule[visual] \startluacode local locations = { 'top', 'bottom', 'left', 'right', } function RandomLocation() context(locations[math.random(1,#locations)]) end \stopluacode \newdimen\PicWidth \PicWidth=\textwidth \define[1]\Blindbild{ \getrandomnumber\imgH{1}{9} \PicWidth=\textwidth \doif{#1}{left}{\PicWidth=.4\textwidth} \doif{#1}{right}{\PicWidth=.4\textwidth} \startplacefigure[location={#1},title={#1 \fakewords{3}{20}}] \externalfigure[place #1][width=\PicWidth,height=\dimexpr\textheight * \imgH / 10 \relax] \stopplacefigure } \starttext \dorecurse{3} {\chapter{\fakewords{5}{10}} \dorecurse{3} {\dorecurse{3}{\fakewords{50}{100}\endgraf} \Blindbild{\ctxlua{RandomLocation()}} % expansion!? \dorecurse{2}{\fakewords{50}{100}\endgraf}}} \stoptext %%%%%%%%%%%%%%%%%% So the parameter of \Blindbild should get generated at the time of calling the macro, so that #1 stays the same within the macro. In this state the Lua function gets called at every use of #1. Greetlings, Hraban --- https://www.fiee.net http://wiki.contextgarden.net https://www.dreiviertelhaus.de GPG Key ID 1C9B22FD
Henning Hraban Ramm schrieb am 13.09.2019 um 18:51:
Hi, in an example document I’m trying to get pictures of random size and placement. Unfortunately the expansion is over my head:
%%%%%%%%%%%%%%%%% \useMPlibrary[dum] \usemodule[visual]
\startluacode
local locations = { 'top', 'bottom', 'left', 'right', }
function RandomLocation() context(locations[math.random(1,#locations)]) end
\stopluacode
\newdimen\PicWidth \PicWidth=\textwidth
\define[1]\Blindbild{ \getrandomnumber\imgH{1}{9} \PicWidth=\textwidth \doif{#1}{left}{\PicWidth=.4\textwidth} \doif{#1}{right}{\PicWidth=.4\textwidth} \startplacefigure[location={#1},title={#1 \fakewords{3}{20}}] \externalfigure[place #1][width=\PicWidth,height=\dimexpr\textheight * \imgH / 10 \relax] \stopplacefigure } Put the value of the random location in a macro.
\define[1]\Blindbild {\edef\PicLocation{#1}% \getrandomnumber\imgH{1}{9}% \PicWidth=\textwidth \doifinset{\PicLocation}{left,right}{\PicWidth=.4\textwidth}% \startplacefigure[location={\PicLocation},title={\PicLocation\space\fakewords{3}{20}}] \externalfigure [place \PicLocation] [width=\PicWidth, height=\dimexpr\textheight * \imgH / 10 \relax] \stopplacefigure} Wolfgang
Am 2019-09-13 um 19:44 schrieb Wolfgang Schuster
: Henning Hraban Ramm schrieb am 13.09.2019 um 18:51:
Hi, in an example document I’m trying to get pictures of random size and placement. Unfortunately the expansion is over my head: Put the value of the random location in a macro.
Thank you! I thought I had tried that, but probably only defining the macro outside of the other… Greetlings, Hraban --- https://www.fiee.net http://wiki.contextgarden.net https://www.dreiviertelhaus.de GPG Key ID 1C9B22FD
Henning Hraban Ramm schrieb am 13.09.2019 um 20:41:
Am 2019-09-13 um 19:44 schrieb Wolfgang Schuster
: Henning Hraban Ramm schrieb am 13.09.2019 um 18:51:
Hi, in an example document I’m trying to get pictures of random size and placement. Unfortunately the expansion is over my head: Put the value of the random location in a macro. Thank you! I thought I had tried that, but probably only defining the macro outside of the other… It could have been that you used \def which doesn't work because this will always call the Lua function and you get a new random value but with \edef the result of the first random value is stored in the macro.
\def\RandomA{\cldcontext{math.random(1,4)}} \edef\RandomB{\cldcontext{math.random(1,4)}} \starttext \dorecurse{10}{A: \RandomA \quad B: \RandomB\par} \stoptext Wolfgang
participants (2)
-
Henning Hraban Ramm
-
Wolfgang Schuster