我有一个包含大量测量数据点的图。我从 Matlab2tikz 导出了此图。
当我尝试编译时,它说内存已超出。我发现这个问题它告诉我我可以将不同的 tikzpicture 导出到不同的文件。不幸的是,这没有帮助我,因为只有 1 个 tikzpicture 导致了问题。
所以我实际上尝试增加 TeX 的内存。我进入,/usr/share/texlive/texmf/web2c
然后在texmf.cnf
我将其更改main_memory = 3000000
为main_memory = 5000000
。然后我运行texhash
并尝试再次编译我的 TeX 文件。
我的问题是,增加内存限制后,我再次收到相同的错误:! TeX capacity exceeded, sorry [main memory size=3000000].
但是我只是将其更改为5000000
。我推测我在增加内存限制时做错了什么。是吗?
-编辑-
最后我只使用了 lualatex。这是因为我认为我的 texlive 安装有问题:由于某种原因,它在我的系统上安装了两次。不过,我认为 Heiko Oberdiek 的答案是正确的,因此将其标记为正确答案。
答案1
从texmf.cnf
:
% Memory. Must be less than 8,000,000 total.
%
% main_memory is relevant only to initex, extra_mem_* only to non-ini.
% Thus, have to redump the .fmt file after changing main_memory; to add
% to existing fmt files, increase extra_mem_*. (To get an idea of how
% much, try \tracingstats=2 in your TeX source file;
% web2c/tests/memtest.tex might also be interesting.)
因此,您必须重新生成格式文件(fmtutil
)才能看到更改的效果main_memory
。
答案2
增加内存可能有助于您编译图表,但最终会得到非常大的文件,需要花费大量时间才能通过 pdf 查看器加载,并且滚动时会变得不流畅。此外,随着图表复杂度的增加,您可能会达到性能上限。
这是另一种解决方案,它可以生成非常小的文件,同时保持完整方法的“清晰度” tikz
。
在不同的图形上绘制不同颜色的元素。确保轴限值相同,删除轴(matlab 中的轴关闭)并使用打印命令将其导出为高分辨率 png
print -dpng -r800 *name_of_file.png*
使用 gimp 或 imagemagick 将 .png 转换为位图。使用后者:
convert *name_of_file.png* *name_of_file.bmp*
您可能希望直接从 Matlab 导出 bmp 格式。不过我还没有测试过,而且现在手头也没有许可证。
使用波特雷斯检索 .bmp 的 .svg 矢量跟踪
potrace *name_of_file.bmp* -s
然后将 .svg 与 Inkscape 重新组合,应用使用 potrace 时丢失的所需颜色。
使用 Inkscape inkscape2tikz 扩展将最终结果导出为 pdf 或 tikz 代码。如果是前者,请使用
\addplot graphic
(请参阅pgfplots
有关该命令的手册)。
我曾将这项技术用于包含 10,000 个点且重叠程度相当高的散点图。生成的文件非常小,但几乎完美无瑕,而当有人想放大时,.png 看起来会很粗糙。