%D \module %D [ file=m-graph, %D version=2008.09.08, %D title=\CONTEXT\ Extra Modules, %D subtitle=\METAPOST\ graph module support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % We just assume lua specification instead of the graph ones that % are limited by what mp can do. We support @ as replacement for % the percent symbol. We also add a specifier when no one is given. \startluacode local format, gsub, find, match = string.format, string.gsub, string.find, string.match local simplify = true local function strip(n,e) -- get rid of e(0) -- get rid of e(+*) e = gsub(e,"^+","") -- remove leading zeros e = gsub(e,"^([+-]*)0+(%d)","%1%2") if not simplify then -- take it as it is elseif n == "1" then return format("10^{%s}",e) end return format("%s\\times10^{%s}",n,e) end function metapost.format_n(fmt,str) fmt = gsub(fmt,"@","%%") local initial, hasformat, final = match(fmt,"^(.-)(%%.-[%a])(.-)$") if hasformat then str = format(fmt,str) str = gsub(str,"(.-)e(.-)$",strip) str = format("%s\\mathematics{%s}%s",initial,str,final) elseif not find(fmt,"%%") then str = format("%"..fmt,str) str = gsub(str,"(.-)e(.-)$",strip) str = format("\\mathematics{%s}",str) end context(str) end \stopluacode \unexpanded\def\MPgraphformat#1#2{\ctxlua{metapost.format_n("#1","#2")}} % We could also delegate parsing using lower level plugins. \startMPextensions if unknown Fe_plus : picture Fe_plus ; Fe_plus := textext("+") ; fi ; if unknown context_grap: input "mp-grap.mpiv" ; fi ; \stopMPextensions \continueifinputfile{m-graph.mkiv} \starttext \startMPpage label(format("@g","1e-8"), (0, 0)) ; label(format("@g","1e+8"), (2cm, 0)) ; label(format("@g","1e-10"), (0, -0.5cm)) ; label(format("@g","1e+10"), (2cm,-0.5cm)) ; label(format("@g","1e-12"), (0, -1.0cm)) ; label(format("@g","1e+12"), (2cm,-1.0cm)) ; label(format("@g","1e-0"), (0, -1.5cm)) ; label(format("@g","1e+0"), (2cm,-1.5cm)) ; label(format("@g","1"), (0, -2.0cm)) ; label(format("@g","1"), (2cm,-2.0cm)) ; label(format("@g","1e-102"),(0, -2.5cm)) ; label(format("@g","1e+102"),(2cm,-2.5cm)) ; \stopMPpage % \startMPpage % draw begingraph(3in,2in); % gdraw "t:/metapost/grphdata/agepop91.d"; % endgraph; % \stopMPpage % \startMPpage % draw begingraph(3in,2in); % gdraw "agepop91.d" plot btex $\bullet$ etex; % endgraph; % \stopMPpage % \startMPpage % draw begingraph(3in,2in); % glabel.lft(btex \vbox{\hbox{Population} \hbox{in millions}} etex, OUT); % glabel.bot(btex Age in years etex, OUT); % gdraw "agepopm.d"; % endgraph; % \stopMPpage % \startMPpage % draw begingraph(3in,2in); % glabel.lft(btex \vbox{\hbox{Population} \hbox{in millions}} etex, OUT); % glabel.bot(btex Age in years etex, OUT); % setrange(origin, whatever,whatever); % gdraw "agepopm.d"; % endgraph; % \stopMPpage % \startMPpage % draw begingraph(2.3in,2in); % setcoords(log,log); % glabel.lft(btex Seconds etex,OUT); % glabel.bot(btex Matrix size etex, % OUT); % gdraw "matmul.d" dashed evenly; % glabel.ulft(btex Standard etex,8); % gdraw "matmul.d"; % glabel.lrt(btex Strassen etex,7); % endgraph; % \stopMPpage % \startMPpage % draw begingraph(6.5cm,4.5cm); % setrange(80,0, 90,whatever); % glabel.bot(btex Year etex, OUT); % glabel.lft(btex \vbox{\hbox{Emissions in} \hbox{thousands of} % \hbox{metric tons} \hbox{(heavy line)}}etex, OUT); % gdraw "lead.d" withpen pencircle scaled 1.5pt; % autogrid(,otick.lft); % setcoords(linear,linear); % setrange(80,0, 90,whatever); % glabel.rt(btex \vbox{\hbox{Micrograms} \hbox{per cubic} % \hbox{meter of air} \hbox{(thin line)}}etex, OUT); % gdraw "lead.d"; % autogrid(otick.bot,otick.rt); % endgraph; % \stopMPpage \stoptext