xr-hyper 与 \section 重新定义不兼容

xr-hyper 与 \section 重新定义不兼容

这是main.tex

\documentclass[headings=optiontohead]{scrbook}
\usepackage{subfiles, xparse, xr-hyper, hyperref}
\externaldocument{main} % so that cross-references work in subfiles

\let\oldsection\section
\RenewDocumentCommand{\section}{o m}{
% I want the header to appear only when a short version of the section title is supplied
    \IfNoValueTF{#1}{\oldsection[head={}]{#2}}{\oldsection[#1]{#2}}
}

\begin{document}

\subfile{bar.tex}
\ref{sec:bar}

\end{document}

这是bar.tex

\documentclass[main.tex]{subfiles}
\begin{document}
\section{bar}
\label{sec:bar}
\end{document}

这是我在编译时遇到的错误main.tex

<argument> \Sectionformat 
                          {bar}{\numexpr \csname sectionnumdepth\endcsname \...
l.5 

The control sequence at the end of the top line
of your error message was never \def'ed.

我猜我对 的重新定义有问题\section。请帮我修复它!

答案1

该错误与您的重新定义或子文件无关。使用该[headings=optiontohead]选项时,标签的扩展会发生变化,因此命令\Sectionformat会写入辅助文件。由于 hyperref (nameref)\Sectionformat仅在文档​​开头定义,因此加载辅助文件时会出现错误\externaldocument。您可以尝试添加默认定义:

\documentclass[headings=optiontohead]{scrbook}
\providecommand\Sectionformat[2]{#1} %<----- new
\usepackage{xr-hyper,hyperref}

\externaldocument{test-utf8} % 

\begin{document}

\section[]{abc} \label{sec:bar}
\ref{sec:bar}

\end{document}

相关内容