我在 Windows 上使用 MiKTeX,目前无法加载 expl3。我最近更新了 LaTeX3 包。以下代码足以生成错误:
\documentclass{article}
\usepackage{expl3}
\begin{document}
test
\end{document}
latex 回复道:
! Missing = inserted for \ifnum.
<to be read again>
-
l.3 \begin
{document}
我卸载并重新安装了l3kernel
和l3packages
。 MiKTeX 软件包管理器报告 是l3kernel
“打包于”2018-11-22 和“安装于”2018-12-05, 是l3packages
“打包于”2018-10-18 和“安装于”2018-12-05。 也许问题与它们“打包于”的不同日期有关? 我还没有查看这两个版本之间的差异。
无论如何,在我得到\tracingall
之前先抛出一个:\usepackage{expl3}
.... 40 megabyes of text
\@ifl@t@r #1#2->\ifnum \expandafter \@parse@version #1//00\@nil <\expandafter \
@parse@version #2//00\@nil \expandafter \@secondoftwo \else \expandafter \@firs
toftwo \fi
#1<-\[email protected]
#2<-
{\ifnum: (level 1) entered on line 9}
{\expandafter}
\[email protected] ->2018-11-19 L3 programming layer (loader)
\@parse@version #1/#2/#3#4#5\@nil ->#1#2#3#4
#1<-2018-11-19 L3 programming layer (loader)
#2<-
#3<-0
#4<-0
#5<-
! Missing = inserted for \ifnum.
<to be read again>
-
因此,问题在于,最内层的\@ifpackagelater
called宏\@ifl@ter
期望expl3
将其日期报告为例如,2018/11/19
但报告为2018-11-19
带有破折号而不是斜线。目前,我可以通过以下方式运行代码:
\documentclass{article}
\makeatletter
\let\save@ifl@ter\@ifl@ter
\def\@ifl@ter#1#2#3#4#5{} % Temporarily dummy out \@ifl@ter
\usepackage{expl3} % load package
\let\@ifl@ter\save@ifl@ter % Restore \@ifl@ter
% This would break with the same error as before:
%\@ifpackagelater{expl3}{10/10/2018}{\message{yes}}{\message{no}}
\makeatother
\begin{document}
test
\end{document}
答案1
LaTeX 内核更新2017 年 4 月开始使用 ISO 8601 日期格式,yyyy-mm-dd
而不是弗兰克发明的一种格式:)
您必须将 LaTeX 内核更新到较新版本,以便日期格式可以正常expl3
工作。最好同时更新所有软件包,否则可能会发生这些冲突。
如果由于某种原因无法更新,则可以使用较新的日期解析器(使用最新版本(2018 年 12 月 6 日)expl3
和 TeXLive 2015 的 LaTeX 内核测试的代码):
\documentclass{article}
\makeatletter
\def\@ifl@t@r#1#2{%
\ifnum\expandafter\@parse@version@#1//00\@nil<%
\expandafter\@parse@version@#2//00\@nil
\expandafter\@secondoftwo
\else
\expandafter\@firstoftwo
\fi}
\def\@parse@version@#1{\@parse@version0#1}
\def\@parse@version#1/#2/#3#4#5\@nil{%
\@parse@version@dash#1-#2-#3#4\@nil
}
\def\@parse@version@dash#1-#2-#3#4#5\@nil{%
\if\relax#2\relax\else#1\fi#2#3#4 }
\makeatother
\usepackage{expl3}
\begin{document}
hello
\end{document}