📄 fm_laprint.m
字号:
set(figno,'MenuBar','none') pause(0.5) end if asonscreen xlimmodeauto=findobj(figno,'xlimmode','auto'); xtickmodeauto=findobj(figno,'xtickmode','auto'); xticklabelmodeauto=findobj(figno,'xticklabelmode','auto'); ylimmodeauto=findobj(figno,'ylimmode','auto'); ytickmodeauto=findobj(figno,'ytickmode','auto'); yticklabelmodeauto=findobj(figno,'yticklabelmode','auto'); zlimmodeauto=findobj(figno,'zlimmode','auto'); ztickmodeauto=findobj(figno,'ztickmode','auto'); zticklabelmodeauto=findobj(figno,'zticklabelmode','auto'); set(xlimmodeauto,'xlimmode','manual') set(xtickmodeauto,'xtickmode','manual') set(xticklabelmodeauto,'xticklabelmode','manual') set(ylimmodeauto,'ylimmode','manual') set(ytickmodeauto,'ytickmode','manual') set(yticklabelmodeauto,'yticklabelmode','manual') set(zlimmodeauto,'ylimmode','manual') set(ztickmodeauto,'ytickmode','manual') set(zticklabelmodeauto,'yticklabelmode','manual')end set(figno,'paperunits','centimeters');set(figno,'units','centimeters');%oripp=get(figno,'PaperPosition');orip=get(figno,'Position');if factor <= 0 factor=width/orip(3);end latexwidth=width;epswidth=latexwidth/factor;epsheight = epswidth*orip(4)/orip(3);set(figno,'PaperPosition',[1 1 epswidth epsheight ])set(figno,'Position',[orip(1)+0.5 orip(2)-0.5 epswidth epsheight ])set(figno,'Name',[ 'To be printed; size: ' num2str(factor,3) ... ' x (' num2str(epswidth,3) 'cm x ' num2str(epsheight,3) 'cm)' ])asonscreen_dummy=0;if asonscreen_dummy set(xlimmodeauto,'xlimmode','auto') set(xtickmodeauto,'xtickmode','auto') set(xticklabelmodeauto,'xticklabelmode','auto') set(ylimmodeauto,'ylimmode','auto') set(ytickmodeauto,'ytickmode','auto') set(yticklabelmodeauto,'yticklabelmode','auto') set(zlimmodeauto,'ylimmode','auto') set(ztickmodeauto,'ytickmode','auto') set(zticklabelmodeauto,'yticklabelmode','auto')end% some warningsif directcall if (epswidth<13) | (epsheight<13*0.75) disp('warning: The size of the eps-figure is quite small.') disp(' The text objects might not be properly set.') disp(' Reducing ''factor'' might help.') end if latexwidth/epswidth<0.5 disp([ 'warning: The size of the eps-figure is large compared ' ... 'to the latex figure.' ]) disp(' The text size might be too small.') disp(' Increasing ''factor'' might help.') end if (orip(3)-epswidth)/orip(3) > 0.1 disp(['warning: The size of the eps-figure is much smaller '... 'than the original']) disp(' figure on screen. Matlab might save different ticks and') disp([ ' ticklabels than in the original figure. See option ' ... '''asonsceen''. ' ]) endend if verbose disp('Strike any key to continue.'); pauseend %% TEXT OBJECTS: modify new figure %% find all text objectshxl=get(findobj(figno,'type','axes'),'xlabel');hyl=get(findobj(figno,'type','axes'),'ylabel');hzl=get(findobj(figno,'type','axes'),'zlabel');hti=get(findobj(figno,'type','axes'),'title');hte=findobj(figno,'type','text');% array of all text handleshtext=unique([ celltoarray(hxl) celltoarray(hyl) celltoarray(hzl) ... celltoarray(hti) celltoarray(hte)]);nt=length(htext);% generate new strings and store old onesoldstr=get(htext,'string');newstr=cell(nt,1);basestr='str00';for i=1:nt if isa(oldstr{i},'cell') if length(oldstr{i})>1 disp('LaPrint warning: Annotation in form of a cell is currently') disp(' not supported. Ignoring all but first component.') iswarning=1; end % To do: place a parbox here. oldstr{i}=oldstr{i}{1}; end if size(oldstr{i},1)>1 disp([ 'LaPrint warning: Annotation in form of string matrices ' ... 'is currently not supported.' ]) disp(' Ignoring all but first row.') iswarning=1; % To do: place a parbox here. oldstr{i}=oldstr{i}(1,:); end if length(oldstr{i}) oldstr{i}=strrep(strrep(oldstr{i},'\','\\'),'%','%%'); newstr{i} = overwritetail(basestr,i); else newstr{i}=''; endend% replace strings in figurefor i=1:nt set(htext(i),'string',newstr{i}); %set(htext(i),'visible','on');end % get alignmentshora=get(htext,'HorizontalAlignment');vera=get(htext,'VerticalAlignment');align=cell(nt,1);for i=1:nt align{i}=hora{i}(1); if strcmp(vera{i},'top') align{i}=[align{i} 't']; elseif strcmp(vera{i},'cap') align{i}=[align{i} 't']; elseif strcmp(vera{i},'middle') align{i}=[align{i} 'c']; elseif strcmp(vera{i},'baseline') align{i}=[align{i} 'B']; elseif strcmp(vera{i},'bottom') align{i}=[align{i} 'b']; endend % get font properties and create commandsif nt > 0 [fontsizecmd{1:nt}] = deal(''); [fontanglecmd{1:nt}] = deal(''); [fontweightcmd{1:nt}] = deal('');endselectfontcmd='';if keepfontprops % fontsize set(htext,'fontunits','points'); fontsize=get(htext,'fontsize'); for i=1:nt fontsizecmd{i}=[ '\\fontsize{' num2str(fontsize{i}) '}{' ... num2str(fontsize{i}*1.5) '}' ]; end % fontweight fontweight=get(htext,'fontweight'); for i=1:nt if strcmp(fontweight{i},'light') fontweightcmd{i}=[ '\\fontseries{l}\\mathversion{normal}' ]; elseif strcmp(fontweight{i},'normal') fontweightcmd{i}=[ '\\fontseries{m}\\mathversion{normal}' ]; elseif strcmp(fontweight{i},'demi') fontweightcmd{i}=[ '\\fontseries{sb}\\mathversion{bold}' ]; elseif strcmp(fontweight{i},'bold') fontweightcmd{i}=[ '\\fontseries{bx}\\mathversion{bold}' ]; else disp([ ' LaPrint warning: unknown fontweight:' fontweight{i} ]) iswarning=1; fontweightcmd{i}=[ '\\fontseries{m}\\mathversion{normal}' ]; end end % fontangle fontangle=get(htext,'fontangle'); for i=1:nt if strcmp(fontangle{i},'normal') fontanglecmd{i}=[ '\\fontshape{n}' ]; elseif strcmp(fontangle{i},'italic') fontanglecmd{i}=[ '\\fontshape{it}' ]; elseif strcmp(fontangle{i},'oblique') fontangle{i}=[ '\\fontshape{it}' ]; else disp([ ' LaPrint warning: unknown fontangle:' fontangle{i} ]) iswarning=1; fontanglecmd{i}=[ '\\fontshape{n}' ]; end end selectfontcmd= '\\selectfont '; end%% LABELS: modify new figure%if ~keepticklabels % all axes hax=celltoarray(findobj(figno,'type','axes')); na=length(hax); if directcall % try to figure out if we have 3D axes an warn issuewarning=0; for i=1:na issuewarning=max(issuewarning,is3d(hax(i))); end if issuewarning disp('LaPrint warning: There seems to be a 3D plot. The LaTeX labels are') disp(' possibly incorrect. The option ''keepticklabels'' might') disp(' help. The option ''nofigcopy'' might be wise, too.') end end % try to figure out if we linear scale with extra factor % and determine powers of 10 powers=NaN*zeros(na,3); % matrix with powers of 10 for i=1:na % all axes allxyz={ 'x', 'y', 'z' }; for ixyz=1:3 % x,y,z xyz=allxyz{ixyz}; ticklabelmode=get(hax(i),[ xyz 'ticklabelmode']); if strcmp(ticklabelmode,'auto') tick=get(hax(i),[ xyz 'tick']); ticklabel=get(hax(i),[ xyz 'ticklabel']); nticks=size(ticklabel,1); if nticks==0, powers(i,ixyz)=0; end for k=1:nticks % all ticks label=str2num(ticklabel(k,:)); if length(label)==0, powers(i,ixyz)=0; break; end if ( label==0 ) & ( abs(tick(k))>1e-10 ) powers(i,ixyz)=0; break; end if label~=0 expon=log10(tick(k)/label); rexpon=round(expon); if abs(rexpon-expon)>1e-10 powers(i,ixyz)=0; break; end if isnan(powers(i,ixyz)) powers(i,ixyz)=rexpon; else if powers(i,ixyz)~=rexpon powers(i,ixyz)=0; break; end end end end % k else % if 'auto' powers(i,ixyz)=0; end % if 'auto' end % ixyz end % i % replace all ticklabels and bookkeep nxlabel=zeros(1,na); nylabel=zeros(1,na); nzlabel=zeros(1,na); allxyz={ 'x', 'y', 'z' }; for ixyz=1:3 xyz=allxyz{ixyz}; k=1; basestr=[ xyz '00' ]; if strcmp(xyz,'y') % 'y' is not horizontally centered! basestr='v00'; end oldtl=cell(na,1); newtl=cell(na,1); nlabel=zeros(1,na); for i=1:na % set(hax(i),[ xyz 'tickmode' ],'manual') % set(hax(i),[ xyz 'ticklabelmode' ],'manual') oldtl{i}=chartocell(get(hax(i),[ xyz 'ticklabel' ])); nlabel(i)=length(oldtl{i}); newtl{i}=cell(1,nlabel(i)); for j=1:nlabel(i) newtl{i}{j} = overwritetail(basestr,k); k=k+1; oldtl{i}{j}=deblank(strrep(strrep(oldtl{i}{j},'\','\\'),'%','%%')); end set(hax(i),[ xyz 'ticklabel' ],newtl{i}); end eval([ 'old' xyz 'tl=oldtl;' ]); eval([ 'new' xyz 'tl=newtl;' ]); eval([ 'n' xyz 'label=nlabel;' ]); end % determine latex commands for font properties if keepfontprops % font size afsize=zeros(na,1); for i=1:na afsize(i)=get(hax(i),'fontsize'); end if (any(afsize ~= afsize(1) )) disp('LaPrint warning: Different font sizes for axes not supported.') disp([ ' All axses will have font size ' ... num2str(afsize(1)) '.' ] ) iswarning=1; end afsizecmd = [ '\\fontsize{' num2str(afsize(1)) '}{' ... num2str(afsize(1)*1.5) '}' ]; % font weight afweight=cell(na,1); for i=1:na afweight{i}=get(hax(i),'fontweight'); end if strcmp(afweight{1},'light') afweightcmd=[ '\\fontseries{l}\\mathversion{normal}' ]; elseif strcmp(afweight{1},'normal') afweightcmd=[ '\\fontseries{m}\\mathversion{normal}' ]; elseif strcmp(afweight{1},'demi') afweightcmd=[ '\\fontseries{sb}\\mathversion{bold}' ]; elseif strcmp(afweight{1},'bold') afweightcmd=[ '\\fontseries{bx}\\mathversion{bold}' ]; else disp([ ' LaPrint warning: unknown fontweight:' afweight{1} ]) iswarning=1; afweightcmd=[ '\\fontseries{m}\\mathversion{normal}' ]; end for i=1:na if ~strcmp(afweight{i},afweight{1}) disp(' LaPrint warning: Different font weights for axes not') disp([ ' supported. All axes will have font weight ' afweightcmd]) iswarning=1; end end % font angle afangle=cell(na,1); for i=1:na afangle{i}=get(hax(i),'fontangle'); end if strcmp(afangle{1},'normal') afanglecmd=[ '\\fontshape{n}' ]; elseif strcmp(afangle{1},'italic') afanglecmd=[ '\\fontshape{it}' ]; elseif strcmp(afangle{1},'oblique') afanglecmd=[ '\\fontshape{it}' ]; else disp([ ' LaPrint warning: unknown fontangle:' afangle{1} ]) iswarning=1; afanglecmd=[ '\\fontshape{n}' ]; end for i=1:na if ~strcmp(afangle{i},afangle{1}) disp('LaPrint warning: Different font angles for axes not supported.') disp([ ' All axes will have font angle ' afanglecmd ] ) iswarning=1; end end endend%% extra picture environment%if extrapicture unitlength=zeros(na,1); ybound=zeros(na,1); for i=1:na if ~is3d(hax(i)) xlim=get(hax(i),'xlim'); ylim=get(hax(i),'ylim'); axes(hax(i)); hori=text(ylim(1),ylim(1),[ 'origin' int2str(i) ]); set(hori,'VerticalAlignment','bottom'); set(hori,'Fontsize',2); pos=get(hax(i),'Position');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -