matlab2tikz - TeX 内存不足

matlab2tikz - TeX 内存不足

我正在使用matlab2tikz将图形从 MATLAB 导入到 tex。

然而我很快就收到了消息TeX capacity exceeded, sorry [main memory size = 3000000]

我曾尝试使用以下指令来扩展主内存http://docs.miktex.org/manual/runtimeparams.html 使用 initexmf --edit-config-file=xelatex 但是只会打开一个空文件!

我也尝试使用外部化功能,pgfplots使用手册中的说明以及从 TikZ 导出 eps 图形,但我也失败了(可能是因为我使用的是 xetex 而不是 pdflatex)。

我还应该做什么?

编辑:我在 Windows 7 上使用 MikTeX 2.9(带有 XeTeX 0.9998)

答案1

由于我无法改变 TeX 内存容量,所以我不得不寻找另一种方法来解决我的问题。

matlab2tikz确实起到了作用。它有一个选项下采样在转换为 tikz-pgf 期间的图形。它被称为minimumPointsDistance

最终(下采样)的图形与原始图形完全没有区别,而且更加明亮。还请注意,您不必自己在 MATLAB 中对图形进行下采样,只需设置minimumPointsDistance仅影响matlab2tikz的输出代码。

编辑:这是我的答案的扩展。我很抱歉超出了 TeX 的限制,但这个扩展提供了更好的解决方案,所以我认为应该在这里发布。现在谈谈问题...

matlab2tikz的点减少算法虽然快速而简单,但有一个

主要缺点

当实际保留的点数下降到非常低时,它可能会扭曲曲线的某些“僵硬”区域。下图说明了这一点

在此处输入图片描述

蓝色曲线(1184点)为原图,红色曲线(117点)为缩小后的图像,失真较为明显。

为了解决这个问题,同时保持点数较低,我编写了一个新的点减少算法,它更有效(但有时会更慢)。结果(红色曲线为 116 个点)

在此处输入图片描述

显然,扭曲已消失。

但还是有

另一个缺点

这两种算法都存在这种问题。当将一批图形转换为 tikz 时,他们通常希望所有简化的图表具有统一的质量。但有时这是不可能的(至少在没有额外努力的情况下),因为通常minimumPointsDistance必须针对每个图形进行不同的设置结果实际上取决于区间 [min_y, max_y] 和 [min_x, max_x] 的大小以及图中的点数。

因此,为了克服这个问题,并能够minimumPointsDistance为所有图形统一设置一个特定的值,从而产生统一质量的缩小版本,使用了规范化,现在minimumPointsDistance“内部”是指打印在纸上的图形的实际大小。

您可以从以下位置下载修改后的 matlab2tikz.m 文件这里以及说明。

笔记没有进行详尽的测试所以要小心!

答案2

虽然这种插件的使用非常完美,但从长远来看,TeX 内存问题非常烦人,我在处理光谱数据时也多次遇到过这样的问题。

另一种处理方法是使用 LuaLaTeX,因为这些内存限制不适用于此。与externalize的库一起使用tikz,完成的图片将转换为单个 PDF 文件。这使得后续编译再次快速。

答案3

我今天在使用他们最新版本的 matlab2tikz 时找到了一个简单的解决方案。在 LuaLaTeX 而不是 pdfLaTeX 中运行代码。这解决了

  • ! TeX capacity exceeded, sorry [main memory size=5000000]在 Mac 上运行时或
  • TeX capacity exceeded, sorry [main memory size = 3000000]对于 Windows 操作系统。

但是我发现在 Mac 上运行的相同代码出现了新问题。在更新 LaTeX 后,它无法在(LuaLaTeX)Windows 操作系统上运行。错误信息如下

  • ! Package pgf Error: Driver file ``pgfsys-luatex.def'' not found.

在这种情况下,可以在序言中放入以下两行

\RequirePackage{luatex85}
\def\pgfsysdriver{pgfsys-pdftex.def}

并在 LauLaTeX 中运行代码!问题已解释这里

相关内容