我想使用\label{eq:1}
和eqref{eq:1}
。但它似乎不想与我使用的文档类一起使用。(可以在 amspset 文档类中找到这里。
\documentclass[reqno, 11pt, letterpaper, cm, unboxed]{amspset}
\usepackage{amsthm, amssymb, amsfonts, amsmath}
\usepackage[in]{fullpage}
\let\ifpdf\relax
\usepackage{mathtools}
\newcommand{\eq}[1]{\begin{align*}#1\end{align*}}
\newcommand{\ml}[1]{\!\begin{multlined}[t]#1\end{multlined}}
\newcommand{\pr}[2]{\begin{solution}{\textbf{#1.}}#2\end{solution}}
\name{Eric Auld}
\class{MATH 2200}
\assignment{Homework 1}
\duedate{April, 10}
\begin{document}
\pr{1}{
\eq{
e=mc^2 \label{eq:1}
}
Suppose we consider \eqref{eq:1}
}
\end{document}
当我这样做时,它无法识别该引用,并显示 Latex 警告:第 1 页上的引用“eq:1”在第 __ 行未定义。
有人能有什么建议吗?
答案1
align*
您使用的环境不会\eq
生成数字,因此您的\label
命令最终什么都没有引用,至少在这个特定情况下是这样。在一般情况下,它会引用一个“随机”数字,准确地说是最后一个生成的数字,可能是由\section
命令生成的。
你得到很多更具灵活性、结构性和可读性,如果你不隐藏命令内的环境。
使用你的输入而不是
\documentclass[reqno, 11pt, letterpaper, cm, unboxed]{amspset}
\usepackage{amsthm, amssymb, amsfonts, amsmath}
\usepackage[in]{fullpage}
\let\ifpdf\relax
\usepackage{mathtools}
%%% patch solution to typeset its argument boldface
\usepackage{xpatch}
\xpatchcmd{\solution}{#1]}{\textbf{#1.}]}{}{}
\name{Eric Auld}
\class{MATH 2200}
\assignment{Homework 1}
\duedate{April, 10}
\begin{document}
\begin{solution}[1]
\begin{equation}
e=mc^2 \label{eq:1}
\end{equation}
Suppose we consider \eqref{eq:1}
\end{solution}
\end{document}
顺便说一句,不建议使用align
或align*
作为“包罗万象”的显示环境:使用它们仅有的适用于多线环境。
几个月后,您可能会盯着您的文档问自己“这在做什么*@$$
?\pr
”此外,使用标准命令的代码可以从一个文档移植到另一个文档。
同样,我对其进行了修补solution
,使其(可选)参数以粗体显示,这样您就不必使用笨拙的
\begin{solution}[\textbf{1.}]
并且您的文档将符合标准。如果主管(例如您的助教或主管)告诉您“那里的粗体字是干什么的?”,您只需移除补丁并再次打印论文,然后反问“什么粗体字?”;-)