答案1
尽管有多种方法可以实现这一点,但如果这种情况很少发生,那么只需添加适当的方法\phantom
可能是最简单的。
\documentclass{article}
\usepackage{amsmath}
\newcommand*\xor{\oplus}
\begin{document}
\begin{align*}
c_1\phantom{{}\xor c_2 } &= m_1 \xor k\\
c_2\phantom{{}\xor c_2 } &= m_2 \xor k\\
c_1 \xor c_2 &= m_1\xor k\xor k\xor m_2 = m_1\xor m_2
\end{align*}
\end{document}
如果我必须经常使用该构造,我可能会设置一个 TABstack,其中幻影不是必需的,只要每个方程不需要自己的编号即可。
\documentclass{article}
\usepackage{amsmath,tabstackengine}
\TABstackMath
\TABbinary
\setstackgap{L}{1.2\normalbaselineskip}
\newcommand*\xor{\oplus}
\begin{document}
\[
\tabbedCenterstack[l]{
c_1 &= m_1 \xor k\\
c_2 &= m_2 \xor k\\
c_1 \xor c_2 &= m_1\xor k\xor k\xor m_2 = m_1\xor m_2
}
\]
\end{document}
答案2
答案3
您alignat
可以生成右对齐/左对齐的列对,并且它们之间没有默认间距。
如果以关系符号开头,左对齐的列将产生正确的间距。
\documentclass{article}
\usepackage{amsmath}
\newcommand*\xor{\oplus}
\begin{document}
\begin{alignat*}{2}
& c_1 &&= m_1 \xor k \\
& c_2 &&= m_2 \xor k \\
& c_1 \xor c_2 &&= m_1 \xor k \xor k \xor m_2 = m_1 \xor m_2
\end{alignat*}
\begin{align*}
c_1 &= m_1 \xor k \\
c_2 &= m_2 \xor k \\
c_1 \xor c_2 &= m_1 \xor k \xor k \xor m_2 = m_1 \xor m_2
\end{align*}
\end{document}
我还添加了更常见的渲染。
答案4
您还可以使用数组来实现您想要的功能。如果您希望方程式包含数字,只需将 $$[...]$$ 替换为 \begin{equation}[...]\end{equation}。要更改任何列的对齐方式,只需将数组参数中的“l”更改为“r”或“c”。
\documentclass{article}
\usepackage{mathtools}
\newcommand*\xor{\oplus}
$$
\begin{array}{ll}
c_1\qquad &= m_1 \xor k\\
c_2\qquad &= m_2 \xor k\\
c_1 \xor c_2 &= m_1\xor k\xor k\xor m_2 = m_1\xor m_2
\end{array}
$$