当我打开终端并输入时xelatex
,程序没有任何提示就结束了。
它仅当我将目录更改为texlive/2014/bin/win32
这很奇怪,因为如果系统中没有指定程序路径(事实并非如此),它应该只是提示一条消息说找不到命令。在我的例子中,根本没有显示任何信息。
我的系统路径如下所示:
有人知道这里发生了什么事吗?
答案1
这其实是一个微妙的问题,我也遇到过。首先,xelatex.exe
是一个非常简单的包装器xetex.exe
,我们可以在中找到它的源xtx\texk\xelatex\xelatex.c
代码w32tex-src.tar.xz
. 基本上它只是执行
return spawnvp(_P_WAIT, "xetex.exe", argv);
现在,这个spawnvp
函数有一个意外的行为。首先,它尝试执行.\xelatex.exe
。如果失败,它将回退到解析。它通过尝试在的每个元素上PATH
运行来实现这一点,令我惊讶的是,只要中的某个目录以某种方式格式错误,它就会中止!(换句话说,只要不是在之后;当目录格式错误时,就会改为。)spawnve
PATH
PATH
errno
ENOENT
spawnve
errno
EINVAL
这显然解释了为什么xelatex.exe
在其本机目录中运行有效,也解释了为什么当其目录是中的第一个条目时它可以工作PATH
。但是,一旦中的条目PATH
格式错误(例如,当两个路径连接在一起而没有分隔;
符时),之后的所有其他目录都会被忽略,这就是xelatex.exe
我的情况失败的原因。