Quantcast
Channel: Undocumented Matlab
Viewing all articles
Browse latest Browse all 219

Matlab-Latex interface

$
0
0

I would like to welcome guest blogger Yaroslav Don, known to vim users as the author of the Matlab color-scheme. Today Yaroslav discusses some little-known aspects of Matlab’s support for Latex.

One of the most appealing aspects of Matlab is the cross-talk with other programs via a friendly user-interface. An excellent example is the Latex interpreter inside the Handle-graphics axes and texts, which comes to a good use to many inside the scientific community. In recent years I’ve noticed a slow but steady tendency of degrading the Latex capabilities inside Matlab. The most apparent example is the decreasing fonts; I’ll show its downward progression below:

Matlab R2010a

When I started using Latex in Matlab, I wrote a small script (latexfonts.m) to check the available Latex options in Matlab. In the figure below several attributes are depicted: font-families (roman, sans-serif and typewriter), font-shapes (upright, slanted, italics and small-caps) and font-series (medium and bold). It also shows other tweaks such as kerning, ligatures, underline, etc.

Latex support in R2010a

Latex support in R2010a

It is clearly seen that most of the Latex options above are available. Analyzing further, the list of fonts inside Matlab is quite vast, as seen below:

>> dir(fullfile(matlabroot,'sys','fonts','ttf','cm'))
.             cmbxsl10.ttf  cmmi12.ttf    cmr7.ttf      cmssi12.ttf   cmti10.ttf    eufb5.ttf     eurb9.ttf     eusm7.ttf     
..            cmbxti10.ttf  cmmi5.ttf     cmr8.ttf      cmssi17.ttf   cmti12.ttf    eufb6.ttf     eurm10.ttf    eusm8.ttf     
README        cmcsc10.ttf   cmmi6.ttf     cmr9.ttf      cmssi8.ttf    cmti7.ttf     eufb7.ttf     eurm5.ttf     eusm9.ttf     
cmb10.ttf     cmcsc8.ttf    cmmi7.ttf     cmsl10.ttf    cmssi9.ttf    cmti8.ttf     eufb8.ttf     eurm6.ttf     msam10.ttf    
cmbsy10.ttf   cmcsc9.ttf    cmmi8.ttf     cmsl12.ttf    cmssq8.ttf    cmti9.ttf     eufb9.ttf     eurm7.ttf     msam5.ttf     
cmbsy6.ttf    cmdunh10.ttf  cmmi9.ttf     cmsl8.ttf     cmssqi8.ttf   cmtt10.ttf    eufm10.ttf    eurm8.ttf     msam6.ttf     
cmbsy7.ttf    cmex10.ttf    cmmib10.ttf   cmsl9.ttf     cmsy10.ttf    cmtt12.ttf    eufm5.ttf     eurm9.ttf     msam7.ttf     
cmbsy8.ttf    cmex7.ttf     cmmib6.ttf    cmsltt10.ttf  cmsy5.ttf     cmtt8.ttf     eufm6.ttf     eusb10.ttf    msam8.ttf     
cmbsy9.ttf    cmex8.ttf     cmmib7.ttf    cmss10.ttf    cmsy6.ttf     cmtt9.ttf     eufm7.ttf     eusb5.ttf     msam9.ttf     
cmbx10.ttf    cmex9.ttf     cmmib8.ttf    cmss12.ttf    cmsy7.ttf     cmu10.ttf     eufm8.ttf     eusb6.ttf     msbm10.ttf    
cmbx12.ttf    cmff10.ttf    cmmib9.ttf    cmss17.ttf    cmsy8.ttf     cmvtt10.ttf   eufm9.ttf     eusb7.ttf     msbm5.ttf     
cmbx5.ttf     cmfi10.ttf    cmr10.ttf     cmss8.ttf     cmsy9.ttf     euex10.ttf    eurb10.ttf    eusb8.ttf     msbm6.ttf     
cmbx6.ttf     cmfib8.ttf    cmr12.ttf     cmss9.ttf     cmtcsc10.ttf  euex7.ttf     eurb5.ttf     eusb9.ttf     msbm7.ttf     
cmbx7.ttf     cminch.ttf    cmr17.ttf     cmssbx10.ttf  cmtex10.ttf   euex8.ttf     eurb6.ttf     eusm10.ttf    msbm8.ttf     
cmbx8.ttf     cmitt10.ttf   cmr5.ttf      cmssdc10.ttf  cmtex8.ttf    euex9.ttf     eurb7.ttf     eusm5.ttf     msbm9.ttf     
cmbx9.ttf     cmmi10.ttf    cmr6.ttf      cmssi10.ttf   cmtex9.ttf    eufb10.ttf    eurb8.ttf     eusm6.ttf     
 
