[Tex/LaTex] How to export matlab figures to (pdf) LaTeX

graphicsMATLABpdftextikz-pgf

I am writing a student thesis in LaTeX and need to import several figures created in Matlab. I found some programs to do this task:

  • matfig2pgf
  • matlab2tikz
  • fig2texPS

The problem is that using one of the first two I get a problem that the tex capacity is exceeded. The figures have quite lots of data points which could be the reason why tex gives up. Using the latter program I cannot export subplots; I have to create a image for each. Also I am not sure, if I get the single images arranged in latex in a nice fashion (not yet tasted). Also I have to do it using dvi/ps/pdf for each file separately.

My question is: What is a good way to include the images from matlab in latex?

I ask because I do not want to have to create all the files twice to more because any limitation of any program is reached.

Best Answer

Graphics with lots of points are always a challenge for TeX-based processors.

However, I am convinced that both memory and time limitations can be tackled to "reasonable" degree (i.e. to reduced pain).

There are two solutions which should both be considered:

  1. to increase TeX's memory (or to circumvent the limitations of pdflatex).

  2. to reduce the number of times the graphic is being processed by TeX (compile once, use often).

While the comments to your question already indicate some solutions concerning (2.), you may need more input for (1.). In fact, I believe that (1.) is the more pressing issue which cannot easily be solved by (2.).

Concerning (1.), I know that one solution works pretty well: to increase the limits. The pgfplots manual contains details instructions for both windows and linux how to enlarge the memory limits. I consider that to be a mandatory step for you - and invite you to follow the link above and read chapter "6 Memory and Speed Considerations" in the pgfplots manual. The chapter contains readily deployable configuration examples. It might be that switching to lualatex instead of the conventional tools (pdflatex or latex/dvips) might also solve the memory problem (I do not know).

Concerning (2.), you can use the standalone package (this site contains a lot of examples). This should work with any of your packages. However, if you use matlab2tikz, I find the TikZ library external very useful here - I tailored it to convert each figure to a separate pdf without changing the original document. Note that matlab2tikz uses pgfplots, so the link mentioned above might be very useful (it also contains a brief description of this automatic image externalization).

I believe that the steps above should help.

But there are always cases where one might also want to know about alternatives.

Here are some of them. I did not post them directly because I have the impression that you may already have an existing workflow and they may not fit - but perhaps you are interested in my experiences anyway:

a) you could try to implement (selected) figures directly in TeX. I did so by means of pgfplots which is quite powerful. I like the fact that I could define document-wide consistent styles and that the single documents are, well, often easier to read than autogenerated code. In fact, once I started using pgfplots instead of matlab, I found that both simpler to maintain (.tex files instead of .m files) and prettier. I dropped all of my matlab scripts eventually and used only pgfplots in the end.

b) if your vector graphics are too large, you may want to consider using bitmap graphics and use TeX to overlay axis descriptions over the bitmap. pgfplots comes with its \addplot graphics and \addplot3 graphics commands to streamline the process. You can also post feature requests to Nico Schloemer (author of matlab2tikz) - perhaps he is willing to add automatic bitmap conversion with overlay axes. Details for such an approach can be found in the aforementioned pgfplots manual (including application examples). Bitmap graphics have the advantage that they render much faster in all viewers - and for surface plots, it does not matter anyway.