意外的 LaTeX cmd 错误

意外的 LaTeX cmd 错误

我有一个包含该类的 tex 文档scartcl。在序言中,我\it通过重新定义\RenewDocumentCommand{\it}{...}{...}。此外,我还需要在不同的环境中使用 LuaLaTeX 完成该文档。

  1. 版本 1.13.0(已修补 TeX Live 2021/CVE-2023-32700)(在我的本地机器上)
  2. 版本 1.15.0 (TeX Live 2022/Debian)(在 podman 容器内)

在我本地机器上的旧版本中,一切正常。我在日志中搜索了“err”、“warn”和“depr”,没有发现任何相关内容。

但是,在容器中的较新版本中,我得到了! LaTeX cmd Error: Command '\it' undefined。以及一条错误消息,指出旧字体命令\it将不再起作用。我尝试通过添加 来解决第一个问题\provideDocumentCommand{\it}。结果LaTeX cmd Error: Invalid argument type '\RenewDocumentCommand ' in command并且scratcl错误仍然存​​在。

有人能向我解释一下这里的问题是什么吗?

泰·弗朗兹

答案1

考虑以下简短的测试文件:

% franz.tex
\documentclass{scrartcl}
\show\it
\end{document}

如果我在我的系统上运行(我从 2012 年开始保留 TeX Live),

/usr/local/texlive/2021/bin/universal-darwin/pdflatex franz

我明白了

> \it=macro:
->\protect \it  .
l.2 \show\it

如果我这样做

/usr/local/texlive/2022/bin/universal-darwin/pdflatex franz

我明白了

> \it=undefined.
l.2 \show\it

发生了什么?在从 TL 2021 过渡到 TL 2022 的过程中,koma 类改变了旧字体命令的管理。在 TL 2021 之前,这些命令的定义是它们在序言中也能“起作用”。后来,它们仅在文档开头“定义”。

这就是造成差异的原因:如果您\RenewDocumentCommand{\it}{...}{...}在序言中这样做,TL 2021 不会出错,因为\it确实有定义。但是,在更高版本中会出错,因为序言中\it不再有定义。

解决方案:

\providecommand{\it}{}% in case \it isn't defined
\RenewDocumentCommand{\it}{...}{...}

然而,我不建议\it出于任何目的重复使用。

相关内容