reverse-shooting

Matlab scripts for reverse shooting
Log | Files | Refs | README

laprint.m (100254B)


      1 function 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 
     47 laprintident = '3.16 (13.9.2004)';   
     48 vers = version;
     49 vers = eval(vers(1:3));
     50 if vers < 6.1
     51   error('Sorry. Matlab 6.1 or above is required.')
     52 end
     53 
     54 hf=131;
     55 hhf=132;
     56 
     57 % no output
     58 if nargout
     59    error('No output argument, please.')
     60 end  
     61 
     62 inter=get(0,'defaulttextinterpreter');
     63 if ~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'').'])
     68 end
     69 
     70 if 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    
    384 end  % if nargin==0
    385 
    386 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    387 %%%%
    388 %%%% callback calls ('factory' and 'getprefs' also 
    389 %%%%                  used from command line)
    390 %%%%
    391 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    392 
    393 if 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 
    760 end    % 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 
    771 if isa(figno,'cell') % called from GUI (all set)
    772 
    773   [LAPRINTHAN,LAPRINTOPT]=gethf(hf);
    774   figno=LAPRINTOPT.figno;
    775   filename=LAPRINTOPT.filename;
    776 
    777 else % 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    
    803 end
    804 
    805 % read and check command line options  
    806 
    807 try  % 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 
    897 catch % 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
   1097 end % try / catch    
   1098 
   1099 if verbose, 
   1100   disp([ 'This is LaPrint, version ' laprintident '.' ]); 
   1101 end  
   1102 
   1103 comment   = strrep(strrep(comment,'\','\\'),'%','%%');
   1104 caption   = strrep(strrep(caption,'\','\\'),'%','%%');
   1105 iscaption = logical(length(caption));
   1106 
   1107 if nzeros < 3
   1108   warning('LaPrint:general',...
   1109           'The value of nzero should be >=3. I will use nzeros=3.')
   1110   nzeros=3;  
   1111 end
   1112 
   1113 if processview 
   1114   createview=1;
   1115 end
   1116 
   1117 if mathticklabels
   1118   Do='$';
   1119 else  
   1120   Do='';
   1121 end  
   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);
   1128 if ~strcmp(texdirname,epsdirname)
   1129    warning('LaPrint:files',['The eps-file and tex-file are '...
   1130           'placed in different directories.']);
   1131 end
   1132 
   1133 if 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  
   1147 end
   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
   1157 shh = get(0,'ShowHiddenHandles');
   1158 set(0,'ShowHiddenHandles','on');
   1159 
   1160 % preparing check for copyobj bug
   1161 figno_ori = figno;
   1162 number_children_ori = length(get(figno_ori,'children'));
   1163 
   1164 % open new figure (if required) and set properties
   1165 if 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)
   1171 end  
   1172 
   1173 if 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')
   1192 end  
   1193 set(figno,'paperunits','centimeters');
   1194 set(figno,'units','centimeters');
   1195 orip = get(figno,'Position');
   1196 
   1197 % determine width and height
   1198 if factor <= 0
   1199   factor = width/orip(3);
   1200 end 
   1201 latexwidth = width;
   1202 epswidth   = latexwidth/factor;
   1203 epsheight  = epswidth*orip(4)/orip(3);
   1204 
   1205 set(figno,'PaperPosition',[0 0 epswidth epsheight ])
   1206 set(figno,'papersize',[epswidth epsheight])
   1207 set(figno,'Position',[orip(1)+0.5 orip(2)-0.5 epswidth epsheight ])
   1208 set(figno,'Name',[ 'To be printed; size: ' num2str(factor,3) ...
   1209   ' x (' num2str(epswidth,3) 'cm x ' num2str(epsheight,3) 'cm)' ])
   1210 
   1211 % some warnings
   1212 if 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
   1233 end  
   1234 
   1235 %
   1236 % TEXT OBJECTS: modify new figure 
   1237 %
   1238 
   1239 % find all text objects
   1240 hxl = get(findobj(figno,'type','axes'),'xlabel');
   1241 hyl = get(findobj(figno,'type','axes'),'ylabel');
   1242 hzl = get(findobj(figno,'type','axes'),'zlabel');
   1243 hti = get(findobj(figno,'type','axes'),'title');
   1244 hte = findobj(figno,'type','text');
   1245 
   1246 % array of all text handles
   1247 htext = unique([ celltoarray(hxl) celltoarray(hyl) celltoarray(hzl) ...
   1248       celltoarray(hti) celltoarray(hte)]);
   1249 nt = length(htext);
   1250 
   1251 % set(celltoarray(hxl),'VerticalAlignment','top');
   1252 % get alignments
   1253 hora  = get(htext,'HorizontalAlignment');
   1254 vera  = get(htext,'VerticalAlignment');
   1255 align = cell(nt,1);
   1256 for 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
   1278 end  
   1279 
   1280 % generate new strings and store old ones
   1281 oldstr   = get(htext,'string');
   1282 newstr   = cell(nt,1);
   1283 basestr  = ['s' char(48*ones(1,nzeros-1))];
   1284 extrastr = 0;
   1285 for 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  
   1394 end % for
   1395 
   1396 ntp = nt+extrastr;
   1397 
   1398 % Alignment of Legends
   1399 if extrastr > 0
   1400   align{ntp} = [];
   1401   [align{nt+1:ntp}] = deal('lc');
   1402 end
   1403 
   1404 % get font properties and create commands
   1405 if 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('');
   1411 end
   1412 selectfontcmd = '';
   1413 
   1414 if 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    
   1459 end
   1460 
   1461 if 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  
   1485 end
   1486 
   1487 %
   1488 % LABELS: modify new figure
   1489 %
   1490 
   1491 if ~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 
   1729 end
   1730 
   1731 %
   1732 % extra picture environment
   1733 %
   1734 
   1735 if 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 
   1755 end  
   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)
   1766 if ~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')
   1785 end
   1786 
   1787 % create eps file
   1788 cmd = strrep(printcmd,'<filename.eps>',epsfullnameext);
   1789 cmd = strrep(cmd,'<filename>',filename);
   1790 cmd = strrep(cmd,'<figurenumber>',int2str(figno));
   1791   
   1792 if verbose
   1793   disp([ 'executing: '' ' cmd ' ''' ]);
   1794 end
   1795 eval(cmd);
   1796 
   1797 %
   1798 % create latex file
   1799 %
   1800 if verbose
   1801   disp([ 'writing to: '' ' texfullnameext ' ''' ])
   1802 end
   1803 fid = fopen(texfullnameext,'w');
   1804 
   1805 % head
   1806 if 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');
   1836 else 
   1837   fprintf(fid,[ '%% generated by laprint.m\n' ]);
   1838   fprintf(fid,'%%\n');
   1839 end
   1840 
   1841 % go on
   1842 fprintf(fid,'\\begin{psfrags}%%\n');
   1843 %fprintf(fid,'\\fontsize{10}{12}\\selectfont%%\n');
   1844 fprintf(fid,'\\psfragscanon%%\n');
   1845 
   1846 % text strings
   1847 
   1848 numbertext=0;
   1849 for i=1:nt
   1850   numbertext = numbertext+length(newstr{i});
   1851 end
   1852 if 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
   1863 end
   1864 
   1865 % labels
   1866 
   1867 if ~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
   1979 end  
   1980 
   1981 % extra picture
   1982 if 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
   1997 end  
   1998 
   1999 % figure
   2000 fprintf(fid,'%%\n');
   2001 fprintf(fid,'%% Figure:\n');
   2002 if iscaption
   2003   fprintf(fid,[ '\\parbox{' num2str(latexwidth) 'cm}{\\centering%%\n' ]);
   2004 end  
   2005 if ~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
   2017 else
   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
   2029 end
   2030 if iscaption
   2031   fprintf(fid,[ '\\caption{' caption '}%%\n' ]);
   2032   fprintf(fid,[ '\\label{fig:' texbasename '}%%\n' ]);
   2033   fprintf(fid,[ '}%%\n' ]);
   2034 end  
   2035 fprintf(fid,'\\end{psfrags}%%\n');
   2036 fprintf(fid,'%%\n');
   2037 fprintf(fid,[ '%% End ' texbasenameext '\n' ]);
   2038 fclose(fid);
   2039 
   2040 set(figno,'Name','Printed by LaPrint')
   2041 if 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)
   2049 end
   2050 
   2051 % check for copyobj-bug --> should be ok now!
   2052 number_children_new = length(get(figno_ori,'children'));
   2053 if 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 
   2069 if 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);
   2108 end
   2109 
   2110 % process view file
   2111     
   2112 if 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 
   2133 end
   2134 
   2135 set(0,'ShowHiddenHandles',shh);
   2136 
   2137 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2138 %%%%
   2139 %%%% functions used
   2140 %%%%
   2141 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2142 
   2143 function [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);
   2153 fullnameext = [ dirname basename '.' extension ];
   2154 basenameext = [ basename '.' extension ];
   2155 if 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
   2172 end
   2173 if ( exist(dirname)~=7 & ~strcmp(dirname,[ '.' filesep ]) ...
   2174       & ~strcmp(dirname,filesep) )
   2175   error([ 'Directory ' dirname ' does not exist.' ] )
   2176 end  
   2177 
   2178 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2179 
   2180 function [dirname,basename] = splitfilename(filename);
   2181 % splits filename into dir and base
   2182 slashpos  = findstr(filename,filesep);
   2183 nslash    = length(slashpos);
   2184 nfilename = length(filename);
   2185 if nslash
   2186   dirname  = filename(1:slashpos(nslash));
   2187   basename = filename(slashpos(nslash)+1:nfilename);
   2188 else
   2189   dirname = pwd;
   2190   nn=length(dirname);
   2191   if ~strcmp(dirname(nn),filesep)
   2192     dirname = [ dirname filesep ];
   2193   end   
   2194   basename = filename;
   2195 end  
   2196 
   2197 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2198 
   2199 function yesno = is3d(haxes);
   2200 % tries to figure out if axes is 3D
   2201 yesno = 0;
   2202 CameraPosition = get(haxes,'CameraPosition');
   2203 CameraTarget = get(haxes,'CameraTarget');
   2204 CameraUpVector = get(haxes,'CameraUpVector');
   2205 if CameraPosition(1)~=CameraTarget(1)
   2206   yesno = 1;
   2207 end  
   2208 if CameraPosition(2)~=CameraTarget(2)
   2209   yesno = 1;
   2210 end  
   2211 if any(CameraUpVector~=[0 1 0])
   2212   yesno = 1;
   2213 end  
   2214 
   2215 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2216 
   2217 function b = celltoarray(a);
   2218 % converts a cell of doubles to an array
   2219 if iscell(a),
   2220   b = [];
   2221   for i=1:length(a),
   2222     b = [b a{i}]; 
   2223   end  
   2224 else, 
   2225   b = a(:)';
   2226 end  
   2227 
   2228 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2229 
   2230 function b = chartocell(a)
   2231 % converts a character array into a cell array of characters
   2232 
   2233 % convert to cell 
   2234 if 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  
   2240 else
   2241   b = a;
   2242 end  
   2243 % convert to char
   2244 n=length(b);
   2245 for j=1:n
   2246   if isa(b{j},'double')
   2247     b{j} = num2str(b{j});
   2248   end  
   2249 end	
   2250 
   2251 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2252 
   2253 function b = overwritetail(a,k)
   2254 % overwrites tail of a by k
   2255 % a,b: strings
   2256 % k: integer
   2257 ks = int2str(k);
   2258 b = [ a(1:(length(a)-length(ks))) ks ];
   2259 
   2260 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2261 
   2262 function [rgb,isc] = char2rgb(c,c0)
   2263 % convert color definitions from character to rgb-vector
   2264 
   2265 isc = 1;
   2266 if ~ischar(c)
   2267   rgb = c; 
   2268 else  
   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    
   2298 end    
   2299 
   2300 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2301 
   2302 function v = value01(val,opt)
   2303 % convert off/on to 0/1
   2304 
   2305 if nargin==2
   2306    txt = ['Value of ' opt ' must be ''on'' or ''off'''];
   2307 else
   2308    txt = ['Value must be ''on'' or ''off'''];
   2309 end
   2310 
   2311 if  ~isa(val,'char')  
   2312   error(txt)
   2313 end
   2314 val = lower(strrep(val,' ',''));
   2315 switch val
   2316   case 'on'
   2317     v = 1;
   2318   case 'off'
   2319     v = 0;
   2320   otherwise
   2321     error(txt)
   2322 end
   2323 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2324 
   2325 function v = valueyn(val)
   2326 % convert 0/1 to off/on 
   2327 
   2328 if  ~isa(val,'double')  
   2329   error([ 'Value must be ''0'' or ''1'''])
   2330 end
   2331 switch val
   2332   case 0
   2333     v = 'off';
   2334   case 1
   2335     v = 'on';
   2336   otherwise
   2337     error([ 'Value must be ''0'' or ''1'''])
   2338 end
   2339 
   2340 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2341 
   2342 function sethf(hf,LAPRINTHAN,LAPRINTOPT)
   2343 % store in UserData of gui 
   2344 
   2345 set(hf,'UserData',{LAPRINTHAN,LAPRINTOPT})
   2346 
   2347 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2348 
   2349 function [LAPRINTHAN,LAPRINTOPT]=gethf(hf)
   2350 % load from UserData of gui 
   2351 
   2352 d=get(hf,'UserData');
   2353 LAPRINTHAN=d{1};
   2354 LAPRINTOPT=d{2};
   2355 
   2356 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2357 
   2358 function opt = prefsettings
   2359     if ispref('LaPrint','LAPRINTOPT')  
   2360       opt = getpref('LaPrint','LAPRINTOPT');
   2361     else
   2362       opt = [];  
   2363     end    
   2364 
   2365 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2366 
   2367 function opt=factorysettings
   2368 
   2369 % try to find LaTeX and friends 
   2370 if 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&';
   2391 else % 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&';
   2402 end
   2403 
   2404 vers = version;
   2405 vers = eval(vers(1:3));
   2406 if vers < 6.5
   2407   colorvalue=0;
   2408 else
   2409   colorvalue=1;
   2410 end
   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 
   2448 function updategui(LAPRINTHAN,LAPRINTOPT)
   2449 % update gui
   2450 
   2451 set(LAPRINTHAN.figno,'string',num2str(LAPRINTOPT.figno))
   2452 set(LAPRINTHAN.filename,'string',LAPRINTOPT.filename)
   2453 % width, factor, scalefonts
   2454 if LAPRINTOPT.keepfontprops
   2455    set(LAPRINTHAN.keepfontprops,'check','on')
   2456 else 
   2457    set(LAPRINTHAN.keepfontprops,'check','off')
   2458 end
   2459 if LAPRINTOPT.asonscreen
   2460    set(LAPRINTHAN.asonscreen,'check','on')
   2461 else 
   2462    set(LAPRINTHAN.asonscreen,'check','off')
   2463 end
   2464 if LAPRINTOPT.keepticklabels
   2465    set(LAPRINTHAN.keepticklabels,'check','on')
   2466 else 
   2467    set(LAPRINTHAN.keepticklabels,'check','off')
   2468 end
   2469 if LAPRINTOPT.mathticklabels
   2470    set(LAPRINTHAN.mathticklabels,'check','on')
   2471 else 
   2472    set(LAPRINTHAN.mathticklabels,'check','off')
   2473 end
   2474 if LAPRINTOPT.head
   2475    set(LAPRINTHAN.head,'check','on')
   2476 else 
   2477    set(LAPRINTHAN.head,'check','off')
   2478 end
   2479 % comment, caption
   2480 if LAPRINTOPT.extrapicture
   2481    set(LAPRINTHAN.extrapicture,'check','on')
   2482 else 
   2483    set(LAPRINTHAN.extrapicture,'check','off')
   2484 end
   2485 % nzeros
   2486 if LAPRINTOPT.verbose
   2487    set(LAPRINTHAN.verbose,'check','on')
   2488 else 
   2489    set(LAPRINTHAN.verbose,'check','off')
   2490 end
   2491 if LAPRINTOPT.figcopy
   2492    set(LAPRINTHAN.figcopy,'check','on')
   2493 else 
   2494    set(LAPRINTHAN.figcopy,'check','off')
   2495 end
   2496 % printcmd
   2497 switch 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')
   2504 end
   2505 if LAPRINTOPT.color
   2506    set(LAPRINTHAN.color,'check','on')
   2507 else 
   2508    set(LAPRINTHAN.color,'check','off')
   2509 end
   2510 if LAPRINTOPT.createview
   2511    set(LAPRINTHAN.createview,'check','on')
   2512 else 
   2513    set(LAPRINTHAN.createview,'check','off')
   2514 end
   2515 % viewfilename
   2516 if LAPRINTOPT.processview
   2517    set(LAPRINTHAN.processview,'check','on')
   2518 else 
   2519    set(LAPRINTHAN.processview,'check','off')
   2520 end
   2521 % cmd1, cmd2, cmd3, cmd4, cmd5, cmd6, cmd7, cmd8
   2522 
   2523 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2524 
   2525 function txt = helptext()
   2526 % help text
   2527 txt={...
   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 };