<br><br><div class="gmail_quote">On Thu, Feb 10, 2011 at 8:21 AM, Paul Isambert <span dir="ltr"><<a href="mailto:zappathustra@free.fr">zappathustra@free.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Le 10/02/2011 04:39, Ross Moore a écrit :<div><div></div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Michael, and Heiko,<br>
<br>
On 10/02/2011, at 1:49 PM, Michael Joyner wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
On Wed, Feb 9, 2011 at 9:30 PM, Ross Moore<<a href="mailto:ross.moore@mq.edu.au" target="_blank">ross.moore@mq.edu.au</a>> wrote:<br>
<br>
<br>
See how large you can set the "save size" parameter.<br>
Multiply by 10, or 100, or 1000... .<br>
<br>
I'd say you are exploring to the boundaries of what XeTeX<br>
is capable of doing.<br>
<br>
<br>
save size won't go over 80,000 :(<br>
</blockquote>
OK.<br>
<br>
But we don't need it now.<br>
Here's the cause of the problem.<br>
<br>
The package source xesearch.sty has a technical problem.<br>
The macros \xs@String and \xs@Stack are used as variables,<br>
repeatedly changing their expansions. However, sometimes the code<br>
uses \edef\xs@String{...} but mostly it uses \xdef\xs@String{...}.<br>
<br>
This mixture of local/global scope is what causes the loss of<br>
string space, because an \edef instance requires the previous \xdef<br>
instance to be retained, not discarded. Then comes another \xdef<br>
which may release the previous \edef's memory, but not that of the<br>
\xdef prior to the \edef . Hence memory usage grows.<br>
<br>
By making all instances become global, I now get your document to<br>
finish, along with the Index page.<br>
<br>
Here's the memory usage:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Here is how much of TeX's memory you used:<br>
26092 strings out of 494542<br>
451878 string characters out of 3157455<br>
480737 words of memory out of 3000000<br>
29083 multiletter control sequences out of 15000+200000<br>
8574 words of font info for 51 fonts, out of 3000000 for 9000<br>
669 hyphenation exceptions out of 8191<br>
40i,7n,43p,1687b,9339s stack positions out of 5000i,500n,10000p,200000b,50000s<br>
</blockquote></blockquote></blockquote>
<br>
<br>
<br>
Here's the patch needed to modify xesearch.sty .<br>
<br>
<br></blockquote></div></div></blockquote><div><br></div><div>Does this look right?</div><div><br></div><div>diff -u xesearch*sty</div><div>--- xesearch-orig.sty<span class="Apple-tab-span" style="white-space:pre"> </span>2011-02-10 09:56:49.000000000 -0500</div>
<div>+++ xesearch.sty<span class="Apple-tab-span" style="white-space:pre"> </span>2011-02-10 09:56:25.000000000 -0500</div><div>@@ -166,7 +166,7 @@</div><div> \xdef\xs@Stack{%</div><div> \xs@String\noexpand\xs@end\xs@unexpanded\expandafter{\xs@Stack}%</div>
<div> }%</div><div>- \edef\xs@String{\xs@unexpanded\expandafter{\xs@String} }%</div><div>+ \xdef\xs@String{\xs@unexpanded\expandafter{\xs@String} }%</div><div> \XeTeXinterchartokenstate1</div>
<div> \else</div><div> \expandafter\xs@Lowercase\expandafter{\xs@String}\xs@lcString</div><div>@@ -175,7 +175,7 @@</div><div> \xdef\xs@Stack{%</div><div> \xs@String\noexpand\xs@end\xs@unexpanded\expandafter{\xs@Stack}%</div>
<div> }%</div><div>- \edef\xs@String{\xs@unexpanded\expandafter{\xs@String} }%</div><div>+ \xdef\xs@String{\xs@unexpanded\expandafter{\xs@String} }%</div><div> \XeTeXinterchartokenstate1</div>
<div> \else</div><div> \expandafter\expandafter\expandafter\xs@EndString</div><div>@@ -684,16 +684,16 @@</div><div> \fi</div><div> \fi\xs@next</div><div> }</div><div>-\def\xs@Stack{}</div><div>+\xdef\xs@Stack{}</div>
<div> \def\xs@Remainder{}</div><div> \def\xs@StartString{%</div><div> \xs@Stringtrue</div><div> \let\xs@StartString\relax</div><div>- \def\xs@String{}%</div><div>+ \xdef\xs@String{}%</div><div> \def\PrefixFound{}%</div>
<div> \def\SuffixFound{}%</div><div> \def\AffixFound{}%</div><div>- \def\xs@Stack{}%</div><div>+ \xdef\xs@Stack{}%</div><div> \def\xs@Remainder{}%</div><div> \xs@Phrasefalse</div><div> \setbox\xs@Box=\hbox\bgroup</div>
<div>@@ -908,7 +908,7 @@</div><div> \let\xs@next\xs@Evaluate</div><div> \else</div><div> \ifxs@Phrase</div><div>- \def\xs@Stack{}%</div><div>+ \xdef\xs@Stack{}%</div><div>
\def\xs@next{\xs@String\xs@Restore}%</div><div> \else</div><div> \def\xs@next{\unhbox\xs@Box\xs@Restore}%</div><div>@@ -975,7 +975,7 @@</div><div> \XeTeXinterchartokenstate=1</div><div>
}</div><div> \def\xs@PopWord#1\xs@end#2\xs@end{%</div><div>- \def\xs@String{#2}%</div><div>+ \xdef\xs@String{#2}%</div><div> \def\xs@@PopWord#2##1\xs@end{%</div><div> \edef\xs@Remainder{##1\xs@unexpanded\expandafter{\xs@Remainder}%</div>
<div> }%</div><div>@@ -983,7 +983,7 @@</div><div> \xs@@PopWord#1\xs@end</div><div> }</div><div> \def\xs@PopStack#1\xs@end#2\xs@@end{%</div><div>- \def\xs@Stack{#2}%</div><div>+ \xdef\xs@Stack{#2}%</div><div> \expandafter\xs@PopWord\xs@String\xs@end#1\xs@end</div>
<div> }</div><div> \def\SortByLength#1{%</div><div>[seeksort@www sty]$ </div><div> </div></div>