TeXLive 2021:加载文件时的优先级是否发生变化?

TeXLive 2021:加载文件时的优先级是否发生变化?

我刚刚升级到 MacTeX 2021,现在没有使用我的自定义 LaTeX 类不再符合要求。原因似乎是,当您加载文件并且有两个同名的可能性时,它现在会优先选择“本地”文件,而不是“中央”texmf 中的文件,而过去情况总是相反。

一个简单的例子是创建两个文件,一个在子目录中:

test.tex prob/article.cls

哪里test.tex

\documentclass{prob/article}
\begin{document}
Some text
\end{document}

并且prob/article.cls是:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{prob/article}
\LoadClass{article}

然后pdflatex test.tex可以与 TeXLive 2020 及更早版本配合使用,但不能与 TeXLive 2021 配合使用,我得到:

This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2020-10-01> patch level 4
L3 programming layer <2021-02-18> (./prob/article.cls
Document Class: prob/article WTF edition
) (/usr/local/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def)
(./test.aux)

! LaTeX Error: The font size command \normalsize is not defined:
               there is probably something wrong with the class file.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
...                                              
                                              
l.2 \begin{document}

回想起来,拥有与标准库中同名的文件是自找麻烦,但这种新行为是内在的吗?有没有什么办法可以关闭它?无论使用哪个版本的 TeXLive,kpsewhich -all article.cls都会给出相同的输出(特别是,文件以相同的顺序出现)。

答案1

这是一个故意的改变,因为 LaTeX 通过名称来识别包选项,因此支持不同文件夹中两个同名文件至少有点棘手。就你的情况而言,你有两个非常不同的文件,article.cls但不会冲突。然而,也有人有 LaTeX 包的本地副本,因此类似这样的情况:

\usepackage{myunitemplate/array}
\usepackage{array}

会失败(并且可能\usepackage{myunitemplate/array}隐藏在类文件和\usepackage{array}另一个包中,使得更难检测到)。

出于这个和其他原因,自 2020-10-01 版本以来,LaTeX 强制要求通过名称和扩展名来标识包和类仅有的,这样就不会加载类似上述的用法array.sty


如果是恰恰你想做什么,你可以特殊处理这种情况,并使用类似

\expandafter\let\csname [email protected]\endcsname\relax
\expandafter\let\csname [email protected]\endcsname\relax

在加载 LaTeX 之前article.cls,这样在 LaTeX 尝试加载之前,选项和文件版本就会被清除。我必须强制执行这个不应该做,而应该使用一个唯一的名称来标识您的班级。

相关内容