我正在构建一个云系统,人们将他们的 LaTeX 源上传到该系统,然后系统会对其进行编译。这不是一个通用系统 - 它与期刊的特定 .cls 文件相关联。该系统围绕 texlive、lualatex 和我们自己的 .cls 文件构建。我们决定不能使用 pdflatex,因为它似乎无法生成 UTF-8 编码的文件,\write
而这对于我们的工作流程是必要的。不幸的是,尽管作者得到了建议,但一些作者仍然习惯性地将其插入\usepackage[T1]{fontenc}
到他们上传的文件中,结果是他们原始文件中的一些 UTF-8 字符被 T1 字体编码弄乱了。在我们的 .cls 文件中,如果使用它,我想发出 ClassError,但出于某种原因,fontenc 逃避了检测\@ifpackageloaded
(大概是为了可以多次加载)。我决定使用 etoolbox
\ifdef{\@fontenc@load@list}{
\ClassError{jcls}{The fontenc package is not allowed. Please use unicode font encoding.}{}}{}
我不太喜欢这种方法,因为它感觉像是一种黑客行为(但可能并不比 fontenc 本身更糟糕)。另一种方法是让 .cls 文件需要 lualatex,但有些作者更喜欢使用 pdflatex 进行开发,因为它速度更快,而且我们只需要它用于论文的最终版本。作为替代方案,我考虑从我们的 texlive 安装中删除 fontenc。有人能建议更好的方法来做到这一点吗?
答案1
pdflatex because it seems incapable of producing UTF-8
是不对的,但还有很多其他的好理由。
您无法轻松删除或禁用它,fontenc
因为它是构建格式所必需的,并且如果您使用fontspec
在 luatex 或 xetex 中加载任何字体,则需要输入。
你可以做的是在文档开始时抱怨当前编码是否不是TU
,或者简单地强制它是 TU;
\documentclass{article}
% in your class
\AtBeginDocument{%
\ifx\Umathchar\undefined\else
\def\encodingdefault{TU}%
\fontencoding{TU}\selectfont
\fi
}
\usepackage[T1]{fontenc} % bad in luatex but auto-corrected
\begin{document}
a:\expandafter\meaning\the\font
\end{document}