将列居中对齐或对齐,并具有所需的间距

将列居中对齐或对齐,并具有所需的间距

最初,我有代码

\begin{align*}
|a_d|_p & = 1 \\
|a_i|_p & \leq 1
\end{align*}

产生的结果如下:

第一张图片

|这是不理想的,因为左侧的垂直条不对齐。然后我发现了 alignat 环境,并尝试了代码

\begin{alignat}{3}
| & a_d & |_p & & & = 1 \\
| & a_i & |_p & & & \leq 1
\end{alignat}

产生的结果如下:

第二张图片

这样好一些,但仍然不是很好,因为现在a_da_i不对齐了。理想情况下,我希望只有带有和的列居中a_da_i然后,我查看了答案这个问题并尝试了代码

\begin{alignat*}{3}
| & \omit\hfill $a_d$ \hfill & |_p & & & = 1 \\
| & \omit\hfill $a_i$ \hfill & |_p & & & \leq 1
\end{alignat*}

产生的结果如下:

第三张图片

从某些方面来看,这样更好,因为每个垂直条都对齐了, 和 也是如此a_da_i但现在右侧垂直条的|_p间距太靠右了。有什么建议吗?


更新:在阅读了 Bernard 建议中的代码以及有关\makemathbox(来自mathtools)、\newlength和的一些信息后\settowidth,我得出了以下代码,它似乎可以满足我的要求。但是,我是否做了任何不推荐的事情?

\newlength{\myl}
\settowidth{\myl}{$a_d$}

\begin{align*}
|a_d|_p & = 1 \\
| \mathmakebox[\myl]{a_i} |_p & \leq 1
\end{align*}

答案1

这里有两个解决方案,其中一个使用mathtools和。对于第二个解决方案,使用,更加自动化。我定义了一个 使用标签的命令:所有共享相同标签的命令将具有相同的宽度——即最宽参数的宽度:makeboxeqparbox\varpabs\varpabs

\documentclass{article}

\usepackage{mathtools}
\usepackage{etoolbox}
\usepackage{makebox, eqparbox}
\DeclarePairedDelimiterXPP{\pabs}[1]{}\lvert \rvert{_p}{\ifblank{#1}{\:\cdot\:}{#1}}
\DeclarePairedDelimiterXPP{\varpabs}[2]{}\lvert\rvert{_p}{\eqmakebox[#1]{$\displaystyle#2$}}

\begin{document}

\begin{align*}
  \pabs{a_d} & = 1 \\
  \pabs{\makebox*{$ a_d $}{$ a_i $}} & \leq 1
\end{align*}

\begin{align*}
  \varpabs{A}{a_d + c} & = 1 \\
  \varpabs*{A}{ \frac{a_i }{b_i}} & \leq 1
\end{align*}

\end{document} 

在此处输入图片描述

相关内容