如何获得方程的宽度

如何获得方程的宽度

如果我想知道文本的宽度,我使用

\settowidth{\MyLength}{bla}. 

方程式中有类似的东西吗?

更具体地说,我有

\begin{align}
a & b & c & d\\
c & d & c & d
\end{align}

我想要知道这个align部分的宽度。我该如何获取呢?

答案1

人们可以得到“等式”各部分宽度的总和,因为对齐组之间的间距是动态计算的并且不存储在任何地方。

列宽以特殊格式存储在宏中\maxcolumn@widths,当条件为假时,该格式在构造结束时可用\ifmeasuring@。格式为

\or <dimen1> \or <dimen2> \or ... 

其中每个<dimen>是相应列的最大宽度(align构建rlrl...对齐)。

\documentclass{article}
\usepackage{amsmath}


\makeatletter
\newcommand{\settowidthofalign}[2]{%
  \setbox\z@=\vbox{
    \begin{align*}
    #2
    \ifmeasuring@\else\global\let\got@maxcolwd\maxcolumn@widths\fi
    \end{align*}
  }%
  \begingroup
  \def\or{+}\edef\x{\endgroup#1=\dimexpr\got@maxcolwd\relax}\x}
\makeatother

\newlength{\mylen}


\begin{document}
\settowidthofalign{\mylen}{
a & b & c & d\\
c & d & c & d
}

\the\mylen

\end{document}

可能除此之外,还计算了从左到右实际使用的水平空间。

相关内容