预编译的 pdflatex 不支持文件名为中文的 .Tex 文件

预编译的 pdflatex 不支持文件名为中文的 .Tex 文件

首先我确定pdflatex可以编译中文文件名的tex文件,没有问题,例如tex源码内容如下

\documentclass[UTF8,hyperref]{ctexart}
\begin{document}
    中文
\end{document}

将其保存为名为“中文.tex”的文件并运行

pdflatex 中文.tex

一切都好。

现在,为了加快编译速度,我们按照此链接即编辑一个名为“pre.tex”的文件,其内容如下

\documentclass[UTF8,hyperref]{ctexart}

然后运行

pdflatex -ini -jobname="pre" "&pdflatex pre.tex\dump"

生成一个名为“pre.fmt”的 .fmt 文件

现在,我们在 out tex 源中使用这个预编译的 .fmt 文件,例如

%& pre
\begin{document}
    中文
\end{document}

如果我们将其保存为名为“en.tex”的文件,则pdflatex en.tex运行正常。但如果我们将其保存为名为“中文.tex”的文件,则将pdflatex 中文.tex显示如下错误

enter image description here

这里出了什么问题?为什么预编译不支持带有中文文件名的 Tex 文件?

我上传了文件“中文.tex”在这里下载

答案1

您可以在此处查看原因

\edef\x{中文.tex}\show\x
\documentclass[UTF8,hyperref]{ctexart}
\edef\x{中文.tex}\show\x
\begin{document}
    中文
\end{document}

比较两者\show

最初,这些字节本质上都是惰性的,因此文件名被传递给文件系统并且可以工作,但是在类加载之后,这些字节被激活,并给出了启用的定义排版但这意味着它们会扩展为错误的文件名。


我没有所有的字体来全面测试这一点,但我认为如果你将格式模板更改为

\documentclass[UTF8,hyperref]{ctexart}

% set high chars active at start of job
% After the commandline has been read, but before Tex starts reading the
% file contents, the tokens in \everyjob are run. 
% This loop sets every character between 127 and 255 to be catcode 13
% "active" which is the catcode they normally have after inputenc package
% or the ctexart class code.
\everyjob{{\count0=127
\loop
\global\catcode\count0=13
\ifnum\count0<255
\advance\count0 1
\repeat
}}

% set high chars inactive now for filename reading
% This loop sets every character between 127 and 255 to be catcode 12
% "other" which is the normal catcode for punctuation. this means that
% no special interpretation is done and the filename works as in a normal 
% format (where high characters are also not active until inputenc or
% similar is loaded. 
% Unlike the previous loop which is delayed in \everyjob
% This loop is executed here to make characters safe before the \dump
{\count0=127
\loop
\global\catcode\count0=12
\ifnum\count0<255
\advance\count0 1
\repeat
}

\everyjob因此,在读取文件名之后,8 位字符直到运行后才处于活动状态。

相关内容