2013-06-03 40 views
4

我正在嘗試製作一個很適合LaTeX文檔的matlab圖形。一個已知的問題是,XTickLabel和YTickLabels不使用LaTeX解釋器渲染,導致看起來不好的情節。 (注意:我意識到有一些修復涉及用文本對象替換tex標籤(即format_tics),但是這些解決方案在繪製多個數字時並不重要,並且帶有需要大量調整的自身問題)Matlab字體在打印或導出時不能正確渲染

我覺得通過改變字體來解決這個問題,而不是替換圖中的對象,這有點優雅。

downloaded a .otf乳膠字體的版本,並將其設置爲顯示整個圖形:

set(0,'defaulttextinterpreter','latex') 
    set(0,'DefaultTextFontSize', 10) 
    set(0,'DefaultTextFontname', 'CMU Serif') 
    set(0,'DefaultAxesFontSize', 10) 
    set(0,'DefaultAxesFontName','CMU Serif') 

東西要在MATLAB圖窗口好;然而當印刷時,事情就會崩潰。

如果我使用「畫家」渲染器打印(使用導出GUI或打印命令),字體看起來很有趣且始終不一致。某些符號將無法正確顯示,並且在整個打印圖形中出現不同的字體。

print('-depsc','-painters',['InstP.eps'])   

如果我切換到zbuffer渲染器,字體變得一致,但也有其他錯誤。質量下降,一些文本被遺漏(或被其他文本覆蓋)。

print('-depsc','-zbuffer',['InstZ.eps']) 

該opengl只是一個混亂無處不在。

有沒有人知道爲什麼這些渲染有這些字體的麻煩?和任何解決方法,讓字體正確呈現?

示例代碼:

subplot(1,2,1) 
     imshow(IMG,'XData',XDat,'YData',YDat); 
     axis image;axis([0 20 -5 5]); 
     xlabel('$x^*$'); 
    subplot(1,2,2) 
    imshow(SqImg,'XData',Xs,'YData',Xs); 
    xlabel('$\Phi_B$'); 
    ylabel('$\Phi_A$'); 
    axis square; 
    set(gca,'YDir','normal',... 
      'XAxisLocation','bottom',... 
      'YAxisLocation','left',... 
     'XTick',(0:.5:1).^Exp,'XTickLabel',0:.5:1,... 
     'YTick',(0:.5:1).^Exp,'YTickLabel',0:.5:1); 


print('-depsc','-painters',['InstP.eps'])   
print('-depsc','-zbuffer',['InstZ.eps'])   
+0

我應該注意到,我對[拉丁現代羅馬](http://www.ctan.org/tex-archive/fonts/lm/fonts/opentype/public/lm)也有同樣的問題,字體 – mrsoltys

+0

作爲解決方法,您可以使用'plot2svg'(http://www.mathworks.de/matlabcentral/fileexchange/7401-scalable-vector-graphics-svg-export-of-figures)創建'* .svg'可以使用IncScape或Adobe Illustrator輕鬆轉換爲'* .eps'的文件。 –

+0

File Exchange的其他解決方法選項是['export_fig'](http://www.mathworks.co.uk/matlabcentral/fileexchange/23629-exportfig),並且由於您正在使用LaTeX ['matlab2tikz'] (http://www.mathworks.co.uk/matlabcentral/fileexchange/22022-matlab2tikz)。這些解決方案的後者將使您的數字*真正*適應LaTeX字體/環境。 – wakjah

回答

0

我使用imwrite命令,而不是打印命令打開圖形轉換成圖像文件,但是這不符合EPS工作。

fhand = figure(); 
subplot(1,2,1); 
... 
I = getframe(fhand) 
imwrite(I.cdata,'Inst.png','PNG')