![无法在 \align* 环境中用矩阵标记一行](https://linux22.com/image/297213/%E6%97%A0%E6%B3%95%E5%9C%A8%20%5Calign*%20%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%94%A8%E7%9F%A9%E9%98%B5%E6%A0%87%E8%AE%B0%E4%B8%80%E8%A1%8C.png)
我尝试这样做
\begin{align*}
\label{labelname}\tag{$\begin{smallmatrix}0\\1\end{smallmatrix}$}a=b\\
c=d
\end{align*}
但它不允许我添加标签并弹出一条错误消息
\math@cr@@ 的使用与其定义不符。\new@ifnextchar ...ved@d = #1\def \reserved@a {#2} \def \reserved@b {#3}\futu...
如果我使用更普通的标签,例如
\tag{$e_2(x)$}
然后标签就可以起作用了。
有人能帮忙吗?谢谢!
答案1
您应该使用\protect
脆弱的宏:\begin
,\\
和\end
,因此
\tag{$\protect\begin{smallmatrix}0\protect\\1\protect\end{smallmatrix}$}
但是,您可以使用更清晰的宏来避免这种麻烦的方法:
\documentclass{article}
\usepackage{amsmath}
\newcommand{\mathtag}[1]{%
\tag{\unexpanded{\unexpanded{$#1$}}}%
}
\begin{document}
\begin{align*}
\label{labelname}\mathtag{\begin{smallmatrix}0\\1\end{smallmatrix}}a=b\\
c=d
\end{align*}
And \eqref{labelname}
\end{document}
答案2
我提前把标签保存在一个盒子里,然后在标签里面使用它。
\documentclass{article}
\usepackage{amsmath}
\newsavebox\tagA
\newsavebox\tagB
\begin{document}
\savebox\tagA{$\begin{smallmatrix}0\\1\end{smallmatrix}$}
\begin{align*}
\label{labelA}\tag{\usebox{\tagA}}a=b\\
c=d
\end{align*}
\savebox\tagB{$\begin{smallmatrix}2\\3\end{smallmatrix}$}
\begin{align*}
\label{labelB}\tag{\usebox{\tagB}}e=f\\
g=h
\end{align*}
Comparing \ref{labelA} and \ref{labelB}...
\end{document}