tioga 1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. data/Tioga_README +372 -0
  2. data/lgpl.txt +504 -0
  3. data/split/Dtable/defs.h +33 -0
  4. data/split/Dtable/dtable.c +1928 -0
  5. data/split/Dtable/dtable_intern.h +144 -0
  6. data/split/Dtable/dvector.h +61 -0
  7. data/split/Dtable/extconf.rb +4 -0
  8. data/split/Dtable/include/dtable.h +35 -0
  9. data/split/Dtable/lib/Dtable_extras.rb +90 -0
  10. data/split/Dtable/namespace.h +47 -0
  11. data/split/Dtable/safe_double.h +104 -0
  12. data/split/Dtable/symbols.c +92 -0
  13. data/split/Dtable/symbols.h +52 -0
  14. data/split/Dvector/defs.h +33 -0
  15. data/split/Dvector/dvector.c +5486 -0
  16. data/split/Dvector/dvector_intern.h +142 -0
  17. data/split/Dvector/extconf.rb +4 -0
  18. data/split/Dvector/include/dvector.h +61 -0
  19. data/split/Dvector/lib/Dvector_extras.rb +328 -0
  20. data/split/Dvector/lib/Numeric_extras.rb +134 -0
  21. data/split/Dvector/namespace.h +47 -0
  22. data/split/Dvector/safe_double.h +104 -0
  23. data/split/Dvector/symbols.c +92 -0
  24. data/split/Dvector/symbols.h +52 -0
  25. data/split/Flate/defs.h +33 -0
  26. data/split/Flate/extconf.rb +19 -0
  27. data/split/Flate/flate.c +156 -0
  28. data/split/Flate/flate_intern.h +97 -0
  29. data/split/Flate/include/flate.h +98 -0
  30. data/split/Flate/namespace.h +47 -0
  31. data/split/Flate/safe_double.h +104 -0
  32. data/split/Flate/symbols.c +92 -0
  33. data/split/Flate/symbols.h +52 -0
  34. data/split/Function/defs.h +33 -0
  35. data/split/Function/dvector.h +61 -0
  36. data/split/Function/extconf.rb +4 -0
  37. data/split/Function/function.c +988 -0
  38. data/split/Function/joint_qsort.c +258 -0
  39. data/split/Function/lib/Function_extras.rb +44 -0
  40. data/split/Function/namespace.h +47 -0
  41. data/split/Function/safe_double.h +104 -0
  42. data/split/Function/symbols.c +92 -0
  43. data/split/Function/symbols.h +52 -0
  44. data/split/Tioga/axes.c +774 -0
  45. data/split/Tioga/defs.h +33 -0
  46. data/split/Tioga/dtable.h +35 -0
  47. data/split/Tioga/dvector.h +61 -0
  48. data/split/Tioga/extconf.rb +4 -0
  49. data/split/Tioga/figures.c +672 -0
  50. data/split/Tioga/figures.h +855 -0
  51. data/split/Tioga/flate.h +98 -0
  52. data/split/Tioga/init.c +524 -0
  53. data/split/Tioga/lib/Arcs_and_Circles.rb +64 -0
  54. data/split/Tioga/lib/ColorConstants.rb +274 -0
  55. data/split/Tioga/lib/Colorbars.rb +10 -0
  56. data/split/Tioga/lib/Colormaps.rb +105 -0
  57. data/split/Tioga/lib/Coordinate_Conversions.rb +194 -0
  58. data/split/Tioga/lib/Creating_Paths.rb +94 -0
  59. data/split/Tioga/lib/Doc.rb +91 -0
  60. data/split/Tioga/lib/Executive.rb +515 -0
  61. data/split/Tioga/lib/FigMkr.rb +2224 -0
  62. data/split/Tioga/lib/FigureConstants.rb +125 -0
  63. data/split/Tioga/lib/Figures_and_Plots.rb +268 -0
  64. data/split/Tioga/lib/Images.rb +278 -0
  65. data/split/Tioga/lib/Legends.rb +190 -0
  66. data/split/Tioga/lib/MarkerConstants.rb +122 -0
  67. data/split/Tioga/lib/Markers.rb +129 -0
  68. data/split/Tioga/lib/Page_Frame_Bounds.rb +567 -0
  69. data/split/Tioga/lib/Rectangles.rb +94 -0
  70. data/split/Tioga/lib/Shading.rb +100 -0
  71. data/split/Tioga/lib/Special_Paths.rb +307 -0
  72. data/split/Tioga/lib/Strokes.rb +129 -0
  73. data/split/Tioga/lib/TeX_Text.rb +454 -0
  74. data/split/Tioga/lib/TexPreamble.rb +358 -0
  75. data/split/Tioga/lib/Titles_and_Labels.rb +306 -0
  76. data/split/Tioga/lib/Transparency.rb +89 -0
  77. data/split/Tioga/lib/Using_Paths.rb +164 -0
  78. data/split/Tioga/lib/Utils.rb +74 -0
  79. data/split/Tioga/lib/X_and_Y_Axes.rb +749 -0
  80. data/split/Tioga/lib/irb_tioga.rb +122 -0
  81. data/split/Tioga/lib/tioga.rb +1 -0
  82. data/split/Tioga/lib/tioga_ui.rb +5 -0
  83. data/split/Tioga/lib/tioga_ui_cmds.rb +793 -0
  84. data/split/Tioga/makers.c +989 -0
  85. data/split/Tioga/mk_tioga_sty.rb +53 -0
  86. data/split/Tioga/namespace.h +47 -0
  87. data/split/Tioga/pdf_font_dicts.c +18253 -0
  88. data/split/Tioga/pdfcolor.c +486 -0
  89. data/split/Tioga/pdfcoords.c +505 -0
  90. data/split/Tioga/pdffile.c +342 -0
  91. data/split/Tioga/pdfimage.c +536 -0
  92. data/split/Tioga/pdfpath.c +914 -0
  93. data/split/Tioga/pdfs.h +229 -0
  94. data/split/Tioga/pdftext.c +443 -0
  95. data/split/Tioga/safe_double.h +104 -0
  96. data/split/Tioga/symbols.c +92 -0
  97. data/split/Tioga/symbols.h +52 -0
  98. data/split/Tioga/texout.c +380 -0
  99. data/split/defs.h +33 -0
  100. data/split/extconf.rb +107 -0
  101. data/split/mkmf2.rb +1612 -0
  102. data/split/namespace.h +47 -0
  103. data/split/safe_double.h +104 -0
  104. data/split/scripts/tioga +4 -0
  105. data/split/symbols.c +92 -0
  106. data/split/symbols.h +52 -0
  107. data/tests/dtable_test.data +6 -0
  108. data/tests/dvector_read_test.data +1 -0
  109. data/tests/dvector_test.data +101 -0
  110. data/tests/tc_Dtable.rb +221 -0
  111. data/tests/tc_Dvector.rb +791 -0
  112. data/tests/tc_FMkr.rb +162 -0
  113. data/tests/tc_Flate.rb +45 -0
  114. data/tests/tc_Function.rb +111 -0
  115. data/tests/ts_Tioga.rb +38 -0
  116. metadata +163 -0
