致命的格式文件错误;受阻。fmtutil:无限递归

致命的格式文件错误;受阻。fmtutil:无限递归

我正在使用 texlive / ConTeXt / Xetex,但我不知道其中哪一个可能与该问题相关。

摘要是,当我运行 TeX 时,我收到一条“致命格式文件错误;我受阻了”消息。详情如下...

我正在texexec使用 Makefile 运行。从 Makefile 执行的命令行是:

texexec --xtx --mode=linux,report,border --nomapfiles --verbose complete-book.tex

输出如下所示:

TeXExec | processing document 'complete-book.tex'
TeXExec | using search method 'kpsewhich'
TeXExec | no ctx file found
TeXExec | using search method 'kpsewhich'
TeXExec | tex processing method: context
TeXExec | TeX run 1
TeXExec | writing option file complete-book.top
TeXExec | using randomseed 170
TeXExec | tex engine: xetex
TeXExec | tex format: cont-en
TeXExec | fixing backend map path for dvipdfm
TeXExec | running: xetex -progname=context -fmt=cont-en -translate-file=natural.tcx --8bit -output-driver="xdvipdfmx -E -d 4 -V 5" complete-book.tex \emergencyend
This is XeTeXk, Version 3.141592-2.2-0.996 (Web2C 7.5.6)
 %&-line parsing enabled.
 (WARNING: translate-file "natural.tcx" ignored)
---! /var/lib/texmf/web2c/pdftex/cont-en.fmt was written by pdftex
(Fatal format file error; I'm stymied)
TeXExec | runtime: 0.030342 
...

查看类似页面http://www.karakas-online.de/mySGML/fatal-format-file-error.html,这听起来像是因为我安装 xetex 的时间比安装 texlive 系统的其余部分的时间晚,我可以通过运行来修复它fmtutil

我关于运行 fmtutil 来修复致命的格式文件错误的说法对吗,或者 XeTeX 是否需要使用其他实用程序?

当我运行 fmtutil 时:

sudo fmtutil --all

或者

sudo fmtutil --byfmt cont-en

我收到无限递归错误:

fmtutil: Infinite recursion detected, giving up!. 

这是 60K 输出的末尾,如果有帮助的话我可以提供。但输出的最后一部分是:

bodyfont : style mm (mm) defined
) (/usr/share/texmf/tex/context/base/type-map.tex)
(/usr/share/texmf/tex/context/base/type-spe.tex)
(/usr/share/texmf/tex/context/base/type-akb.tex))

ConTeXt ver: 2007.01.12 15:56 MKII fmt: 2012.10.31 int: english/english

 ) )
Beginning to dump on file cont-en.fmt
 (format=cont-en 2012.10.31)
42595 strings of total length 701393
571219 memory locations dumped; current usage is 356&567724
39899 multiletter control sequences
\font\nullfont=nullfont
0 words of font info for 0 preloaded fonts
192 hyphenation exceptions
Hyphenation trie of length 60932 has 3094 ops out of 35111
  194 for language 20
  194 for language 19
 [snip]...
  224 for language 2
  377 for language 1
No pages of output.
Transcript written on cont-en.log.
fmtutil: /root/.texlive2007/texmf-var/web2c/pdftex/cont-en.fmt installed.
fmtutil: Infinite recursion detected, giving up!. 

我搜索了该错误,并在这里找到了对它的提及:http://us.generation-nt.com/answer/bug-560816-texlive-base-postinst-fails-fmtutil-sys-infinite-recursion-help-168924641.html但它没有指出解决方法。

任何建议将不胜感激。

版本:

  • CentOS 版本 6.3 (最终版本)。64 位。
  • texlive:安装了软件包 texlive.x86_64 0:2007-57.el6_2
  • 上下文:ConTeXt ver:2007.01.12 15:56 MKII fmt:2012.10.31
  • xetex:XeTeXk,版本 3.141592-2.2-0.996(Web2C 7.5.6)

所有这些最初都是通过

$ sudo yum install texlive-context 

它安装了 texlive-context.x86_64 0:2007-57.el6_2 及其依赖项;然后我做了

$ sudo yum install texlive-xetex

它安装了 texlive-xetex.x86_64 0:2007-57.el6_2 及其依赖项。

更新

为了尝试建立一个最小的示例,并确定它是否是我们的.tex 文档中的问题还是我们的配置中的问题,我创建了一个文件 helloworld.tex:

\starttext
Hello world!
\stoptext

并在其上运行 xetex:

sudo xetex -progname=context -fmt=cont-en -translate-file=natural.tcx --8bit -output-driver="xdvipdfmx -E -d 4 -V 5" helloworld.tex \emergencyend

结果:我再次收到致命文件格式错误/受阻消息。

如果我删除-progname=context但保留-fmt=cont-en,仍然会出现致命的文件格式错误。

如果我删除-fmt=cont-en但保留-progname=context,我会收到消息“我找不到格式文件‘context.fmt’!”

