Mercurial > octave
annotate doc/interpreter/plotimages.m @ 20335:b439ccc9a162
doc: Improve building of images for the Manual.
Switch to using 'qt' as the default toolkit.
Stop producing onscreen flicker when building images.
Correctly build extended.pdf with new non-recursive build system.
* plot.txi: Change sample code for generation of image 15.7 to match the code
in plotimages.m
* geometryimages.m, sparseimages.m, interpimages.m, splineimages.m:
Call new function set_graphics_toolkit which makes sure there is at least
something available to do plotting with. Change hide_output() function
to call figure() directly with "visible", "off" properties passed to it
so there is never a moment when the figure is visible (stops flicker).
* plotimages.m: Change directory to working directory where documentation files
are kept before executing print with "-pdflatexstandalone". Call pdflatex
from within the working directory since that is what it expects. Clean up
after pdflatex by deleting auxiliary files. Capture status and output of
system command which invokes pdflatex so that it does not spew in to the
logs. Change text() command to use '\displaystyle' which looks nicer.
Add set_graphics_toolkit function and modify hide_output function as above.
author | Rik <rik@octave.org> |
---|---|
date | Sun, 12 Jul 2015 15:00:26 -0700 |
parents | 03c88436ad8c |
children | 8e056730f27c |
rev | line source |
---|---|
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
17744
diff
changeset
|
1 ## Copyright (C) 2007-2015 John W. Eaton and David Bateman |
7018 | 2 ## |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
16 ## along with Octave; see the file COPYING. If not, see | |
17 ## <http://www.gnu.org/licenses/>. | |
18 | |
20307
c3c1fb44f9b5
eliminate recursive make invocations in doc directory tree
John W. Eaton <jwe@octave.org>
parents:
19791
diff
changeset
|
19 function plotimages (d, nm, typ) |
20322
03c88436ad8c
Correctly generate figure 15.7 of the Manual.
Rik <rik@octave.org>
parents:
20321
diff
changeset
|
20 set_graphics_toolkit (); |
9088
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
21 set_print_size (); |
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
22 hide_output (); |
20316
d8992a16643c
doc: Clean up m-files which generate images for Manual.
Rik <rik@octave.org>
parents:
20315
diff
changeset
|
23 outfile = fullfile (d, [nm "." typ]); |
7257 | 24 if (strcmp (typ, "png")) |
25 set (0, "defaulttextfontname", "*"); | |
26 endif | |
9914
e76d8c767584
Switch to color output for PostScript documentation images
Rik <rdrider0-list@yahoo.com>
parents:
9912
diff
changeset
|
27 if (strcmp (typ, "eps")) |
e76d8c767584
Switch to color output for PostScript documentation images
Rik <rdrider0-list@yahoo.com>
parents:
9912
diff
changeset
|
28 d_typ = "-depsc2"; |
e76d8c767584
Switch to color output for PostScript documentation images
Rik <rdrider0-list@yahoo.com>
parents:
9912
diff
changeset
|
29 else |
16994
333243133364
Use matrix concatenation for strings, rather than cstrcat(), for clarity and performance.
Rik <rik@octave.org>
parents:
14138
diff
changeset
|
30 d_typ = ["-d", typ]; |
9914
e76d8c767584
Switch to color output for PostScript documentation images
Rik <rdrider0-list@yahoo.com>
parents:
9912
diff
changeset
|
31 endif |
9912
e9fe12c1b0c0
Set default papersize to the desired imagesize
Rik <rdrider0-list@yahoo.com>
parents:
9298
diff
changeset
|
32 |
20316
d8992a16643c
doc: Clean up m-files which generate images for Manual.
Rik <rik@octave.org>
parents:
20315
diff
changeset
|
33 if (strcmp (typ , "txt")) |
20315
b9d4ccf4291c
Use FLTK for creating plots for Manual.
Michael D. Godfrey <michaeldgodfrey@gmail.com>
parents:
20307
diff
changeset
|
34 image_as_txt (d, nm); |
7256 | 35 elseif (strcmp (nm, "plot")) |
6888 | 36 x = -10:0.1:10; |
37 plot (x, sin (x)); | |
17166
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
38 xlabel ("x"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
39 ylabel ("sin (x)"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
40 title ("Simple 2-D Plot"); |
20307
c3c1fb44f9b5
eliminate recursive make invocations in doc directory tree
John W. Eaton <jwe@octave.org>
parents:
19791
diff
changeset
|
41 print (outfile, d_typ); |
6888 | 42 elseif (strcmp (nm, "hist")) |
19791
b254a2e0859c
plotimages.m: Produce the same hist plot for documentation each time (bug #44263)
Rik <rik@octave.org>
parents:
19717
diff
changeset
|
43 randn ("state", 1); |
6888 | 44 hist (randn (10000, 1), 30); |
17166
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
45 xlabel ("Value"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
46 ylabel ("Count"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
47 title ("Histogram of 10,000 normally distributed random numbers"); |
20307
c3c1fb44f9b5
eliminate recursive make invocations in doc directory tree
John W. Eaton <jwe@octave.org>
parents:
19791
diff
changeset
|
48 print (outfile, d_typ); |
6888 | 49 elseif (strcmp (nm, "errorbar")) |
11033
d9c8916bb9dd
Untabify a few remaining .m scripts.
Rik <octave@nomad.inbox5.com>
parents:
9914
diff
changeset
|
50 rand ("state", 2); |
6888 | 51 x = 0:0.1:10; |
52 y = sin (x); | |
9298
20ee7f9cc904
Correct bugs in plot images produced for documentation
Rik <rdrider0-list@yahoo.com>
parents:
9245
diff
changeset
|
53 yl = 0.1 .* rand (size (x)); |
20ee7f9cc904
Correct bugs in plot images produced for documentation
Rik <rdrider0-list@yahoo.com>
parents:
9245
diff
changeset
|
54 yu = 0.1 .* rand (size (x)); |
20ee7f9cc904
Correct bugs in plot images produced for documentation
Rik <rdrider0-list@yahoo.com>
parents:
9245
diff
changeset
|
55 errorbar (x, sin (x), yl, yu); |
11033
d9c8916bb9dd
Untabify a few remaining .m scripts.
Rik <octave@nomad.inbox5.com>
parents:
9914
diff
changeset
|
56 axis ([0, 10, -1.1, 1.1]); |
17166
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
57 xlabel ("x"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
58 ylabel ("sin (x)"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
59 title ("Errorbar plot of sin (x)"); |
20307
c3c1fb44f9b5
eliminate recursive make invocations in doc directory tree
John W. Eaton <jwe@octave.org>
parents:
19791
diff
changeset
|
60 print (outfile, d_typ); |
6888 | 61 elseif (strcmp (nm, "polar")) |
62 polar (0:0.1:10*pi, 0:0.1:10*pi); | |
20315
b9d4ccf4291c
Use FLTK for creating plots for Manual.
Michael D. Godfrey <michaeldgodfrey@gmail.com>
parents:
20307
diff
changeset
|
63 set (gca, "rtick", [0:10:40]); |
17166
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
64 title ("Example polar plot from 0 to 10*pi"); |
20307
c3c1fb44f9b5
eliminate recursive make invocations in doc directory tree
John W. Eaton <jwe@octave.org>
parents:
19791
diff
changeset
|
65 print (outfile, d_typ); |
6888 | 66 elseif (strcmp (nm, "mesh")) |
67 tx = ty = linspace (-8, 8, 41)'; | |
68 [xx, yy] = meshgrid (tx, ty); | |
69 r = sqrt (xx .^ 2 + yy .^ 2) + eps; | |
70 tz = sin (r) ./ r; | |
71 mesh (tx, ty, tz); | |
17166
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
72 xlabel ("tx"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
73 ylabel ("ty"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
74 zlabel ("tz"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
75 title ("3-D Sombrero plot"); |
20307
c3c1fb44f9b5
eliminate recursive make invocations in doc directory tree
John W. Eaton <jwe@octave.org>
parents:
19791
diff
changeset
|
76 print (outfile, d_typ); |
6888 | 77 elseif (strcmp (nm, "plot3")) |
78 t = 0:0.1:10*pi; | |
79 r = linspace (0, 1, numel (t)); | |
80 z = linspace (0, 1, numel (t)); | |
20316
d8992a16643c
doc: Clean up m-files which generate images for Manual.
Rik <rik@octave.org>
parents:
20315
diff
changeset
|
81 plot3 (r.*sin (t), r.*cos (t), z); |
17166
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
82 xlabel ("r.*sin (t)"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
83 ylabel ("r.*cos (t)"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
84 zlabel ("z"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
85 title ("plot3 display of 3-D helix"); |
20307
c3c1fb44f9b5
eliminate recursive make invocations in doc directory tree
John W. Eaton <jwe@octave.org>
parents:
19791
diff
changeset
|
86 print (outfile, d_typ); |
7189 | 87 elseif (strcmp (nm, "extended")) |
88 x = 0:0.01:3; | |
20315
b9d4ccf4291c
Use FLTK for creating plots for Manual.
Michael D. Godfrey <michaeldgodfrey@gmail.com>
parents:
20307
diff
changeset
|
89 plot (x, erf (x)); |
7189 | 90 hold on; |
20315
b9d4ccf4291c
Use FLTK for creating plots for Manual.
Michael D. Godfrey <michaeldgodfrey@gmail.com>
parents:
20307
diff
changeset
|
91 plot (x, x, "r"); |
17166
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
92 axis ([0, 3, 0, 1]); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
93 xlabel ("x"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
94 ylabel ("erf (x)"); |
0e34c475c956
plotimages.m: Add axis labels and titles to plots in Manual.
Michael Godfrey <michaeldgodfrey@gmail.com>
parents:
16994
diff
changeset
|
95 title ("erf (x) with text annotation"); |
20315
b9d4ccf4291c
Use FLTK for creating plots for Manual.
Michael D. Godfrey <michaeldgodfrey@gmail.com>
parents:
20307
diff
changeset
|
96 if (strcmp (typ, "pdf")) |
20335
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
97 text (0.65, 0.6175, ['$\displaystyle\leftarrow x = {2/\sqrt{\pi}' ... |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
98 '{\int_{0}^{x}}e^{-t^2} dt} = 0.6175$']); |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
99 ## Be very careful about modifying this. pdflatex expects to be in |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
100 ## the same directory as the file it is operating on. |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
101 cd (make_absolute_filename (d)); |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
102 print ([nm ".pdf"], "-dpdflatexstandalone"); |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
103 [status, output] = system (["pdflatex " nm]); |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
104 if (status) |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
105 error ("plotimages: Failed to run pdflatex on <extended.pdf>"); |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
106 endif |
20315
b9d4ccf4291c
Use FLTK for creating plots for Manual.
Michael D. Godfrey <michaeldgodfrey@gmail.com>
parents:
20307
diff
changeset
|
107 delete ([nm ".aux"], [nm "-inc.pdf"], [nm ".log"], [nm ".tex"]); |
b9d4ccf4291c
Use FLTK for creating plots for Manual.
Michael D. Godfrey <michaeldgodfrey@gmail.com>
parents:
20307
diff
changeset
|
108 else |
20335
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
109 text (0.65, 0.6175, ['\leftarrow x = {2/\surd\pi {\fontsize{16}' ... |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
110 '\int_{\fontsize{8}0}^{\fontsize{8}x}} e^{-t^2} dt} = 0.6175']); |
20321
fc3056b9fac0
write figure to specified output directory
John W. Eaton <jwe@octave.org>
parents:
20316
diff
changeset
|
111 print (outfile, d_typ); |
20315
b9d4ccf4291c
Use FLTK for creating plots for Manual.
Michael D. Godfrey <michaeldgodfrey@gmail.com>
parents:
20307
diff
changeset
|
112 endif |
6888 | 113 else |
114 error ("unrecognized plot requested"); | |
115 endif | |
9088
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
116 hide_output (); |
6888 | 117 endfunction |
118 | |
20335
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
119 ## This function no longer sets the graphics toolkit; That is now done |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
120 ## automatically by C++ code which will ordinarily choose 'qt', but might |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
121 ## choose gnuplot on older systems. Only a complete lack of plotting is a |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
122 ## problem. |
20322
03c88436ad8c
Correctly generate figure 15.7 of the Manual.
Rik <rik@octave.org>
parents:
20321
diff
changeset
|
123 function set_graphics_toolkit () |
20335
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
124 if (isempty (available_graphics_toolkits ())) |
b439ccc9a162
doc: Improve building of images for the Manual.
Rik <rik@octave.org>
parents:
20322
diff
changeset
|
125 error ("no graphics toolkit available for plotting"); |
20322
03c88436ad8c
Correctly generate figure 15.7 of the Manual.
Rik <rik@octave.org>
parents:
20321
diff
changeset
|
126 endif |
03c88436ad8c
Correctly generate figure 15.7 of the Manual.
Rik <rik@octave.org>
parents:
20321
diff
changeset
|
127 endfunction |
03c88436ad8c
Correctly generate figure 15.7 of the Manual.
Rik <rik@octave.org>
parents:
20321
diff
changeset
|
128 |
9088
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
129 function set_print_size () |
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
130 image_size = [5.0, 3.5]; # in inches, 16:9 format |
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
131 border = 0; # For postscript use 50/72 |
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
132 set (0, "defaultfigurepapertype", "<custom>"); |
9912
e9fe12c1b0c0
Set default papersize to the desired imagesize
Rik <rdrider0-list@yahoo.com>
parents:
9298
diff
changeset
|
133 set (0, "defaultfigurepaperorientation", "landscape"); |
9088
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
134 set (0, "defaultfigurepapersize", image_size + 2*border); |
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
135 set (0, "defaultfigurepaperposition", [border, border, image_size]); |
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
136 endfunction |
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
137 |
20322
03c88436ad8c
Correctly generate figure 15.7 of the Manual.
Rik <rik@octave.org>
parents:
20321
diff
changeset
|
138 ## Use this function before plotting commands and after every call to print |
03c88436ad8c
Correctly generate figure 15.7 of the Manual.
Rik <rik@octave.org>
parents:
20321
diff
changeset
|
139 ## since print() resets output to stdout (unfortunately, gnuplot can't pop |
03c88436ad8c
Correctly generate figure 15.7 of the Manual.
Rik <rik@octave.org>
parents:
20321
diff
changeset
|
140 ## output as it can the terminal type). |
9088
77e71f3da3d6
Fix documentation image printing under new development code
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
141 function hide_output () |
20322
03c88436ad8c
Correctly generate figure 15.7 of the Manual.
Rik <rik@octave.org>
parents:
20321
diff
changeset
|
142 hf = figure (1, "visible", "off"); |
6888 | 143 endfunction |
7256 | 144 |
145 ## generate something for the texinfo @image command to process | |
20315
b9d4ccf4291c
Use FLTK for creating plots for Manual.
Michael D. Godfrey <michaeldgodfrey@gmail.com>
parents:
20307
diff
changeset
|
146 function image_as_txt (d, nm) |
20316
d8992a16643c
doc: Clean up m-files which generate images for Manual.
Rik <rik@octave.org>
parents:
20315
diff
changeset
|
147 fid = fopen (fullfile (d, [nm ".txt"]), "wt"); |
7256 | 148 fputs (fid, "\n"); |
149 fputs (fid, "+---------------------------------+\n"); | |
150 fputs (fid, "| Image unavailable in text mode. |\n"); | |
151 fputs (fid, "+---------------------------------+\n"); | |
152 fclose (fid); | |
153 endfunction | |
20316
d8992a16643c
doc: Clean up m-files which generate images for Manual.
Rik <rik@octave.org>
parents:
20315
diff
changeset
|
154 |