每当我尝试使用该alignat
环境时,它似乎都无法在我的计算机上运行!我尝试了以下简单代码(我的文件有\usepackage{amsmath}
):
\begin{alignat}{3}
\min \quad x_1 & + 2x_2 & + 4x_3 & & & \\
\text{s.t.} \quad x_1 & + x_2 & + 3x_3 & = & 5 & \\
2x_1 & + x_2 & + 6x_3 & = & 8 & \\
x_1 &, x_2 &, x_3 & \geq & 0 & .
\end{alignat}
编译时,出现以下错误:
! Missing # inserted in alignment preamble. <to be read again>
\crcr l.114 \end{alignat}
知道为什么会这样吗?
答案1
已经有一段时间了,你现在可能已经解决了你的问题。但由于另一个问题涉及到alignat
(好吧,我的答案也涉及到它)出现了,这个问题的得分相当高Google 查询latex alignat
,我想确保这里有更多信息......
我不确定你想对齐什么。我假设你想对齐 x_i,在这种情况下,正确的解决方案是
\begin{alignat}{3}
\min \quad x_1& {}+{}& 2x_2& {}+{}& 4x_3& \\
\text{s.t.} \quad x_1& {}+{}&x_2&{}+{} & 3x_3&=5\\
2x_1& {}+{}& x_2& {}+{}&6x_3& = 8\\
x_1&, &x_2&, &x_3& \geq 0 .
\end{alignat}
生成结果:
而您的代码产生:
如你所见,你需要放置对齐字符之间要对齐的列,而不仅仅是列内部。
答案2
你的代码也可以编译,并且列夫建议构建一个最小示例tabular
确实有助于缩小问题所在的范围,但是我通过错误地使用环境中的环境,能够生成与您遇到的错误类似的错误alignat
。
例如,
\begin{document}
\begin{alignat}{3}
\begin{tabular}{||}
test
\end{tabular}
\end{alignat}
导致错误
! Missing # inserted in alignment preamble.
<to be read again>
\cr
l.9 \end{alignat}
由于l.9
和l.114
仅引用代码中的行号,主要区别在于我的错误包括\cr
您的错误所说的位置\crcr
。
我可以通过在环境中使用至少一个正确的列对齐字符来解决对齐前导错误tabular
,例如切换到\begin{tabular}{|c|}
。