我有几个=
像这样的对齐方程:
\begin{equation}
\begin{split}
a &= b
b &= c
\end{split}
\end{equation}
\begin{equation}
\begin{split}
foo &= x
bar &= y
baz &= z
\end{split}
\end{equation}
然而,当它出现时,它基本上是这样的:
a = b
b = c
... content
foo = x
bar = y
baz = z
等号未对齐跨不同的方程块。
想知道是否有办法:
- 将它们彼此对齐。
- 将它们与页面中心对齐。
答案1
如果你真的想让所有等号居中,可以考虑
\documentclass{article}
\usepackage{mathtools}
\usepackage{lipsum}
\usepackage{tikz}% just for illustration
\begin{document}
\begin{equation}
\begin{split}
\mathllap{a} &= \mathrlap{b}\\
\mathllap{b} &= \mathrlap{c}
\end{split}
\end{equation}
\lipsum[1]
\begin{equation}
\begin{split}
\mathllap{foo} &= \mathrlap{x}\\
\mathllap{bar} &= \mathrlap{y}\\
\mathllap{baz} &= \mathrlap{z}
\end{split}
\end{equation}
\tikz[remember picture,overlay]{\draw[red](current page.north)--(current page.south);}
\end{document}
钛钾Z 和 lipsum 的东西只是为了说明。
根据“内容”的长度,你也可以使用
\documentclass{article}
\usepackage{lipsum}
\usepackage{mathtools}
\begin{document}
\begin{align*}
a &= b\\
b &= c\\
\intertext{\lipsum[1]}
foo &= x\\
bar &= y\\
baz &= z
\end{align*}
\end{document}
答案2
这是一个 LuaLaTeX 解决方案。本质上,它自动插入\mathllap
和\mathrlap
自动@marmot 的回答。
为了确保此自动化程序成功,输入行必须满足两个主要要求:
在任何包含
&=
粒子的行上,该粒子的前面和后面都必须有空格。即,aaa &= bbb
将被识别和处理,但不会。并且,和aaa&=bbb
之间不得有空格。&
=
包含粒子的行
&=
必须包含相关方程式的完整左侧和右侧材料——不能包含其他内容。例如,任何\label
说明以及任何和所有注释都必须出现在方程式行之前或之后的行上。
希望这两个输入要求不会太繁重。
下面的代码包括(a)执行实际工作的 Lua 函数和(b)两个 LaTeX 宏(称为\CenterEqOn
和\CenterEqOff
)分别用于启用和禁用 Lua 函数的操作。
最后一点:当然,整个方法只有在符号左侧和右侧的材料=
不超过 的情况下才能真正成功0.4\textwidth
。如果材料比这个长度长,它会突出到左侧和/或右侧边距。
\documentclass{article}
\usepackage{lipsum} % filler text
\usepackage{mathtools} % for '\mathllap' and \mathrlap'
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
function center_eq ( s )
if s:find ( "%s&=%s" ) then
s = s:gsub ( "^(.-)&=(.-)(\\?\\?)$",
"\\mathllap{%1}&=\\mathrlap{%2}%3" )
end
return s
end
\end{luacode}
\newcommand\CenterEqOn{\directlua{%
luatexbase.add_to_callback (
"process_input_buffer", center_eq , "CenterEq" )}}
\newcommand\CenterEqOff{\directlua{%
luatexbase.remove_from_callback (
"process_input_buffer", "CenterEq" )}}
\begin{document}
\CenterEqOn
\begin{equation}\begin{split}
aaa &= bbbbbb\\
ccccccccc &= ddd \%
\end{split}\end{equation}
\lipsum[2]
\begin{align}
e &= f \\
adfkjas;fldasj &= ljdfja \\
&= djfal;sfjksajfdal;sfj
\label{eq:last} % place this instruction on a separate line!
\end{align}
A cross-reference to equation \eqref{eq:last}.
\end{document}