使用 fontspec、\listoffigures 和 cross-refs 时,koma-script 中存在令人困惑的错误

使用 fontspec、\listoffigures 和 cross-refs 时,koma-script 中存在令人困惑的错误

在使用 fontspec 包(LuaLaTeX/XeLaTeX)和交叉引用时,我发现了 KOMA-script 中的一个奇怪的错误。这里就不做深入的描述了,下面是触发此问题的代码示例:

\documentclass{scrreport}
\usepackage{fontspec}
%\setmainfont{Calibri}
\begin{document}
\listoffigures
\begin{figure}
\caption{Test}
\label{fig:test}
\end{figure}
\begin{figure}
\caption{Can't reference \ref{fig:test}}
\end{figure}
\end{document}

或多或少,如果您在带有标签的 KOMA-script 环境中创建图形环境,然后尝试在另一个图形的标题环境中交叉引用该图形,则如果您使用 fontspec 包并调用命令 \listoffigures,该环境将出错。删除交叉引用、fontspec 包、\listoffigures 或 KOMA-script 将解决此问题。控制台错误是:

<inserted text> 
                $
l.2 ...erence `fig:test' on page 2 undefined}}}{2}
                                                  {}%

到目前为止,我一直在手动在标题中输入交叉引用,因为我被迫在实验报告中包含图表列表/使用 Calibri,而且我完全不知道如何自己解决这个问题,因为 XeLaTeX 似乎试图排版警告。我也喜欢 KOMA-script。我正在运行 MikTeX 21.8 并使用 TeXworks 使用 XeLaTeX + MakeIndex + BibTeX 选项编译我的文档,但是如果在删除文档的关联 .lof 文件后编译文档两次,则在仅使用 XeLaTeX 选项进行编译时会发生此错误(错误发生在第二次尝试时;第一次尝试编译但将“??”放在交叉引用的位置)。

我想知道除了“停止使用 KOMA 脚本/不要使用 Calibri/不要在标题中交叉引用/你不需要列出图片/等等”之外,是否有人对如何修复此错误有任何想法。我到处搜索信息以尝试修复此问题,但未能找到太多信息。

答案1

该错误与 KOMA 无关,使用标准类时也会遇到相同的错误。

当标题中引用未知标签时:

\documentclass{article}
\usepackage{fontspec}
\begin{document}
\listoffigures
\begin{figure}
\caption{Can't reference \ref{fig:test}}
\end{figure}
\end{document}

然后将其写入 .lof 文件(我添加了换行符):

\contentsline {figure}{\numberline {1}{
  \ignorespaces Can't reference \G@refundefinedtrue 
   {\mbox {\normalfont 
    \int _zero:N \l __fontspec_strong_int 
   \bfseries ??}}
   \GenericWarning { }{LaTeX Warning: Reference `fig:test' on page 1 undefined}}}{1}{}%

\int _zero:N \l __fontspec_strong_int 是特定于字体规范的并导致错误,但即使没有字体规范,输出也不会很好。

正确的解决方案是保护 \ref:

\documentclass{article}
\usepackage{fontspec}
\begin{document}
\listoffigures
\begin{figure}
\caption{Can't reference \protect\ref{fig:test}}
\end{figure}
\end{document}

相关内容