TexLive与MikTex使用\cref生成参考文献不一致问题求助
解决TexLive 2024编译longtable时\cref引用异常的问题
问题背景
在GitHub Action中使用Docker镜像的TexLive 2024,通过lualatex、pdflatex或xelatex编译PDF时,使用\cref引用longtable环境的表格,输出结果与本地TexStudio搭配MikTex编译的结果不一致——本地正常显示“table 1.1”,但TexLive端输出异常。已尝试更换编译引擎、调整表格环境结构、修改caption与label位置等操作,问题仍未解决。
使用的包版本:
- longtable:TexLive为v4.20(2024-4-26),MikTex未显示已安装版本
- cleverref:两者均为v021.4(2018-4-22)
排查思路
- 版本兼容性问题:TexLive使用的longtable是2024年的新版本,而MikTex大概率搭载旧版longtable(未显示安装版本可能意味着是默认旧版),新版本longtable可能调整了label的写入逻辑,与2018年的cleverref旧版不兼容。
- 交叉引用类别识别:检查TexLive生成的
.aux文件,对比MikTex版本的.aux中关于longtable的label条目,查看cleverref识别的引用类别是table还是longtable——若TexLive中被识别为longtable,而cleverref未配置该类别的名称,就会出现异常。 - 编译次数验证:确认GitHub Action中执行了足够的编译次数(至少2次),交叉引用需要读取
.aux文件的内容,仅编译一次会导致引用未正确解析。 - caption包影响:若文档中使用了
caption包,检查其版本是否与longtable新版本冲突,部分旧版caption包可能无法适配新版longtable的caption处理逻辑。
解决办法
- 强制指定longtable的引用类别:在导言区添加以下代码,让cleverref将
longtable当作普通table处理,直接输出预期的“table”前缀:
\crefname{longtable}{table}{tables} \Crefname{longtable}{Table}{Tables}
- 降级longtable版本:在GitHub Action的编译脚本中,通过
tlmgr安装与MikTex兼容的旧版longtable。例如,执行对应旧版的安装命令:
tlmgr install longtable --revision=59835
(注:59835是longtable v4.19的修订号,可根据需要调整为对应兼容版本)
3. 确保足够的编译次数:在GitHub Action的编译步骤中,至少执行两次编译命令,例如:
lualatex your-document.tex lualatex your-document.tex
- 临时替代方案:若上述方法暂时无法生效,可临时改用
\ref配合手动添加“table”前缀,或使用hyperref包的\autoref命令替代\cref。
最小工作示例(MWE)
\documentclass{report} \usepackage{longtable} \usepackage{cleveref} \begin{document} \chapter{Test Chapter} See \cref{tab:test} for details. \begin{longtable}{|c|c|} \caption{Test Table}\label{tab:test}\\ \hline Column 1 & Column 2 \\ \hline \endfirsthead \caption{Test Table (continued)}\\ \hline Column 1 & Column 2 \\ \hline \endhead \hline \endfoot \hline \endlastfoot Row 1 & Data 1 \\ Row 2 & Data 2 \\ \end{longtable} \end{document}
内容的提问来源于stack exchange,提问作者Pepijn B.
相关产品推荐
相关产品推荐

