[Dev-luatex] MPlib and btex...etex

Graham Douglas graham.douglas at readytext.co.uk
Sun May 2 11:02:28 CEST 2010


taco wrote:
> Graham Douglas wrote:
>>
>> Many thanks. What would I need to implement in order to include
>> TeX material in mp code? I guess Hans has written some wizardry for 
>> getting this to work in ConTeXt?
>>
>> Any pointers would be appreciated.
> 
> Have a look at the mlib-pps.* files from the context distribution.
> 
> The basic approach is to typeset the label using normal TeX-style
> boxes and to insert a placeholder in the metapost input instead of
> the actual label. That placeholder is then later replaced by the
> typeset label during the mp-to-pdf conversion step.
> 
> Best wishes,
> Taco
> 
> 
> __________ Information from ESET Smart Security, version of virus 
> signature database 5078 (20100501) __________
> 
> The message was checked by ESET Smart Security.
> 
> http://www.eset.com
> 
> 
> 
> 

Hi Taco

Great, many thanks for the pointers.

On another MPlib/MetaPost-related issue + apologies
if this is off-topic, but I'm getting out of memory errors with the
example below -- some Hilbert curve code I found on the web.
The memory settings below are quite large so I'm a bit surprised
that this is failing.

Are you able to run this example?

The line to control this is at the end of the code

draw hilbertPath(3.72, 6);

Thank you, as ever, for sharing your time and expertise.

Best wishes

Graham

================== out of memory warning =====================

[This is MetaPost, Version 1.209

! MetaPost capacity exceeded, sorry [main mem
ory size=10000000].
hilbertPath->...f.p101;hilb:=p100&P100--P101&p101;

                                           P102:=P101shifted((vs+0.5v...
<*> ...
0, hoehe)--cycle; draw hilbertPath(3.72, 6)

                ; endfig; bye

=================== code example ========================

local function finder(name, mode, ftype)
local found
if mode=="w" then found = name else
found = kpse.find_file(name,ftype) end
if found then
print("MPlib finder: " .. name .. " -> " .. found)
end
return found
end

mp = mplib.new ( {
      hash_size = 10000000,
      main_memory = 10000000,
      param_size = 10000000,
	ini_version=false,
	mem_name=plain,
      find_file = finder,
} )


if mp then res=mp:execute("u:=25;                    % 25 = 25bp = 25 
PostP102cript points = 25/72 in
wi:=10;                   % width  in units u
he:=10;                   % height in units u
hoehe:=he*u;              % height
breite:=wi*u;             % width
path p[];
pair P[], versch, vs;

P0:=(6.875, hoehe-6.875);     % starting point top left

vardef hilbertPath(expr s, n) =
   %
   %  recursively calculates and returns path ``hilb''
   %  of segment length s and depth n
   %
   pair versch;
   path hilb, hilbOLD;
   versch:=(s, 0);
   % --- Calculation of path ``hilb'' ---
   if n=0:
     hilb:=P0;
   else:
     hilbOLD:=hilbertPath(s, n-1);
     p100:=hilbOLD reflectedabout(P0, P0 shifted (1, -1));
     P100:=point length(p100) of p100;
     vs:=P100-P0;
     p101:=hilbOLD shifted (vs+versch);
     P101:=point 0 of p101;
     hilb:=p100&P100--P101&p101;
     P102:=P101 shifted ((vs+.5versch) rotated -90);
     p102:=reverse hilb reflectedabout(P102, P102 shifted (1,0));
     hilb:=hilb&point length(hilb) of hilb--point 0 of p102&p102;
   fi
   % --- End: Calculation of path ``hilb'' ---
   hilb         % return path ``hilb''
enddef;

beginfig(1)
   draw (0, 0)--(breite, 0)--(breite, hoehe)--(0, hoehe)--cycle;

   draw hilbertPath(3.72, 6);  % Draw Hilbert curve of segment length
                               % 3.72 PostScript points and depth 6

   % draw hilbertPath(2, 7);   % maximum possible depth
                               % with main memory size=1000001
endfig;
bye")



More information about the dev-luatex mailing list