在使用 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}