为什么Texlive2014/win8.1终端下xelatex在bin/win32目录之外不起作用?

为什么Texlive2014/win8.1终端下xelatex在bin/win32目录之外不起作用?

当我打开终端并输入时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运行来实现这一点,令我惊讶的是,只要中的某个目录以某种方式格式错误,它就会中止!(换句话说,只要不是在之后;当目录格式错误时,就会改为。)spawnvePATHPATHerrnoENOENTspawnveerrnoEINVAL

这显然解释了为什么xelatex.exe在其本机目录中运行有效,也解释了为什么当其目录是中的第一个条目时它可以工作PATH。但是,一旦中的条目PATH格式错误(例如,当两个路径连接在一起而没有分隔;符时),之后的所有其他目录都会被忽略,这就是xelatex.exe我的情况失败的原因。

相关内容