操作系统:Windows 11
TeX 发行版:Tex Live 2025
描述问题:
使用 amsthm
定义和 thm
环境同计数器的 lem
环境,而后用 cleveref
的 \cref
引用,发现在本地 TeX Live 2025 编译后,定理名称全显示 thm
名称。
最小工作示例(MWE)
\documentclass{article}
\usepackage{amsthm}
\usepackage{cleveref}
\newtheorem{thm}{Theorem}[section]
\newtheorem{lem}[thm]{Lemma}
\crefname{lem}{lemma}{lemmas}
\Crefname{lem}{Lemma}{Lemmas}
\begin{document}
\begin{thm}\label{thm}
foo
\end{thm}
\begin{lem}\label{lem}
foo
\end{lem}
\cref{lem}, \Cref{lem}
\end{document}
在 texpage 和 overleaf 上测试上述代码,\cref{lem}
均可显示名称为 lemma
,然而在本地 texlive 2025 上测试上述代码,结果如图所示
上面的代码其实cleverref
会报警告:
LaTeX Warning: Reference `lem' on page 1 undefined on input line 18.
LaTeX Warning: Reference `lem' on page 1 undefined on input line 18.
此事在下面的几个链接里都有记载:
目前来看的最佳实践似乎是:
\documentclass{article}
\usepackage{amsthm}
\usepackage{cleveref}
\newtheorem{thm}{Theorem}[section]
\newtheorem{lem}[thm]{Lemma}
\AddToHook{env/lem/begin}{\crefalias{thm}{lem}}
\crefname{lem}{lemma}{lemmas}
\Crefname{lem}{Lemma}{Lemmas}
\begin{document}
\begin{thm}\label{thm}
foo
\end{thm}
\begin{lem}\label{lem}
foo
\end{lem}
\noindent
\cref{lem}, \Cref{lem}
\end{document}
似乎在firstaid
中已经修了...但我不太懂这个...
最后补充一下「我本地TL2025会出问题」的内核和宏包版本(\listfiles
):
*File List*
article.cls 2025/01/22 v1.4n Standard LaTeX document class
size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
amsthm.sty 2020/05/29 v2.20.6
cleveref.sty 2018/03/27 v0.21.4 Intelligent cross-referencing
l3backend-pdftex.def 2025-04-14 L3 backend support: PDF output (pdfTeX)
可以省略了
x-post: https://github.com/CTeX-org/forum/issues/340
可能muzimuzhi会补充更多信息...