![`split` 无法与自定义命令一起使用](https://linux22.com/image/282903/%60split%60%20%E6%97%A0%E6%B3%95%E4%B8%8E%E8%87%AA%E5%AE%9A%E4%B9%89%E5%91%BD%E4%BB%A4%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8.png)
我定义了一个方便的小宏来以括号符号排版矩阵元素,现在想将下一行与该矩阵元素的一部分对齐,因为方程式很长,与等号对齐会浪费大量空间。但是,只需将其放入&
宏的参数中,我就会得到:
! Misplaced alignment tab character &.
<argument> u_1u_2u_3L&
P
l.21 \end{split}
所以,我想知道,有没有更好的方法可以定义宏来做到这一点,或者这根本就不可能,我必须处理\hspace{-10ex}
或其他什么。
最小不起作用的示例:
\documentclass[a4paper,10pt]{report}
\usepackage{amsmath}
\newcommand{\matrixel}[3]{\left< #1\vphantom{#2#3}\right| #2\left| #3\vphantom{#1#2}\right>}
\begin{document}
\begin{equation}
\begin{split}
\matrixel{u_1u_2u_3L}{&P}{u_1'u_2'u_3'L'} = (a +b)\\
&\times (c+d)
\end{split}
\end{equation}
\end{document}
注意:我对术语有点困惑。这真的是我在这里定义的“宏”吗?如果有更好的词,请随意编辑。
答案1
您不能&
在 里面使用\vphantom
,这会混淆对齐过程并产生许多错误。这里有一个解决方法:对于这种特殊情况,您可以使用宏\alignmentpoint
(如果您愿意,可以选择其他名称),该宏在 的特殊形式中被制成 noop \vphantom
:
\documentclass[a4paper,10pt]{report}
\usepackage{amsmath}
\newcommand{\matrixel}[3]{\left< #1\mvph{#2#3}\right| #2\left| #3\mvph{#1#2}\right>}
\newcommand{\alignmentpoint}{&}
\newcommand{\mvph}[1]{\vphantom{\def\alignmentpoint{}#1}}
\begin{document}
\begin{equation}
\begin{split}
\matrixel{u_1u_2u_3L}{\alignmentpoint P}{u_1'u_2'u_3'L'} = (a +b)\\
&\times (c+d)
\end{split}
\end{equation}
\end{document}
当\matrixel
不在对齐中使用时,该设置不会造成任何损害。