如何将多个单独的方程式通过等号对齐到页面中心

如何将多个单独的方程式通过等号对齐到页面中心

我有几个=像这样的对齐方程:

\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. 将它们彼此对齐。
  2. 将它们与页面中心对齐。

答案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}

相关内容