为什么 \ref{} 给出 (null)?

为什么 \ref{} 给出 (null)?

我用以下标记标记方程式:\label{x}。我用以下引用它:\ref{x}。但我的输出给出的是:“(xnull)”而不是预期的“(x)”。有什么建议吗?

一位 MWE 表示:

\documentclass[11pt]{article}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{latexsym}
\usepackage{array}
\def\null{{\rm null}\,}
\begin{document}
\title{MWE}
\maketitle

Consider ...
\begin{equation}
  \label{restriction}
  1=1
\end{equation}
Equation (\ref{restriction}) ...
\end{document}

答案1

问题是

\def\null{{\rm null}\,}

您正在覆盖标准 LaTeX 命令的默认定义\null

\def\null{\hbox{}}

并且这会导致在所有\null使用的地方出现问题,例如在\@setref用于引用标签的内核命令中(这解释了您的示例中存在多余的“null”):

\def\@setref#1#2#3{%
\ifx#1\relax
\protect\G@refundefinedtrue
\nfss@text{\reset@font\bfseries ??}%
\@latex@warning{Reference `#3' on page \thepage \space
undefined}%
\else
\expandafter#2#1\null
\fi}

重新定义内核命令不是一个好主意,除非您知道自己在做什么。

如果您\newcommand尝试重新定义 而不是\def,您会立即收到一条错误消息,告知您已定义。这是使用而非\null的优势之一。\newcommand\def

要定义自己的命令,请选择一个与现有名称不对应的字符串;使用前缀“my”或在名称中使用一些大写字母通常是良好的命名策略。

相关内容