>> dir(fullfile(matlabroot,'sys','fonts','type1','cm'))
.             cmbxsl10.pfm  cmmi12.pfm    cmr6.pfm      cmss17.pfm    cmssqi8.pfm   cmti10.pfm    lasy10.pfm    lcmssi8.pfm   
..            cmbxti10.pfb  cmmi5.pfb     cmr7.pfb      cmss8.pfb     cmsy10.pfb    cmti12.pfb    lasy5.pfb     line10.pfb    
README        cmbxti10.pfm  cmmi5.pfm     cmr7.pfm      cmss8.pfm     cmsy10.pfm    cmti12.pfm    lasy5.pfm     line10.pfm    
cmb10.pfb     cmcsc10.pfb   cmmi6.pfb     cmr8.pfb      cmss9.pfb     cmsy5.pfb     cmti7.pfb     lasy6.pfb     linew10.pfb   
cmb10.pfm     cmcsc10.pfm   cmmi6.pfm     cmr8.pfm      cmss9.pfm     cmsy5.pfm     cmti7.pfm     lasy6.pfm     linew10.pfm   
cmbsy10.pfb   cmdunh10.pfb  cmmi7.pfb     cmr9.pfb      cmssbx10.pfb  cmsy6.pfb     cmti8.pfb     lasy7.pfb     logo10.pfb    
cmbsy10.pfm   cmdunh10.pfm  cmmi7.pfm     cmr9.pfm      cmssbx10.pfm  cmsy6.pfm     cmti8.pfm     lasy7.pfm     logo10.pfm    
cmbx10.pfb    cmex10.pfb    cmmi8.pfb     cmsl10.pfb    cmssdc10.pfb  cmsy7.pfb     cmti9.pfb     lasy8.pfb     logo8.pfb     
cmbx10.pfm    cmex10.pfm    cmmi8.pfm     cmsl10.pfm    cmssdc10.pfm  cmsy7.pfm     cmti9.pfm     lasy8.pfm     logo8.pfm     
cmbx12.pfb    cmff10.pfb    cmmi9.pfb     cmsl12.pfb    cmssi10.pfb   cmsy8.pfb     cmtt10.pfb    lasy9.pfb     logo9.pfb     
cmbx12.pfm    cmff10.pfm    cmmi9.pfm     cmsl12.pfm    cmssi10.pfm   cmsy8.pfm     cmtt10.pfm    lasy9.pfm     logo9.pfm     
cmbx5.pfb     cmfi10.pfb    cmmib10.pfb   cmsl8.pfb     cmssi12.pfb   cmsy9.pfb     cmtt12.pfb    lasyb10.pfb   logobf10.pfb  
cmbx5.pfm     cmfi10.pfm    cmmib10.pfm   cmsl8.pfm     cmssi12.pfm   cmsy9.pfm     cmtt12.pfm    lasyb10.pfm   logobf10.pfm  
cmbx6.pfb     cmfib8.pfb    cmr10.pfb     cmsl9.pfb     cmssi17.pfb   cmtcsc10.pfb  cmtt8.pfb     lcircle1.pfb  logosl10.pfb  
cmbx6.pfm     cmfib8.pfm    cmr10.pfm     cmsl9.pfm     cmssi17.pfm   cmtcsc10.pfm  cmtt8.pfm     lcircle1.pfm  logosl10.pfm  
cmbx7.pfb     cminch.pfb    cmr12.pfb     cmsltt10.pfb  cmssi8.pfb    cmtex10.pfb   cmtt9.pfb     lcirclew.pfb  
cmbx7.pfm     cminch.pfm    cmr12.pfm     cmsltt10.pfm  cmssi8.pfm    cmtex10.pfm   cmtt9.pfm     lcirclew.pfm  
cmbx8.pfb     cmitt10.pfb   cmr17.pfb     cmss10.pfb    cmssi9.pfb    cmtex8.pfb    cmu10.pfb     lcmss8.pfb    
cmbx8.pfm     cmitt10.pfm   cmr17.pfm     cmss10.pfm    cmssi9.pfm    cmtex8.pfm    cmu10.pfm     lcmss8.pfm    
cmbx9.pfb     cmmi10.pfb    cmr5.pfb      cmss12.pfb    cmssq8.pfb    cmtex9.pfb    cmvtt10.pfb   lcmssb8.pfb   
cmbx9.pfm     cmmi10.pfm    cmr5.pfm      cmss12.pfm    cmssq8.pfm    cmtex9.pfm    cmvtt10.pfm   lcmssb8.pfm   
cmbxsl10.pfb  cmmi12.pfb    cmr6.pfb      cmss17.pfb    cmssqi8.pfb   cmti10.pfb    lasy10.pfb    lcmssi8.pfb   
 
