web-dev-qa-db-fra.com

Polices latex dans matlab

Est-il possible de convertir la police d’un graphe matlab en une police identique à celle des polices latex? Par exemple, je peux modifier la police d'un tracé en:

x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'FontName','Helvetica');

Est-il possible de faire la même chose, mais pour les polices latex (je parle de polices latex car je ne suis pas sûr du nom réel de la police utilisée par latex comme police de base).

17
KatyB

Pour tout objet texte, il vous suffit de définir la propriété "Interpreter" sur "latex". Ainsi, par exemple, vous pourriez faire 

xlabel('$$\int_0^x\!\int_y dF(u,v)$$','Interpreter','latex');

Pour les libellés de ticks, il est plus difficile , bien que des fichiers soient éventuellement disponibles pour faciliter les choses ( exemple ).

12
ioums

Je vous recommande de définir l'interpréteur par défaut sur LaTex au début de votre script/fonction:

set(0,'defaulttextinterpreter','latex')

Vous pouvez également télécharger une version de Computer Modern (The LaTeX famille de polices) et l’installer sur votre ordinateur. Les techniques peuvent varier si vous utilisez Windows ou Mac. Sous Mac, vous devez télécharger la version OTF et l'ajouter à FontBook (Cmd-Space: FontBook).

Ensuite, redémarrez Matlab

Enfin, vous pouvez utiliser la police LaTeX dans Matlab:

   set(0,'DefaultTextFontname', 'CMU Serif')
   set(0,'DefaultAxesFontName', 'CMU Serif')

C'est une bonne solution pour avoir des polices constantes dans vos libellés de ticks, bien qu'il ait quelques difficultés à exporter dans certains formats.

6
mrsoltys

Vous pouvez définir la police dans les chaînes en latex. Par exemple, pour changer entre les polices serif (Roman) et sans sérif (Helvetica, je suppose): 

text(0.5, 0.8, '\textsf{sans serif}','interpreter','latex')
text(0.5, 0.7, '\textrm{roman}','interpreter','latex')
text(0.5, 0.6, '$$\mathsf{math\,\,mode\,\,sans\,\,serif}$$','interpreter','latex')
text(0.5, 0.5, '$$\mathrm{math\,\,mode\,\,roman}$$','interpreter','latex')
3
H.Muster

Disclaimer: Je ne suis pas l'expert.

Cependant, la commande linux fc-list liste toutes les polices de votre système, je pense qu’elles sont toutes supportées par Matlab.

Dans Ubuntu (et éventuellement dans d'autres distributions), la police latex est appelée Latin Modern, ou lm en abrégé. Vous pouvez les trouver tous via:

# fc-list | grep lmroman
/usr/share/texmf/fonts/opentype/public/lm/lmroman10-bold.otf: Latin Modern Roman,LM Roman 10:style=10 Bold,Bold
/usr/share/texmf/fonts/opentype/public/lm/lmroman7-italic.otf: Latin Modern Roman,LM Roman 7:style=7 Italic,Italic
... etc etc...

Entre les deux points et la première virgule, il est écrit Latin Modern, qui est le nom de la police romaine de Latin Modern, il y a aussi:

  • Latin moderne sans
  • Casquettes Romaines Modernes Latines
  • Mono latin moderne
  • etc

Je pense que ces polices sont utilisées lorsque vous appelez \textrm (roman), \textsf (serif), etc., en latex en mathmode. Bien sûr, vous pouvez tous les trouver via la commande fc-list.

Pour obtenir la police latex dans vos graphiques, exécutez simplement:

plot(Rand(10), 'o');
xlabel('index', 'FontName', 'Latin Modern Roman', 'FontSize', 25); 
ylabel('value', 'FontName', 'Latin Modern Roman', 'FontSize', 25); 
set(gca, 'FontName', 'Latin Modern Roman', 'FontSize', 25);

Et le résultat est un Nice:

example plot

PS: Latin Modern n’est pas exactement le même que Computer Modern, mais ils se ressemblent et je ne saurais dire à quel point ils diffèrent vraiment.

En ce qui concerne l'option d'interprétation de Matlab, à ma connaissance, elle ne s'applique pas à tous les éléments textuels d'une intrigue, comme les étiquettes de hache:

>> plot(Rand(10), '.'); set(gca, 'Interpreter', 'latex');
Error using hg.axes/set
The name 'Interpreter' is not an accessible property for an instance of class 'axes'.

Malheureusement, la fonction print de matlab est défectueuse, car elle ne peut pas incorporer de polices dans des fichiers eps ou pdf. Pour cette raison, les fichiers générés peuvent avoir des polices de substitution, même sur le même système. Pour résoudre ce problème, cette bibliothèque vous permet d’incorporer les polices: http://www.mathworks.com/matlabcentral/fileexchange/23629-export-fig

Assurez-vous de définir l'arrière-plan de votre figure en blanc avant de l'exporter et notez que la bibliothèque peut utiliser beaucoup de mémoire, car elle appelle ghostscript.

De plus, changer d'interprète semble excessif si vous souhaitez changer de police.

2
Herbert

Pour une correspondance exacte des polices (y compris le crénage à la LaTeX, les ligatures, etc.), le texte de la figure Matlab doit être composé avec LaTeX. Le script laprint , qui utilise psfrag , est un moyen simple de le faire.

2
Chris Johnson

Si vous exportez vers .eps, vous pouvez simplement éditer la figure par la suite avec un simple éditeur de texte et échanger les polices. C'est un peu délicat mais fait l'affaire. Vous pouvez également changer le crénage de chaque caractère individuellement (car sa position y est codée en dur). 

Il est également possible de changer la police de chaque caractère individuellement (je le fais parfois si un symbole de Latex (c’est-à-dire Computer Modern) était nécessaire, mais que le reste de l’étiquette soit à nouveau dans Helvetica).

2
Jost

Si vous souhaitez exporter des figures MATLAB dans LaTeX et souhaitez une apparence cohérente (y compris les polices), vous devez utiliser matlab2tikz (un projet que j'ai déjà lancé).

0
Nico Schlömer