我想测量多行数学代码的宽度。我下面的方法并不总是成功。在第二个示例中,插入了一个额外的换行符:我认为这与 \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
我减小了最大线宽规范,以便在线条过长的情况下为框架留出空间。