如果我删除两者,并使用不带 ConTeXt 宏的 helloworld.tex,XeTeX 将进入扩展模式,并且在我提示符下输入 \end 后,它会成功提供 PDF。

更新 2

根据建议,我删除了 /root/.texlive2007,然后运行sudo fmtutil-sys --all。但fmtutil-sys失败的原因与以下相同fmtutil

Infinite recursion detected, giving up!.

日志文件 cont-en.log 发布在:http://pastebin.com/BUPE5Rhz

据我所知,最像“无限递归”(但不完全是)的部分是此部分:

(/usr/share/texmf/tex/context/base/type-exa.tex
\@sl@\relativefontsize=\count208
\@sl@\typefaceencoding=\count209

(/usr/share/texmf/tex/context/base/type-exa.tex)
(/usr/share/texmf/tex/context/base/type-syn.tex)
(/usr/share/texmf/tex/context/base/type-enc.tex)
(/usr/share/texmf/tex/context/base/type-siz.tex)
(/usr/share/texmf/tex/context/base/type-map.tex)
(/usr/share/texmf/tex/context/base/type-spe.tex)
(/usr/share/texmf/tex/context/base/type-akb.tex)
(/usr/share/texmf/tex/context/base/type-exa.tex)
(/usr/share/texmf/tex/context/base/type-syn.tex)

然后它将这组七个文件重复八次。

与原来类似(但 cont-en.fmt 的目录不同),输出以这三行结尾,这三行不在日志文件中:

Transcript written on cont-en.log.
fmtutil: /var/lib/texmf/web2c/pdftex/cont-en.fmt installed.
fmtutil: Infinite recursion detected, giving up!.

此时我可能会直接从 texlive 而不是从包存储库重新安装 Context/xetex/etc。但我想发布上述内容,因为它是被要求/建议的。

最后更新

我卸载了从本地软件包仓库获取的 2007 版(与 2010 版混合?)texlive,而是直接从他们的网站下载了最新的稳定版 texlive。问题解决了。再次感谢所有提出建议的人。

答案1

以下是一些要点(由于评论太短,我以此作为答案):

  • 您以 root 身份运行所有程序,这fmtutil: /root/.texlive2007/texmf-var/web2c/pdftex/cont-en.fmt installed.显然是不好的。
  • 你的 TeX 系统太旧了。很久以前 fmtutil 中有一个错误,这里有一个补丁链接,可能对你有帮助。我们在 Debian 中也遇到了同样的问题:http://anonscm.debian.org/viewvc/debian-tex/texlive2009/branches/squeeze/texlive-bin/debian/patches/fmtutil-fix-infinite-loop_upstream
  • 你似乎从旧版本升级,旧文件仍然存在/var/lib/texmf/web2c
  • 由于 CentOS 是基于 RedHad 的(我猜),所以我不太了解它的内部原理

我建议采取以下步骤: - 检查 在 下是否有您真正需要的东西/root/.texlive2007/,尤其是在 下/root/.texlive2007/texmf-var,如果没有,请将其完全删除。 - 运行sudo fmtutil-sys --all

这里最重要的部分是运行fmtutil-sys而不是fmtutil。密切关注输出,一旦它开始重复(如果确实如此),就将其释放并将输出发布到某个地方(pastbin、网站等)。

但我猜测通过运行fmtutil-sys你可以解决这个问题。

诺伯特-

答案2

在很多情况下,关键是要fmtutil运行不是 sudo fmtutil-sys

你的 Linux 发行版应该负责更新系统文件夹,但它会不是(并且不应该)触摸你的用户目录(因为它可能位于由多台计算机共享的网络驱动器上)。消息

Fatal format file error; I'm stymied

告诉您系统文件夹和主目录的版本不匹配。您需要通过调用fmtutil(再次强调,不是-sys,不是以 root 身份)来手动更新以进行重建。同样,原因是 Linux 是一个网络操作系统。您可能从多台计算机访问您的主目录。假设 9/10 台机器安装了旧版本,而您使用新版本登录到新的 beta 测试机器并在那里运行 tex。您想自动更新并破坏常规环境,还是希望在fmtutil真正想要更新时明确调用?(如果您手动安装了 tex,您甚至可以在同一台计算机上为不同的用户安装多个版本,甚至可以为使用不同文件夹的同一用户安装多个版本!)

每当我遇到这个错误时,

fmtutil

没有任何选项帮我解决了这个问题。永远不要轻率地抛出一个sudo永远,而不要先尝试以普通用户的身份去做。你更有可能让事情变得更糟,通过使用sudo,因为它确实不是用户不再是您的使用者。使用sudo如果您设法对用户文件和文件夹设置了错误的权限,则使用不当可能会阻止任意应用程序启动。因此,请避免这样做,直到您完全确定您不能以普通用户身份这样做。确保您知道后果,并且永远不会执行sudo你不完全理解但在互联网上找到的命令

相关内容