三天前使用 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
——唐纳德·阿瑟诺