编辑(2016-07-13)

编辑(2016-07-13)

我正在通过 加载相当多的数据文件\pgfplotstableread,但不会通过 进一步使用它们pgfplots。我只是将它们保留在序言中,并切换到在独立文档中绘制它们。但现在我再次运行了我的主文档,我得到了:

PGFPlots: reading {xxxxxxxxx/xxxxxxxxx/xxxxxxxxx.csv}
PGFPlots: reading {xxxxxxxxx/xxxxxxxxx/xxxxxxxxx.csv}

Runaway definition?
->
! TeX capacity exceeded, sorry [main memory size=5000000].
\pgfplotsapplistXpushback@smallbufoverfl ...@toka 
                                                  \the \t@pgfplots@tokb }\ex...
l.87 ...sv}{\xxxxxxxxxWordWordWordxxxxxxxx}
                                                  ^^M

If you really absolutely need more capacity,
you can ask a wizard to enlarge me.

看起来我好像忘记在某个地方关闭某个括号了。但是第一次检查似乎不是这样。数据文件的加载是否已经太多了,我应该将其外包吗?

编辑(2016-07-13)

事后看来,我本可以早点把这个问题编辑到帖子里,但不幸的是,由于我不再那么活跃,我只是听说了这个问题的流行程度。所以最终,我在一个外部文件中分别绘制了图表和数字(借助类standalone)。对于大量数据,我使用了 LuaLaTeX。为了正确开始,这些可能会有所帮助:

答案1

结合我们的聊天和评论来给出一些想法,但真正的解决方案主要是艺术而不是技术。

pgfplots不会在 TeX 中创造奇迹。它只是使用 PGF 收集所有点(或数据点),然后告诉 TikZ好了,这些就是点,这些就是颜色和线型,处理它。收获时,它会在 TeX 宏内收集数据。这就是 TeX 容量所定义的。现在您可以说为什么不像 matplotlib、matlab 等那样使用我的 gazillionabyte RAM 内存。但这就是事实。TeX 已经过时了。

第一个工具是扩大 TeX 使用的主内存。相关问题是如何扩展 TeX 的“主内存大小”?(pgfplots 内存过载)尤其是增加 TeX 容量,无需 root 权限

不过,还是有几个间接的技巧可以实现。例如,

  1. 您可以读取数据表,使用它,然后让数据宏执行\relax。例如,

    % \documentclass{....}
    %.....
    %\begin{document}
    %.....
    \pgfplotstableread{
    %Huge file
    }\mytable
    % Used in the drawing or typeset
    %....
    \addplot+[] table[...] {\mytable}
    %....
    %After the figure or table we overwrite the macro that holds the table
    \let\mytable\relax
    %....
    %\end{document}
    

    这仍然假设表格足够小,可以一次处理,但两个或更多表格却不能。否则我们又回到了开始的地方。

  2. 如果有太多细节,您可以跳过每隔 4-5 个点来读取较少的变量。

  3. 您可以在外部程序中绘制它,并通过引入 pgfplots 来包含结果图。v1.10 手册中的第 4.3.7 节对此进行了解释。

相关内容