>> dir(fullfile(matlabroot,'sys','tex','tfm'))
.               cmbxsl10.tfm    cmmi12.tfm      cmr6.tfm        cmssdc10.tfm    cmtex8.tfm      icmmi8.tfm      lcmss8.tfm      
..              cmbxti10.tfm    cmmi5.tfm       cmr7.tfm        cmssi10.tfm     cmtex9.tfm      icmsy8.tfm      lcmssb8.tfm     
cmb10.tfm       cmcsc10.tfm     cmmi6.tfm       cmr8.tfm        cmssi12.tfm     cmti10.tfm      icmtt8.tfm      lcmssi8.tfm     
cmbsy10.tfm     cmcsc8.tfm      cmmi7.tfm       cmr9.tfm        cmssi17.tfm     cmti12.tfm      ilasy8.tfm      line10.tfm      
cmbsy5.tfm      cmcsc9.tfm      cmmi8.tfm       cmsa10.tfm      cmssi8.tfm      cmti7.tfm       ilcmss8.tfm     linew10.tfm     
cmbsy6.tfm      cmdunh10.tfm    cmmi9.tfm       cmsl10.tfm      cmssi9.tfm      cmti8.tfm       ilcmssb8.tfm    manfnt.tfm      
cmbsy7.tfm      cmex10.tfm      cmmib10.tfm     cmsl12.tfm      cmssq8.tfm      cmti9.tfm       ilcmssi8.tfm    old_manfnt.tfm  
cmbsy8.tfm      cmex7.tfm       cmmib5.tfm      cmsl8.tfm       cmssqi8.tfm     cmtt10.tfm      lasy10.tfm      trip.tfm        
cmbsy9.tfm      cmex8.tfm       cmmib6.tfm      cmsl9.tfm       cmsy10.tfm      cmtt12.tfm      lasy5.tfm       
cmbx10.tfm      cmex9.tfm       cmmib7.tfm      cmsltt10.tfm    cmsy5.tfm       cmtt8.tfm       lasy6.tfm       
cmbx12.tfm      cmff10.tfm      cmmib8.tfm      cmss10.tfm      cmsy6.tfm       cmtt9.tfm       lasy7.tfm       
cmbx5.tfm       cmfi10.tfm      cmmib9.tfm      cmss12.tfm      cmsy7.tfm       cmu10.tfm       lasy8.tfm       
cmbx6.tfm       cmfib8.tfm      cmr10.tfm       cmss17.tfm      cmsy8.tfm       cmvtt10.tfm     lasy9.tfm       
cmbx7.tfm       cminch.tfm      cmr12.tfm       cmss8.tfm       cmsy9.tfm       dummy.tfm       lasyb10.tfm     
cmbx8.tfm       cmitt10.tfm     cmr17.tfm       cmss9.tfm       cmtcsc10.tfm    icmcsc10.tfm    lcircle10.tfm   
cmbx9.tfm       cmmi10.tfm      cmr5.tfm        cmssbx10.tfm    cmtex10.tfm     icmex10.tfm     lcirclew10.tfm

Matlab R2011b

Each time a new Matlab version is introduced, the joy of getting many fresh or upgraded features is mixed with the worry of getting some good-old ones removed. Unfortunately, such a regression was exactly the case in the R2011b version (and to this day in R2013a), as seen below:

Latex support in R2011b

Latex support in R2011b

Suddenly, many of the former features are missing and a cascade of warnings is thrown:

Warning: Font cmss10 is not supported. 
Warning: Font cmss10 is not supported. 
Warning: Font cmss10 is not supported. 
Warning: Font cmss10 is not supported. 
Warning: Font cmssi10 is not supported. 
Warning: Font cmssi10 is not supported. 
Warning: Font cmssi10 is not supported. 
Warning: Font cmssi10 is not supported. 
Warning: Font cmcsc10 is not supported. 
Warning: Font cmcsc10 is not supported. 
Warning: Font cmcsc10 is not supported. 
Warning: Font cmcsc10 is not supported. 
Warning: Font cmcsc10 is not supported. 
Warning: Font cmcsc10 is not supported. 
Warning: Unable to interpret LaTeX string "\ttfamily\scshape\mdseries WALT bla fi f{}i ff" 
Warning: Font cmssbx10 is not supported. 
...

Note: you can turn these warnings off using:

>> warning off MATLAB:gui:latexsup:UnableToInterpretLaTeXString
>> warning off MATLAB:gui:latexsup:UnsupportedFont

