如果引用不存在,如何强制产生编译错误?

如果引用不存在,如何强制产生编译错误?

我很好奇,如果引用尚未定义,是否有办法强制编译失败。我不希望引用实际将任何内容输出到文档中,而只是检查存在条件。例如,我希望能够执行以下操作:

\begin{definition} \label{def C} \requires{def A} \requires{def B}
    A \underline{C} is an A and a B such that...  etc etc etc.
\end{definition} 

并且我不希望\requires{def A}实际产生输出,而只是强制在上方某处存在\label{def A}。理想情况下,您可以将其用于定理和定义。这样,我就可以在我的定理/定义中添加任何依赖项,而不必担心我是否已经定义了上面的所有内容,编译器会告诉我。cleveref提供这个吗?如果没有,添加它会有多难?我非常简要地查看了源代码,但我不太熟悉该语言,所以需要一段时间。

答案1

如果你真的想强制标签是,则\requires必须重新定义该\label命令,因为当前定义仅将标签写入aux-files,因此其相对于的位置\ref无关紧要。例如

\documentclass{article}
\makeatletter
\let\Orilabel\label
\renewcommand\label[1]{\@namedef{mylabel@#1}{}\Orilabel{#1}}
\newcommand\require[1]{%
 \ifcsname mylabel@#1\endcsname
 \else
  \@latex@error{Reference #1 undefined}
 \fi}
\begin{document}
\section{A}
\label{A}

\require{A}\require{B}

\ref{A},\ref{B} \label{B}
\end{document}

相关内容