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