在 alignat 环境中居中列?

在 alignat 环境中居中列?

如何将每个单元格的内容置于中间列的中心?我用 来近似\phantom,但一定有更好的方法。

\begin{alignat*}{3}
  &E&\quad&\mathrm{par}&&\quad\Sigma,\\
  &\Psi&\quad&\phantom{p}\mathrm{"}\phantom{r}&&\quad\frac{\epsilon V}{1+4\pi\epsilon F},\\
  &\Psi&\quad&\phantom{p}\mathrm{"}\phantom{r}&&\quad\frac{(1+4\pi\epsilon F)^2}{\epsilon}.
\end{alignat*}

谢谢

答案1

该环境的核心alignat是建立在 TeX 的 之上\halign。在该环境中,您可以通过发出 来忽略给定列的格式规范\omit。因此编写

\omit\hfill text \hfill

将为您提供居中的文本列,因为列规范不仅包括左/右对齐,还将材料设置为数学。最好创建一个单独的命令来提供此构造,然后可以在单元格开头的任何地方或类似环境alignat中使用该命令:align

示例输出

\documentclass{article}

\usepackage{amsmath}

\newcommand{\ditto}{{''}}
\newcommand{\ccol}[1]{\omit\hfill #1\hfill}

\begin{document}

\begin{alignat*}{3}
  &E&\quad&\ccol{par}&\quad&\Sigma,\\
  &\Psi&&\ccol{\ditto}&&\frac{\epsilon V}{1+4\pi\epsilon F},\\
  &\Psi&&\ccol{\ditto}&&\frac{(1+4\pi\epsilon F)^2}{\epsilon}.
\end{alignat*}

\begin{align}
  E &= mc^2\\
  F &\ccol{is another quantity}\\
  G &= u^2 + v^2 - w^2 + x^2 - y^2 + z^2
\end{align}

\end{document}

如果您希望跨越多列,相关命令是\multispan,例如\multispan{3}\hfill text \hfill将文本分布在三列并居中。

或者,正如 Harish Kumar 建议的那样,您可以使用arraytabular

第二个示例

\documentclass{article}

\usepackage{amsmath}

\newcommand{\ditto}{{''}}

\begin{document}

\begin{equation*}
  \begin{array}{r@{\quad}c@{\quad}l}
  E&\mathrm{par}&\Sigma,\\
  \Psi&\mathrm{\ditto}&\displaystyle\frac{\epsilon V}{1+4\pi\epsilon F},\\
  \Psi&\mathrm{\ditto}&\displaystyle\frac{(1+4\pi\epsilon F)^2}{\epsilon}.
  \end{array}
\end{equation*}

\begin{center}
  \begin{tabular}{r@{\quad}c@{\quad}l}
    \( E \)&par&\( \Sigma, \)\\
    \( \Psi \)&\ditto&\( \displaystyle\frac{\epsilon V}{1+4\pi\epsilon F}, \)\\
    \( \Psi \)&\ditto&\( \displaystyle\frac{(1+4\pi\epsilon F)^2}{\epsilon}. \)
  \end{tabular}
\end{center}
\end{document}

但是,默认行距alignat更好,您不需要担心调整数学样式。

相关内容