matlab2tikz
是将matlab
/octave
数字转换为 tikz 代码的绝佳软件包。
但是,如果该图包含很多点,则生成的 tikz 代码对于乳胶排版来说非常繁重。有时编译甚至会失败并显示以下消息:TeX capacity exceeded, sorry
.
有没有办法解决这个问题?
matlab2tikz
是将matlab
/octave
数字转换为 tikz 代码的绝佳软件包。
但是,如果该图包含很多点,则生成的 tikz 代码对于乳胶排版来说非常繁重。有时编译甚至会失败并显示以下消息:TeX capacity exceeded, sorry
.
有没有办法解决这个问题?
matlab2tikz
在转换为 tikz-pgf 期间,有一个非常聪明的选项可以对数字进行下采样。它被称为minimumPointsDistance
。在大多数情况下,这确实可以纠正这种情况。
但是,有时当实际点数下降非常低时,它会扭曲曲线的某些“僵硬”区域。如下图所示
蓝色曲线(1184 点)是原始曲线,而红色曲线(117 点)是还原曲线。失真很明显。
为了解决这个问题,同时保持低点数,我编写了一个新的点减少算法,它更有效(但有时可能会更慢)。结果(红色曲线为116点)
很明显,失真消失了。
但是还是有
另一个缺点
这两种算法都存在。当一个人将一批图转换为 tikz 时,他们通常希望所有简化图的质量一致。但有时这是不可能的(至少不需要额外的努力),因为通常minimumPointsDistance
必须为每个图形设置不同的值,结果实际上取决于区间 [min_y, max_y] 和 [min_x, max_x] 的大小以及图中的点数。
因此,为了克服这个问题,使minimumPointsDistance
所有图形能够统一设置为特定值,产生统一质量的简化版本,使用标准化,现在minimumPointsDistance
“内部”指的是打印在纸上的实际尺寸数字。
您可以从此处下载修改后的 matlab2tikz.m 文件以及说明。
请注意,没有进行详尽的测试,所以要小心!
(评论有点长)
您可以使用matlabfrag,它将您的图形转换为 eps 并在编译 LaTeX 时,将字符串数据替换为乳胶字符串。这样您就不会遇到样本数量过多的问题。二次采样很糟糕(除非你当然有 100k 点),因为你想保留高分辨率矢量图。