我用以下标记标记方程式:\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”或在名称中使用一些大写字母通常是良好的命名策略。