这是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}