我正在使用 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
你不完全理解但在互联网上找到的命令。