@@ -0,0 +1,190 @@
1
+ # Legends.rb
2
+
3
+ module Tioga
4
+
5
+ # These are the methods and attributes for plot legends.
6
+
7
+ class Legends < Doc < FigureMaker
8
+
9
+ # :call-seq:
10
+ # reset_legend_info
11
+ #
12
+ # Clears the current legend information.
13
+ def reset_legend_info
14
+ end
15
+
16
+ # Creates a vertical space of _dy_ text heights in the legend.
17
+ def save_legend_separator(dy)
18
+ end
19
+
20
+ # :call-seq:
21
+ # legend_height
22
+ #
23
+ # Returns the height (in units of text heights) of the currently saved legend information.
24
+ def legend_height
25
+ end
26
+
27
+ # :call-seq:
28
+ # show_legend
29
+ #
30
+ # Shows the legend in the current frame.
31
+ def show_legend
32
+ end
33
+
34
+ =begin rdoc
35
+ :call-seq:
36
+ save_legend_info(text)
37
+ save_legend_info(dict)
38
+
39
+ Saves information for later use in creating a legend. If called with a string as argument,
40
+ is equivalent to calling with a dictionary having a single entry with key 'text' and value the string.
41
+
42
+ Dictionary Entries
43
+ 'text' => a_string # text of the legend
44
+ 'line_color' => a_color # defaults to self.line_color
45
+ 'line_width' => a_float # defaults to self.line_width
46
+ 'line_cap' => a_line_cap # defaults to self.line_cap
47
+ 'line_type' => a_line_type # defaults to self.line_type
48
+ 'dy' => a_float # defaults to self.legend_text_dy
49
+ 'marker' => a_marker # defaults to nil
50
+ 'marker_color' => a_color # defaults to self.line_color
51
+ 'marker_scale' => a_float # defaults to 0.5
52
+ 'marker_dict' => a_dictionary # defaults to nil
53
+
54
+ The dictionary holding the information is appended to the legend_info array. If the 'marker' entry is present,
55
+ then the marker with the given 'marker_color' and 'marker_scale' will be shown in the middle of the
56
+ legend line. If the 'marker_dict' entry is present, it will have the values for 'x' and 'y' set to the location
57
+ of the middle of the legend line and then it will be passed to the show_marker method. This gives you the option of using
58
+ the full range of marker functionality in legends -- perhaps you'd like to use a line marker that is rotated, stretched, filled in one color, and stroked in another!
59
+
60
+ =end
61
+ def save_legend_info(arg)
62
+ end
63
+
64
+ # :call-seq:
65
+ # legend_defaults
66
+ # legend_defaults = a_dictionary
67
+ #
68
+ # This dictionary holds defaults for +show_plot_with_legend+.
69
+ def legend_defaults
70
+ end
71
+
72
+ # :call-seq:
73
+ # legend_info
74
+ #
75
+ # The current array of saved legend dictionaries. See save_legend_info for details.
76
+ def legend_info
77
+ end
78
+
79
+ # :call-seq:
80
+ # legend_line_x0
81
+ # legend_line_x0 = a_float
82
+ #
83
+ # The x position for the start of lines in a legend, measured in units
84
+ # of text height. The corresponding position in figure coordinates is
85
+ # (legend_line_x0 * legend_scale * default_text_height_dx).
86
+ def legend_line_x0
87
+ end
88
+
89
+ # :call-seq:
90
+ # legend_line_x1
91
+ # legend_line_x1 = a_float
92
+ #
93
+ # The x position for the end of lines in a legend, measured in units
94
+ # of text height. The corresponding position in figure coordinates is
95
+ # (legend_line_x1 * legend_scale * default_text_height_dx).
96
+ def legend_line_x1
97
+ end
98
+
99
+ # :call-seq:
100
+ # legend_line_dy
101
+ # legend_line_dy = a_float
102
+ #
103
+ # Each line in a legend is shifted up from the text baseline by this amount
104
+ # measured in units of text height. The corresponding distance in figure coordinates is
105
+ # (legend_line_dy * legend_scale * default_text_height_dy).
106
+ def legend_line_dy
107
+ end
108
+
109
+ # :call-seq:
110
+ # legend_text_width
111
+ # legend_text_width = a_float
112
+ #
113
+ # The assumed width of text in a legend, measured in units
114
+ # of text height. The corresponding width in figure coordinates is
115
+ # (legend_text_width * legend_scale * default_text_height_dx).
116
+ # The figure bounding box is expanded if necessary to provide for this
117
+ # much space. If legend_text_width is negative, then the system will
118
+ # provide a default value depending on the placement of the legend.
119
+ def legend_text_width
120
+ end
121
+
122
+ # :call-seq:
123
+ # legend_text_xstart
124
+ # legend_text_xstart = a_float
125
+ #
126
+ # The x position for the start of text in a legend, measured in units
127
+ # of text height. The corresponding position in figure coordinates is
128
+ # (legend_text_xstart * legend_scale * default_text_height_dx).
129
+ def legend_text_xstart
130
+ end
131
+
132
+ # :call-seq:
133
+ # legend_text_ystart
134
+ # legend_text_ystart = a_float
135
+ #
136
+ # The y position for the start of text in a legend, measured in units
137
+ # of text height. The corresponding position in figure coordinates is
138
+ # (legend_text_ystart * legend_scale * default_text_height_dy).
139
+ def legend_text_ystart
140
+ end
141
+
142
+ # :call-seq:
143
+ # legend_text_dy
144
+ # legend_text_dy = a_float
145
+ #
146
+ # The distance in y to move down after a legend line entry, measured in
147
+ # units of text height. The corresponding distance in figure coordinates is
148
+ # (legend_text_dy * legend_scale * default_text_height_dy).
149
+ def legend_text_dy
150
+ end
151
+
152
+ # :call-seq:
153
+ # legend_line_width
154
+ # legend_line_width = a_float
155
+ #
156
+ # If this is non-negative, then it is used as the line_width attribute when
157
+ # stroking the lines in a legend. If it is negative, then each legend
158
+ # line is stroked using the value of the line_width attribute at the time
159
+ # the legend information for the entry was saved by save_legend_info.
160
+ def legend_line_width
161
+ end
162
+
163
+ # :call-seq:
164
+ # legend_scale
165
+ # legend_scale = a_float
166
+ #
167
+ # Used for determining positions in the legend and for showing legend text.
168
+ def legend_scale
169
+ end
170
+
171
+ # :call-seq:
172
+ # legend_alignment
173
+ # legend_alignment = an_alignment
174
+ #
175
+ # Used as the #alignment value in showing legend text.
176
+ def legend_alignment
177
+ end
178
+
179
+ # :call-seq:
180
+ # legend_justification
181
+ # legend_justification = a_justification
182
+ #
183
+ # Used as the #justification value in showing legend text.
184
+ def legend_justification
185
+ end
186
+
187
+
188
+
189
+ end # class
190
+ end # module Tioga
@@ -0,0 +1,122 @@
1
+ module Tioga
2
+
3
+ # = PDF Fonts
4
+ #
5
+ # Text is normally sent to TeX, allowing you to use any font that can be accessed from your TeX documents.
6
+ # However, in certain special cases you may need to use text in a "graphical" manner and have it processed directly in the
7
+ # PDF output. In that case, tioga needs to have metric information for the font (in the form of an "afm" file), and any
8
+ # output device needs to have access to the font definitions. Providing a general solution to this is still a bit messy, and for the
9
+ # expected use in tioga, I decided that it wasn't worth it. All PDF devices are guaranteed to have the 14 standard Adobe
10
+ # fonts, so they are easy to provide -- and that's what I've done.
11
+ #
12
+ # Here are the abc's of the PDF fonts, clockwise from the top: Times_Roman, Times_Italic, Times_Bold, Times_BoldItalic, Helvetica, Helvetica_Oblique, Helvetica_Bold, Helvetica_BoldOblique, Courier, Courier_Oblique, Courier_Bold, Courier_BoldOblique, Symbol, and ZapfDingbats.
13
+ #
14
+ # http://theory.kitp.ucsb.edu/~paxton/tioga_jpegs/pdf_fonts.jpg
15
+ #
16
+ # ---
17
+ #
18
+ # = Markers
19
+ #
20
+ # Any character from any of the PDF fonts can be used as a marker.
21
+ # The predefined marker names are provided as a convenience, not as an exhaustive list. Markers are specified by
22
+ # either a font number and character code (for filled characters), or by a font number, character code, and line
23
+ # width (for stroked characters). In the following figure many of the markers appear in both a filled form, such
24
+ # as 'Arrow', and a stroked form, such as 'ArrowOpen'. The color of filled markers is determined by the current
25
+ # setting of fill_color, and, similarly, stroke_color determines the color of stroked markers.
26
+ #
27
+ # http://theory.kitp.ucsb.edu/~paxton/tioga_jpegs/Marker_Names.jpg
28
+ #
29
+ # Here is the full set of options from the ZapfDingbats font. If you would like to use the jet plane as a marker,
30
+ # just write [ ZapfDingbats, 40 ] where you would have used one of the predefined marker names.
31
+ #
32
+ # http://theory.kitp.ucsb.edu/~paxton/tioga_jpegs/dingbats.jpg
33
+ #
34
+
35
+ module MarkerConstants
36
+
37
+ Times_Roman = 1
38
+ Times_Italic = 2
39
+ Times_Bold = 3
40
+ Times_BoldItalic = 4
41
+ Helvetica = 5
42
+ Helvetica_Oblique = 6
43
+ Helvetica_Bold = 7
44
+ Helvetica_BoldOblique = 8
45
+ Courier = 9
46
+ Courier_Oblique = 10
47
+ Courier_Bold = 11
48
+ Courier_BoldOblique = 12
49
+ Symbol = 13
50
+ ZapfDingbats = 14
51
+
52
+ Arrow = [ZapfDingbats, 0334]
53
+ Arrowhead = [ZapfDingbats, 0344]
54
+ Asterisk = [ZapfDingbats, 0135]
55
+ Bar = [ZapfDingbats, 0171]
56
+ BarThick = [ZapfDingbats, 0172]
57
+ BarThin = [ZapfDingbats, 0170]
58
+ Box = [ZapfDingbats, 0156]
59
+ Bullet = [ZapfDingbats, 0154]
60
+ Check = [ZapfDingbats, 0064]
61
+ Circle = [ZapfDingbats, 0154]
62
+ Club = [ZapfDingbats, 0250]
63
+ Cross = [ZapfDingbats, 0072]
64
+ Diamond = [ZapfDingbats, 0251]
65
+ Semicircle = [ZapfDingbats, 0167]
66
+ Heart = [ZapfDingbats, 0252]
67
+ HeartWide = [ZapfDingbats, 0244]
68
+ Spade = [ZapfDingbats, 0253]
69
+ Square = [ZapfDingbats, 0156]
70
+ Star = [ZapfDingbats, 0110]
71
+ TriangleDown = [ZapfDingbats, 0164]
72
+ TriangleUp = [ZapfDingbats, 0163]
73
+ Plus = [ZapfDingbats, 0072]
74
+ Times = [ZapfDingbats, 0066]
75
+
76
+ ArrowOpen = [ZapfDingbats, 0334, 0.5]
77
+ ArrowheadOpen = [ZapfDingbats, 0344, 0.5]
78
+ AsteriskOpen = [ZapfDingbats, 0135, 0.5]
79
+ BarOpen = [ZapfDingbats, 0172, 0.5]
80
+ BarThickOpen = [ZapfDingbats, 0172, 0.5]
81
+ BarThinOpen = [ZapfDingbats, 0170, 0.5]
82
+ BoxOpen = [ZapfDingbats, 0156, 0.5]
83
+ BulletOpen = [ZapfDingbats, 0154, 0.5]
84
+ CheckOpen = [ZapfDingbats, 0064, 0.5]
85
+ CircleOpen = [ZapfDingbats, 0154, 0.5]
86
+ ClubOpen = [ZapfDingbats, 0250, 0.5]
87
+ DiamondOpen = [ZapfDingbats, 0251, 0.5]
88
+ SemicircleOpen = [ZapfDingbats, 0167, 0.5]
89
+ HeartOpen = [ZapfDingbats, 0252, 0.5]
90
+ HeartWideOpen = [ZapfDingbats, 0244, 0.5]
91
+ SpadeOpen = [ZapfDingbats, 0253, 0.5]
92
+ SquareOpen = [ZapfDingbats, 0156, 0.5]
93
+ StarOpen = [ZapfDingbats, 0110, 0.5]
94
+ TriangleDownOpen = [ZapfDingbats, 0164, 0.5]
95
+ TriangleUpOpen = [ZapfDingbats, 0163, 0.5]
96
+ PlusOpen = [ZapfDingbats, 0072, 0.5]
97
+ TimesOpen = [ZapfDingbats, 0066, 0.5]
98
+ Circled1 = [ZapfDingbats, 0300]
99
+ Circled2 = [ZapfDingbats, 0301]
100
+ Circled3 = [ZapfDingbats, 0302]
101
+ Circled4 = [ZapfDingbats, 0303]
102
+ Circled5 = [ZapfDingbats, 0304]
103
+ Circled6 = [ZapfDingbats, 0305]
104
+ Circled7 = [ZapfDingbats, 0306]
105
+ Circled8 = [ZapfDingbats, 0307]
106
+ Circled9 = [ZapfDingbats, 0310]
107
+ Circled10 = [ZapfDingbats, 0311]
108
+ SolidBall1 = [ZapfDingbats, 0312]
109
+ SolidBall2 = [ZapfDingbats, 0313]
110
+ SolidBall3 = [ZapfDingbats, 0314]
111
+ SolidBall4 = [ZapfDingbats, 0315]
112
+ SolidBall5 = [ZapfDingbats, 0316]
113
+ SolidBall6 = [ZapfDingbats, 0317]
114
+ SolidBall7 = [ZapfDingbats, 0320]
115
+ SolidBall8 = [ZapfDingbats, 0321]
116
+ SolidBall9 = [ZapfDingbats, 0322]
117
+ SolidBall10 = [ZapfDingbats, 0323]
118
+ Hand = [ZapfDingbats, 0052]
119
+ OtherHand = [ZapfDingbats, 0053]
120
+
121
+ end
122
+ end # module Tioga
@@ -0,0 +1,129 @@
1
+ # Markers.rb
2
+
3
+ module Tioga
4
+
5
+ # These are the methods for using text as markers in PDF graphics. See also the predefined markers in #MarkerConstants.
6
+
7
+ class Markers < Doc < FigureMaker
8
+
9
+ =begin rdoc
10
+ This routine takes care of text that is being used as a graphical element and consequently is going
11
+ straight to PDF rather than to TeX for normal typesetting (see show_text).
12
+
13
+ The most common use of markers is probably to mark points on plots (hence the name). The ZapfDingbats font
14
+ provides a useful collection for this purpose, and several glyphs from it are provided as predefined markers
15
+ (see #MarkerConstants).
16
+ A marker of this sort is represented either by an array of [ font_number, character_code ] for filled markers, or by
17
+ an array holding [ font_number, character_code, line_width ] for stroked markers. Often the same character
18
+ can be used both for a filled marker and for an open one. For example, the predefined markers include
19
+ Box and Circle (filled) as well as the same glyphs as BoxOpen and CircleOpen (stroked).
20
+
21
+ For the primary purpose of marking points on plots, we could stop with just single characters taken from
22
+ ZapfDingbats. However, for not much more effort, we can broaden this to allow strings of characters
23
+ and fonts other than the dingbats. But the usefulness of this is limited given that typesetting is
24
+ properly done using TeX, and the problems of dealing with fonts in general are notoriously awful.
25
+ So the compromise is to allow markers using any of the 14 standard Adobe PDF
26
+ fonts which are guaranteed to be supported by all PDF viewers and to toss in for good measure some
27
+ Computer Modern fonts which are likely to be around since they come with TeX. These fonts are predefined
28
+ in the FigureConstants module. Any character (or string of characters) from any of these fonts can be used as a marker.
29
+
30
+ Because markers are sent to PDF rather than TeX, they are limited typographically but powerful graphically.
31
+ In addition to specifying color, scale, and rotatation, as you can for TeX text, you can also stretch
32
+ the characters either along the baseline ('horizontal_scale') or perpendicular to it ('vertical_scale').
33
+ You can slant the individual characters ('italic_angle') or shift the baseline along the text ('ascent_angle').
34
+ Finally, you can specify the 'rendering_mode' for the marker to be any combination of #fill, #stroke, and #clip.
35
+ (So for next Valentine's Day you can take a Heart marker, scale it up, and use it to clip a JPEG image of yourself
36
+ to send to your sweetheart.)
37
+
38
+ Defaults for many of the entries come from the marker_defaults dictionary.
39
+
40
+ Dictionary Entries
41
+ 'marker' => a_marker # a marker definition array
42
+ 'x' => a_float # x location for marker reference point
43
+ 'y' => a_float # y location for marker reference point
44
+ 'at' => [ x, y ] # location for marker reference point
45
+ 'point' # alias for 'at'
46
+ 'Xs' => a_Dvector # x locations for marker reference points
47
+ 'Ys' => a_Dvector # y locations for marker reference points
48
+ 'xs' # alias for 'Xs'
49
+ 'ys' # alias for 'Ys'
50
+ 'font' => an_integer # one of the predefined font numbers
51
+ 'string' => a_string # to be shown as a marker
52
+ 'text' # alias for 'string'
53
+ 'fill_color' => a_color # to be used for filled markers
54
+ 'stroke_color' => a_color # to be used for stroked markers
55
+ 'color' => a_color # default for fill_color and stroke_color
56
+ 'angle' => a_float # degrees to rotate marker
57
+ 'scale' => a_float # factor for rescaling marker size
58
+ 'horizontal_scale' => a_float # for scaling along baseline
59
+ 'vertical_scale' => a_float # for scaling vertical to baseline
60
+ 'italic_angle' => a_float # for slanting text relative to baseline
61
+ 'ascent_angle' => a_float # factor for slanting baseline
62
+ 'alignment' => an_alignment # see alignment
63
+ 'justification' => a_justification # see justification
64
+ 'rendering_mode' => a_rendering_mode # see below
65
+ 'stroke_width' => a_float # to be used for stroked markers
66
+ 'mode' # alias for 'rendering_mode'
67
+
68
+
69
+ Examples
70
+
71
+ http://theory.kitp.ucsb.edu/~paxton/tioga_jpegs/Marker_Horizontal_Scaling.jpg
72
+
73
+ http://theory.kitp.ucsb.edu/~paxton/tioga_jpegs/Marker_Vertical_Scaling.jpg
74
+
75
+ http://theory.kitp.ucsb.edu/~paxton/tioga_jpegs/Marker_Italic_Angle.jpg
76
+
77
+ http://theory.kitp.ucsb.edu/~paxton/tioga_jpegs/Marker_Ascent_Angle.jpg
78
+
79
+ http://theory.kitp.ucsb.edu/~paxton/tioga_jpegs/Rendering_Modes.jpg
80
+
81
+ def marker_shadow_effect
82
+ t.landscape
83
+ background
84
+ scale = 2.6
85
+ t.line_width = 0.6
86
+ x = t.bounds_xmin + 0.5 * t.bounds_width
87
+ dy = -0.5; y = 1 + dy;
88
+ t.show_marker(
89
+ 'string' => 'Shadow Effect',
90
+ 'scale' => scale,
91
+ 'point' => [x, y],
92
+ 'mode' => FILL_AND_STROKE,
93
+ 'alignment' => ALIGNED_AT_BASELINE,
94
+ 'fill_color' => Blue,
95
+ 'stroke_color' => Black)
96
+ t.fill_opacity = 0.8
97
+ t.show_marker(
98
+ 'string' => 'Shadow Effect',
99
+ 'vertical_scale' => -0.4,
100
+ 'fill_color' => Grey,
101
+ 'italic_angle' => -30,
102
+ 'scale' => scale,
103
+ 'point' => [x+0.022, y-0.03])
104
+ end
105
+
106
+ http://theory.kitp.ucsb.edu/~paxton/tioga_jpegs/Marker_Shadow_Effect.jpg
107
+
108
+ =end
109
+ def show_marker(dict)
110
+ end
111
+
112
+ # Returns an array with [_width_, <i>dx_left</i>, <i>dx_right</i>, <i>dy_down</i>, <i>dy_up</i>] given in
113
+ # figure coordinates. The first is the width in figure x coordinates, the remainder is the bounding box
114
+ # relative to the reference point for showing the string.
115
+ def marker_string_info(font_number, string, scale)
116
+ end
117
+
118
+ # :call-seq:
119
+ # marker_defaults
120
+ # marker_defaults = a_dictionary
121
+ #
122
+ # This dictionary holds defaults for +show_marker+.
123
+ def marker_defaults
124
+ end
125
+
126
+
127
+
128
+ end # class
129
+ end # module Tioga
@@ -0,0 +1,567 @@
1
+ # Page_Frame_Bounds.rb
2
+
3
+ module Tioga
4
+
5
+ =begin rdoc
6
+
7
+ This section describes the coordinate systems used by tioga for page layout.
8
+
9
+ The "output page" is defined in "output coordinates"
10
+ having units equal to 1/720 of an inch. This unit is 1/10 of a "big point" that is the basic size used in PostScript and PDF.
11
+ By making the unit this size, we can write output coordinates to the PDF file as integers, getting a significant size reduction in
12
+ the file without giving up noticable accuracy. The (0, 0) point of the output coordinate system is at the lower-left hand corner
13
+ of the output page. The x axis increases horizontally, and the y axis increases vertically. The dimensions of the page
14
+ are given by the attributes page_width and page_height.
15
+ The attributes page_right and page_top are aliases for these.
16
+ The attributes page_left and page_bottom are always zero. The default page size is 5 inches square,
17
+ but you can set the size to anything you like using the set_device_pagesize routine.
18
+
19
+ While the output coordinates have a fixed physical size, all the other coordinate systems are relative rather than absolute.
20
+ At the next level comes "page coordinates" that are defined relative to the output page with (0, 0) in page coordinates
21
+ at the lower left corner of the output page and (1, 1) at the upper right. Page coordinates are used to define the location of
22
+ the current "frame". The current frame location is held in the attributes frame_left, frame_right, frame_top, and frame_bottom,
23
+ all in page coordinates. In addition, the attribute frame_width is defined to be frame_right - frame_left, and frame_height is frame_top -
24
+ frame_bottom. The defaults are (0.2, 0.2) for the lower left corner of the frame and (0.8, 0.8) for the upper right.
25
+ You can change these by calling the routine set_frame_sides.
26
+
27
+ The "frame coordinates" are defined with (0, 0) at the lower left corner of the frame and (1, 1) at the upper right. Subframes are
28
+ sized and located using frame coordinates. The routine set_subframe does this job. In addition, subframes are used to
29
+ give a desired aspect ratio. The routine set_aspect_ratio_relative_to_frame does this in terms of frame coordinates -- in
30
+ other words, it creates a subframe having the requested ratio of width to height relative to the frame. In some cases
31
+ that will be what you want, but it is more common to want to specify the width to height ratio relative to the output page, i.e.,
32
+ in absolute rather than relative terms. This is provided by the routine set_physical_aspect_ratio (with set_aspect_ratio as an alias).
33
+
34
+ When doing a plot, you want yet another coordinate system, one that matches the data. This is called the "figure coordinate system"
35
+ and is set by the "bounds" attributes that give the locations in figure coordinates of the edges of the frame. These attributes are
36
+ called bounds_right, bounds_left, bounds_top, and bounds_bottom. Note that you can "reverse" the x axis, for example, by making
37
+ bounds_right smaller than bounds_left. To help with the bookkeeping for this, the attribute bounds_xmin holds the minimum
38
+ of bounds_left and bounds_right, while bounds_ymin has the minimum of bounds_top and bounds_bottom. Finally, bounds_width holds
39
+ the absolute value of bounds_right - bounds_left and bounds_height has abs(bounds_top - bounds_bottom). The default bounds
40
+ are 0 for left and bottom and 1 for right and top, making figure coordinates identical to frame coordinates. The bounds can be
41
+ changed by calling the set_bounds routine.
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+ =end
50
+
51
+
52
+ class Page_Frame_Bounds < Doc < FigureMaker
53
+
54
+ # :call-seq:
55
+ # set_device_pagesize(width, height) # measured in output page coordinates (1/720 inch)
56
+ #
57
+ # The page coordinates go from 0.0 to 1.0 with (0,0) at the lower left and (1,1) at the upper right.
58
+ # This command sets the physical size of this rectangle in the output coordinate
59
+ def set_device_pagesize(width, height)
60
+ end
61
+
62
+ # :call-seq:
63
+ # page_left
64
+ #
65
+ # The position of the left of the page in the device coordinate system -- measured in output page coordinates (1/720 inch).
66
+ def page_left
67
+ end
68
+
69
+ # :call-seq:
70
+ # page_right
71
+ #
72
+ # The position of the right of the page in the device coordinate system -- measured in output page coordinates (1/720 inch).
73
+ def page_right
74
+ end
75
+
76
+ # :call-seq:
77
+ # page_bottom
78
+ #
79
+ # The position of the bottom of the page in the device coordinate system -- measured in output page coordinates (1/720 inch).
80
+ def page_bottom
81
+ end
82
+
83
+ # :call-seq:
84
+ # page_top
85
+ #
86
+ # The position of the top of the page in the device coordinate system -- measured in output page coordinates (1/720 inch).
87
+ def page_top
88
+ end
89
+
90
+ # :call-seq:
91
+ # page_width
92
+ #
93
+ # The width of the page in the device coordinate system -- measured in output page coordinates (1/720 inch).
94
+ def page_width
95
+ end
96
+
97
+ # :call-seq:
98
+ # page_height
99
+ #
100
+ # The height of the page in the device coordinate system -- measured in output page coordinates (1/720 inch).
101
+ def page_height
102
+ end
103
+
104
+
105
+ # :call-seq:
106
+ # set_frame_sides(left, right, top, bottom) # sizes in page coords [0..1]
107
+ #
108
+ # This command sets frame_left, frame_right, frame_top, and frame_bottom to the given values.
109
+ def set_frame_sides(left, right, top, bottom)
110
+ end
111
+
112
+ # :call-seq:
113
+ # frame_left
114
+ #
115
+ # The position of the left of the frame in the page x coordinate system which runs from 0 at the left to 1 at the right.
116
+ # Initialized to 0.2 and changed by set_subframe.
117
+ def frame_left
118
+ end
119
+
120
+ # :call-seq:
121
+ # frame_right
122
+ #
123
+ # The position of the right of the frame in the page x coordinate system which runs from 0 at the left to 1 at the right.
124
+ # Initialized to 0.8 and changed by set_subframe.
125
+ def frame_right
126
+ end
127
+
128
+ # :call-seq:
129
+ # frame_bottom
130
+ #
131
+ # The position of the bottom of the frame in the page y coordinate system which runs from 0 at the bottom to 1 at the top.
132
+ # Initialized to 0.2 and changed by set_subframe.
133
+ def frame_bottom
134
+ end
135
+
136
+ # :call-seq:
137
+ # frame_top
138
+ #
139
+ # The position of the top of the frame in the page y coordinate system which runs from 0 at the bottom to 1 at the top.
140
+ # Initialized to 0.8 and changed by set_subframe.
141
+ def frame_top
142
+ end
143
+
144
+ # :call-seq:
145
+ # frame_width
146
+ #
147
+ # The width of the frame in page coordinates.
148
+ # Initialized to 0.6 and changed by set_subframe.
149
+ def frame_width
150
+ end
151
+
152
+ # :call-seq:
153
+ # frame_height
154
+ #
155
+ # The height of the frame in page coordinates.
156
+ # Initialized to 0.6 and changed by set_subframe.
157
+ def frame_height
158
+ end
159
+
160
+ # :call-seq:
161
+ # bounds_left
162
+ #
163
+ # The position of the left of the frame in the figure coordinate system.
164
+ # Initialized to 0.0 and changed by set_bounds.
165
+ def bounds_left
166
+ end
167
+
168
+ # :call-seq:
169
+ # bounds_right
170
+ #
171
+ # The position of the right of the frame in the figure coordinate system.
172
+ # Initialized to 1.0 and changed by set_bounds.
173
+ def bounds_right
174
+ end
175
+
176
+ # :call-seq:
177
+ # bounds_bottom
178
+ #
179
+ # The position of the bottom of the frame in the figure coordinate system.
180
+ # Initialized to 0.0 and changed by set_bounds.
181
+ def bounds_bottom
182
+ end
183
+
184
+ # :call-seq:
185
+ # bounds_top
186
+ #
187
+ # The position of the top of the frame in the figure coordinate system.
188
+ # Initialized to 1.0 and changed by set_bounds.
189
+ def bounds_top
190
+ end
191
+
192
+ # :call-seq:
193
+ # bounds_width
194
+ #
195
+ # The width of the frame in figure coordinates.
196
+ # Initialized to 1.0 and changed by set_bounds.
197
+ def bounds_width
198
+ end
199
+
200
+ # :call-seq:
201
+ # bounds_height
202
+ #
203
+ # The height of the frame in figure coordinates.
204
+ # Initialized to 1.0 and changed by set_bounds.
205
+ def bounds_height
206
+ end
207
+
208
+ # :call-seq:
209
+ # bounds_xmin
210
+ #
211
+ # The minimum x figure coordinate that is inside the frame.
212
+ # Initialized to 0.0 and changed by set_bounds.
213
+ def bounds_xmin
214
+ end
215
+
216
+ # :call-seq:
217
+ # bounds_xmax
218
+ #
219
+ # The maximum x figure coordinate that is inside the frame.
220
+ # Initialized to 1.0 and changed by set_bounds.
221
+ def bounds_xmax
222
+ end
223
+
224
+ # :call-seq:
225
+ # bounds_ymin
226
+ #
227
+ # The minimum y figure coordinate that is inside the frame.
228
+ # Initialized to 0.0 and changed by set_bounds.
229
+ def bounds_ymin
230
+ end
231
+
232
+ # :call-seq:
233
+ # bounds_ymax
234
+ #
235
+ # The maximum y figure coordinate that is inside the frame.
236
+ # Initialized to 1.0 and changed by set_bounds.
237
+ def bounds_ymax
238
+ end
239
+
240
+ =begin rdoc
241
+ Adjusts frame margins according to the entries in the dictionary argument.
242
+ Note that this does not automatically adjust the clipping rectangle to the new frame.
243
+ If you want the clipping changed, call clip_to_frame after calling set_subframe.
244
+
245
+ Dictionary Entries
246
+ 'left_margin' => a_float # optional
247
+ 'right_margin' => a_float # optional
248
+ 'top_margin' => a_float # optional
249
+ 'bottom_margin' => a_float # optional
250
+ 'left' # alias for 'left_margin'
251
+ 'right' # alias for 'right_margin'
252
+ 'top' # alias for 'top_margin'
253
+ 'bottom' # alias for 'bottom_margin'
254
+
255
+ The following forms are also supported for calls to set_subframe:
256
+
257
+ set_subframe('margins' => [ left, right, top, bottom ])
258
+ set_subframe([ left, right, top, bottom ])
259
+
260
+ =end
261
+ def set_subframe(dict=nil)
262
+ end
263
+
264
+ =begin rdoc
265
+ Returns a dictionary with entries for 'left_margin' and 'right_margin' suitable for use with
266
+ set_subframe. The margins are determined by the column specifications in the argument _dict_.
267
+ The leftmost column is number 1 and the number of columns equals the column number for the rightmost column.
268
+ The entries 'left_margin' and 'right_margin' determine the space outside the columns, and 'column_margin' is the space between
269
+ columns, all given as fractions of the frame width. The space between the outer margins is divided to make room
270
+ for 'num_columns' of equally wide columns. The returned margins bracket the requested 'column', or the
271
+ requested range of columns from 'first_column' to 'last_column', inclusive. See also row_margins.
272
+
273
+ Dictionary Entries
274
+ 'left_margin' => a_float # default is 0
275
+ 'right_margin' => a_float # default is 0
276
+ 'column_margin' => a_float # default is 0
277
+ 'column' => an_integer
278
+ 'first_column' => an_integer # default is 1
279
+ 'last_column' => an_integer # default is 'first_column'
280
+ 'num_columns' => an_integer # default is 'last_column'
281
+
282
+ Example
283
+
284
+ def columns
285
+ t.set_aspect_ratio(2)
286
+ t.rescale(0.8)
287
+ t.do_box_labels(
288
+ 'Blues, Reds, Greens',
289
+ 'Position',
290
+ 'Values for Colors')
291
+ num_plots = 3
292
+ t.subplot(t.column_margins('num_columns' => 3, 'column' => 1)) do
293
+ t.right_edge_type = AXIS_HIDDEN
294
+ blues
295
+ end
296
+ t.subplot(t.column_margins('num_columns' => 3, 'column' => 2)) do
297
+ t.yaxis_type = AXIS_WITH_TICKS_ONLY
298
+ t.right_edge_type = AXIS_HIDDEN
299
+ reds
300
+ end
301
+ t.subplot(t.column_margins('num_columns' => 3, 'column' => 3)) do
302
+ t.yaxis_type = AXIS_WITH_TICKS_ONLY
303
+ t.right_edge_type = AXIS_WITH_TICKS_ONLY
304
+ greens
305
+ end
306
+ end
307
+
308
+ http://theory.kitp.ucsb.edu/~paxton/tioga_jpegs/Columns.jpg
309
+ =end
310
+ def column_margins(dict)
311
+ end
312
+
313
+ =begin rdoc
314
+ Returns a dictionary with entries for 'top_margin' and 'bottom_margin' suitable for use with
315
+ set_subframe. The margins are determined by the row specifications in the argument _dict_.
316
+ The uppermost row is number 1 and the number of rows equals the row number for the bottom-most row.
317
+ The entries 'top_margin' and 'bottom_margin' determine the space above and below the rows, and 'row_margin' is the space between
318
+ rows, all given as fractions of the frame height. The space between the outer margins is divided to make room
319
+ for 'num_rows' of equally tall rows. The returned margins bracket the requested 'row', or the
320
+ requested range of rows from 'first_row' to 'last_row', inclusive. See also column_margins.
321
+
322
+ Dictionary Entries
323
+ 'top_margin' => a_float # default is 0
324
+ 'bottom_margin' => a_float # default is 0
325
+ 'row_margin' => a_float # default is 0
326
+ 'row' => an_integer
327
+ 'first_row' => an_integer # default is 1
328
+ 'last_row' => an_integer # default is 'first_row'
329
+ 'num_rows' => an_integer # default is 'last_row'
330
+
331
+ =end
332
+ def row_margins(dict)
333
+ end
334
+
335
+ =begin rdoc
336
+ Sets the bounds according to the entries in the dictionary argument (called by show_plot).
337
+
338
+ The values of the entries
339
+ are the figure coordinates for the edges of the frame. The following attributes are changed:
340
+ bounds_left, bounds_right, bounds_bottom, bounds_top, xaxis_reversed, bounds_xmin, bounds_xmax,
341
+ bounds_width, yaxis_reversed, bounds_ymin, bounds_ymax, bounds_height,
342
+ default_text_height_dx, and default_text_height_dy.
343
+
344
+ Dictionary Entries
345
+ 'bounds_left' => a_float # required
346
+ 'bounds_right' => a_float # required
347
+ 'bounds_top' => a_float # required
348
+ 'bounds_bottom' => a_float # required
349
+ 'left_boundary' # alias for 'bounds_left'
350
+ 'right_boundary' # alias for 'bounds_right'
351
+ 'top_boundary' # alias for 'bounds_top'
352
+ 'bottom_boundary' # alias for 'bounds_bottom'
353
+
354
+ The following forms are also supported for calls to set_bounds:
355
+
356
+ set_bounds('boundaries' => [ left, right, top, bottom ])
357
+ set_bounds([ left, right, top, bottom ])
358
+
359
+ =end
360
+ def set_bounds(dict=nil)
361
+ end
362
+
363
+
364
+
365
+ # Convert the distance _d_ measured in output coordinates to millimeters.
366
+ def convert_output_to_mm(d)
367
+ end
368
+
369
+ # Convert the distance _d_ measured in millimeters to output coordinates.
370
+ def convert_mm_to_output(d)
371
+ end
372
+
373
+ # Convert the distance _d_ measured in output coordinates to inches.
374
+ def convert_output_to_inches(d)
375
+ end
376
+
377
+ # Convert the distance _d_ measured in inches to output coordinates.
378
+ def convert_inches_to_output(d)
379
+ end
380
+
381
+
382
+ # Convert the position _x_ measured in page x coordinates to the
383
+ # position in output x coordinates.
384
+ def convert_page_to_output_x(x)
385
+ end
386
+
387
+
388
+ # Convert the position _y_ measured in page y coordinates to the
389
+ # position in output y coordinates.
390
+ def convert_page_to_output_y(y)
391
+ end
392
+
393
+ # Convert the distance _dx_ measured in page x coordinates to the
394
+ # distance in output x coordinates.
395
+ def convert_page_to_output_dx(dx)
396
+ end
397
+
398
+ # Convert the distance _dy_ measured in page y coordinates to the
399
+ # distance in output y coordinates.
400
+ def convert_page_to_output_dy(dy)
401
+ end
402
+
403
+ # Convert the position _x_ measured in output x coordinates to the
404
+ # position in page x coordinates.
405
+ def convert_output_to_page_x(x)
406
+ end
407
+
408
+ # Convert the position _y_ measured in output y coordinates to the
409
+ # position in page y coordinates.
410
+ def convert_output_to_page_y(y)
411
+ end
412
+
413
+ # Convert the distance _dx_ measured in output x coordinates to the
414
+ # distance in page x coordinates.
415
+ def convert_output_to_page_dx(dx)
416
+ end
417
+
418
+ # Convert the distance _dy_ measured in output y coordinates to the same
419
+ # distance in page y coordinates.
420
+ def convert_output_to_page_dy(dy)
421
+ end
422
+
423
+ # Convert the position _x_ measured in page x coordinates to the
424
+ # position in frame x coordinates.
425
+ def convert_page_to_frame_x(x)
426
+ end
427
+
428
+ # Convert the position _y_ measured in page y coordinates to the
429
+ # position in frame y coordinates.
430
+ def convert_page_to_frame_y(y)
431
+ end
432
+
433
+ # Convert the distance _dx_ measured in page x coordinates to the
434
+ # distance in frame x coordinates.
435
+ def convert_page_to_frame_dx(dx)
436
+ end
437
+
438
+ # Convert the distance _dy_ measured in page y coordinates to the
439
+ # distance in frame y coordinates.
440
+ def convert_page_to_frame_dy(dy)
441
+ end
442
+
443
+ # Convert the position _x_ measured in frame x coordinates to the
444
+ # position in page x coordinates.
445
+ def convert_frame_to_page_x(x)
446
+ end
447
+
448
+ # Convert the position _y_ measured in frame y coordinates to the
449
+ # position in page y coordinates.
450
+ def convert_frame_to_page_y(y)
451
+ end
452
+
453
+ # Convert the distance _dx_ measured in frame x coordinates to the
454
+ # distance in page x coordinates.
455
+ def convert_frame_to_page_dx(dx)
456
+ end
457
+
458
+ # Convert the distance _dy_ measured in frame y coordinates to the
459
+ # distance in page y coordinates.
460
+ def convert_frame_to_page_dy(dy)
461
+ end
462
+
463
+ # Convert the position _x_ measured in figure x coordinates to the
464
+ # position in frame x coordinates.
465
+ def convert_figure_to_frame_x(x)
466
+ end
467
+
468
+ # Convert the position _y_ measured in figure y coordinates to the
469
+ # position in frame y coordinates.
470
+ def convert_figure_to_frame_y(y)
471
+ end
472
+
473
+ # Convert the distance _dx_ measured in figure x coordinates to the
474
+ # distance in frame x coordinates.
475
+ def convert_figure_to_frame_dx(dx)
476
+ end
477
+
478
+ # Convert the distance _dy_ measured in figure y coordinates to the
479
+ # distance in frame y coordinates.
480
+ def convert_figure_to_frame_dy(dy)
481
+ end
482
+
483
+ # Convert the position _x_ measured in frame x coordinates to the
484
+ # position in figure x coordinates.
485
+ def convert_frame_to_figure_x(x)
486
+ end
487
+
488
+ # Convert the position _y_ measured in frame y coordinates to the
489
+ # position in figure y coordinates.
490
+ def convert_frame_to_figure_y(y)
491
+ end
492
+
493
+ # Convert the distance _dx_ measured in frame x coordinates to the
494
+ # distance in figure x coordinates.
495
+ def convert_frame_to_figure_dx(dx)
496
+ end
497
+
498
+ # Convert the distance _dy_ measured in frame y coordinates to the
499
+ # distance in figure y coordinates.
500
+ def convert_frame_to_figure_dy(dy)
501
+ end
502
+
503
+ # Convert the position _x_ measured in figure x coordinates to the
504
+ # position in output x coordinates.
505
+ def convert_figure_to_output_x(x)
506
+ end
507
+
508
+ # Convert the position _y_ measured in figure y coordinates to the
509
+ # position in output y coordinates.
510
+ def convert_figure_to_output_y(y)
511
+ end
512
+
513
+ # Convert the distance _dx_ measured in figure x coordinates to the
514
+ # distance in output x coordinates.
515
+ def convert_figure_to_output_dx(dx)
516
+ end
517
+
518
+ # Convert the distance _dy_ measured in figure y coordinates to the
519
+ # distance in output y coordinates.
520
+ def convert_figure_to_output_dy(dy)
521
+ end
522
+
523
+ # Convert the position _x_ measured in output x coordinates to the
524
+ # position in figure x coordinates.
525
+ def convert_output_to_figure_x(x)
526
+ end
527
+
528
+ # Convert the position _y_ measured in output y coordinates to the
529
+ # position in figure y coordinates.
530
+ def convert_output_to_figure_y(y)
531
+ end
532
+
533
+ # Convert the distance _dx_ measured in output x coordinates to the
534
+ # distance in figure x coordinates.
535
+ def convert_output_to_figure_dx(dx)
536
+ end
537
+
538
+ # Convert the distance _dy_ measured in output y coordinates to the
539
+ # distance in figure y coordinates.
540
+ def convert_output_to_figure_dy(dy)
541
+ end
542
+
543
+ # Returns the angle measured in degrees clockwise from the horizontal for the
544
+ # slope specified by _dx_ and _dy_ given in figure coordinates.
545
+ def convert_to_degrees(dx, dy)
546
+ end
547
+
548
+
549
+ =begin rdoc
550
+ :call-seq:
551
+ tex_preamble
552
+ tex_preamble = a_string
553
+
554
+ This string will be used as the "preamble" for the TeX file.
555
+ The default does "usepackage" commands for "color" and "geometry".
556
+ You may want to use some other packages as well. Here's an example of how to do it which
557
+ adds the 'marvosym' package by inserting the following line into the 'initialize' routine.
558
+
559
+ t.tex_preamble = t.tex_preamble + "\n\t\\usepackage{marvosym}\n"
560
+
561
+ =end
562
+ def tex_preamble
563
+ end
564
+
565
+
566
+ end # class
567
+ end # module Tioga