以下代码保存在test.tex
:
\documentclass{scrartcl}
\usepackage{unicode-math,xr-hyper,hyperref,cleveref}
\newtheorem{definition}{Definition}
\begin{document}
\begin{definition}[$\nvrightarrow$]\label{mylabel}
Hello, world!
\end{definition}
\end{document}
test.tex
使用 LuaLaTeX 成功编译。
以下代码保存在test2.tex
:
\documentclass{scrartcl}
\usepackage{xr-hyper,hyperref,cleveref}
\externaldocument{test}[test.pdf]
\begin{document}
Hello, world!
\end{document}
此代码无法使用 LuaLaTeX 进行编译。出现以下错误消息test2.log
:
! Undefined control sequence.
<argument> $\nvrightarrow
$
l.5 \externaldocument{test}[test.pdf]
?
! Emergency stop.
<argument> $\nvrightarrow
$
l.5 \externaldocument{test}[test.pdf]
但是,如果的主体test.tex
改变如下(定义的标题和主体互换了):
\begin{definition}[Hello, world!]\label{mylabel}
$\nvrightarrow$
\end{definition}
或如下(删除标签):
\begin{definition}[$\nvrightarrow$]
Hello, world!
\end{definition}
然后两个文件都可以成功编译。
第一个例子中的错误是什么原因造成的?如何修复?
答案1
您的标签在辅助中创建:
\newlabel{mylabel}{{1}{1}{$\nvrightarrow $}{definition.1}{}}
\nvrightarrow
由 unicode-math 定义,但仅在文档开始处。因此,您要么在其他文档中提供命令的定义,要么也在那里加载 unicode-math,然后在文档开始后加载外部文件。
\documentclass{scrartcl}
\usepackage{unicode-math}
\usepackage{xr-hyper,hyperref,cleveref}
\begin{document}
\externaldocument{test}[test.pdf]
Hello, world!
\end{document}
答案2
看起来 unicode-math 是导致问题的根源?我更新了 test.tex,如下所示
\documentclass{scrartcl}
\usepackage{stix}
\usepackage{xr-hyper,hyperref,cleveref}
%\usepackage{unicode-math,xr-hyper,hyperref,cleveref}
\newtheorem{definition}{Definition}
\begin{document}
\begin{definition}[{$\nvrightarrow$}]\label{mylabel}
Hello, world!
\end{definition}
\end{document}
并更新 test2.tex 如下
\documentclass{scrartcl}
\usepackage{stix}
\usepackage{xr-hyper,hyperref,cleveref}
\externaldocument{test}[test.pdf]
\begin{document}
Hello, world!
\end{document}