3 Code to generate beams for TeX
11 #include "symtable.hh"
17 Lookup::beam_element (int sidx, int widx, Real slope) const
19 Symbol bs=(*symtables_)("beamslopes")->lookup ("slope");
24 bs.tex = substitute_args (bs.tex,args);
27 bs.dim.x() = Interval (0,width);
28 bs.dim.y() = Interval (0,width*slope);
32 // ugh.. hard wired tex-code.
37 WARN << "beam steeper than 0.5 (" << s << ")\n";
41 int i = int (rint (s * 20.0));
51 Lookup::rule_symbol (Real height, Real width) const
53 Symbol bs=(*symtables_)("beamslopes")->lookup ("horizontal");
55 args.push (print_dimen (height));
56 args.push (print_dimen (width));
57 bs.tex = substitute_args (bs.tex,args);
58 bs.dim.x() = Interval (0,width);
59 bs.dim.y() = Interval (0,height);
64 Lookup::beam (Real &slope, Real width) const
66 int sidx = slope_index (slope);
68 return rule_symbol (2 PT, width);
70 WARN<<"Beam too narrow. (" << print_dimen (width) <<")\n";
73 Real elemwidth = 64 PT;
78 while (elemwidth > width) {
82 Real overlap = elemwidth/4;
83 Real last_x = width - elemwidth;
85 Atom elem (beam_element (sidx, widx, slope));
90 a.translate (Offset (x-overlap, (x-overlap)*slope));
92 x += elemwidth - overlap;
95 a.translate (Offset (last_x, (last_x) * slope));
99 ret.tex = m.TeX_string();
100 ret.dim.y() = Interval (0,width*slope);
101 ret.dim.x() = Interval (0,width);