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