正如标题所述,使用 latex 进行编译会立即产生错误:
Ouch---my internal constants have been clobbered!---case 14
我不知道这意味着什么...我使用 TexLive 2012。我更新了 texmf.cnf 并运行了 fmtutil-sys 和 texhash。我猜 texhash 可能搞砸了?
有任何想法吗?
根据要求提供一个最小工作示例:
\documentclass{article}
\begin{document}
Any tex file.
\end{document}
答案1
错误消息
Ouch---my internal constants have been clobbered!---case 14
是由
if (mem_min<min_halfword)or(mem_max>=max_halfword)or@|
(mem_bot-mem_min>max_halfword+1) then bad:=14;
在 中pdftex.web
。您可能更改了 texmf.cnf 中的内存设置,从而触发了错误。对于进一步分析,这些更改将很有用。
最大main_memory
tex.ch
将上面的代码行更改为:
if (mem_bot-sup_main_memory<min_halfword)or@|
(mem_top+sup_main_memory>=max_halfword) then bad:=14;
它还定义max_halfword
为:
@d max_halfword==@"FFFFFFF {largest allowable value in a |halfword|}
即 2 28 -1 = 268,435,455。 的值sup_main_memory
:
@!sup_main_memory = 256000000;
并mem_top
初始化为:
mem_top := mem_bot + main_memory -1;
那么触发错误的最新条件就变成:
mem_top
+ sup_mem_memory
≥≥- + 1≥12,435,456max_half_word
main_memory
max_halfword
sup_main_memory
main_memory
或main_memory
必须小于或等于12,435,455。
记忆单元
从tex.web
:
@!mem : array[mem_min..mem_max] of memory_word; {the big dynamic storage area}
...
@!memory_word = record@;@/
case four_choices of
1: (@!int:integer);
2: (@!gr:glue_ratio);
3: (@!hh:two_halves);
4: (@!qqqq:four_quarters);
end;
字节的转换似乎取决于系统,texmfmem.h
我猜测是memory_word
四个或八个字节。