Manual for Package pgfplots
2D/3D Plots in LATeX, Version 1.18.1
http://sourceforge.net/projects/pgfplots
Memory and Speed considerations
7.2Memory Limitations
The default settings of most TeX distributions are quite restrictive, so it may be necessary to adjust them.
Usually, the logfile or the final error message contains a summary about the used resources, giving a hint which parameter needs to be increased.
7.2.1LuaLaTeX¶
One solution which works quite well is to switch the LaTeX executable: if you have a decent TeX distribution, you will have the lualatex executable as well. This, in turn, uses dynamic memory allocation such that it usually has enough memory for any pgfplots axis.
The LuaLaTeX executable lualatex is supposed to be almost compatible with pdflatex.
This approach works for any platform.
7.2.2MiKTeX¶
If you are running MiKTeX and you do not want to (or cannot switch) to lualatex, you can proceed as follows.
For MiKTeX, memory limits can be increased in two ways. The first is to use command line switches:
pdflatex
--stack-size=n --save-size=n
--main-memory=n --extra-mem-top=n --extra-mem-bot=n
--pool-size=n --max-strings=n
Experiment with these settings if MiKTeX runs out of memory. Usually, one doesn’t invoke pdflatex manually: there is a development aid which does all the invocations, so this one needs to be adjusted.
Sometimes it might be better to adjust the MiKTeX configuration file permanently, for example to avoid reconfiguring the TeX development program. This can be implemented using the command
initexmf --edit-config-file=pdflatex
which can be typed either on a command prompt in Windows or using Start \(\gg \) Execute. As a result, an editor will be opened with the correct config file. A sample config file could be
main_memory=90000000
save_size=80000
or any of the config file entries which are listed below can be entered. Thanks to “LeSpocky” for his documentation in
http://blog.antiblau.de/2009/04/21/speicherlimits-von-miktex-erhoehen.
7.2.3TeXLive or similar installations¶
In addition to the option to switch to lualatex, you can proceed as follows to keep existing dvips or pdflatex workflows.
For Unix installations, one needs to adjust config files. This can be done as follows:
-
1. Locate texmf.cnf on your system. On my Ubuntu installation, it is in
/usr/share/texmf/web2c/texmf.cnf.
-
2. Either change texmf.cnf directly, or copy it to some convenient place. If you copy it, here is how to proceed:
-
• keep only the changed entries in your local copy to reduce conflicts. TeX will always read all config files found in its search path.
-
• Adjust the search path to find your local copy. This can be done using the environment variable TEXMFCNF. Assuming your local copy is in ~/texmf/mytexcnf/texmf.cnf, you can write
export TEXMFCNF=~/texmf/mytexcnf:
to search first in your directory, then in all other system directories.
-
-
3. You should change the entries
main_memory = n
extra_mem_top = n
extra_mem_bot = n
max_strings = n
param_size = n
save_size = n
stack_size = n
The logfile usually contains information about the parameter which needs to be enlarged.
An example of this config file thing is shown below. It changes memory limits.
-
1. Create the file ~/texmf/mytexcnf/texmf.cnf (and possibly the paths as well).
% newly created file ~/texmf/mytexcnf/texmf.cnf:
% If you want to change some of these sizes only for a certain TeX
% variant, the usual dot notation works, e.g.,
% main_memory.hugetex = 20000000
main_memory = 230000000 % words of inimemory available; also applies to inimf&mp
extra_mem_top = 10000000 % extra high memory for chars, tokens, etc.
extra_mem_bot = 10000000 % extra low memory for boxes, glue, breakpoints, etc.
save_size = 150000 % for saving values outside current group
stack_size = 150000 % simultaneous input sources
% Max number of characters in all strings, including all error messages,
% help texts, font names, control sequences. These values apply to TeX and MP.
% pool_size = 1250000
% Minimum pool space after TeX/MP's own strings; must be at least
% 25000 less than pool_size, but doesn't need to be nearly that large.
% string_vacancies = 90000
% Maximum number of strings.
% max_strings = 100000
% min pool space left after loading .fmt
% pool_free = 47500
-
2. Run texhash such that TeX updates its ~/texmf/ls-R database.
-
3. Create the environment variable TEXMFCNF and assign the value ‘~/texmf/mytexcnf:’ (including the trailing ‘:’!). For my linux system, this can be done using by adding
export TEXMFCNF=~/texmf/mytexcnf:
to ~/.bashrc.
Unfortunately, TeX does not allow arbitrary memory limits, there is an upper bound hard coded in the executables.