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

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to