
我正在嘗試學習如何使用\eqref
命令而不是僅僅執行操作tag{1.1}
,這樣我就不必返回並重新編號。我遇到了麻煩:在問題 3b 中,我說
Now \eq{y(t, \epsilon)= y_0(t) + \epsilon y_1(t) + O(\epsilon^2), \label{eq:aa}}
(\eq 是我定義的縮寫,它是\newcommand{\eq}[1]{\begin{align*}#1\end{align*}}
)。後來我回去寫So we can fill in \eqref{eq:aa}
,問題是
- 它沒有標記方程
- 當它返回時,它稱它為 (1.2),儘管它是第一個標記方程式。
這是我的程式碼的鏈接,如果它可以幫助您診斷。https://www.writelatex.com/read/zjhhjpndjpkz
我感謝您的幫助!
答案1
好的。您的定義存在一些問題。
任何帶有星號的數學顯示環境旨在抑制編號。您可以在已加星號的環境中添加\tag{...}
,但該數字不會自動增加。然而,\label
這樣的標籤上的a將要\ref
受到或 的尊敬\eqref
。 (\eqref
真正要做的就是將 a 的參數格式化\ref
為直立並用括號括起來。)
下一個。align
用於多行表達式,每行都有一個左部分和一個右部分。儘管許多人使用\align
單行顯示器,但這不是一個好主意,因為多行顯示器周圍的垂直間距故意與單行顯示器周圍的垂直間距不同。如果一條線沒有兩個部分(由 分隔&
),則該結構不會水平居中。
最後,將環境轉變為命令會使其他人更難以閱讀和破解您的輸入,並導致不良的輸入習慣,例如將顯示材料排成很長的行。相信我,這會導致期刊編輯嚴重掉髮。
如果你真的想要使用這樣的簡寫進行單行編號顯示,可以這樣做,也許像這樣:
\newcommand{\eq}[1]{\begin{equation} #1\end{equation}}
但這樣做前最好三思而後行。有人建議說服您的輸入環境/編輯器使用“完成”。這使得很多從長遠來看,文件更易於查看,調試和維護也更有效率。
答案2
我已經查看了您在連結中提供的程式碼。主要問題似乎是您align*
在巨集定義中使用了環境\eq
。align*
透過設計,環境確實不是增加或列印方程編號。因此,\label
與該方程式(或方程組)相關的任何指令都不會指向 產生的內容\eq
。
因此,後續的\ref
or\eqref
指令不會指向該結構。相反,要么(??)
列印出來,要么交叉引用將指向在丟失\label
指令之前最近遞增其關聯計數器的物件。該物件可以是一個部分、一個定理、以「正常」方式(即不通過\eq
)產生的其他方程式等。
\eq
透過如下定義宏,您應該能夠獲得更好的結果:
\newcommand{\eq}[1]{\begin{equation}\begin{split} #1 \end{split}\end{equation}}
並在其上附加\label
指令,如
\eq{y(t, \epsilon)= y_0(t) + \epsilon y_1(t) + O(\epsilon^2),} \label{eq:aa}
請注意,透過此設置,您應該將語句\tag
內的所有指令重新命名\eq
為\label
.