Having the fonts inspected, the cause becomes crystal-clear: most of the fonts used by Latex have been removed from Matlab’s installation. Apparently, I am not the only one to have noticed this problem.

>> dir(fullfile(matlabroot,'sys','fonts','ttf','cm'))
.                 mwa_cmbsy10.ttf   mwa_cmitt10.ttf   mwa_cmsltt10.ttf  mwb_cmbsy10.ttf   mwb_cmitt10.ttf   mwb_cmsltt10.ttf  
..                mwa_cmbx10.ttf    mwa_cmmi10.ttf    mwa_cmsy10.ttf    mwb_cmbx10.ttf    mwb_cmmi10.ttf    mwb_cmsy10.ttf    
LICENCE           mwa_cmbxsl10.ttf  mwa_cmmib10.ttf   mwa_cmti10.ttf    mwb_cmbxsl10.ttf  mwb_cmmib10.ttf   mwb_cmti10.ttf    
README            mwa_cmbxti10.ttf  mwa_cmr10.ttf     mwa_cmtt10.ttf    mwb_cmbxti10.ttf  mwb_cmr10.ttf     mwb_cmtt10.ttf    
mwa_cmb10.ttf     mwa_cmex10.ttf    mwa_cmsl10.ttf    mwb_cmb10.ttf     mwb_cmex10.ttf    mwb_cmsl10.ttf    
 
>> dir(fullfile(matlabroot,'sys','fonts','type1','cm'))
.                 mwa_cmbx10.pfb    mwa_cmmi10.pfb    mwa_cmsy10.pfb    mwb_cmbx10.pfb    mwb_cmmi10.pfb    mwb_cmsy10.pfb    
..                mwa_cmbxsl10.pfb  mwa_cmmib10.pfb   mwa_cmti10.pfb    mwb_cmbxsl10.pfb  mwb_cmmib10.pfb   mwb_cmti10.pfb    
README            mwa_cmbxti10.pfb  mwa_cmr10.pfb     mwa_cmtt10.pfb    mwb_cmbxti10.pfb  mwb_cmr10.pfb     mwb_cmtt10.pfb    
mwa_cmb10.pfb     mwa_cmex10.pfb    mwa_cmsl10.pfb    mwb_cmb10.pfb     mwb_cmex10.pfb    mwb_cmsl10.pfb    
mwa_cmbsy10.pfb   mwa_cmitt10.pfb   mwa_cmsltt10.pfb  mwb_cmbsy10.pfb   mwb_cmitt10.pfb   mwb_cmsltt10.pfb  
 
>> dir(fullfile(matlabroot,'sys','tex','tfm'))
.               cmbxti10.tfm    cmmib10.tfm     cmssi10.tfm     cmu10.tfm       lcirclew10.tfm  
..              cmcsc10.tfm     cmr10.tfm       cmssq8.tfm      icmcsc10.tfm    line10.tfm      
cmb10.tfm       cmdunh10.tfm    cmsl10.tfm      cmssqi8.tfm     icmex10.tfm     linew10.tfm     
cmbsy10.tfm     cmex10.tfm      cmsltt10.tfm    cmsy10.tfm      lasy10.tfm      manfnt.tfm      
cmbx10.tfm      cmitt10.tfm     cmss10.tfm      cmti10.tfm      lasyb10.tfm     trip.tfm        
cmbxsl10.tfm    cmmi10.tfm      cmssbx10.tfm    cmtt10.tfm      lcircle10.tfm

It seems that Mathworks have changed their approach to Latex; less fonts with different names imply a different future direction — perhaps to diminish Latex’s capacity in Matlab.

Summary

Being neither Tex nor Matlab expert, this is the farthest I could achieve. I’ve tried unsuccessfully to install the missing fonts in the new Matlab (as suggested by bug reports 249537 and 398506); I even tried to modify some tex-files — all in vain. Perhaps someone could find a workaround or a full solution to this issue. If so, please post a comment.

Note that I do not wish to incorporate Matlab figures in a Latex document (this can be done using the LaPrint utility or its variants), but rather the reverse – including Latex formatting within Matlab figures.

 
Related posts:
  1. JMI – Java-to-Matlab Interface JMI enables calling Matlab functions from within Java. This article explains JMI's core functionality....
  2. Matclipse – Eclipse-Matlab interface Matclipse is an open-source plugin for the popular Eclipse IDE that connects it with Matlab. ...
  3. Matlab-Java interface using a static control The switchyard function design pattern can be very useful when setting Matlab callbacks to Java GUI controls. This article explains why and how....
  4. HG’s undocumented parameters interface Some HG functions also accept inputs parameters in a struct fields rather than the normal P-V pairs format. ...
 

Viewing all articles
Browse latest Browse all 219

Trending Articles