Thank you Hans and Wolfgang for the explanation! Adam On Tue, Oct 12, 2021 at 4:22 PM Wolfgang Schuster < wolfgang.schuster.lists@gmail.com> wrote: > Hans Hagen via ntg-context schrieb am 12.10.2021 um 14:12: > > On 10/11/2021 1:38 PM, Adam Reviczky via ntg-context wrote: > >> Hi, > >> > >> I am trying to use a combination figure with luacode (both with > >> latest MKIV and LMTX). > >> However, the figures do not line up in the grid of the combination. > >> > >> I get the correct result with examples 1 and 2 below, but example 3 > >> using lua functions for combination and externalfigure is what I > >> wanted to use in the first place. > >> > >> MWE: > >> > >> \starttext > >> > >> \startluacode > >> > >> -- Combination 1 > >> context.startplacefigure({title = "Figure"}) > >> context.startcombination({nx = "2", ny = "2"}, > >> > >> "\\externalfigure[cow][width=50mm]","Caption 1", > >> "\\externalfigure[cow][width=50mm]","Caption 2", > >> "\\externalfigure[cow][width=50mm]","Caption 3", > >> "\\externalfigure[cow][width=50mm]","Caption 4" > >> ) > >> > >> context.stopcombination() > >> context.stopplacefigure() > >> > >> -- Combination 2 > >> > >> context.startplacefigure({title = "Figure"}) > >> context.startcombination({nx = "2", ny = "2"}, > >> > >> "Picture 1","Caption 1", > >> "Picture 2","Caption 2", > >> "Picture 3","Caption 3", > >> "Picture 4","Caption 4" > >> ) > >> > >> context.stopcombination() > >> context.stopplacefigure() > >> > >> -- Combination 3 > >> > >> context.startplacefigure({title = "Figure"}) > >> context.startcombination({nx = "2", ny = "2"}, > >> > >> context.externalfigure({"cow"},{width = "50mm"}),"Caption 1", > >> context.externalfigure({"cow"},{width = "50mm"}),"Caption 2", > >> context.externalfigure({"cow"},{width = "50mm"}),"Caption 3", > >> context.externalfigure({"cow"},{width = "50mm"}),"Caption 4" > >> ) > >> > >> context.stopcombination() > >> context.stopplacefigure() > >> > >> \stopluacode > >> \stoptext > >> > >> Any hints on what I am doing wrong in example 3? > > as in any prodedural language a function as argument gets immediately > > executed so you need to delay: > > > > context.startplacefigure({title = "Figure"}) > > context.startcombination({nx = "2", ny = "2"}, > > context.delayed.externalfigure({"cow"},{width = "50mm"}), > > "Caption 1", > > context.delayed.externalfigure({"cow"},{width = "50mm"}), > > "Caption 2", > > context.delayed.externalfigure({"cow"},{width = "50mm"}), > > "Caption 3", > > context.delayed.externalfigure({"cow"},{width = "50mm"}), > > "Caption 4" > > ) > > context.stopcombination() > > context.stopplacefigure() > > > > (this is why encoding complex documents completely in a scrtipt > > language is non trivial and why for instance these template systems > > are there because these accumulate) > > Another solution is to use the content and caption blocks for each > combination entry. > > \starttext > > \startluacode > > context.startplacefigure({title = "Figure"}) > context.startcombination({nx = 1, ny = 1}) > context.startcontent() > context.externalfigure({"cow"},{width = "50mm"}) > context.stopcontent() > context.startcaption() > context("Caption 1") > context.stopcaption() > context.stopcombination() > context.stopplacefigure() > > \stopluacode > > \stoptext > > Wolfgang > >