对齐内的子方程导致方程太宽

对齐内的子方程导致方程太宽

我想创建子方程并对其进行对齐,以便产生良好的“不等式约束”。我当前的代码:

\begin{subequations}
\begin{align}
a & \le b & \le c \label{eq:constr1}\\
d & \le effff & \le f \label{eq:constr1}\\
\end{align}
\label{eq:constr}%
\end{subequations}

bPDF 中的结果是“和c”和“和efffff”之间的距离太大f。我希望它们\le正好位于彼此下方。将beffff置于它们之间。最后,ad应该与右对齐\le,并且c应该f与左对齐\le

答案1

如果您希望中间列居中,那么您需要使用\makebox为该列保留足够的宽度,这需要事先知道最宽的元素是什么,或者使用array

在此处输入图片描述

笔记

  • 提供alignat对齐rl方程。由于我们希望第三列是l左对齐的,因此我们需要使用&&跳过之前右r对齐的列。
  • 对于array解决方案,我们需要使用使不等式符号被视为关系运算符,类似于和{}的间距差异。$-x$${}-x$
  • 包裹calc用于\widthof{}宏,因此仅对解决方案有用alignat
  • 正如 Qrrbrbirlbel 所评论的,你可以利用包裹array并将所需内容{}纳入列规范中,如下面代码中的最后一个示例所示。

代码:

\documentclass{article}
\usepackage{amsmath}
\usepackage{calc}
\usepackage{array}

\newcommand*{\Widest}{effff}%
\newcommand*{\WideAs}[1]{\makebox[\widthof{$\Widest$}][c]{$#1$}}%
\begin{document}\noindent
You can use \verb|alignat|:
%
\begin{alignat*}{3}
    a & \le \WideAs{b}     && \le c \\
    d & \le \WideAs{effff} && \le f 
\end{alignat*}
%
Or use \verb|array|:
%
\[\begin{array}{r@{}c@{}l}
    a \le {}& b     &{} \le c \\
    d \le {}& effff &{} \le f 
\end{array}\]
%
Alternatively using the \verb|array| package:
\[\begin{array}{r<{{}}@{}c@{}>{{}}l}
    a \le & b     & \le c \\
    d \le & effff & \le f 
\end{array}\]
\end{document}

相关内容