测量多行数学代码的宽度

测量多行数学代码的宽度

我想测量多行数学代码的宽度。我下面的方法并不总是成功。在第二个示例中,插入了一个额外的换行符:我认为这与 \wedge 符号周围产生的空间有关。我猜可能需要一种完全不同的方法?我很感激任何建议。

干杯

\documentclass{article}

\makeatletter
\newlength{\mpbox@length}
\newcommand{\mpbox}[1]{%
\settowidth{\mpbox@length}{$\begin{array}{@{}l@{}}#1\end{array}$}%
\parbox[t]{\mpbox@length}{$#1$}%
}
\makeatother

\usepackage[osf,sc]{mathpazo}

\begin{document}

\noindent ExampleA
% expected result except for the overly wide box
\noindent\fbox{\parbox[t]{5cm}{$\wedge w$}}\\
% correctly computed width
\noindent \fbox{\mpbox{\wedge w}}\\

\noindent ExampleB
% expected result except for the overly wide box
\noindent\fbox{\parbox[t]{5cm}{$w\\\wedge w$}}\\
% incorrectly computed width resulting in an additional linebreak
\noindent \fbox{\mpbox{w\\\wedge w}}\\

\end{document}

在此处输入图片描述

答案1

varwidth救援包:

\documentclass{article}
\usepackage{varwidth}

\makeatletter
\newcommand{\mpbox}[1]{%
  \begin{varwidth}[t]{\dimexpr\linewidth-2\fboxsep-2\fboxrule\relax}%
    $#1$%
  \end{varwidth}%
}
\makeatother

\usepackage[osf,sc]{mathpazo}

\begin{document}

\noindent ExampleA
% expected result except for the overly wide box
\noindent\fbox{\parbox[t]{5cm}{$\wedge w$}}\\
% correctly computed width
\noindent \fbox{\mpbox{\wedge w}}

\noindent ExampleB
% expected result except for the overly wide box
\noindent\fbox{\parbox[t]{5cm}{$w\\\wedge w$}}\\
% correctly computed width
\noindent \fbox{\mpbox{w\\\wedge w}}

\end{document}

结果

评论:

环境varwidth会自动将宽度减小到实际使用的最大线宽。由于您想将结果放在里面,因此\fbox我减小了最大线宽规范,以便在线条过长的情况下为框架留出空间。

相关内容