I'm compiling one pretty simple LaTeX file with few dozen of
pgfplots. Now, I can compile part by part, but am unable to compile it all at once. I really need good precision for all those plots (noise plots) and would like to avoid decimating graphs more. When I run compile, I get this error message:
[...] TeX capacity exceeded, sorry [main memory size=3000000].
Is there a way to avoid this message somehow? How am I supposed to use
pgfplots if I can't plot couple dozen of figures with it without having TeX overloaded? How to expand TeX memory size, please?
Due to AlexG's comment, the memory size has been a constant large value for recent versions of TeX Live. It seems you don't need to extend this.
In older TeX Live, you can modify
/some/path/to/texlive/some/subpath/web2c/texmf.cnf, which can be found by typing on the terminal:
kpsewhich -a texmf.cnf
Then modify the memory size by including, e.g. :
main_memory = 3000000
(See comments in
texmf.cnf file for more details.)
Then run the following command as root to recreate the format files:
pgfplots package can be particularly heavy on TeX's memory, especially if you are creating plots with lots of data points. Indeed, there is a section in the
pgfplots manual about expanding TeX's memory. However, that does not mean that expanding TeX's memory is the best solution. Instead, I would recommend using the 'externalization' approach (section 7.1 of the
The idea of externalization is to compile each plot as a separate TeX job. This leads to a graphic which can be used in the main job. Thus each plot has its own memory requirement, separate from all of the other plots. This usually avoids needing to make TeX's memory bigger. At the same time, the resulting files can be kept between TeX runs, which will speed up compilation for the second and subsequent runs. The latest version of the externalization system needs you to do two things. First, you put
in your preamble, to turn the system on. Secondly, you will need to enable 'shell escape'. This is done at the command line by adding the
pdflatex -shell-escape <filename>
The same can be done in LaTeX editors: there is usually a place in the settings for this type of thing. I'll just add that shell escape does has some security implications: use only with documents that you trust!
after trying all the options (changing texmf.cnf file, etc.) I found on the web, the only one that worked for me was to use lualatex. This is the simplest and more elegant way to do it. Lualatex is available in the Texlive distribution by default.
Every now and then I have the same problem when compiling certain files. Of course, I have forgotten every time how I solved it in the past. Then, I google and I am getting to this page. Next, I remember that I landed on this page for several times, but, unfortunately, the answers did'nt help me in the past for my kind of problem. To break that Groundhog Day circle, I write down this answer which may help myself (for the next circle) and hopefully other people. The bad news is that it works only (?) for
pdflatex --enable-write18 --extra-mem-bot=10000000 --synctex=1 <filename>
You may replace
10000000 by another ridiculous high number.
For illustration some example log entries:
Failing example without the extra memory:
21229 strings out of 493921 360228 string characters out of 3152094 3000000 words of memory out of 3000000 24030 multiletter control sequences out of 15000+200000 49729 words of font info for 45 fonts, out of 3000000 for 9000 841 hyphenation exceptions out of 8191
Working example with
23652 strings out of 493921 401787 string characters out of 3152094 10571134 words of memory out of 13000000 24308 multiletter control sequences out of 15000+200000 49729 words of font info for 45 fonts, out of 3000000 for 9000 841 hyphenation exceptions out of 8191
Working example with
23652 strings out of 493921 401787 string characters out of 3152094 100571134 words of memory out of 103000000 24308 multiletter control sequences out of 15000+200000 49729 words of font info for 45 fonts, out of 3000000 for 9000 841 hyphenation exceptions out of 8191
I guess that my example in truth needed
571134 words of memory (and the the rest is eaten up for fun).
Just to add to this if anyone still has this problem, I found a pretty simple way to fix it. I was getting this error:
TeX capacity exceeded, sorry [main memory size=5000000]
I went through a lot of guides to increase the main memory and nothing was working :/
But I read a few articles where they talked about
save_size instead of
I edited my
texmf.cnf but not the one in the
web2c folder, I changed the at in the
..../texlive/yyyy/texmf.cnf (since I'm using Windows my path was
C:\texlive\2015\texmf.cnf). The file looked as follows:
% (Public domain.) % This texmf.cnf file should contain only your personal changes from the % original texmf.cnf (for example, as chosen in the installer). % % That is, if you need to make changes to texmf.cnf, put your custom % settings in this file, which is .../texlive/YYYY/texmf.cnf, rather than % the distributed file (which is .../texlive/YYYY/texmf-dist/web2c/texmf.cnf). % And include *only* your changed values, not a copy of the whole thing! % OSFONTDIR = $SystemRoot/fonts//
So I added the following two lines:
main_memory = 7999999 save_size = 7999999
I then opened up command prompt and ran:
And that was it :) I was able to build my stuff! I know that
save_size wasn't mentioned at all in the error message but I found that adding that line fixed the issue :)!