1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
%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 / Hans Hagen \& Ton Otten}]
%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 function strip(s)
return "\times10^{"..(s:gsub("%+*0*","")).."}"
end
function metapost.format_n(fmt,str)
fmt = fmt:gsub("@","%%")
local initial, format, final = fmt:match("^(.-)(%%.-[%a])(.-)$")
if format then
str = fmt:format(str)
str = str:gsub("e(.-)$",strip)
str = ("%s\\mathematics{%s}%s"):format(initial,str,final)
elseif not fmt:find("%%") then
str = ("%"..fmt):format(str)
str = str:gsub("e(.-)$",strip)
str = ("\\mathematics{%s}"):format(str)
end
tex.sprint(str)
end
\stopluacode
\unexpanded\long\def\MPgraphformat#1#2{\ctxlua{metapost.format_n("#1","#2")}}
\startMPinclusions
input graph.mp ;
vardef escaped_format(expr s) =
"" for n=1 upto length(s) : &
if ASCII substring (n,n+1) of s = 37 :
"@"
else :
substring (n,n+1) of s
fi
endfor
enddef ;
vardef dofmt_@\#(expr f, x) =
textext("\MPgraphformat{"&escaped_format(f)&"}{"&(if string x : x else: decimal x fi)&"}")
enddef ;
% vardef format(expr f, x) =
% textext("\MPgraphformatN{"&escaped_format(f)&"}{"&(if string x : x else: decimal x fi)&"}")
% enddef;
% vardef Mformat(expr f, x) =
% format(f,x)
% enddef;
\stopMPinclusions
\endinput
|