2013-06-03 2 views
4

Je suis en train de faire une figure Matlab qui s'intègre parfaitement dans un document LaTeX. Un problème connu est que XTickLabel et YTickLabels ne rendent pas en utilisant l'interpréteur LaTeX, causant des tracés mauvais. (Note: je me rends compte qu'il existe des correctifs qui impliquent le remplacement des étiquettes tex par des objets texte (par exemple, format_tics), mais ces solutions ne sont pas triviales lors du traçage de plusieurs figures et présentent des problèmes qui nécessitent beaucoup de peaufinage. pour chaque figure.)Matlab polices non rendu correctement sur imprimer ou exporter

Je pense que aborder ce problème en changeant la police, par opposition à remplacer des objets dans une figure, est un peu plus élégant.

I downloaded a .otf version de la police LaTex, et définir que pour afficher tout au long de la figure:

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

Les choses semblent bonnes dans la fenêtre de la figure Matlab; Cependant, lors de l'impression, les choses s'effondrent.

Si j'imprimer (soit à l'aide de l'interface d'exportation ou la commande d'impression) à l'aide de la « peintres » renderer, les polices sont drôles et inconsistant tout au long. Certains symboles ne s'affichent pas correctement et différentes polices apparaissent dans la figure imprimée.

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

Si je passe au renderer zbuffer, les polices de caractères deviennent cohérente, mais il y a d'autres bugs. La qualité baisse et du texte est omis (ou couvert par un autre texte).

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

L'opengl est juste un gâchis partout.

Quelqu'un sait-il pourquoi ces rend sont des problèmes avec ces polices? Et des solutions de rechange pour rendre les polices à afficher correctement?

Exemple de code:

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

Je dois souligner que j'ai exactement le même problème avec le (http://www.ctan.org/tex-archive/fonts/lm/fonts/opentype/public/lm) [Roman latin moderne] police – mrsoltys

+0

pour contourner ce problème, vous pouvez utiliser 'plot2svg' (http://www.mathworks.de/matlabcentral/fileexchange/7401-scalable-vector-graphics-svg-export-of-figures) pour créer' * .svg' fichiers qui peuvent être facilement convertis en '* .eps' en utilisant IncScape ou Adobe Illustrator. –

+0

Autres options de contournement de la Bourse de fichier sont [ 'export_fig'] (http://www.mathworks.co.uk/matlabcentral/fileexchange/23629-exportfig) et, puisque vous travaillez avec LaTeX, [' matlab2tikz'] (http://www.mathworks.co.uk/matlabcentral/fileexchange/22022-matlab2tikz). La dernière de ces solutions permettra à vos chiffres de s'inscrire * véritablement * dans les polices/environnement LaTeX. – wakjah

Répondre

0

J'utilise la commande imwrite au lieu de la commande d'impression de tourner les chiffres dans des fichiers d'image, mais cela ne fonctionne pas avec EPS.

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