matlab2tikz生成重排版tikz代码

时间:2012-08-16 17:22:55

标签: matlab latex octave

matlab2tikz是将matlab / octave数字转换为tikz代码的绝佳方案。

然而,如果该图包含很多点,则生成的tikz代码对于乳胶排版非常重。有时编译甚至会失败,并显示以下消息:TeX capacity exceeded, sorry

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:4)

matlab2tikz在转换为tikz-pgf时​​有一个非常聪明的选项下采样。它被称为minimumPointsDistance。这确实可以解决大多数时候的情况。

然而,当实际点数保持非常低时,有时会扭曲曲线的某些“僵硬”区域。如下图所示

enter image description here

蓝色曲线(1184点)是原始曲线,而红色曲线(117点)是缩小曲线。扭曲是显而易见的。

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

enter image description here

很明显失真已经消失。

但仍有

另一个缺点

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

因此,为了克服这个问题并使minimumPointsDistance能够为所有数字统一设置为特定值,生成统一质量的简化版本,使用规范化,现在minimumPointsDistance“内部“指的是纸上印刷图案的实际尺寸。

您可以从here下载修改后的matlab2tikz.m文件以及说明。

注意没有进行详尽的测试,所以要小心!

答案 1 :(得分:2)

(评论有点长)

您可以使用matlabfrag,将您的数字转换为eps并编译LaTeX,将字符串数据替换为乳胶字符串。这样你就不会有太多样本的问题。子采样非常糟糕(当然,除非你有100k点),因为你想要保持高分辨率矢量数字。

示例:http://www.mediafire.com/view/?atstyyu4bj198wp