Here is a minimum example of a problem that I have in getting curly braces printed in METAPOST in code that is generated by lua. Any help is welcome. \usemodule[scite] \setupxml [entities=yes] \startluacode function warn( ... ) texio.write_nl("-----> " .. string.format(...)) end local function mpLabelString( xmlLabelString) -- Returns a string where each " is replaced by a METAPOST compatible result, except for outer double quotes" rep = { [1] = { "\"", "\"&ditto&\"" }, -- DOESN'T WORK: [2] = { "\\", "\\\\" }, } local tmpString = string.formatters( "%!tex!", xmlLabelString) warn( "STRING.FORMAT XML \"%s\"", xmlLabelString) warn( "STRING.FORMAT TeX-ed \"%s\"", tmpString) warn( "STRING.FORMAT Replaced \"%s\"", lpeg.replacer(rep):match(tmpString)) return lpeg.replacer(rep):match(tmpString) end function warnAndConTeXt( ...) warn( ...) context( ...) end function moduledata.test( filename) local labelString context( "The string to typeset is:\\par\\type-{Label} \"a\" [Text]!-") context( "\\par The attempts are:") context( "\\par1. \\type-Label Text-") context( "\\par2. \\type-Label [Text]!-") context( "\\par3. \\type-Label \"a\" [Text]!-") context( "\\par4. \\type-{Label} [Text]!-") context( "\\par5. \\type-{Label} \"a\" [Text]!-") context.startMPpage { instance = "doublefun" } context( "picture pic;") labelString = "1. Label Text OK" warnAndConTeXt( "pic := Foo( 0, 0, 150, 50, \"%s\");", mpLabelString( labelString)) labelString = "2. Label [Text]! OK" warnAndConTeXt( "pic := Foo( 0, -75, 150, 50, \"%s\");", mpLabelString( labelString)) labelString = "3. Label \"a\" [Text]! OK" warnAndConTeXt( "pic := Foo( 0, -150, 150, 50, \"%s\");", mpLabelString( labelString)) labelString = "4. {Label} [Text]! MISSING curly braces" warnAndConTeXt( "pic := Foo( 0, -225, 150, 50, \"%s\");", mpLabelString( labelString)) labelString = "5. {Label} \"a\" [Text]! MISSING curly braces" warnAndConTeXt( "pic := Foo( 0, -300, 150, 50, \"%s\");", mpLabelString( labelString)) context( "drawdot (0,0) withpen pencircle scaled 4 withcolor red;") context.stopMPpage() end \stopluacode \usemodule[article-basic] %\enabletrackers[metapost.tracingall,metapost.lua,metapost.runs,metapost.textexts,metapost.scrintersectionPoints,metapost.runs,metapost.graphics,metapost.terminal] \starttext \definefontfamily[mainface][rm][Optima] \setupbodyfont[mainface,10pt] \startMPinclusions[+]{doublefun} \stopMPinclusions \startMPdefinitions{doublefun} vardef makeTeXLabel( expr w, h, name) = show "NAME makeTeXLabel:", name; save p; picture p ; save s; string s; s := "\framed{" & name & "}"; % Curly braces will be missing. I need this to work. % s := "\type-" & name & "-"; % Curly braces are displayed, but this must become a vbox in the end, so can't use it show "SCAN:", s; p := textext( s); p enddef; vardef Foo( expr xpos, ypos, width, height, str) = show "NAME Foo:", str; % Backslashes are already gone here save pic; picture pic; pic := makeTeXLabel( width, height, str) shifted (xpos, ypos); draw pic; pic enddef; \stopMPdefinitions \ctxlua{moduledata.test("My ArchiMate Model Export BES.xml")} \typefile[option=TEX]{test11.tex} \stoptext The question is: how can I get this to work? The strings that have to be printed inside the METAPOST picture come from an XML and can contain about anything. But in the end that string will have to be vertically typeset as a paragraph, hence I cannot use \type (which works).