编译 870 mb latex 文件

编译 870 mb latex 文件

我有一个 870 mb 的 tikz 文件,我想使用一些 latex 来编译它。我该怎么做?我尝试将主内存量增加到 latex 的最大值,但仍然无法渲染。目前我在编译时得到以下输出。我使用此工具在计算机上生成了该文件https://gephi.org使用 tikz 输出导出。

http://pastebin.com/4bD9r1Ld

我在下面答案中执行了修复,现在我收到此错误

http://pastebin.com/KMZDW8qZ

答案1

错误信息显示:

! TeX capacity exceeded, sorry [pool size=3141349].

可以增加池大小,为了进行测试,可以使用环境变量在命令行上进行:

$ pool_size=10000000 latex openordconceptnet4.tex

这也可以在中进行配置texmf.cnf,请参阅条目pool_size

但是,它不能增加到无穷大,并且还有许多其他内存限制。某些内存可以像池大小一样增加。对于其他值,必须重新生成格式才能生效。

当内存限制无法进一步增加时,真正的问题就开始了。然后可以尝试将大文件分成几个小文件,然后再连接输出文件。或者必须尝试使 TeX 代码在内存限制下更高效。

答案2

根据您发布的较小示例的代码,您使用的工具会生成冗余的 LaTeX 代码

\usepackage{tikz, tkz-graph}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}

我不清楚最后三行有什么用。它preview对于生成独立输出很有用(例如,在 emacs 的 AucTeX 预览模式中使用)。

主要代码似乎分为两部分:一部分是\node定义,另一部分\Edges是定义。可以进行多种优化。

\begin{tikzpicture}
\node at (-2.6682776,7.9326984) [circle, line width=1, fill=COLOR0,  inner sep=0pt, minimum size = 14.3428574pt, label={[label distance=0] 315:Myriel}] (1) {};
\node at (-4.1808344,9.4046475) [circle, line width=1, fill=COLOR0,  inner sep=0pt, minimum size = 2pt, label={[label distance=0] 315:Napoleon}] (2) {};
...
\node at (2.3879364,1.7951599) [circle, line width=1, fill=COLOR3,  inner sep=0pt, minimum size = 10.2285728pt, label={[label distance=0] 315:Brujon}] (76) {};
\node at (7.1218353,4.9839259) [circle, line width=1, fill=COLOR8,  inner sep=0pt, minimum size = 10.2285728pt, label={[label distance=0] 315:MmeHucheloup}] (77) {};

在示例中,似乎节点的许多参数完全相同circle,,line width=1inner sep=0pt每当有重复时,就会无缘无故地消耗一些内存。更有效的方法是收集相同的值并仅声明一次。这可以使用\tikzset{<parameters>}

\begin{tikzpicture}
\tikzset{circle, line width=1, inner sep-0pt, label distance=0pt}
\node at (-2.6682776,7.9326984) [fill=COLOR0, minimum size = 14.3428574pt, label={315:Myriel}] (1) {};
\node at (-4.1808344,9.4046475) [fill=COLOR0, minimum size = 2pt, label={315:Napoleon}] (2) {};
...
\node at (2.3879364,1.7951599) [fill=COLOR3, minimum size = 10.2285728pt, label={315:Brujon}] (76) {};
\node at (7.1218353,4.9839259) [fill=COLOR8, minimum size = 10.2285728pt, label={315:MmeHucheloup}] (77) {};

因为\Edges参数没有必要被交换。

\tikzset{EdgeStyle/.style = {-, shorten >=1pt, >=stealth, bend right=10, line width=0.5, color=COLOR0}}
\Edge (2)(1)
\Edge (5)(1)
\Edge (6)(1)
\Edge (7)(1)
\Edge (8)(1)
\tikzset{EdgeStyle/.style = {-, shorten >=1pt, >=stealth, bend right=10, line width=1, color=COLOR0}}
\Edge (9)(1)
\tikzset{EdgeStyle/.style = {-, shorten >=1pt, >=stealth, bend right=10, line width=0.5, color=COLOR0}}
\Edge (10)(1)

首先,有很多不必要的重复。有些参数可以一次取一个值,而不是一遍又一遍地重复相同的值,浪费 TeX 内存字数。因此 cade 可以用于\tikzset{EdgeStyle/.style = {<parameters>}}固定参数,并\tikzset{EdgeStyle/.append style}针对以下边修改需要修改的参数

\tikzset{EdgeStyle/.style = {-, shorten >=1pt, >=stealth, bend right=10, line width=0.5, color=COLOR0}}
\Edge (2)(1)
\Edge (5)(1)
\Edge (6)(1)
\Edge (7)(1)
\Edge (8)(1)
\tikzset{EdgeStyle/.append style = {line width=1, color=COLOR0}}
\Edge (9)(1)
\tikzset{EdgeStyle/.append style = {line width=0.5, color=COLOR0}}
\Edge (10)(1)

从示例中可以看出,唯一发生变化的参数是line widhtcolor。示例中有无数个同时使用两个参数的情况,但只需更改其中一个参数,因此上述代码的进一步优化是

\Edge (8)(1)
\tikzset{EdgeStyle/.append style = {line width=1, color=COLOR0}}
\Edge (9)(1)
\tikzset{EdgeStyle/.append style = {line width=0.5}}
\Edge (10)(1)

上述一些优化可以通过简单的搜索和替换机制完成(在示例中,我能够使用它们节省大约 10% 的记忆词)。最后的优化可以通过一些巧妙的脚本完成。另一个优化是将尽可能多的更改组合在一起(例如,所有\Edge具有相同line width或 的s color

希望能帮助到你

相关内容