当自动记录一些代码时,LaTeX 输出会给出合乎逻辑的警告:
Package: fixltx2e 2016/12/29 v2.1a fixes to LaTeX (obsolete)
Applying: [2015/01/01] Old fixltx2e package on input line 46.
Package fixltx2e Warning: fixltx2e is not required with releases after 2015
(fixltx2e) All fixes are now in the LaTeX kernel.
(fixltx2e) See the latexrelease package for details.
Already applied: [0000/00/00] Old fixltx2e package on input line 53.
所以就我自己的情况来说,我可以省略这一行:
\usepackage{fixltx2e}
但这会给那些(不幸的)仍然使用旧版本 LaTeX 的人带来一些问题。
我发现https://tex.stackexchange.com/a/569709/44119:
自 2020-10-01 版本起,LaTeX 内核提供了命令
\IfFormatAtLeastTF{<date>}{<true code>}{<false code>}
但这当然会带来同样的问题,因为这仅在 2020 年发布后才存在。
我还发现https://tex.stackexchange.com/a/26229/44119:
\newcommand*\@iflatexlater{\@ifl@t@r\fmtversion}
\@iflatexlater{2001/09/01}{\TRUE}{\FALSE}
并将其应用为:
\newcommand*\@iflatexlater{\@ifl@t@r\fmtversion}
\@iflatexlater{2016/01/01}{}{\usepackage{fixltx2e}}
给了我错误:
! LaTeX Error: Command \@ already defined.
Or name \end... illegal, see p.192 of the manual.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.15 \newcommand*\@i
flatexlater{\@ifl@t@r\fmtversion}
?
! Emergency stop.
...
l.15 \newcommand*\@i
flatexlater{\@ifl@t@r\fmtversion}
! ==> Fatal error occurred, no output PDF file produced!
通常在这个网站上创建一个 MWE 是很常见的,但我希望这里提供的信息已经足以给出解决方案的指示。
答案1
您的上一个版本不起作用,因为您需要在命令名称中\makeatletter
使用@
。建议的方法是定义:
\makeatletter
\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
\makeatother
然后始终使用\IfFormatAtLeastTF
。 \providecommand
仅当命令尚不存在时才会定义该命令,这正是您想要的。
如果你正在编写包或类,我不建议你支持超过 3 或 4 年的 LaTeX 版本。TeXLive 2015 是老的,现在真的没有理由使用它:当时,对旧版本的支持很重要,因为(主要)因为 Overleaf 和 arXiv,但现在两者都使用足够新的发行版。