当“\nvrightarrow”在定义标题中使用并从另一个文件引用时,会导致错误

当“\nvrightarrow”在定义标题中使用并从另一个文件引用时,会导致错误

以下代码保存在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}

生成的 pdf 文件(使用 lualatex)如下所示: 在此处输入图片描述 在此处输入图片描述

相关内容