source: MML/trunk/machine/SOLEIL/common/toolbox/plotpdftex/laprint.m @ 17

Last change on this file since 17 was 17, checked in by zhangj, 10 years ago

To have a stable version on the server.

  • Property svn:executable set to *
File size: 95.0 KB
Line 
1function laprint(figno,filename,varargin)
2%LAPRINT prints a figure for inclusion in LaTeX documents.
3%  LaPrint creates an eps-file and a tex-file. The tex-file contains
4%  the annotation of the figure such as titles, labels and texts. The
5%  eps-file contains the non-text part of the figure as well as the
6%  position of the text-objects. The packages 'graphicx' (or 'epsfig')
7%  and 'psfrag' (and possibly ''color'') are required for the LaTeX
8%  run. A postscript driver like 'dvips' is required for printing.
9%
10%  Usage:   >> laprint
11%
12%  This opens a graphical user interface window, to control the
13%  various settings. It includes a help facility. Just try it.
14%
15%  As an alternative to the GUI you can call laprint from the command
16%  line with various extra input arguments. These arguments are
17%  explained in the help window of the GUI, which can be also be
18%  opened using the command
19%      >> laprint helpwindow
20%
21%  There is an Users Guide available at
22%      http://www.uni-kassel.de/fb16/rat/matlab/laprint/laprintdoc.ps 
23
24%  (c) Arno Linnemann.   All rights reserved.
25%  The author of this program assumes no responsibility for any  errors
26%  or omissions. In no event shall he be liable for damages  arising out of
27%  any use of the software. Redistribution of the unchanged file is allowed.
28%  Distribution of changed versions is allowed provided the file is renamed
29%  and the source and authorship of the original version is acknowledged in
30%  the modified file.
31
32%  Please report bugs, suggestions and comments to:
33%  Arno Linnemann
34%  Control and Automation
35%  Department of Electrical and Computer Engineering
36%  University of Kassel
37%  34109 Kassel
38%  Germany
39%  mailto:linnemann@uni-kassel.de
40
41%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
42%%%%
43%%%% Initialize
44%%%%
45%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
46
47laprintident = '3.16 (13.9.2004)';   
48vers = version;
49vers = eval(vers(1:3));
50if vers < 6.1
51  error('Sorry. Matlab 6.1 or above is required.')
52end
53
54hf=131;
55hhf=132;
56
57% no output
58if nargout
59   error('No output argument, please.')
60end 
61
62inter=get(0,'defaulttextinterpreter');
63if ~strcmp(inter,'none')
64  warning('LaPrint:general',['It is recommended to switch off the '...
65          'text interpreter\nbefore creating a figure to be saved '...
66          'with LaPrint. Use the command\n',...
67          '   >> set(0,''defaulttextinterpreter'',''none'').'])
68end
69
70if nargin==0
71
72   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
73   %%%%
74   %%%% GUI
75   %%%%
76   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
77
78   try
79     delete(hf)
80   end
81   try
82     delete(hhf)
83   end
84
85   %---------------------------------
86   % open window
87   %---------------------------------
88
89   hf = figure(hf);
90   clf reset;
91   set(hf,'NumberTitle','off',...
92          'Name','LaPrint (LaTeX Print)',...
93          'Units','points',...
94          'CloseRequestFcn','laprint(''quit'');',...
95          'menubar','none')
96   h = uicontrol('Parent',hf,'Units','points');
97   fsize = get(h,'Fontsize');
98   delete(h)
99   posf = get(hf,'Position');
100   figheight = 10*fsize;
101   figwidth  = 32*fsize;
102   posf = [ posf(1) posf(2)+posf(4)-figheight figwidth figheight];
103   set(hf,'Position',posf)
104   uicontrol('Parent',hf,'style','frame','Units','points',...
105          'Position',[0 0 figwidth figheight])
106   curh = figheight-0*fsize;
107
108   LAPRINTHAN=struct('figno',{0},'filename',{0},...
109      'keepfontprops',{0},'asonscreen',{0},'keepticklabels',{0},...
110      'mathticklabels',{0},'head',{0},'extrapicture',{0},...
111      'verbose',{0},'figcopy',{0},'package_epsfig',{0},...
112      'package_graphicx',{0},'color',{0},'createview',{0},...
113      'processview',{0});
114 
115   %---------------------------------
116   % figure no.
117   %---------------------------------
118
119   loch = 1.7*fsize;
120   curh = curh-loch-1.5*fsize;
121   h = uicontrol('Parent',hf,...
122                 'style','text',...
123                 'Units','points',...
124                 'Position',[1*fsize curh 18*fsize loch],...
125                 'HorizontalAlignment','left',...
126                 'string','Number of Figure to be saved:');
127   h = uicontrol('Parent',hf,...
128                 'style','edit',...
129                 'Units','points',...
130                 'Position',[19*fsize curh 12*fsize loch],...
131                 'HorizontalAlignment','left',...
132                 'BackgroundColor',[1 1 1],...
133                 'Callback','laprint(''figno'');');
134   LAPRINTHAN.figno = h;
135
136   %---------------------------------
137   % filename
138   %---------------------------------
139
140   loch = 1.7*fsize;
141   curh = curh-loch-1*fsize;
142   h = uicontrol('Parent',hf,...
143                 'style','text',...
144                 'Units','points',...
145                 'Position',[1*fsize curh 18*fsize loch],...
146                 'HorizontalAlignment','left',...
147                 'string','Basename of Files to be Created:');
148   h = uicontrol('Parent',hf,...
149                 'style','edit',...
150                 'Units','points',...
151                 'Position',[19*fsize curh 12*fsize loch],...
152                 'HorizontalAlignment','left',...
153                 'BackgroundColor',[1 1 1],...
154                 'Callback','laprint(''filename'');');
155   LAPRINTHAN.filename = h;
156
157   %---------------------------------
158   % save, quit
159   %---------------------------------
160
161   loch = 2*fsize;
162   curh = curh-loch-1*fsize;
163   h = uicontrol('Parent',hf,...
164                 'Style','pushbutton',...
165                 'Units','Points',...
166                 'Position',[19*fsize curh 5*fsize loch],...
167                 'HorizontalAlignment','center',...
168                 'String','Go !',...
169                 'Callback','laprint(''save'');');
170   h = uicontrol('Parent',hf,...
171                 'Style','pushbutton',...
172                 'Units','Points',...
173                 'Position',[26*fsize curh 5*fsize loch],...
174                 'HorizontalAlignment','center',...
175                 'String','Quit',...
176                 'Callback','laprint(''quit'');');
177
178   %---------------------------------
179   % options uimenue
180   %---------------------------------
181
182   hm1 = uimenu('label','Options');
183
184   uimenu(hm1,...
185       'label','Sizes and Scalings ...',...
186       'callback','laprint(''size'')');
187
188   LAPRINTHAN.keepfontprops = uimenu(hm1,...
189       'label','Translate Matlab Font Properties to LaTeX',...
190       'callback','laprint(''keepfontprops'')');
191
192   LAPRINTHAN.asonscreen = uimenu(hm1,...
193       'label','Print Limits and Ticks as on Screen',...
194       'separator','on',...
195       'callback','laprint(''asonscreen'')');
196
197   LAPRINTHAN.keepticklabels = uimenu(hm1,...
198       'label','Keep Tick Labels within eps File',...
199       'callback','laprint(''keepticklabels'')');
200
201   LAPRINTHAN.mathticklabels = uimenu(hm1,...
202       'label','Set Tick Labels in LaTeX Math Mode',...
203       'callback','laprint(''mathticklabels'')');
204
205   LAPRINTHAN.head = uimenu(hm1,...
206       'label','Equip the tex File with a Head',...
207       'separator','on',...
208       'callback','laprint(''head'')');
209
210   uimenu(hm1,...
211       'label','Comment in the Head of the tex File ...',...
212       'callback','laprint(''comment'')');
213
214   uimenu(hm1,...
215       'label','Place a LaTeX Caption in the tex File ...',...
216       'callback','laprint(''caption'')');
217
218   LAPRINTHAN.extrapicture = uimenu(hm1,...
219       'label','Place an Extra Picture in each Axes',...
220       'callback','laprint(''extrapicture'')');
221
222   uimenu(hm1,...
223       'label','Length of psfrag Replacement Strings ...',...
224       'callback','laprint(''nzeros'')');
225
226   LAPRINTHAN.verbose = uimenu(hm1,...
227       'label','Call LaPrint in Verbose Mode',...
228       'separator','on',...
229       'callback','laprint(''verbose'')');
230
231   LAPRINTHAN.figcopy = uimenu(hm1,...
232       'label','Copy Figure and Modify that Copy',...
233       'callback','laprint(''figcopy'')');
234
235   uimenu(hm1,...
236       'label','Matlab Print Command ...',...
237       'separator','on',...
238       'callback','laprint(''printcmd'')');
239
240   h=uimenu(hm1,...
241       'separator','on',...
242       'label','LaTeX Graphics Package');
243   
244   LAPRINTHAN.package_graphicx = uimenu(h,...
245       'label','graphicx',...
246       'callback','laprint(''package_graphicx'')');
247   
248   LAPRINTHAN.package_epsfig = uimenu(h,...
249       'label','epsfig',...
250       'callback','laprint(''package_epsfig'')');
251     
252   LAPRINTHAN.color = uimenu(hm1,...
253       'label','Use LaTeX ''color'' Package',...
254       'callback','laprint(''color'')');
255 
256   h = uimenu(hm1,...
257       'label','View File ...',...
258       'separator','on');
259 
260   LAPRINTHAN.createview = uimenu(h,...
261       'label','Create a View File',...
262       'callback','laprint(''createview'')');
263 
264   uimenu(h,...
265       'label','Name of the View File ...',...
266       'callback','laprint(''viewfilename'')');
267
268   LAPRINTHAN.processview = uimenu(h,...
269       'label','Process the View File',...
270       'separator','on',...
271       'callback','laprint(''processview'')');
272
273   uimenu(h,...
274       'label','Executables for Processing View File...',...
275       'callback','laprint(''cmdsview'')');
276
277   %---------------------------------
278   % Preferences uimenue
279   %---------------------------------
280     
281   hm3=uimenu('label','Preferences');
282     
283   uimenu(hm3,...
284       'label','Get Preferences',...
285       'callback','laprint(''getpref'')')
286   
287   uimenu(hm3,...
288       'label','Set Preferences to Current Settings',...
289       'callback','laprint(''setpref'')')
290   
291   uimenu(hm3,...
292       'label','Remove Preferences',...
293       'callback','laprint(''rmpref'')')
294   
295   uimenu(hm3,...
296       'label','Save Current Settings to a File ...',...
297       'separator','on',...
298       'callback','laprint(''savepref'')')
299   
300   uimenu(hm3,...
301       'label','Load Settings from a File ...',...
302       'callback','laprint(''loadpref'')')
303   
304   uimenu(hm3,...
305       'label','Get Factory Defaults',...
306       'separator','on',...
307       'callback','laprint(''factory'')')
308
309 
310   %---------------------------------
311   % Help uimenue
312   %---------------------------------
313   
314   hm2=uimenu('label','Help');
315   
316   uimenu(hm2,...
317       'label',['LaPrint Online Help ...'],...
318       'callback','laprint(''helpwindow'')');
319 
320   uimenu(hm2,...
321       'label','Get the LaPrint Users Guide',...
322       'callback',['web www.uni-kassel.de/fb16/rat/matlab',...
323                   '/laprint/laprintdoc.ps -browser'])
324   
325   uimenu(hm2,...
326       'label',['Look for a newer version of LaPrint ' ...
327           '(Matlab Central File Exchange)...'],...
328       'callback',['web http://www.mathworks.de/matlabcentral/',...
329                      'fileexchange/loadFile.do?objectId=4638',...
330                      '&objectType=file -browser'])
331   
332   uimenu(hm2,...
333       'label','Version and Author ...',...
334       'callback','laprint(''whois'')')
335
336   %---------------------------------
337   % make hf invisible
338   %---------------------------------
339
340   set(hf,'HandleVisibility','callback')
341
342   %---------------------------------
343   % get settings
344   %---------------------------------
345 
346   LAPRINTOPT = prefsettings;
347   if isempty(LAPRINTOPT)
348      LAPRINTOPT = factorysettings;
349   end 
350
351   %---------------------------------
352   % get figure
353   %---------------------------------
354   
355   gcfig=gcf;
356   if gcfig == hf
357       allfigs = findobj('type','figure');
358       allfigs = allfigs(find(allfigs~=hf));
359       if length(allfigs)
360          figno = allfigs(1);
361       else
362          figure(1)
363          figno=1;
364       end   
365   else
366       figno=gcfig;
367   end
368   LAPRINTOPT.figno = figno;
369
370   %---------------------------------
371   % update
372   %---------------------------------
373 
374   updategui(LAPRINTHAN,LAPRINTOPT)
375   sethf(hf,LAPRINTHAN,LAPRINTOPT)
376   figure(hf)
377
378   %---------------------------------
379   % done
380   %---------------------------------
381
382   return
383   
384end  % if nargin==0
385
386%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
387%%%%
388%%%% callback calls ('factory' and 'getprefs' also
389%%%%                  used from command line)
390%%%%
391%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
392
393if isa(figno,'char')
394
395  switch figno
396  case 'figno'
397    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
398    LAPRINTOPT.figno=eval(get(LAPRINTHAN.figno,'string'));
399    figure(LAPRINTOPT.figno)
400    figure(hf)
401    sethf(hf,LAPRINTHAN,LAPRINTOPT);
402  case 'filename'
403    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
404    LAPRINTOPT.filename=get(LAPRINTHAN.filename,'string');
405    [texfullnameext,texbasenameext,texbasename,texdirname] = ...
406        getfilenames(LAPRINTOPT.filename,'tex',0);
407    [epsfullnameext,epsbasenameext,epsbasename,epsdirname] = ...
408        getfilenames(LAPRINTOPT.filename,'eps',0);
409    sethf(hf,LAPRINTHAN,LAPRINTOPT);
410  case 'save'
411%     lapcmd = [ 'laprint(' int2str(LAPRINTOPT.figno) ...
412%          ', ''' LAPRINTOPT.filename ''''...
413%          ', ''options'', LAPRINTOPT)'];
414    lapcmd = 'laprint({})';
415    eval(lapcmd)
416  case 'quit'
417    delete(hf)
418    try
419      delete(hhf)
420    end
421  case 'size'
422    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
423    answer = inputdlg({['Please enter the width (in centimeters) ',...
424         'of the graphics in the LaTeX document (The height ',...
425         'will be computed such that the aspect ratio of the ',...
426         'figure on screen is retained.) :'],...
427         ['Please enter the factor by which the size of the '...
428         'graphics in the LaTeX document differs from the size of the '...
429         'Postscipt graphics ( Explaination: A factor <1 scales ',...
430         'the picture down. This means that lines become thinner ',...
431         'and fonts become smaller. ) :'],...
432         ['Please specify if you want to scale the fonts along with ',...
433         'the graphics (enter ''on'' or ''off'') : '] },...
434         'LaPrint Settings',1,{num2str(LAPRINTOPT.width),...
435         num2str(LAPRINTOPT.factor),...
436         valueyn(LAPRINTOPT.scalefonts)},'on');
437    if length(answer)
438         LAPRINTOPT.width=eval(answer{1});
439         LAPRINTOPT.factor = eval(answer{2});
440         LAPRINTOPT.scalefonts = value01(answer{3});
441    end
442    sethf(hf,LAPRINTHAN,LAPRINTOPT);
443  case 'keepfontprops'
444    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
445    if LAPRINTOPT.keepfontprops==1
446      LAPRINTOPT.keepfontprops=0;
447      set(LAPRINTHAN.keepfontprops,'check','off')
448    else
449      LAPRINTOPT.keepfontprops=1;
450      set(LAPRINTHAN.keepfontprops,'check','on')
451    end     
452    sethf(hf,LAPRINTHAN,LAPRINTOPT);
453  case 'asonscreen'
454    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
455    if LAPRINTOPT.asonscreen==1
456      LAPRINTOPT.asonscreen=0;
457      set(LAPRINTHAN.asonscreen,'check','off')
458    else
459      LAPRINTOPT.asonscreen=1;
460      set(LAPRINTHAN.asonscreen,'check','on')
461    end     
462    sethf(hf,LAPRINTHAN,LAPRINTOPT);
463  case 'keepticklabels'
464    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
465    if LAPRINTOPT.keepticklabels==1
466      LAPRINTOPT.keepticklabels=0;
467      set(LAPRINTHAN.keepticklabels,'check','off')
468    else
469      LAPRINTOPT.keepticklabels=1;
470      set(LAPRINTHAN.keepticklabels,'check','on')
471    end     
472    sethf(hf,LAPRINTHAN,LAPRINTOPT);
473  case 'mathticklabels'
474    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
475    if LAPRINTOPT.mathticklabels==1
476      LAPRINTOPT.mathticklabels=0;
477      set(LAPRINTHAN.mathticklabels,'check','off')
478    else
479      LAPRINTOPT.mathticklabels=1;
480      set(LAPRINTHAN.mathticklabels,'check','on')
481    end     
482    sethf(hf,LAPRINTHAN,LAPRINTOPT);
483  case 'head'
484    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
485    if LAPRINTOPT.head==1
486      LAPRINTOPT.head=0;
487      set(LAPRINTHAN.head,'check','off')
488    else
489      LAPRINTOPT.head=1;
490      set(LAPRINTHAN.head,'check','on')
491    end     
492    sethf(hf,LAPRINTHAN,LAPRINTOPT);
493  case 'comment'
494    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
495    answer = inputdlg({['Please enter a describing comment to '...
496         'be placed into the head of the tex file:']},...
497         'LaPrint Settings',1,{LAPRINTOPT.comment},'on');
498    if length(answer)
499         LAPRINTOPT.comment = answer{1};
500    end
501    sethf(hf,LAPRINTHAN,LAPRINTOPT);
502  case 'caption'
503    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
504    answer = inputdlg(['If the following text is nonempty, ' ...
505         'then it will be placed as a \caption{} into the tex '...
506         'file along with \label{fig:' LAPRINTOPT.filename '}. '...
507         'Please enter the caption text:'],...
508         'LaPrint Settings',1,{LAPRINTOPT.caption},'on');
509    if length(answer)
510         LAPRINTOPT.caption = answer{1};
511    end
512    sethf(hf,LAPRINTHAN,LAPRINTOPT);
513  case 'extrapicture'
514    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
515    if LAPRINTOPT.extrapicture==1
516      LAPRINTOPT.extrapicture=0;
517      set(LAPRINTHAN.extrapicture,'check','off')
518    else
519      LAPRINTOPT.extrapicture=1;
520      set(LAPRINTHAN.extrapicture,'check','on')
521    end     
522    sethf(hf,LAPRINTHAN,LAPRINTOPT);
523  case 'nzeros'
524    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
525    answer = inputdlg({['Please enter length of the psfrag replacement '...
526         'strings (must be >= 3) :']},...
527         'LaPrint Settings',1,{num2str(LAPRINTOPT.nzeros)},'on');
528    if length(answer)
529        LAPRINTOPT.nzeros = max(eval(answer{1}),3);
530    end
531    sethf(hf,LAPRINTHAN,LAPRINTOPT);
532  case 'verbose'
533    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
534    if LAPRINTOPT.verbose==1
535      LAPRINTOPT.verbose=0;
536      set(LAPRINTHAN.verbose,'check','off')
537    else
538      LAPRINTOPT.verbose=1;
539      set(LAPRINTHAN.verbose,'check','on')
540    end     
541    sethf(hf,LAPRINTHAN,LAPRINTOPT);
542  case 'figcopy'
543    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
544    if LAPRINTOPT.figcopy==1
545      LAPRINTOPT.figcopy=0;
546      set(LAPRINTHAN.figcopy,'check','off')
547    else
548      LAPRINTOPT.figcopy=1;
549      set(LAPRINTHAN.figcopy,'check','on')
550    end     
551    sethf(hf,LAPRINTHAN,LAPRINTOPT);
552  case 'printcmd'
553    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
554    answer = inputdlg({['Please enter the Matlab command '...
555         'to be used for printing the eps file '...
556         '(LaPrint will internally replace <figurenumber> by the '...
557         'number of the figure <filename.eps> by the ' ...
558         'eps-filename and <filename> '...
559         'by the basename of the file, respectively). You can add options '...
560         'here (like ''-loose'') or use a different program '...
561         'for printing (like ''exportfig'') :']},...
562         'LaPrint Settings',1,{LAPRINTOPT.printcmd},'on');
563    if length(answer)
564         LAPRINTOPT.printcmd = answer{1};
565    end
566    sethf(hf,LAPRINTHAN,LAPRINTOPT);
567  case 'package_epsfig'
568    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
569    LAPRINTOPT.package='epsfig';
570    set(LAPRINTHAN.package_epsfig,'check','on')
571    set(LAPRINTHAN.package_graphicx,'check','off')
572    sethf(hf,LAPRINTHAN,LAPRINTOPT);
573  case 'package_graphicx'
574    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
575    LAPRINTOPT.package='graphicx';
576    set(LAPRINTHAN.package_epsfig,'check','off')
577    set(LAPRINTHAN.package_graphicx,'check','on')
578    sethf(hf,LAPRINTHAN,LAPRINTOPT);
579  case 'color'
580    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
581    if LAPRINTOPT.color==1
582      LAPRINTOPT.color=0;
583      set(LAPRINTHAN.color,'check','off')
584    else
585      LAPRINTOPT.color=1;
586      set(LAPRINTHAN.color,'check','on')
587    end     
588    sethf(hf,LAPRINTHAN,LAPRINTOPT);
589  case 'createview'
590    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
591    if LAPRINTOPT.createview==1
592      LAPRINTOPT.createview=0;
593      LAPRINTOPT.processview=0;
594      set(LAPRINTHAN.createview,'check','off')
595      set(LAPRINTHAN.processview,'check','off')
596    else
597      LAPRINTOPT.createview=1;
598      set(LAPRINTHAN.createview,'check','on')
599    end     
600    sethf(hf,LAPRINTHAN,LAPRINTOPT);
601  case 'viewfilename'
602    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
603      trydlg=1;
604      txt=['Please enter the name of the '...
605          'viewfile (without extension .tex) : '];
606      txt2='';
607      while trydlg
608        answer = inputdlg({[txt txt2]},...
609          'LaPrint Settings',1,{LAPRINTOPT.viewfilename},'on');
610        if length(answer)
611          if strcmp(answer{1},LAPRINTOPT.filename)
612            txt2=['The name must be different from the name of the '...
613                  'graphics file):'];
614          else
615             trydlg=0; 
616             LAPRINTOPT.viewfilename = answer{1};
617             [viewfullnameext,viewbasenameext,viewbasename,viewdirname] = ...
618                        getfilenames(LAPRINTOPT.viewfilename,'tex',0);
619         end     
620        else
621          trydlg=0;
622        end 
623      end
624    sethf(hf,LAPRINTHAN,LAPRINTOPT);
625  case 'processview'
626    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
627    if LAPRINTOPT.processview==1
628      LAPRINTOPT.processview=0;
629      set(LAPRINTHAN.processview,'check','off')
630    else
631      LAPRINTOPT.processview=1;
632      set(LAPRINTHAN.processview,'check','on')
633      LAPRINTOPT.createview=1;
634      set(LAPRINTHAN.createview,'check','on')
635    end     
636    sethf(hf,LAPRINTHAN,LAPRINTOPT);
637  case 'cmdsview'
638    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
639    answer = inputdlg({...
640       ['Please enter up to 8 commands to process the view-file. ',...
641       'Leave any of the fields empty, if you have ',...
642       'less than 8 commands. ',... 
643       'In any of the following commands, LaPrint internally '...
644       'replaces the tag <viewfile> by the name of the viewfile ',...
645       'and the tag <filename> by the basename specified in the ',...
646       'main LaPrint Window. ',...
647       'At minimum you should enter the commands for the LaTeX ',...
648       'compilation and for the dvi-to-postscript conversion ',...
649       'here. See the LaPrint Online-Help for futher ',...
650       'suggestions.   ',...
651       'Please enter the 1st command:'],...
652       'Please enter the 2nd command:',...
653       'Please enter the 3rd command:',...
654       'Please enter the 4th command:',...
655       'Please enter the 5th command:',...
656       'Please enter the 6th command:',...
657       'Please enter the 7th command:',...
658       'Please enter the 8th command:'},...
659       'LaPrint Settings',1,{LAPRINTOPT.cmd1,...
660       LAPRINTOPT.cmd2,LAPRINTOPT.cmd3,...
661       LAPRINTOPT.cmd4,LAPRINTOPT.cmd5,LAPRINTOPT.cmd6,...
662       LAPRINTOPT.cmd7,LAPRINTOPT.cmd8},'on');
663    if length(answer)==8
664       LAPRINTOPT.cmd1=answer{1};
665       LAPRINTOPT.cmd2=answer{2};
666       LAPRINTOPT.cmd3=answer{3};
667       LAPRINTOPT.cmd4=answer{4};
668       LAPRINTOPT.cmd5=answer{5};
669       LAPRINTOPT.cmd6=answer{6};
670       LAPRINTOPT.cmd7=answer{7};
671       LAPRINTOPT.cmd8=answer{8};
672    end   
673    sethf(hf,LAPRINTHAN,LAPRINTOPT);
674  case 'getpref'
675    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
676    out = prefsettings;
677    if ~isempty(out)
678       oldfigno = LAPRINTOPT.figno;   % keep this!         
679       LAPRINTOPT = out;
680       LAPRINTOPT.figno = oldfigno;       
681    else
682       errordlg('No LaPrint preferences available.')   
683    end
684    updategui(LAPRINTHAN,LAPRINTOPT);
685    sethf(hf,LAPRINTHAN,LAPRINTOPT);
686  case 'setpref'
687    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
688    setpref('LaPrint','LAPRINTOPT',LAPRINTOPT);
689  case 'rmpref'
690    if ispref('LaPrint')
691      rmpref('LaPrint');
692    else
693      errordlg('Preference does not exist.')   
694    end
695  case 'savepref'
696    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
697    txt = 'Save preferences file ';
698    [preffile,prefpath]=uiputfile('laprint.mat',txt);
699    save([prefpath preffile],'LAPRINTOPT');
700  case 'loadpref'
701    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
702    txt = ['Load preferences file '...
703           '(must be previously created by LaPrint)'];
704    [preffile,prefpath]=uigetfile('laprint.mat',txt);
705    if ~isequal(preffile,0) & ~isequal(prefpath,0)
706      oldfigno = LAPRINTOPT.figno;   % keep this!         
707      load([prefpath preffile]); % hope file contains correct
708      LAPRINTOPT.figno = oldfigno;                   % LAPRINTOPT
709      updategui(LAPRINTHAN,LAPRINTOPT);
710      sethf(hf,LAPRINTHAN,LAPRINTOPT);
711    end
712  case 'factory'
713    [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
714    out = factorysettings;
715    if ~isempty(out)
716       oldfigno = LAPRINTOPT.figno;   % keep this!         
717       LAPRINTOPT = out;
718       LAPRINTOPT.figno = oldfigno;       
719    else
720       errordlg('No LaPrint preferences available.')   
721    end
722    updategui(LAPRINTHAN,LAPRINTOPT);
723    sethf(hf,LAPRINTHAN,LAPRINTOPT);
724  case 'helpwindow'
725    hhf=figure(hhf);
726    set(hhf,'Name','LaPrint Online Help',...
727            'Numbertitle','off',...
728            'menubar','none',...
729            'HandleVisibility','callback',...
730            'resize','on',...
731            'ResizeFcn','laprint(''helpwindow'');');
732    hht=uicontrol('Parent',hhf,...
733              'style','listbox',...
734              'units','normalized',...
735              'position',[0.005 0.005 0.9 0.99],...
736              'BackgroundColor','w',...
737              'Fontsize',12,...
738              'foregroundcolor','k',...
739              'FontName','FixedWidth',...
740              'HorizontalAlignment','left');
741    [txt,hhtpos]=textwrap(hht,helptext);
742    set(hht,'string',txt)
743    set(hht,'position',[0.005 0.005 0.99 0.99])
744    set(hht,'HandleVisibility','callback')
745  case 'whois'
746    msgbox({['This is LaPrint, Version ' laprintident],...
747          '',...
748          'To blame for LaPrint:',...
749              'Arno Linnemann','Control and Automation',...
750              'Department of Electrical and Computer Engineering',...
751              'University of Kassel',...
752              '34109 Kassel',...     
753              'Germany',...
754          'mailto:linnemann@uni-kassel.de'},...
755          'LaPrint Info')
756  otherwise
757    error('unknown callback option')
758  end
759  return
760end    % if isa(figno,'char')
761
762% nargin >=1 and ~isa(figno,'char')
763
764%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
765%%%%
766%%%% PART 1 of advanced usage:
767%%%% Check inputs and initialize
768%%%%
769%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
770
771if isa(figno,'cell') % called from GUI (all set)
772
773  [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
774  figno=LAPRINTOPT.figno;
775  filename=LAPRINTOPT.filename;
776
777else % advanced usage
778 
779  % get settings
780  LAPRINTOPT = prefsettings;
781  if isempty(LAPRINTOPT)
782     LAPRINTOPT = factorysettings;
783  end
784
785  % modify prefs
786  if ~isa(figno,'double')
787    figno
788    error('This is not a figure handle.')
789  end
790  if ~any(get(0,'children')==figno)
791    figno
792    error('This is not a figure handle.')
793  end
794  LAPRINTOPT.figno = figno;
795
796  if nargin>1
797    if ~isa(filename,'char') 
798      filename
799      error('This is not a file name.')
800    end
801    LAPRINTOPT.filename=filename;
802  end   
803end
804
805% read and check command line options 
806
807try  % try old usage (Version 2.03)
808   if nargin <=2
809      error('lets take new usage')
810   end
811   % 2.03 defaults
812   width           = 12;
813   factor          = 0.8;
814   scalefonts      = 1;
815   keepfontprops   = 0;
816   asonscreen      = 0;
817   keepticklabels  = 0;
818   mathticklabels  = 0;
819   head            = 1;
820   comment         = '';
821   caption         = '';
822   extrapicture    = 1;
823   nzeros          = 5;
824   verbose         = 0;
825   figcopy         = 1;
826   printcmd        = ['print(''-f<figurenumber>'',' ...
827                      '''-deps'',''<filename.eps>'')'];
828   package         = 'epsfig';
829   color           = 0;
830   createview      = 0;
831   viewfilename    = [filename '_'];
832   processview     = 0;
833   cmd1            = '';
834   cmd2            = '';
835   cmd3            = '';
836   cmd4            = '';
837   cmd5            = '';
838   cmd6            = '';
839   cmd7            = '';
840   cmd8            = '';
841   for i=1:nargin-2
842    if ~isa(varargin{i},'char')
843      error('Options must be character arrays.')
844    end 
845    oriopt=varargin{i}(:)';
846    opt=[ lower(strrep(oriopt,' ','')) '                   ' ];
847    if strcmp(opt(1:7),'verbose')
848      verbose=1;
849    elseif strcmp(opt(1:10),'asonscreen')
850      asonscreen=1;
851    elseif strcmp(opt(1:14),'keepticklabels')
852      keepticklabels=1;
853    elseif strcmp(opt(1:14),'mathticklabels')
854      mathticklabels=1;
855    elseif strcmp(opt(1:13),'keepfontprops')
856      keepfontprops=1;
857    elseif strcmp(opt(1:14),'noextrapicture')
858      extrapicture=0;
859    elseif strcmp(opt(1:14),'noextrapicture')
860      extrapicture=0;
861    elseif strcmp(opt(1:5),'loose')
862      printcmd = ['print(''-f<figurenumber>'',' ...
863                      '''-deps'',''-loose'',''<filename.eps>'')'];
864    elseif strcmp(opt(1:9),'nofigcopy')
865      figcopy=0;
866    elseif strcmp(opt(1:12),'noscalefonts')
867      scalefonts=0;
868    elseif strcmp(opt(1:6),'nohead')
869      head=0;
870    elseif strcmp(opt(1:7),'caption')
871      eqpos=findstr(oriopt,'=');
872      if isempty(eqpos)
873            caption='Matlab Figure';
874      else     
875            caption=oriopt(eqpos+1:length(oriopt));
876      end       
877    elseif strcmp(opt(1:8),'comment=')
878      eqpos=findstr(oriopt,'=');
879      comment=oriopt(eqpos(1)+1:length(oriopt));
880    elseif strcmp(opt(1:9),'viewfile=')
881      createview=1;
882      eqpos=findstr(oriopt,'=');
883      viewfilename=oriopt(eqpos(1)+1:length(oriopt));
884    elseif strcmp(opt(1:6),'width=')
885      eval([ opt ';' ]);
886    elseif strcmp(opt(1:7),'factor=')
887      eval([ opt ';' ]);
888    else
889      error([ 'Option ' varargin{i} ' not recognized.'])
890    end   
891  end
892 
893  warning('LaPrint:general',['You are using the old LaPrint '...
894          'syntax. This syntax might not be supported in '...
895          'future releases of LaPrint.'])
896
897catch % old usage doesn't work, take new one
898 
899  % restore preferences / factory defaults
900  width           = LAPRINTOPT.width;
901  factor          = LAPRINTOPT.factor;
902  scalefonts      = LAPRINTOPT.scalefonts;
903  keepfontprops   = LAPRINTOPT.keepfontprops;
904  asonscreen      = LAPRINTOPT.asonscreen;
905  keepticklabels  = LAPRINTOPT.keepticklabels;
906  mathticklabels  = LAPRINTOPT.mathticklabels;
907  head            = LAPRINTOPT.head;
908  comment         = LAPRINTOPT.comment;
909  caption         = LAPRINTOPT.caption;
910  extrapicture    = LAPRINTOPT.extrapicture;
911  nzeros          = LAPRINTOPT.nzeros;
912  verbose         = LAPRINTOPT.verbose;
913  figcopy         = LAPRINTOPT.figcopy;
914  printcmd        = LAPRINTOPT.printcmd;
915  package         = LAPRINTOPT.package;
916  color           = LAPRINTOPT.color;
917  createview      = LAPRINTOPT.createview;
918  viewfilename    = LAPRINTOPT.viewfilename;
919  processview     = LAPRINTOPT.processview;
920  cmd1            = LAPRINTOPT.cmd1;
921  cmd2            = LAPRINTOPT.cmd2;
922  cmd3            = LAPRINTOPT.cmd3;
923  cmd4            = LAPRINTOPT.cmd4;
924  cmd5            = LAPRINTOPT.cmd5;
925  cmd6            = LAPRINTOPT.cmd6;
926  cmd7            = LAPRINTOPT.cmd7;
927  cmd8            = LAPRINTOPT.cmd8;
928
929  if nargin > 2
930    if rem(nargin,2)
931      error('Option names/values must appear in pairs.')
932    end   
933    for i=1:2:nargin-2
934      if ~isa(varargin{i},'char')
935         error('Option name must be a character array.')
936      end 
937      opt = lower(strrep(varargin{i}(:)',' ',''));
938      val = varargin{i+1}(:)';
939      switch opt
940        case 'options'     
941          if isa(val,'char')
942            if strcmp(val,'factory')
943              val = factorysettings;
944            else
945              load(val)
946              val = LAPRINTOPT;
947            end
948          end
949          if ~isa(val,'struct')
950            error('Value of options must be a structure array.')
951          end 
952          % no error checking here!
953          width           = val.width;
954          factor          = val.factor;
955          scalefonts      = val.scalefonts;
956          keepfontprops   = val.keepfontprops;
957          asonscreen      = val.asonscreen;
958          keepticklabels  = val.keepticklabels;
959          mathticklabels  = val.mathticklabels;
960          head            = val.head;
961          comment         = val.comment;
962          caption         = val.caption;
963          extrapicture    = val.extrapicture;
964          nzeros          = val.nzeros;
965          verbose         = val.verbose;
966          figcopy         = val.figcopy;
967          printcmd        = val.printcmd;
968          package         = val.package;
969          color           = val.color;
970          createview      = val.createview;
971          viewfilename    = val.viewfilename;
972          processview     = val.processview;
973          cmd1            = val.cmd1;
974          cmd2            = val.cmd2;
975          cmd3            = val.cmd3;
976          cmd4            = val.cmd4;
977          cmd5            = val.cmd5;
978          cmd6            = val.cmd6;
979          cmd7            = val.cmd7;
980          cmd8            = val.cmd8;
981        case 'width'     
982          if ~isa(val,'double') 
983            error('Value of width must be a double.')
984          end 
985          width = val; 
986        case 'factor'     
987          if ~isa(val,'double') 
988            error('Value of factor must be a double.')
989          end 
990          factor=val; 
991        case 'scalefonts'
992          scalefonts = value01(val,opt);
993        case 'keepfontprops'
994          keepfontprops = value01(val,opt);
995        case 'asonscreen'     
996          asonscreen = value01(val,opt);
997        case 'keepticklabels'
998          keepticklabels = value01(val,opt);
999        case 'mathticklabels'
1000          mathticklabels = value01(val,opt) ;
1001        case 'head'
1002          head = value01(val,opt);
1003        case 'comment'
1004          if ~isa(val,'char')
1005            error('Value of comment must be a character array.')
1006          end
1007          comment = val;
1008        case 'caption'
1009          if ~isa(val,'char')
1010            error('Value of caption must be a character array.')
1011          end
1012          caption = val;
1013        case 'extrapicture'
1014          extrapicture = value01(val,opt);
1015        case 'nzeros'     
1016          if ~isa(val,'double') 
1017            error('Value of nzeros must be a double.')
1018          end 
1019          nzeros = val;
1020        case 'verbose'
1021          verbose = value01(val,opt);
1022        case 'figcopy'
1023          figcopy = value01(val,opt);
1024        case 'printcmd'
1025          if ~isa(val,'char')
1026            error('Value of printcmd must be a character array.')
1027          end
1028          printcmd = val;
1029        case 'package'
1030          if ~isa(val,'char')
1031            error('Value of package must be a character array.')
1032          end
1033          val = lower(strrep(val,' ',''));
1034          switch val
1035            case {'graphicx','epsfig'}
1036              % fine
1037            otherwise
1038              error('Value of package is unknown.')
1039          end 
1040          package = val;
1041        case 'color'
1042          color = value01(val,opt);
1043        case 'createview'
1044          createview = value01(val,opt);
1045        case 'viewfilename'
1046          if ~isa(val,'char')
1047            error('Value of viewfilename must be a character array.')
1048          end
1049          viewfilename = val;
1050        case 'processview'
1051          processview = value01(val,opt);
1052        case 'cmd1'
1053          if ~isa(val,'char')
1054            error('Value of cmd1 must be a character array.')
1055          end
1056          cmd1 = val;
1057        case 'cmd2'
1058          if ~isa(val,'char')
1059            error('Value of cmd2 must be a character array.')
1060          end
1061          cmd2 = val;
1062        case 'cmd3'
1063          if ~isa(val,'char')
1064            error('Value of cmd3 must be a character array.')
1065          end
1066          cmd3 = val;
1067        case 'cmd4'
1068          if ~isa(val,'char')
1069            error('Value of cmd4 must be a character array.')
1070          end
1071          cmd4 = val;
1072        case 'cmd5'
1073          if ~isa(val,'char')
1074            error('Value of cmd5 must be a character array.')
1075          end
1076          cmd5 = val;
1077        case 'cmd6'
1078          if ~isa(val,'char')
1079            error('Value of cmd6 must be a character array.')
1080          end
1081          cmd6 = val;
1082        case 'cmd7'
1083          if ~isa(val,'char')
1084            error('Value of cmd7 must be a character array.')
1085          end
1086          cmd7 = val;
1087        case 'cmd8'
1088          if ~isa(val,'char')
1089            error('Value of cmd8 must be a character array.')
1090          end
1091          cmd8 = val;
1092        otherwise
1093          error(['Option ''' opt ''' unknown'])
1094      end % switch opt
1095    end % for i=3:2:nargin
1096  end % if nargin > 2
1097end % try / catch   
1098
1099if verbose,
1100  disp([ 'This is LaPrint, version ' laprintident '.' ]);
1101end 
1102
1103comment   = strrep(strrep(comment,'\','\\'),'%','%%');
1104caption   = strrep(strrep(caption,'\','\\'),'%','%%');
1105iscaption = logical(length(caption));
1106
1107if nzeros < 3
1108  warning('LaPrint:general',...
1109          'The value of nzero should be >=3. I will use nzeros=3.')
1110  nzeros=3; 
1111end
1112
1113if processview
1114  createview=1;
1115end
1116
1117if mathticklabels
1118  Do='$';
1119else 
1120  Do='';
1121end 
1122
1123% eps- and tex- filenames
1124[epsfullnameext,epsbasenameext,epsbasename,epsdirname] = ...
1125                       getfilenames(filename,'eps',verbose);
1126[texfullnameext,texbasenameext,texbasename,texdirname] = ...
1127                       getfilenames(filename,'tex',verbose);
1128if ~strcmp(texdirname,epsdirname)
1129   warning('LaPrint:files',['The eps-file and tex-file are '...
1130          'placed in different directories.']);
1131end
1132
1133if createview | processview
1134  [viewfullnameext,viewbasenameext,viewbasename,viewdirname] = ...
1135                       getfilenames(viewfilename,'tex',verbose);
1136  if strcmp(texfullnameext,viewfullnameext)
1137    viewfilename=[ viewfilename '_'];
1138    warning('LaPrint:files',['The tex- and view-file coincide. '...
1139           'I''ll use '' ' viewfilename ' ''. Hope that''s ok.' ])
1140  end 
1141  [viewfullnameext,viewbasenameext,viewbasename,viewdirname]= ...
1142                       getfilenames(viewfilename,'tex',verbose);
1143  if ~strcmp(texdirname,viewdirname)
1144    warning('LaPrint:files',['The eps-file and view-file are '...
1145           'placed in different directories.' ])
1146  end 
1147end
1148
1149%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1150%%%%
1151%%%% PART 2 of advanced usage:
1152%%%% Create new figure, insert tags, and bookkeep original text
1153%%%%
1154%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1155
1156% show all
1157shh = get(0,'ShowHiddenHandles');
1158set(0,'ShowHiddenHandles','on');
1159
1160% preparing check for copyobj bug
1161figno_ori = figno;
1162number_children_ori = length(get(figno_ori,'children'));
1163
1164% open new figure (if required) and set properties
1165if figcopy
1166  figno = copyobj(figno,0);
1167  set(figno,'visible','off')
1168  set(figno,'Numbertitle','off')
1169  set(figno,'MenuBar','none')
1170  pause(0.5)
1171end 
1172
1173if asonscreen 
1174  xlimmodeauto       = findobj(figno,'xlimmode','auto');
1175  xtickmodeauto      = findobj(figno,'xtickmode','auto');
1176  xticklabelmodeauto = findobj(figno,'xticklabelmode','auto');
1177  ylimmodeauto       = findobj(figno,'ylimmode','auto');
1178  ytickmodeauto      = findobj(figno,'ytickmode','auto');
1179  yticklabelmodeauto = findobj(figno,'yticklabelmode','auto');
1180  zlimmodeauto       = findobj(figno,'zlimmode','auto');
1181  ztickmodeauto      = findobj(figno,'ztickmode','auto');
1182  zticklabelmodeauto = findobj(figno,'zticklabelmode','auto');
1183  set(xlimmodeauto,'xlimmode','manual')
1184  set(xtickmodeauto,'xtickmode','manual')
1185  set(xticklabelmodeauto,'xticklabelmode','manual')
1186  set(ylimmodeauto,'ylimmode','manual')
1187  set(ytickmodeauto,'ytickmode','manual')
1188  set(yticklabelmodeauto,'yticklabelmode','manual')
1189  set(zlimmodeauto,'ylimmode','manual')
1190  set(ztickmodeauto,'ytickmode','manual')
1191  set(zticklabelmodeauto,'yticklabelmode','manual')
1192end 
1193set(figno,'paperunits','centimeters');
1194set(figno,'units','centimeters');
1195orip = get(figno,'Position');
1196
1197% determine width and height
1198if factor <= 0
1199  factor = width/orip(3);
1200end
1201latexwidth = width;
1202epswidth   = latexwidth/factor;
1203epsheight  = epswidth*orip(4)/orip(3);
1204
1205set(figno,'PaperPosition',[0 0 epswidth epsheight ])
1206set(figno,'papersize',[epswidth epsheight])
1207set(figno,'Position',[orip(1)+0.5 orip(2)-0.5 epswidth epsheight ])
1208set(figno,'Name',[ 'To be printed; size: ' num2str(factor,3) ...
1209  ' x (' num2str(epswidth,3) 'cm x ' num2str(epsheight,3) 'cm)' ])
1210
1211% some warnings
1212if verbose
1213  if (epswidth<13) | (epsheight<13*0.75)
1214    warning('LaPrint:size',['The size of the eps-figure is quite '...
1215       'small. The text objects might not be properly set. '...
1216       'Reducing ''factor'' might help.'])
1217  end
1218  if latexwidth/epswidth<0.5
1219    warning('LaPrint:size',['The size of the eps-figure is large ' ...
1220           'compared to the latex figure. '...
1221           'The text size might be too small. '...
1222           'Increasing ''factor'' might help.'])
1223  end 
1224  if (orip(3)-epswidth)/orip(3) > 0.1
1225    warning('LaPrint:size',['The size of the eps-figure is much '...
1226            'smaller than the original '...
1227            'figure on screen. Matlab might save different ticks '...
1228            'and ticklabels than in the original figure. '...
1229            'See option ''asonscreen''.'])
1230  end
1231  disp('Strike any key to continue.');
1232  pause
1233end 
1234
1235%
1236% TEXT OBJECTS: modify new figure
1237%
1238
1239% find all text objects
1240hxl = get(findobj(figno,'type','axes'),'xlabel');
1241hyl = get(findobj(figno,'type','axes'),'ylabel');
1242hzl = get(findobj(figno,'type','axes'),'zlabel');
1243hti = get(findobj(figno,'type','axes'),'title');
1244hte = findobj(figno,'type','text');
1245
1246% array of all text handles
1247htext = unique([ celltoarray(hxl) celltoarray(hyl) celltoarray(hzl) ...
1248      celltoarray(hti) celltoarray(hte)]);
1249nt = length(htext);
1250
1251% set(celltoarray(hxl),'VerticalAlignment','top');
1252% get alignments
1253hora  = get(htext,'HorizontalAlignment');
1254vera  = get(htext,'VerticalAlignment');
1255align = cell(nt,1);
1256for i=1:nt
1257  align{i} = hora{i}(1);
1258  switch vera{i}
1259  case 'top'
1260    align{i} = [align{i} 't'];
1261  case 'cap'
1262%     if ~isempty(get(htext(i),'string'))
1263%       warning('LaPrint:text',['Using vertical ' ...
1264%             'alignment ''top'' instead of ''cap''.'])
1265%     end 
1266    align{i} = [align{i} 't'];
1267  case 'middle'
1268    align{i} = [align{i} 'c'];
1269  case 'baseline'
1270    align{i} = [align{i} 'B'];
1271  case 'bottom'
1272    align{i} = [align{i} 'b'];
1273  otherwise
1274    warning('LaPrint:text',['Vertical alignment ' vera{i} ...
1275            ' unknown. Using ''c''.'])
1276    align{i} = [align{i} 'c'];
1277  end
1278end 
1279
1280% generate new strings and store old ones
1281oldstr   = get(htext,'string');
1282newstr   = cell(nt,1);
1283basestr  = ['s' char(48*ones(1,nzeros-1))];
1284extrastr = 0;
1285for i=1:nt
1286  osi = oldstr{i};
1287  oldstr{i} = ['\setlength{\tabcolsep}{0pt}\begin{tabular}{' ...
1288          align{i}(1) '}'];
1289  isnonempty_osi = 0;
1290  if strcmp(get(get(htext(i),'parent'),'tag'),'legend')
1291    newstr1 = []; 
1292    if isa(osi,'cell')
1293      % Legend/cell : Don't use tabular, employ extra strings
1294      nlines = length(osi);
1295      if nlines > 1
1296        newstr{nt+extrastr+nlines-1} = [];
1297        oldstr{nt+extrastr+nlines-1} = [];
1298        htext((nt+extrastr+1):(nt+extrastr+nlines-1))=htext(i);
1299        for line=1:nlines-1 
1300          oldstr{nt+extrastr+line} = ...
1301              strrep(strrep(osi{line},'\','\\'),'%','%%');
1302          newstr{nt+extrastr+line} = ...
1303              overwritetail(basestr,nt+extrastr+line);
1304          newstr1 = [newstr1; overwritetail(basestr,nt+extrastr+line)];
1305        end   
1306        extrastr = extrastr+nlines-1; 
1307      end   
1308      if nlines > 0
1309        oldstr{i} = strrep(strrep(osi{nlines},'\','\\'),'%','%%');
1310        newstr{i} = overwritetail(basestr,i);
1311        newstr1   = [newstr1; overwritetail(basestr,i)];
1312      end 
1313      % replace strings in figure
1314      set(htext(i),'string',cellstr(newstr1));
1315    else
1316      % Legend/matrix : Don't use tabular, employ extra strings
1317      nlines=size(osi,1);
1318      if nlines > 1
1319        newstr{nt+extrastr+nlines-1} = [];
1320        oldstr{nt+extrastr+nlines-1} = [];
1321        htext((nt+extrastr+1):(nt+extrastr+nlines-1))=htext(i);
1322        for line=1:nlines-1 
1323          oldstr{nt+extrastr+line} = ...
1324              strrep(strrep(osi(line,:),'\','\\'),'%','%%');
1325          newstr{nt+extrastr+line} = ...
1326              overwritetail(basestr,nt+extrastr+line);
1327          newstr1 = [newstr1; overwritetail(basestr,nt+extrastr+line)];
1328        end   
1329        extrastr = extrastr+nlines-1; 
1330      end   
1331      if nlines > 0
1332        oldstr{i} = strrep(strrep(osi(nlines,:),'\','\\'),'%','%%');
1333        newstr{i} = overwritetail(basestr,i);
1334        newstr1   = [newstr1; overwritetail(basestr,i)];
1335      end 
1336      % replace strings in figure
1337      set(htext(i),'string',newstr1);
1338    end
1339  else
1340    % text, not a legend 
1341    if isa(osi,'cell')
1342      nlines = length(osi);
1343      if nlines > 1
1344        for line=1:nlines-1 
1345          oldstr{i}=[oldstr{i} osi{line} '\\'];
1346          isnonempty_osi = isnonempty_osi+length(osi{line}); 
1347        end   
1348        if align{i}(2) == 'B'
1349          warning('LaPrint:text',['Vertical Alignment ''baseline'' '...
1350                  'in text with multiple rows might not match.'])
1351          align{i}(2) = 't';
1352        end 
1353      end   
1354      if nlines > 0
1355        oldstr{i} = [oldstr{i} osi{nlines} '\end{tabular}'];
1356        isnonempty_osi = isnonempty_osi+length(osi{nlines});
1357      end 
1358      oldstr{i} = strrep(strrep(oldstr{i},'\','\\'),'%','%%'); 
1359      if isnonempty_osi
1360        newstr{i} = overwritetail(basestr,i);
1361      else 
1362        newstr{i} = '';   
1363      end
1364      % replace strings in figure
1365      set(htext(i),'string',newstr{i});
1366    else
1367      nlines=size(osi,1);
1368      if nlines > 1
1369        for line=1:nlines-1 
1370          oldstr{i} = [oldstr{i} osi(line,:) '\\'];
1371          isnonempty_osi = isnonempty_osi+length(osi(line,:)); 
1372        end   
1373        if align{i}(2) == 'B'
1374          warning('LaPrint:text',['Vertical Alignment ''baseline'' '...
1375                  'in text with multiple rows might not match.'])
1376          align{i}(2) = 't';
1377        end 
1378      end
1379      if nlines > 0
1380        oldstr{i} = [oldstr{i} osi(nlines,:) '\end{tabular}'];
1381        isnonempty_osi = isnonempty_osi+length(osi(nlines,:));
1382      end 
1383      oldstr{i} = strrep(strrep(oldstr{i},'\','\\'),'%','%%'); 
1384   
1385      if isnonempty_osi
1386        newstr{i} = overwritetail(basestr,i);
1387      else 
1388        newstr{i} = '';   
1389      end
1390      % replace string in figure
1391      set(htext(i),'string',newstr{i});
1392    end % isa cell 
1393  end % isa legend 
1394end % for
1395
1396ntp = nt+extrastr;
1397
1398% Alignment of Legends
1399if extrastr > 0
1400  align{ntp} = [];
1401  [align{nt+1:ntp}] = deal('lc');
1402end
1403
1404% get font properties and create commands
1405if ntp > 0
1406  [fontsizecmd{1:ntp}]   = deal('');
1407  [fontanglecmd{1:ntp}]  = deal('');
1408  [fontweightcmd{1:ntp}] = deal('');
1409  [colorcmd{1:ntp}]      = deal('');
1410  [colorclose{1:ntp}]    = deal('');
1411end
1412selectfontcmd = '';
1413
1414if keepfontprops
1415
1416  % fontsize
1417  set(htext,'fontunits','points');
1418  fontsize = get(htext,'fontsize');
1419  for i=1:ntp
1420    fontsizecmd{i} = [ '\\fontsize{' num2str(fontsize{i}) '}{' ...
1421          num2str(fontsize{i}*1.5) '}'  ];
1422  end
1423   
1424  % fontweight
1425  fontweight = get(htext,'fontweight');
1426  for i=1:ntp
1427    switch fontweight{i}
1428    case 'light'
1429      fontweightcmd{i} = [ '\\fontseries{l}\\mathversion{normal}' ];
1430    case 'normal'
1431      fontweightcmd{i} = [ '\\fontseries{m}\\mathversion{normal}' ];
1432    case 'demi'
1433      fontweightcmd{i} = [ '\\fontseries{sb}\\mathversion{bold}' ];
1434    case 'bold'
1435      fontweightcmd{i} = [ '\\fontseries{bx}\\mathversion{bold}' ];
1436    otherwise
1437      warning('LaPrint:text',['Unknown fontweight: ' fontweight{i} ])
1438      fontweightcmd{i} = [ '\\fontseries{m}\\mathversion{normal}' ];
1439    end
1440  end 
1441
1442  % fontangle
1443  fontangle = get(htext,'fontangle');
1444  for i=1:ntp
1445    switch fontangle{i}
1446    case 'normal'
1447      fontanglecmd{i} = [ '\\fontshape{n}' ];
1448    case 'italic'
1449      fontanglecmd{i} = [ '\\fontshape{it}' ];
1450    case 'oblique'
1451      fontanglecmd{i} = [ '\\fontshape{it}' ];
1452    otherwise
1453      warning('LaPrint:text',['unknown fontangle: ' fontangle{i} ])
1454      fontanglecmd{i} = [ '\\fontshape{n}' ];
1455    end
1456  end 
1457  selectfontcmd = '\\selectfont ';
1458   
1459end
1460
1461if color & ntp>0
1462  col   = get(htext,'color');
1463  bgcol = get(htext,'BackgroundColor');
1464  ecol  = get(htext,'EdgeColor');
1465  for i=1:ntp
1466    col0           = get(get(htext(i),'parent'),'color');
1467    [coli,isc]     = char2rgb(col{i},[0 0 0]);
1468    [bgcoli,isbgc] = char2rgb(bgcol{i},col0);
1469    [ecoli,isec]   = char2rgb(ecol{i},col0);
1470    if isbgc | isec
1471      set(htext(i),'BackgroundColor','none')
1472      set(htext(i),'EdgeColor','none')
1473      colorcmd{i} = ['\\setlength{\\fboxsep}{2pt}\\fcolorbox[rgb]{' ...
1474        num2str(ecoli(1)) ',' num2str(ecoli(2)) ',' ...
1475        num2str(ecoli(3)) '}{' ...
1476        num2str(bgcoli(1)) ',' num2str(bgcoli(2)) ',' ...
1477        num2str(bgcoli(3)) '}{\\color[rgb]{' ...
1478        num2str(coli(1)) ',' num2str(coli(2)) ',' num2str(coli(3)) '}' ]; 
1479      colorclose{i} = '}';   
1480    else 
1481      colorcmd{i} = ['\\color[rgb]{' ...
1482        num2str(coli(1)) ',' num2str(coli(2)) ',' num2str(coli(3)) '}' ];
1483    end 
1484  end 
1485end
1486
1487%
1488% LABELS: modify new figure
1489%
1490
1491if ~keepticklabels
1492
1493  % all axes
1494  hax = celltoarray(findobj(figno,'type','axes'));
1495  na  = length(hax);
1496
1497%   % try to figure out if we have 3D axes an warn
1498%   issuewarning = 0;
1499%   for i=1:na
1500%     issuewarning = max(issuewarning,is3d(hax(i)));
1501%   end
1502%   if issuewarning
1503%     warning('LaPrint:label',['This seems to be a 3D plot. '...
1504%             'The LaTeX labels are possibly incorrect. '...
1505%             'The option  ''keepticklabels'' might help. '...
1506%             'Setting ''figcopy'' to ''off'' might be wise, too.'])
1507%   end
1508
1509  % try to figure out if we linear scale with extra factor
1510  % and determine powers of 10
1511  powers = NaN*zeros(na,3);  % matrix with powers of 10
1512  for i=1:na                    % all axes
1513    allxyz = { 'x', 'y', 'z' };
1514    for ixyz=1:3                % x,y,z
1515      xyz = allxyz{ixyz};
1516      ticklabelmode = get(hax(i),[ xyz 'ticklabelmode']);
1517      if strcmp(ticklabelmode,'auto')
1518        tick      = get(hax(i),[ xyz 'tick']);
1519        ticklabel = get(hax(i),[ xyz 'ticklabel']);           
1520            nticklabels    = size(ticklabel,1);
1521            nticks    = length(tick);
1522            if nticks==0,
1523          powers(i,ixyz)=0;
1524          nticklabels=0;
1525            end 
1526            if nticklabels==0,
1527          powers(i,ixyz)=0;
1528            end 
1529        for k=1:nticklabels    % all ticks
1530              label = str2num(ticklabel(k,:));
1531              if length(label)==0,
1532                powers(i,ixyz) = 0;
1533                break;
1534              end 
1535              if ( label==0 ) & ( abs(tick(k))>1e-10 )
1536                powers(i,ixyz) = 0;
1537                break;
1538          end         
1539              if label~=0   
1540            expon  = log10(tick(k)/label);
1541                rexpon = round(expon);
1542                if abs(rexpon-expon)>1e-10
1543              powers(i,ixyz) = 0;
1544                  break;
1545            end
1546            if isnan(powers(i,ixyz))
1547                  powers(i,ixyz) = rexpon;
1548                else   
1549                  if powers(i,ixyz)~=rexpon
1550                    powers(i,ixyz) = 0;
1551                    break;
1552              end               
1553                end
1554          end       
1555            end % k         
1556      else % if 'auto'
1557        powers(i,ixyz) = 0;
1558      end % if 'auto'
1559    end % ixyz
1560  end % i
1561 
1562  % place text to be replaced by powers on y-axis
1563  for i=1:na             
1564    allxyz = { 'x', 'y', 'z' };
1565    ixyz=2;                % x,y,z
1566    xyz = allxyz{ixyz};
1567    leftright=get(hax(i),'yaxislocation');
1568    if powers(i,ixyz) & ~is3d(hax(i)) & isequal(leftright,'left')
1569        powertext = ['ypower' int2str(i)];
1570        xlimit    = get(hax(i),'xlim');
1571        ylimit    = get(hax(i),'ylim');
1572        htext     = text(xlimit(1),ylimit(2)+...
1573                  0.01*(ylimit(2)-ylimit(1)),...
1574                  powertext);
1575        set(htext,'VerticalAlignment','Baseline');
1576    end
1577  end % i
1578
1579  % replace all ticklabels and bookkeep
1580  nxlabel = zeros(1,na);
1581  nylabel = zeros(1,na);
1582  nzlabel = zeros(1,na);
1583  allxyz={ 'x', 'y', 'z' };
1584  for ixyz=1:3
1585    xyz = allxyz{ixyz};
1586    k=1;
1587    if strcmp(xyz,'y')
1588      basestr = [ 'v' char(48*ones(1,nzeros-1))];
1589    else
1590      basestr = [ xyz char(48*ones(1,nzeros-1))];
1591    end 
1592    oldtl  = cell(na,1);
1593    newtl  = cell(na,1);
1594    nlabel = zeros(1,na);
1595    for i=1:na
1596      % set(hax(i),[ xyz 'tickmode' ],'manual')
1597      % set(hax(i),[ xyz 'ticklabelmode' ],'manual')
1598      oldtl{i}  = chartocell(get(hax(i),[ xyz 'ticklabel' ]));
1599      nlabel(i) = length(oldtl{i});
1600      newtl{i}  = cell(1,nlabel(i));
1601      for j=1:nlabel(i)
1602        newtl{i}{j} = overwritetail(basestr,k);
1603        k = k+1;
1604        oldtl{i}{j} = deblank(strrep(strrep(oldtl{i}{j},'\','\\'),...
1605                             '%','%%'));
1606      end
1607      set(hax(i),[ xyz 'ticklabel' ],newtl{i});
1608    end 
1609    eval([ 'old' xyz 'tl=oldtl;' ]);
1610    eval([ 'new' xyz 'tl=newtl;' ]);
1611    eval([ 'n' xyz 'label=nlabel;' ]);
1612  end
1613
1614  % determine latex commands for font properties
1615 
1616  if keepfontprops
1617
1618    % ticklabel font size
1619    afsize = zeros(na,1);
1620    for i=1:na
1621      afsize(i) = get(hax(i),'fontsize');
1622    end         
1623    if (any(afsize ~= afsize(1) ))
1624      warning('LaPrint:text',['Different font sizes for axes not '...
1625              'supported. All axes will have font size ' ...
1626                   num2str(afsize(1)) '.' ] )
1627    end     
1628    afsizecmd = [ '\\fontsize{' num2str(afsize(1)) '}{' ...
1629          num2str(afsize(1)*1.5) '}'  ];
1630
1631    % ticklabel font weight
1632    afweight = cell(na,1);
1633    for i=1:na
1634      afweight{i} = get(hax(i),'fontweight');
1635    end
1636    switch afweight{1}
1637    case 'light'
1638      afweightcmd = [ '\\fontseries{l}\\mathversion{normal}' ];
1639    case 'normal'
1640      afweightcmd = [ '\\fontseries{m}\\mathversion{normal}' ];
1641    case 'demi'
1642      afweightcmd = [ '\\fontseries{sb}\\mathversion{bold}' ];
1643    case 'bold'
1644      afweightcmd = [ '\\fontseries{bx}\\mathversion{bold}' ];
1645    otherwise
1646      warning('LaPrint:text',['unknown fontweight: ' afweight{1} ])
1647      afweightcmd = [ '\\fontseries{m}\\mathversion{normal}' ];
1648    end
1649    for i=1:na
1650      if ~strcmp(afweight{i},afweight{1})
1651        warning('LaPrint:text',['Different font weights for axes '...
1652                'are not supported. All axes will have font weight ' ...
1653                afweightcmd '.'])
1654      end     
1655    end     
1656
1657    % ticklabel font angle
1658    afangle = cell(na,1);
1659    for i=1:na
1660      afangle{i} = get(hax(i),'fontangle');
1661    end
1662    switch afangle{1}
1663    case 'normal'
1664      afanglecmd = [ '\\fontshape{n}' ];
1665    case 'italic'
1666      afanglecmd = [ '\\fontshape{it}' ];
1667    case 'oblique'
1668      afanglecmd = [ '\\fontshape{it}' ];
1669    otherwise
1670      warning('LaPrint:text',['unknown fontangle: ' afangle{1} ])
1671      afanglecmd=[ '\\fontshape{n}' ];
1672    end
1673    for i=1:na
1674      if ~strcmp(afangle{i},afangle{1})
1675        warning('LaPrint:text',['Different font angles for axes not '...
1676                'supported. All axes will have font angle ' ...
1677                afanglecmd '.'] )
1678      end     
1679    end     
1680 
1681  end
1682
1683  % ticklabel color
1684  acolcmd='';
1685  if color
1686    acol=[];
1687    allxyz={ 'x', 'y', 'z' };
1688    acolwarn = 0;
1689    for i=1:na
1690      for ixyz=1:3
1691        xyzcolor = [allxyz{ixyz} 'color'];
1692        if  ~isempty(get(hax(i),[allxyz{ixyz} 'ticklabel']))
1693          if isempty(acol)
1694            acol = char2rgb(get(hax(i),xyzcolor)); 
1695          else
1696            if any(char2rgb(get(hax(i),xyzcolor))~=acol)
1697              acolwarn = 1;
1698            end
1699          end
1700        end   
1701      end
1702    end
1703    if acolwarn
1704      warning('LaPrint:label',['Different colors for axes not ' ...
1705            'supported. All ticklabels will have color [ ' ...
1706             num2str(acol) ' ].' ] )
1707    end
1708    if ~isempty(acol)
1709      if any(acol~=[0 0 0])
1710        acolcmd = [ '\\color[rgb]{' num2str(acol(1)) ',' ...
1711              num2str(acol(2)) ',' num2str(acol(3)) '}' ];
1712      end       
1713    end
1714  end
1715
1716  % ticklabel alignment
1717    xyzalign = char([116*ones(na,1) 114*ones(na,1) 114*ones(na,1)]);
1718    for i=1:na
1719      switch get(hax(i),'XAxisLocation')
1720      case 'top'
1721        xyzalign(i,1)='B';
1722      end
1723      switch get(hax(i),'YAxisLocation')
1724      case 'right'
1725        xyzalign(i,2)='l';
1726      end
1727    end
1728
1729end
1730
1731%
1732% extra picture environment
1733%
1734
1735if extrapicture
1736  unitlength = zeros(na,1);
1737  ybound     = zeros(na,1);
1738  for i=na:-1:1   % reverse order, to keep axes in original order
1739    if ~is3d(hax(i))
1740      xlim = get(hax(i),'xlim');
1741      ylim = get(hax(i),'ylim');
1742      axes(hax(i));
1743      hori = text(ylim(1),ylim(1),[ 'origin' int2str(i) ]);
1744      set(hori,'VerticalAlignment','bottom');
1745      set(hori,'Fontsize',2);
1746      set(hax(i),'Units','normalized')
1747      pos = get(hax(i),'Position');
1748      unitlength(i) = pos(3)*epswidth;
1749      ybound(i) = (pos(4)*epsheight)/(pos(3)*epswidth);
1750    else
1751      warning('LaPrint:extrapic',['Option ''extrapicture'' for 3D ' ...
1752                  'axes not supported.'])
1753    end
1754  end
1755end 
1756
1757%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1758%%%%
1759%%%% PART 3 of advanced usage:
1760%%%% save eps and tex files
1761%%%%
1762%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1763
1764% prevent matlab print command to modify lims and ticks
1765% (empty, if asonscreen=1)
1766if ~keepticklabels
1767  xlimmodeauto       = findobj(figno,'xlimmode','auto');
1768  xtickmodeauto      = findobj(figno,'xtickmode','auto');
1769  xticklabelmodeauto = findobj(figno,'xticklabelmode','auto');
1770  ylimmodeauto       = findobj(figno,'ylimmode','auto');
1771  ytickmodeauto      = findobj(figno,'ytickmode','auto');
1772  yticklabelmodeauto = findobj(figno,'yticklabelmode','auto');
1773  zlimmodeauto       = findobj(figno,'zlimmode','auto');
1774  ztickmodeauto      = findobj(figno,'ztickmode','auto');
1775  zticklabelmodeauto = findobj(figno,'zticklabelmode','auto');
1776  set(xlimmodeauto,'xlimmode','manual')
1777  set(xtickmodeauto,'xtickmode','manual')
1778  set(xticklabelmodeauto,'xticklabelmode','manual')
1779  set(ylimmodeauto,'ylimmode','manual')
1780  set(ytickmodeauto,'ytickmode','manual')
1781  set(yticklabelmodeauto,'yticklabelmode','manual')
1782  set(zlimmodeauto,'ylimmode','manual')
1783  set(ztickmodeauto,'ytickmode','manual')
1784  set(zticklabelmodeauto,'yticklabelmode','manual')
1785end
1786
1787% create eps file
1788cmd = strrep(printcmd,'<filename.eps>',epsfullnameext);
1789cmd = strrep(cmd,'<filename>',filename);
1790cmd = strrep(cmd,'<figurenumber>',int2str(figno));
1791 
1792if verbose
1793  disp([ 'executing: '' ' cmd ' ''' ]);
1794end
1795eval(cmd);
1796
1797%
1798% create latex file
1799%
1800if verbose
1801  disp([ 'writing to: '' ' texfullnameext ' ''' ])
1802end
1803fid = fopen(texfullnameext,'w');
1804
1805% head
1806if head
1807  fprintf(fid,[ '%% This file is generated by the MATLAB m-file' ...
1808       ' laprint.m. It can be included\n']);
1809  fprintf(fid,[ '%% into LaTeX documents using the packages ']);
1810  fprintf(fid,package);
1811  if color
1812      fprintf(fid,', color');
1813  end   
1814  fprintf(fid,[ ' and psfrag.\n' ]);
1815  fprintf(fid,  ['%% It is accompanied by a postscript file. ',...
1816     'A sample LaTeX file is:\n']);
1817  fprintf(fid, '%%    \\documentclass{article}\\usepackage{');
1818  fprintf(fid,package);
1819  if color
1820     fprintf(fid,',color');
1821  end   
1822  fprintf(fid, ',psfrag}\n');
1823  fprintf(fid,[ '%%    \\begin{document}\\input{' ...
1824        texbasename '}\\end{document}\n' ]);
1825    fprintf(fid, [ '%% See http://www.mathworks.de/matlabcentral'...
1826      '/fileexchange/loadFile.do?objectId=4638\n']);
1827    fprintf(fid, [ '%% for recent versions of laprint.m.\n' ]);
1828  fprintf(fid,  '%%\n');
1829  fprintf(fid,[ '%% created by:           ' 'LaPrint version ' ...
1830        laprintident '\n' ]);
1831  fprintf(fid,[ '%% created on:           ' datestr(now) '\n' ]);
1832  fprintf(fid,[ '%% eps bounding box:     ' num2str(epswidth) ...
1833      ' cm x ' num2str(epsheight) ' cm\n' ]);
1834  fprintf(fid,[ '%% comment:              ' comment '\n' ]);
1835  fprintf(fid,'%%\n');
1836else
1837  fprintf(fid,[ '%% generated by laprint.m\n' ]);
1838  fprintf(fid,'%%\n');
1839end
1840
1841% go on
1842fprintf(fid,'\\begin{psfrags}%%\n');
1843%fprintf(fid,'\\fontsize{10}{12}\\selectfont%%\n');
1844fprintf(fid,'\\psfragscanon%%\n');
1845
1846% text strings
1847
1848numbertext=0;
1849for i=1:nt
1850  numbertext = numbertext+length(newstr{i});
1851end
1852if numbertext>0,
1853  fprintf(fid,'%%\n');
1854  fprintf(fid,'%% text strings:\n');
1855  for i=1:ntp
1856    if length(newstr{i})
1857      alig = strrep(align{i},'c','');
1858      fprintf(fid,[ '\\psfrag{' newstr{i} '}[' alig '][' alig ']{' ...
1859        fontsizecmd{i} fontweightcmd{i} fontanglecmd{i}  ...
1860        selectfontcmd colorcmd{i} oldstr{i} colorclose{i} '}%%\n' ]);
1861    end
1862  end
1863end
1864
1865% labels
1866
1867if ~keepticklabels
1868  if ~isempty(acolcmd)
1869     fprintf(fid,'%%\n');
1870     fprintf(fid,'%% axes ticklabel color:\n');
1871     fprintf(fid,[ acolcmd '%%\n' ]);
1872  end   
1873  if keepfontprops
1874    fprintf(fid,'%%\n');
1875    fprintf(fid,'%% axes font properties:\n');
1876    fprintf(fid,[ afsizecmd afweightcmd '%%\n' ]);
1877    fprintf(fid,[ afanglecmd '\\selectfont%%\n' ]);
1878  end 
1879  nxlabel = zeros(1,na);
1880  nylabel = zeros(1,na);
1881  nzlabel = zeros(1,na);
1882  for i=1:na
1883    nxlabel(i) = length(newxtl{i});
1884    nylabel(i) = length(newytl{i});
1885    nzlabel(i) = length(newztl{i});
1886  end   
1887     
1888  allxyz = { 'x', 'y', 'z' };
1889  for ixyz=1:3
1890    xyz = allxyz{ixyz};
1891    eval([ 'oldtl=old' xyz 'tl;' ]);
1892    eval([ 'newtl=new' xyz 'tl;' ]);
1893    eval([ 'nlabel=n' xyz 'label;' ]);
1894    if sum(nlabel) > 0
1895      fprintf(fid,'%%\n');
1896      fprintf(fid,[ '%% ' xyz 'ticklabels:\n']);
1897      for i=1:na
1898        poss = ['[' xyzalign(i,ixyz) '][' xyzalign(i,ixyz) ']'];
1899        if nlabel(i)
1900          if strcmp(get(hax(i),[ xyz 'scale']),'linear')
1901                % lin scale
1902            rexpon = powers(i,ixyz);
1903            if ~rexpon
1904              % no powers
1905              for j=1:nlabel(i)
1906                fprintf(fid,[ '\\psfrag{' newtl{i}{j} '}' poss '{' ...
1907                                    Do oldtl{i}{j} Do '}%%\n' ]);
1908              end
1909            else
1910              % powers
1911              if ixyz==2
1912                leftright=get(hax(i),'yaxislocation');
1913                if ~is3d(hax(i)) & isequal(leftright,'left')
1914                  for j=1:nlabel(i)
1915                    fprintf(fid,[ '\\psfrag{' newtl{i}{j} '}' poss '{' ...
1916                                    Do oldtl{i}{j} Do '}%%\n' ]);
1917                  end
1918                  fprintf(fid,[ '\\psfrag{ypower' int2str(i) ...
1919                     '}[Bl][Bl]{$\\times 10^{' ...
1920                             int2str(rexpon) '}$}%%\n' ]);
1921                else
1922                  for j=1:nlabel(i)-1
1923                    fprintf(fid,[ '\\psfrag{' newtl{i}{j} '}' poss '{' ...
1924                                      Do oldtl{i}{j} Do '}%%\n' ]);
1925                  end
1926                  if ~is3d(hax(i))
1927                        fprintf(fid,[ '\\psfrag{' newtl{i}{nlabel(i)} ...
1928                     '}' poss '{' ...
1929                     Do oldtl{i}{nlabel(i)} Do '$\\times 10^{'...
1930                             int2str(rexpon) '}$}%%\n' ]);
1931                  else
1932                        fprintf(fid,[ '\\psfrag{' newtl{i}{nlabel(i)} ...
1933                     '}' poss '{\\shortstack{' ...
1934                     Do oldtl{i}{nlabel(i)} Do '\\\\$\\times 10^{'...
1935                             int2str(rexpon) '}\\ $}}%%\n' ]);
1936
1937                  end
1938                end 
1939              elseif ixyz==1
1940                for j=1:nlabel(i)-1
1941                  fprintf(fid,[ '\\psfrag{' newtl{i}{j} '}' poss '{' ...
1942                                    Do oldtl{i}{j} Do '}%%\n' ]);
1943                end
1944                leftright=get(hax(i),'xaxislocation');
1945                if isequal(leftright,'bottom')
1946                      fprintf(fid,[ '\\psfrag{' newtl{i}{nlabel(i)} ...
1947                     '}' poss '{\\shortstack{' ...
1948                     Do oldtl{i}{nlabel(i)} Do '\\\\$\\times 10^{'...
1949                             int2str(rexpon) '}\\ $}}%%\n' ]);
1950                    else
1951                  fprintf(fid,[ '\\psfrag{' newtl{i}{nlabel(i)} ...
1952                     '}' poss '{\\shortstack{$\\times 10^{' ...
1953                     int2str(rexpon) '}\\ $\\\\' ...
1954                     Do oldtl{i}{nlabel(i)} Do '}}%%\n' ]);
1955                end
1956              else
1957                for j=1:nlabel(i)-1
1958                  fprintf(fid,[ '\\psfrag{' newtl{i}{j} '}' poss '{' ...
1959                                    Do oldtl{i}{j} Do '}%%\n' ]);
1960                end
1961                    fprintf(fid,[ '\\psfrag{' newtl{i}{nlabel(i)} ...
1962                           '}' poss '{' Do oldtl{i}{nlabel(i)} Do ...
1963                   '\\setlength{\\unitlength}{1ex}' ...
1964                           '\\begin{picture}(0,0)\\put(0.5,1.5){$\\times 10^{' ...
1965                           int2str(rexpon) '}$}\\end{picture}}%%\n' ]);
1966              end
1967            end % rexpon
1968          else
1969            % log scale
1970            for j=1:nlabel(i)
1971              fprintf(fid,[ '\\psfrag{' newtl{i}{j} '}' poss '{$10^{' ...
1972                oldtl{i}{j} '}$}%%\n' ]);
1973            end % for (log)
1974          end % if linear
1975        end  % if nlabel(i)
1976      end
1977    end
1978  end
1979end 
1980
1981% extra picture
1982if extrapicture
1983  fprintf(fid,'%%\n');
1984  fprintf(fid,'%% extra picture(s):\n');
1985  for i=1:na
1986    fprintf(fid,[ '\\psfrag{origin' int2str(i) '}[lb][lb]{' ...
1987                  '\\setlength{\\unitlength}{' ...
1988                  num2str(unitlength(i),'%5.5f') 'cm}%%\n' ]);
1989    fprintf(fid,[ '\\begin{picture}(1,' ...
1990                  num2str(ybound(i),'%5.5f') ')%%\n' ]);
1991    %fprintf(fid,'\\put(0,0){}%% lower left corner\n');
1992    %fprintf(fid,[ '\\put(1,' num2str(ybound(i),'%5.5f') ...
1993    %             '){}%% upper right corner\n' ]);
1994    fprintf(fid,'\\end{picture}%%\n');
1995    fprintf(fid,'}%%\n');
1996  end
1997end 
1998
1999% figure
2000fprintf(fid,'%%\n');
2001fprintf(fid,'%% Figure:\n');
2002if iscaption
2003  fprintf(fid,[ '\\parbox{' num2str(latexwidth) 'cm}{\\centering%%\n' ]);
2004end 
2005if ~scalefonts
2006  switch package
2007  case 'epsfig'   
2008     fprintf(fid,[ '\\epsfig{file=' epsbasenameext ',width=' ...
2009         num2str(latexwidth) 'cm}%%\n' ]);
2010  case 'graphicx'   
2011     fprintf(fid,[ '\\includegraphics[width=' num2str(latexwidth) ...
2012             'cm]{' epsbasenameext '}%%\n' ]);
2013  otherwise 
2014    warning('LaPrint:general',['Package ''' package ''' not known. '...
2015            'I hope you know what you are doing...'])   
2016  end
2017else
2018  switch package
2019  case 'epsfig' 
2020     fprintf(fid,[ '\\resizebox{' num2str(latexwidth) 'cm}{!}' ...
2021      '{\\epsfig{file=' epsbasenameext '}}%%\n' ]);
2022  case 'graphicx'
2023     fprintf(fid,[ '\\resizebox{' num2str(latexwidth) 'cm}{!}' ...
2024      '{\\includegraphics{' epsbasenameext '}}%%\n' ]);
2025  otherwise
2026    warning('LaPrint:general',['Package ''' package ''' not known. '...
2027            'I hope you know what you are doing...'])   
2028  end
2029end
2030if iscaption
2031  fprintf(fid,[ '\\caption{' caption '}%%\n' ]);
2032  fprintf(fid,[ '\\label{fig:' texbasename '}%%\n' ]);
2033  fprintf(fid,[ '}%%\n' ]);
2034end 
2035fprintf(fid,'\\end{psfrags}%%\n');
2036fprintf(fid,'%%\n');
2037fprintf(fid,[ '%% End ' texbasenameext '\n' ]);
2038fclose(fid);
2039
2040set(figno,'Name','Printed by LaPrint')
2041if figcopy
2042  if verbose
2043    disp('Strike any key to continue.');
2044    pause
2045  end
2046  hlegend = findobj(figno,'Tag','legend');
2047  set(hlegend,'DeleteFcn','')
2048  close(figno)
2049end
2050
2051% check for copyobj-bug --> should be ok now!
2052number_children_new = length(get(figno_ori,'children'));
2053if number_children_new < number_children_ori
2054   if figcopy
2055      warning(['LaPrint:general','Objects in the figure have been '...
2056              'deleted! This is due to a bug in matlabs '...
2057              '''copyopj''. You might want to try to set '...
2058              '''figcopy'' to ''off''.'])
2059   else   
2060      warning('LaPrint:general',['Objects in the figure have been '...
2061              'deleted!'])
2062   end
2063 end
2064   
2065%
2066% create view file
2067%
2068
2069if createview | processview
2070  if verbose
2071    disp([ 'writing to: '' ' viewfullnameext ' ''' ])
2072  end
2073  fid = fopen(viewfullnameext,'w');
2074
2075  if head
2076    fprintf(fid,[ '%% This file is generated by laprint.m.\n' ]);
2077    fprintf(fid,[ '%% It calls ' texbasenameext ...
2078                  ', which in turn  calls ' epsbasenameext '.\n' ]);
2079    fprintf(fid,[ '%% Process this file using, e.g.,\n' ]);
2080    fprintf(fid,[ '%%   latex ' viewbasenameext '\n' ]);
2081    fprintf(fid,[ '%%   dvips -o' viewbasename '.ps ' viewbasename ...
2082            '.dvi\n']);
2083    fprintf(fid,[ '%%   ghostview ' viewbasename '.ps&\n' ]);
2084  else
2085    fprintf(fid,[ '%% generated by laprint.m\n' ]);
2086  end
2087
2088  fprintf(fid,[ '\\documentclass{article}\n' ]);
2089  fprintf(fid,[ '\\usepackage{' ]);
2090  fprintf(fid,package);
2091  if color
2092      fprintf(fid,',color');
2093  end   
2094  fprintf(fid,[ ',psfrag,a4}\n' ]);
2095  fprintf(fid,[ '\\usepackage[latin1]{inputenc}\n' ]);
2096  if ~strcmp(epsdirname,viewdirname)
2097    fprintf(fid,[ '\\graphicspath{{' epsdirname '}}\n' ]);
2098  end 
2099  fprintf(fid,[ '\\begin{document}\n' ]);
2100  fprintf(fid,[ '\\pagestyle{empty}\n' ]);
2101  if strcmp(texdirname,viewdirname)
2102    fprintf(fid,[ '    \\input{' texbasenameext '}\n' ]);
2103  else
2104    fprintf(fid,[ '    \\input{' texdirname texbasenameext '}\n' ]);
2105  end
2106  fprintf(fid,[ '\\end{document}\n' ]);
2107  fclose(fid);
2108end
2109
2110% process view file
2111   
2112if processview
2113    conti=1;
2114   
2115    for i=1:8
2116      eval(['cmdi=cmd' int2str(i) ';'])
2117      if ~isempty(cmdi) & conti
2118        cmd = strrep(cmdi,'<viewfile>',viewbasename);
2119        cmd = strrep(cmd,'<filename>',filename);
2120        disp([ 'executing: '' ' cmd ' ''' ]);
2121        [stat,resu]=system(cmd);
2122        if stat %| isempty(strfind(resu,'Output written on'))
2123          disp(resu)
2124          conti=0;
2125        end
2126      end
2127    end
2128
2129    if ~conti
2130       disp('An error occured in the latex/friends sequence.')
2131    end
2132
2133end
2134
2135set(0,'ShowHiddenHandles',shh);
2136
2137%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2138%%%%
2139%%%% functions used
2140%%%%
2141%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2142
2143function [fullnameext,basenameext,basename,dirname] = getfilenames(...
2144    filename,extension,verbose);
2145% appends an extension to a filename (as '/home/tom/tt') and determines 
2146% fullnameext: filename with extension and dirname, as '/home/tom/tt.tex'
2147% basenameext: filename with extension without dirname, as 'tt.tex'
2148% basename   : filename without extension without dirname, as 'tt'
2149% dirname    : dirname without filename, as '/home/tom/'
2150% In verbose mode, it asks if to overwrite or to modify.
2151%
2152[dirname, basename] = splitfilename(filename);
2153fullnameext = [ dirname basename '.' extension ];
2154basenameext = [ basename '.' extension ];
2155if verbose
2156  quest = (exist(fullnameext)==2);
2157  while quest
2158    yn = input([ strrep(strrep(fullnameext,'\','\\'),'%','%%') ...
2159            ' exists. Overwrite? (y/n) '],'s');
2160    if strcmp(yn,'y')
2161      quest = 0;
2162    else
2163      filename = input( ...
2164                     [ 'Please enter new filename (without extension .' ...
2165                     extension '): ' ],'s');
2166      [dirname, basename] = splitfilename(filename);
2167      fullnameext = [ dirname basename '.' extension ];
2168      basenameext = [ basename '.' extension ];
2169      quest = (exist(fullnameext)==2);
2170    end
2171  end
2172end
2173if ( exist(dirname)~=7 & ~strcmp(dirname,[ '.' filesep ]) ...
2174      & ~strcmp(dirname,filesep) )
2175  error([ 'Directory ' dirname ' does not exist.' ] )
2176end 
2177
2178%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2179
2180function [dirname,basename] = splitfilename(filename);
2181% splits filename into dir and base
2182slashpos  = findstr(filename,filesep);
2183nslash    = length(slashpos);
2184nfilename = length(filename);
2185if nslash
2186  dirname  = filename(1:slashpos(nslash));
2187  basename = filename(slashpos(nslash)+1:nfilename);
2188else
2189  dirname = pwd;
2190  nn=length(dirname);
2191  if ~strcmp(dirname(nn),filesep)
2192    dirname = [ dirname filesep ];
2193  end   
2194  basename = filename;
2195end 
2196
2197%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2198
2199function yesno = is3d(haxes);
2200% tries to figure out if axes is 3D
2201yesno = 0;
2202CameraPosition = get(haxes,'CameraPosition');
2203CameraTarget = get(haxes,'CameraTarget');
2204CameraUpVector = get(haxes,'CameraUpVector');
2205if CameraPosition(1)~=CameraTarget(1)
2206  yesno = 1;
2207end 
2208if CameraPosition(2)~=CameraTarget(2)
2209  yesno = 1;
2210end 
2211if any(CameraUpVector~=[0 1 0])
2212  yesno = 1;
2213end 
2214
2215%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2216
2217function b = celltoarray(a);
2218% converts a cell of doubles to an array
2219if iscell(a),
2220  b = [];
2221  for i=1:length(a),
2222    b = [b a{i}];
2223  end 
2224else,
2225  b = a(:)';
2226end 
2227
2228%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2229
2230function b = chartocell(a)
2231% converts a character array into a cell array of characters
2232
2233% convert to cell
2234if isa(a,'char')
2235  n = size(a,1);
2236  b = cell(1,n);
2237  for j=1:n
2238    b{j}=a(j,:);
2239  end 
2240else
2241  b = a;
2242end 
2243% convert to char
2244n=length(b);
2245for j=1:n
2246  if isa(b{j},'double')
2247    b{j} = num2str(b{j});
2248  end 
2249end     
2250
2251%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2252
2253function b = overwritetail(a,k)
2254% overwrites tail of a by k
2255% a,b: strings
2256% k: integer
2257ks = int2str(k);
2258b = [ a(1:(length(a)-length(ks))) ks ];
2259
2260%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2261
2262function [rgb,isc] = char2rgb(c,c0)
2263% convert color definitions from character to rgb-vector
2264
2265isc = 1;
2266if ~ischar(c)
2267  rgb = c;
2268else 
2269  switch c
2270  case {'y','yellow'}
2271    rgb = [1 1 0];
2272  case {'m','magenta'}
2273    rgb = [1 0 1];
2274  case {'c','cyan'}
2275    rgb = [0 1 1];
2276  case {'r','red'}
2277    rgb = [1 0 0];
2278  case {'g','green'}
2279    rgb = [0 1 0];
2280  case {'b','blue'}
2281    rgb = [0 0 1];
2282  case {'w','white'}
2283    rgb = [1 1 1];
2284  case {'k','black'}
2285    rgb = [0 0 0];
2286  case 'none'
2287    if nargin==2
2288      rgb = char2rgb(c0);
2289    else
2290      rgb = [1 1 1];   
2291    end   
2292    isc = 0;
2293  otherwise
2294    warning('LaPrint:general',['Unknown Color: ''' c ...
2295            '''. Taking black.'])
2296    rgb = [0 0 0];
2297  end   
2298end   
2299
2300%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2301
2302function v = value01(val,opt)
2303% convert off/on to 0/1
2304
2305if nargin==2
2306   txt = ['Value of ' opt ' must be ''on'' or ''off'''];
2307else
2308   txt = ['Value must be ''on'' or ''off'''];
2309end
2310
2311if  ~isa(val,'char') 
2312  error(txt)
2313end
2314val = lower(strrep(val,' ',''));
2315switch val
2316  case 'on'
2317    v = 1;
2318  case 'off'
2319    v = 0;
2320  otherwise
2321    error(txt)
2322end
2323%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2324
2325function v = valueyn(val)
2326% convert 0/1 to off/on
2327
2328if  ~isa(val,'double') 
2329  error([ 'Value must be ''0'' or ''1'''])
2330end
2331switch val
2332  case 0
2333    v = 'off';
2334  case 1
2335    v = 'on';
2336  otherwise
2337    error([ 'Value must be ''0'' or ''1'''])
2338end
2339
2340%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2341
2342function sethf(hf,LAPRINTHAN,LAPRINTOPT)
2343% store in UserData of gui
2344
2345set(hf,'UserData',{LAPRINTHAN,LAPRINTOPT})
2346
2347%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2348
2349function [LAPRINTHAN,LAPRINTOPT]=gethf(hf)
2350% load from UserData of gui
2351
2352d=get(hf,'UserData');
2353LAPRINTHAN=d{1};
2354LAPRINTOPT=d{2};
2355
2356%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2357
2358function opt = prefsettings
2359    if ispref('LaPrint','LAPRINTOPT') 
2360      opt = getpref('LaPrint','LAPRINTOPT');
2361    else
2362      opt = []; 
2363    end   
2364
2365%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2366
2367function opt=factorysettings
2368
2369% try to find LaTeX and friends
2370if ispc
2371  try
2372    latexpath = winqueryreg('HKEY_LOCAL_MACHINE',...
2373          'SOFTWARE\MiK\MiKTeX\CurrentVersion\MiKTeX','Install Root');
2374    latexcmd = [latexpath '\miktex\bin\latex.exe -halt-on-error '...
2375               '-interaction nonstopmode <viewfile>.tex'];
2376    dvipscmd = [latexpath '\miktex\bin\dvips.exe -D600 -E* '...
2377               '-o<viewfile>.eps <viewfile>.dvi'];
2378  catch    % hoping the path variable is properly set
2379    latexcmd = ['latex.exe -halt-on-error '...
2380               '-interaction nonstopmode <viewfile>.tex'];
2381    dvipscmd = ['dvips.exe -D600 -E* '...
2382               '-o<viewfile>.eps <viewfile>.dvi'];
2383  end
2384  epstoolcmd = ['C:\Ghostgum\epstool\bin\epstool.exe '...
2385               '--bbox --copy --output '...
2386               '<filename>_final.eps <viewfile>.eps'];
2387  delcmd =     ['del <viewfile>.eps <viewfile>.dvi ',...
2388               '<viewfile>.aux <viewfile>.log ',...
2389               '<viewfile>.pfg'];
2390  gsviewcmd = 'C:\Ghostgum\gsview\gsview32.exe <filename>_final.eps&';
2391else % hoping the path variable is properly set
2392  latexcmd =   ['latex -halt-on-error '...
2393               '-interaction nonstopmode <viewfile>.tex'];
2394  dvipscmd =   ['dvips -D600 -E* '...
2395               '-o<viewfile>.eps <viewfile>.dvi'];
2396  epstoolcmd = ['epstool --bbox --copy --output '...
2397               '<filename>_final.eps <viewfile>.eps'];
2398  delcmd =     ['rm <viewfile>.eps <viewfile>.dvi ',...
2399               '<viewfile>.aux <viewfile>.log ',...
2400               '<viewfile>.pfg'];
2401  gsviewcmd =  'ghostview <filename>_final.eps&';
2402end
2403
2404vers = version;
2405vers = eval(vers(1:3));
2406if vers < 6.5
2407  colorvalue=0;
2408else
2409  colorvalue=1;
2410end
2411
2412   opt = struct(...
2413      'figno',{1},...
2414      'filename','unnamed',...
2415      'width',12,...
2416      'factor',0.8,...
2417      'scalefonts',1,...
2418      'keepfontprops',0,...
2419      'asonscreen',0,...
2420      'keepticklabels',0,...
2421      'mathticklabels',0,...
2422      'head',1,...
2423      'comment','',...
2424      'caption','',...
2425      'extrapicture',0,...
2426      'nzeros',3,...
2427      'verbose',0,...
2428      'figcopy',1,...
2429      'printcmd',['print(''-f<figurenumber>'',' ...
2430                      '''-depsc'',''-painters'','...
2431                      '''<filename.eps>'')'],...
2432      'package','graphicx',...
2433      'color',colorvalue,...
2434      'createview',0,...
2435      'viewfilename','unnamed_',...
2436      'processview',0,...
2437      'cmd1',latexcmd,...
2438      'cmd2',dvipscmd,...
2439      'cmd3',epstoolcmd,...
2440      'cmd4',delcmd,...
2441      'cmd5',gsviewcmd,...
2442      'cmd6','',...
2443      'cmd7','',...
2444      'cmd8','');
2445
2446%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2447
2448function updategui(LAPRINTHAN,LAPRINTOPT)
2449% update gui
2450
2451set(LAPRINTHAN.figno,'string',num2str(LAPRINTOPT.figno))
2452set(LAPRINTHAN.filename,'string',LAPRINTOPT.filename)
2453% width, factor, scalefonts
2454if LAPRINTOPT.keepfontprops
2455   set(LAPRINTHAN.keepfontprops,'check','on')
2456else
2457   set(LAPRINTHAN.keepfontprops,'check','off')
2458end
2459if LAPRINTOPT.asonscreen
2460   set(LAPRINTHAN.asonscreen,'check','on')
2461else
2462   set(LAPRINTHAN.asonscreen,'check','off')
2463end
2464if LAPRINTOPT.keepticklabels
2465   set(LAPRINTHAN.keepticklabels,'check','on')
2466else
2467   set(LAPRINTHAN.keepticklabels,'check','off')
2468end
2469if LAPRINTOPT.mathticklabels
2470   set(LAPRINTHAN.mathticklabels,'check','on')
2471else
2472   set(LAPRINTHAN.mathticklabels,'check','off')
2473end
2474if LAPRINTOPT.head
2475   set(LAPRINTHAN.head,'check','on')
2476else
2477   set(LAPRINTHAN.head,'check','off')
2478end
2479% comment, caption
2480if LAPRINTOPT.extrapicture
2481   set(LAPRINTHAN.extrapicture,'check','on')
2482else
2483   set(LAPRINTHAN.extrapicture,'check','off')
2484end
2485% nzeros
2486if LAPRINTOPT.verbose
2487   set(LAPRINTHAN.verbose,'check','on')
2488else
2489   set(LAPRINTHAN.verbose,'check','off')
2490end
2491if LAPRINTOPT.figcopy
2492   set(LAPRINTHAN.figcopy,'check','on')
2493else
2494   set(LAPRINTHAN.figcopy,'check','off')
2495end
2496% printcmd
2497switch LAPRINTOPT.package
2498  case 'epsfig'
2499   set(LAPRINTHAN.package_epsfig,'check','on')
2500   set(LAPRINTHAN.package_graphicx,'check','off')
2501  case 'graphicx'
2502   set(LAPRINTHAN.package_epsfig,'check','off')
2503   set(LAPRINTHAN.package_graphicx,'check','on')
2504end
2505if LAPRINTOPT.color
2506   set(LAPRINTHAN.color,'check','on')
2507else
2508   set(LAPRINTHAN.color,'check','off')
2509end
2510if LAPRINTOPT.createview
2511   set(LAPRINTHAN.createview,'check','on')
2512else
2513   set(LAPRINTHAN.createview,'check','off')
2514end
2515% viewfilename
2516if LAPRINTOPT.processview
2517   set(LAPRINTHAN.processview,'check','on')
2518else
2519   set(LAPRINTHAN.processview,'check','off')
2520end
2521% cmd1, cmd2, cmd3, cmd4, cmd5, cmd6, cmd7, cmd8
2522
2523%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2524
2525function txt = helptext()
2526% help text
2527txt={...
2528'',...
2529['LAPRINT prints a figure for inclusion in LaTeX documents. ',...
2530'It creates an eps-file and a tex-file. The tex-file contains the ',...
2531'annotation of the figure such as titles, labels and texts. The ',...
2532'eps-file contains the non-text part of the figure and is called ',...
2533'by the tex-file. The main advantage of using LaPrint ',...
2534'is that the annotation can be neatly (e.g., including math ',...
2535'mode and fancy font constructs) set within LaTeX.'],...
2536'',...
2537'Prerequisites:',...
2538'~~~~~~~~~~~~~~',...
2539['Matlab 6.1 or above is required. To process the LaTeX file, a ',...
2540'LaTeX compiler (including the packages ''graphicx'' and ',...
2541'''psfrag'') and a dvi-to-postscript converter (like dvips) '...
2542'is required. Optional tools are a postscript-viewer ',...
2543'(like ghostview), a postscript bounding box converter ',...
2544'(like epstool) and the LaTeX packages color ',...
2545'and epsfig.'],...
2546'',...
2547'Installation:',...
2548'~~~~~~~~~~~~~',...
2549['LaPrint comes as a single m-file, which has to be placed  ',...
2550'somewhere in the Matlab search path. If you want LaPrint to ',...
2551'call LaTeX and friends, the (system dependent) executables have ',...
2552'to be defined using the GUI (see below).'],...
2553'',...
2554'An example to get started:',...
2555'~~~~~~~~~~~~~~~~~~~~~~~~~~',...
2556['It is recommended to switch off the Matlab TeX ',...
2557'interpreter before creating a graphics to be processed by ',...
2558'LaPrint:'],...
2559'  >> set(0,''DefaultTextInterpreter'',''none'')',...
2560'Create an example graphics using',...
2561'  >> figure(1), clf',...
2562'  >> plot([1 2])',...
2563'  >> xlabel(''$x$'')',...
2564'  >> ylabel(''A straight line $f(x)=\alpha x + \beta$'')',...
2565'  >> text(1.1,1.9,{''\textbf{This figure is not exiting.}'',...',...
2566'     ''(but it shows some features of \texttt{laprint})''})',...
2567['Note that the text uses LaTeX constructs like ''$.$'', ',...
2568'''\alpha'' and ''\textbf{}''. You can employ the full LaTeX ',...
2569'repertoire here.'],...
2570['Open the LaPrint graphical user interface (GUI) ',...
2571'(if you haven''t already done so), by typing'],...
2572'  >> laprint',...
2573['Check if the GUI points to Figure Number 1, ',...
2574'and save the graphics by pressing ''Go!''. ',...
2575'This creates the files ''unnamed.tex'' and ''unnamed.eps''. ',...
2576'These can be included in a LaTeX document as follows:'],...
2577'  % This is the LaTeX document testdoc.tex',...
2578'  \documentclass{article}',...
2579'  \usepackage{graphicx,color,psfrag}',...
2580'  \begin{document}',...
2581'  Here comes a Matlab figure created with \texttt{laprint}:\\',...
2582'  \input{unnamed}',...
2583'  \end{document}',...
2584['This document can be compiled with LaTeX (to create ',...
2585'''testdoc.dvi'') and converted to postscript (to create ',...
2586'''testdoc.ps''). The document ''testdoc.ps'' will contain the ',...
2587'Matlab graphics with LaTeX annotation. Observe that the ',...
2588'figure is 12cm wide and that the fonts are scaled to 80% ',...
2589'of their original size. This is the default behaviour of ',...
2590'LaPrint, which can be adjusted using ''Options'' in the ',...
2591'GUI menu bar (as will explained below).'],...
2592'',...
2593['Instead of using the GUI you can also call LaPrint ',...
2594'from the command line (or from an m-file) as follows:'],...
2595'  >> laprint(1,''unnamed'')',...
2596'',...
2597'This is what LaPrint does:',...
2598'~~~~~~~~~~~~~~~~~~~~~~~~~~',...
2599'Basically, LaPrint performs the following tasks:',...
2600' - Take a preliminary copy of the figure. ',...
2601' - In the preliminary figure, replace all text objects by tags.',...
2602[' - Save the preliminary figure (with tags) as an eps-file using ',...
2603'the Matlab ''print'' command.'],...
2604[' - Create a tex-file which calls the eps-file (using the ',...
2605'''graphicx'' package) and replaces ',...
2606'the tags by the original text (using the ''psfrag'' package).'],...
2607'',...
2608['It is instructive to have a look into the tex-file ',...
2609'(''unnamed.tex'' in the above example). ',...
2610'If your graphics contains huge amounts of LaTeX-code, then ',...
2611'you might also consider editing the tex-file with your ',...
2612'favourate LaTeX editor. You have however to be carefull, ',...
2613'because LaPrint (using default settings) doesn''t care ',...
2614'overwriting files.'],...
2615'',...
2616'Using the LaPrint GUI: ',...
2617'~~~~~~~~~~~~~~~~~~~~~~',...
2618['The behaviour of LaPrint can be controlled by various settings ',...
2619'and options. Using the GUI, these can be set using the ''Options'' ',...
2620'entry in the menu bar. Using LaPrint from the command line, ' ,...
2621'these can be set by extra input arguments in the form of ',...
2622'option/value pairs. In the following, the options are explained ',...
2623'in some detail based on the GUI. Later, a table with the ',...
2624'command line option/value pairs is given.'],...
2625'',...
2626'In the main LaPrint window you can specify',...
2627['-- the number of the Matlab figure to be saved (this must be ',...
2628'the handle of an open Matlab window) and '],...
2629['-- the basename of the files to be saved (for instance, if ',...
2630'the basename is ''unnamed'', then ''unnamed.tex'' and ',...
2631'''unnamed.eps'' are created;).'],...
2632'',...
2633'Via the menu bar you can control the following settings:',...
2634'',...
2635'Options --> Sizes and Scalings ...',...
2636'',...
2637'This opens a window where you can specify ',...
2638'-- the width (in cm) of the graphics in the LaTeX document;',...
2639'-- a scaling factor and',...
2640'-- whether you want fonts to be scaled.',...
2641['The width controls the size of the graphics. Its height ',...
2642'is computed such that the ratio of width to height of the ',...
2643'figure on screen is retained. The factor controls the ',...
2644'''denseness'' of the graphics. For instance, if the width is ',...
2645'w=12 and the factor is f=0.8, then the graphics in the ',...
2646'eps-file will have width w/f=15 cm and the tex-file ',...
2647'scales it down to 12 cm. This means that lines become thinner ',...
2648'and fonts become smaller (as compared to w=12; f=1.0). ',...
2649'Good values for papers are f=0.8 to f=1.0, ',...
2650'and f=1.5 is a good value for presentations. ',...
2651'Switching font scaling off only scales the graphics. ',...
2652'You may want to experiment with some w/f/scalefont combinations ',...
2653'to find out your personal preference. '],...
2654'',...
2655'Options --> Translate Matlab Font Properties to LaTeX ',...
2656'',...
2657['This option can be switched on/off. When off, all text ',...
2658'will be set using the LaTeX font which is active while ',...
2659'entering the tex-file (Matlab font settings are ignored). When ',...
2660'on, Matlab font settings are translated to LaTeX font ',...
2661'settings.'],...
2662'',...
2663'Options --> Print Limits and Ticks as on Screen',...
2664'',...
2665['This option can be switched on/off. When on, the axes ',...
2666'limits and ticks are frozen. They appear in the LaTeX ',...
2667'document as on screen. When off, they are adapted by ',...
2668'Matlab.'],...
2669'',...
2670'Options --> Keep Tick Labels within eps File',...
2671'',...
2672['This option can be switched on/off. When on, the tick ',...
2673'labels aren''t replaced by their LaTeX equivalents. This is ',...
2674'useful for some 3D-plots.'],...
2675'',...
2676'Options --> Set Tick Labels in LaTeX Math Mode',...
2677'',...
2678['This option can be switched on/off. When on, the tick ',...
2679'labels are surrounded by a ''$''.'],...
2680'',...
2681'Options --> Equip the tex File with a Head',...
2682'',...
2683['This option can be switched on/off. When on, the tex-file ',...
2684'is equipped with a header with a bunch of comments (date, files, ',...
2685'example, comment text,...).'],...
2686'',...
2687'Options --> Comment in the Head of the tex File ...',...
2688'',...
2689['This opens a window where you can specify a comment to be ',...
2690'placed in the header of the tex file.'],...
2691'',...
2692'Options --> Place a LaTeX caption in the tex File ...',...
2693'',...
2694['This opens a window where you can enter a caption text. If this ',...
2695'caption text is nonempty, it is placed as a \caption{} ',...
2696'into the tex-file. Thus the text will appear in the LaTeX ',...
2697'document. In addition a \label{} is placed in the tex-file ',...
2698'which can be used to refer to the graphics. The label will ',...
2699'be fig: followed by the basename of the files, e.g., ',...
2700'\label{fig:unnamed}.'],...
2701'',...
2702'Options --> Place an Extra Picture in each Axes',...
2703'',...
2704['This option can be switched on/off. When on, each axes in the ',...
2705'figure is equipped with an empty LaTeX ''picture'' environment. ',...
2706'It can be used to place some additional material into the ',...
2707'figure by editing the tex-file.'],...
2708'',...
2709'Options --> Length of the psfrag Replacement Strings ...',...
2710'',...
2711['This opens a window where you can enter the length of the ',...
2712'psfrag tags. If you have huge amounts of text, the default ',...
2713'length of 3 might not suffice.'],...
2714'',...
2715'Options --> Call LaPrint in verbose mode',...
2716'',...
2717['This option can be switched on/off. When on, LaPrint issues ',...
2718'some messages and warns before overwriting files.'],...
2719'',...
2720'Options --> Copy Figure and Modify that Copy',...
2721'',...
2722['This option can be switched on/off. When on, LaPrint takes ',...
2723'a copy of the figure to be printed and places its tags into ',...
2724'that copy. When done, the copy is deleted. When off, the ',...
2725'figure is messed up by tags. It gets unusable, but you can see ',...
2726'what LaPrint is doing. Besides, there are bugs in the Matlab ',...
2727'''copyobj'' command. If these show up, this option is useful.'],...
2728'',...
2729'Options --> Matlab Print Command ...',...
2730'',...
2731['This opens a window where you can enter the Matlab command to ',...
2732'save the graphics in an eps-file. You can modify the standard ',...
2733'print command to include or remove options (like ''-loose'') ',...
2734'or employ a different command (like exportfig). '],...
2735'',...
2736'Options --> Matlab Graphics Package',...
2737'',...
2738'You can chose between ''graphicx'' and ''epsfig''.',...
2739'',...
2740'Options --> Use LaTeX ''color'' package',...
2741'',...
2742['This option can be switched on/off. When on, LaPrint places ',...
2743'color commands into the tex file to optain colored text.'],...
2744'',...
2745'Options --> View File ... --> Create a View File',...
2746'',...
2747['This option can be switched on/off. When on, LaPrint creates ',...
2748'a third file (the view-file), which is a complete LaTeX ',...
2749'document showing the graphics. You can process this file ',...
2750'with your favourate LaTeX- and dvi-to-postscript compiler. ',...
2751'This is useful to have a quick look at the result and to ',...
2752'create a futher eps-file containing everything (see below). ',...
2753'The process of compiling the view-file can be automated using ',...
2754'the options described below.'],...
2755'',...
2756'Options --> View File ... --> Name of the View File',...
2757'',...
2758['This opens a window where you can enter the name of the ',...
2759'view-file to be created.'],...
2760'',...
2761'Options --> View File ... --> Process the View File',...
2762'',...
2763['This option can be switched on/off. When on, LaPrint ',...
2764'calls the LaTeX compiler and its friends to process the ',...
2765'view file. The names of the executables to be used and ',...
2766'their syntax can be set using the following option. '],...
2767'',...
2768['Options --> View File ... --> Executables for processing ',...
2769'View File'],...
2770'',...
2771['This opens a window where you can enter the names of up to 8 ',...
2772'system commands to process the view-file. If you have less than 8 ',...
2773'programs, you can leave the some of the fields empty. In all ',...
2774'commands, LaPrint internally replaces the tag ''<viewfile>'' ',...
2775'by the basename of the viewfile and the tag <filename> by ',...
2776'the basename specified in the main LaPrint window. ',...
2777'In following example you have to add the paths, if the ',...
2778'commands are not in the system search path.'],...
2779'',...
2780'To create and view a ps document:',...
2781' cmd1:  latex <viewfile>.tex',...
2782' cmd2:  dvips -o<viewfile>.ps <viewfile>.dvi',...
2783' cmd3:  gsview32 <viewfile>.ps   (ghostview for Unix)',...
2784'',...
2785'',...
2786'Preferences:',...
2787'~~~~~~~~~~~~',...
2788['All options and settings of LaPrint can be ',...
2789'(internally and externally) stored ',...
2790'in ''Preferences''. Suppose that you have changed, via ',...
2791'the ''Options'' menu bar entry, the settings of LaPrint. ',...
2792'You can make these settings to your preferred (default) ',...
2793'settings by chosing'],...
2794'',...
2795'Preferences --> Set Preferences to Current Settings',...
2796'',...
2797['This means that future sessions of LaPrint load these ',...
2798'settings on startup. You can also manually reload these ',...
2799'settings by chosing'],...
2800'',...
2801'Preferences --> Get Preferences',...
2802'',...
2803['LaPrint has built-in (factory default) preferences, ',...
2804'which you see when using ',...
2805'LaPrint the first time. You can restore these defaults ',...
2806'by chosing'],...
2807'',...
2808'Preferences --> Get Factory Defaults',...
2809'',...
2810['If you want your personal preferences be completely removed ',...
2811'(switching back to factory defaults on startup), you should ',...
2812'chose'],...
2813'',...
2814'Preferences --> Remove Preferences',...
2815'',...
2816['If you have multiple projects running and want to use different ',...
2817'settings simultaneously, you can save/load preferences ',...
2818'to/from mat-files by chosing'],...
2819'',...
2820'Preferences --> Save Current Settings to a File ',...
2821'Preferences --> Load Settings from a File ',...
2822'',...
2823'These open a new window asking for the name of a .mat file.',...
2824'',...
2825'Using LaPrint from the command line:',...
2826'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',...
2827['When using LaPrint from the command line (or from an m-file), ',...
2828'the following syntax is required:'],...
2829'',...
2830'  laprint(figno,filename)',...
2831'  laprint(figno,filename,opta,vala,optb,valb,..)',...
2832'',...
2833'where',...
2834'  figno        : integer, figure to be printed',...
2835'  filename     : string (character array), basename of files',...
2836'                 to be created',...
2837'  opta,vala,.. : option and value pairs, where opta is one',...
2838'                 of the following options and vala is',...
2839'                 the corresponding value.',...
2840'',...
2841['When calling LaPrint from the command line without ',...
2842'option/value pairs, it uses the same '],...
2843['settings/options as the GUI on startup. This means that ',...
2844'it uses'],...
2845['-- the factory default settings (if you havn''t ',...
2846'stored your personal preferences using the GUI) or '],...
2847'-- your personal preferences. ',...
2848'The factory default settings can be enforced by typing ',...
2849'  laprint(figno,filename,''options'',''factory'')',...
2850['These settings can be overwritten by option/value pairs ',...
2851'as explained in the following table.'],...
2852'',...
2853'option          |class/val.| remark',...
2854'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',...
2855'''width''         | <double> | width of the figure in the LaTeX',...
2856'                |          | document (in cm).',...
2857'''factor''        | <double> | factor by which the figure in ',...
2858'                |          | the LaTeX document is smaller than ',...
2859'                |          | the figure in the postscript file.',...
2860'''scalefonts''    |''on''/''off''| scales the fonts with the ',...
2861'                |          | figure (see option ''factor'').',...
2862'''keepfontprops'' |''on''/''off''| translates MATLAB font',...
2863'                |          | properties (size, width, angle) into',...
2864'                |          | corresponding LaTeX font properties.',...
2865'''asonscreen''    |''on''/''off''| prints ticks and lims ',...
2866'                |          | ''as on screen''.',...
2867'''keepticklabels''|''on''/''off''| keeps the tick labels within',...
2868'                |          | the eps-file (not using LaTeX).',...
2869'''mathticklabels''|''on''/''off''| tick labels are set in LaTeX',...
2870'                |          | math mode',...
2871'''head''          |''on''/''off''| places a commenting header in ',...
2872'                |          | the tex-file.',...
2873'''comment''       | <string> | places the comment <string> into',...
2874'                |          | the header of the tex-file.',...
2875'''caption''       | <string> | adds \caption{<string>} and',...
2876'                |          | \label{fig:<filename>} to the',...
2877'                |          | tex-file.',...
2878'''extrapicture''  |''on''/''off''| adds empty picture environments',...
2879'                |          | to the axes.',...
2880'''nzeros''        | <int>    | uses replacement strings of',...
2881'                |          | length <int> in the eps-file.',...
2882'''verbose''       |''on''/''off''| verbose mode; asks before',...
2883'                |          | overwriting files and issues some ',...
2884'                |          | more messages.',...
2885'''figcopy''       |''on''/''off''| directly modifies the original',...
2886'                |          | figure.',...
2887'''printcmd''      | <string> | uses ''<string>'' as Matlab print',...
2888'                |          | command.',...
2889'''package''       | <string> | uses the LaTeX graphics package',...
2890'                |          | ''<string>''. Possible values are',...
2891'                |          | ''graphicx'' and ''epsfig''.',...
2892'''color''         |''on''/''off''| uses colored fonts (using the',...
2893'                |          | LaTeX ''color'' package).',...
2894'''createview''    |''on''/''off''| creates a view-file, which ',...
2895'                |          | calls the tex-file.',...
2896'''viewfilename''  | <string> | Basename of the  view-file.',...
2897'''processview''   |''on''/''off''| processes the view-file ',...
2898'                |          | by LaTeX and friends.',...
2899'''cmd1''          | <string> | 1st Command in the sequence of',...
2900'                |          | LaTeX and friends (enter an empty',...
2901'                |          | string to skip this command).',...
2902'''cmd2''          | <string> | 2nd LaTeX/friend Command ',...
2903'''cmd3''          | <string> | 3rd LaTeX/friend Command ',...
2904'''cmd4''          | <string> | 4th LaTeX/friend Command ',...
2905'''cmd5''          | <string> | 5th LaTeX/friend Command ',...
2906'''cmd6''          | <string> | 6th LaTeX/friend Command ',...
2907'''cmd7''          | <string> | 7th LaTeX/friend Command ',...
2908'''cmd8''          | <string> | 8th LaTeX/friend Command ',...
2909'''options''       | <string> | This option can be used to ',...
2910'                |          | employ project-dependent ',...
2911'                |          | preferences as follows:',...
2912'                |          | 1) Save your preferences to a file ',...
2913'                |          |    using the GUI:',...
2914'                |          |    Preferences --> ',...
2915'                |          |     Save Current Settings to a file',...
2916'                |          | 2) Reload these preferences',...
2917'                |          |    with laprint:',...
2918'                |          |    >> laprint(1,''unnamed'',..',...
2919'                |          |        ''options'',<string>)',...
2920'                |          |    where <string> is the name of ',...
2921'                |          |    the mat-file with preferences.',...
2922'',...
2923'',...
2924' ...................... ENJOY ! .......................',...
2925'',...
2926};
Note: See TracBrowser for help on using the repository browser.