使用 TexLive Utility 更新后,软件包子文件和 import.sty 出现问题

使用 TexLive Utility 更新后,软件包子文件和 import.sty 出现问题

三天前使用 TexLive 更新我的软件包之前一切都很好。现在无法再使用软件包子文件了

以下是 MWE

最小 Preamble.tex 文件

\documentclass{amsart}
\usepackage{subfiles}

MWE.tex 文件

\documentclass[MWE.tex]{subfiles}
\begin{document}
MWE
\end{document}

当我编译 MWE 文件时,我进入控制台

This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded >format=pdflatex)

restricted \write18 enabled.
entering extended mode

(./MWE.tex

LaTeX2e <2020-02-02> patch level 5

L3 programming layer <2020-02-25>
(/usr/local/texlive/2019/texmf-dist/tex/latex/subfiles/subfiles.cls

Document Class: subfiles 2020/02/14 v16 Multi-file projects (class)

Preamble taken from file `MWE.tex'

(/usr/local/texlive/2019/texmf-dist/tex/latex/tools/verbatim.sty)

(/usr/local/texlive/2019/texmf-dist/tex/latex/import/import.sty)

! LaTeX Error: File `import.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

Enter file name:

我检查了一下,import.sty 文件位于正确的目录中,之前一切都运行正常。你知道发生了什么吗(除了我不应该在 TexLive 正式发布之前升级东西这个事实之外……)?

答案1

新的import包代码错误处理了空路径段并查找文件系统的根目录而不是当前目录,不幸的是subfiles使用了这种形式。

我认为这会恢复以前的行为。



\RequirePackage{import}
\makeatletter
\def\@sub@import#1#2#3{%
  \begingroup
  \protected@edef\@tempa{\endgroup
    \let\noexpand\IfFileExists\noexpand#2%
    \noexpand\@import  \noexpand#1%  param 1
      {\@ifundefined{input@path}{}{\input@path}}% 2
      {\@ifundefined{Ginput@path}{}{\Ginput@path}}% 3
      {\import@path#3}{\import@path}% 4,5
      {\ifx\IfFileExists\im@@IfFileExists \noexpand\im@@IfFileExists 
       \else \noexpand\IfFileExists \fi}}% 6
  \if\relax#3\relax% need expansion, for eg \filename@area
    \endgroup\expandafter#1%
  \else
    \expandafter\@tempa
  \fi}
\makeatother

\documentclass[MWE.tex]{subfiles}
\begin{document}
MWE
\end{document}

import针对不涉及问题的一个更简单的测试用例subfiles



\begin{filecontents}{\jobname-input-test}
abc
\end{filecontents}
\documentclass{article}
\usepackage{import}
\makeatletter
\def\@sub@import#1#2#3{%
  \begingroup
  \protected@edef\@tempa{\endgroup
    \let\noexpand\IfFileExists\noexpand#2%
    \noexpand\@import  \noexpand#1%  param 1
      {\@ifundefined{input@path}{}{\input@path}}% 2
      {\@ifundefined{Ginput@path}{}{\Ginput@path}}% 3
      {\import@path#3}{\import@path}% 4,5
      {\ifx\IfFileExists\im@@IfFileExists \noexpand\im@@IfFileExists 
       \else \noexpand\IfFileExists \fi}}% 6
  \if\relax#3\relax
    \endgroup\expandafter#1%
  \else
    \expandafter\@tempa
  \fi}
\makeatother

\begin{document}
\subimport{}{\jobname-input-test}
\end{document}

这使

! LaTeX Error: File `zzz.aux' not found

import使用块中没有补丁的新软件包\makeatletter

答案2

这是由于最近添加了import.sty

% Check for "./" currdir, and make \import@path@fix ensure trailing /

(也请参阅手册的倒数第三段)。

我不知道为什么要从空目录导入(是为了返回嵌套中的默认路径吗\subimport?)但在这种情况下它不应该“修复”路径。这样做只是为了方便,因为忘记路径末尾的“/”是一个常见的错误。

为了立即缓解,

\makeatletter \let\import@path@fix\@firstofone \makeatother

在您的(主)文档标题中,或者在 的最末尾import.sty。或者从 中删除此块import.sty

% Check for "./" currdir, and make \import@path@fix ensure trailing /
\gdef\@gtempa{./}
\ifx\@gtempa\@currdir % *x style paths
 \gdef\import@path@fix#1{\@ensure@one@trailing@slash#1////\delimiter}%
 \gdef\@ensure@one@trailing@slash#1////#2\delimiter{#1/}%
\fi

——唐纳德·阿瑟诺

相关内容