计算对齐结构的宽度

计算对齐结构的宽度

我想将一个\begin{align}\end{align}块装入一个\parbox宽度恰好等于其占用宽度的容器中。如果我尝试:

\settowidth{\alignwidth}{\vbox{\begin{align}
\vec a+\vec b&=(\vec a_x+\vec a_y)+(\vec b_x+\vec b_y) \\
&=(\vec a_x+\vec b_x)+(\vec a_y+\vec b_y) \\
\vec a+\vec b&=(\vec a+\vec b)_x+(\vec a+\vec b)_y
\end{align}}}

它只是给出一个等于全值的值\textwidth。我已经能够测量各种各样的东西,但是对齐块却让我困惑,除了测量最长的线,这很麻烦而且不太通用。

背景是,我想要在一行上显示图表 1、方程组 1、图表 2、方程组 2,并且我希望布局看起来最好。到目前为止,我将它们放在四行中,\parboxes总宽度为\textwidth

我经常使用这种布局,并试图使其自动化,因为单独调整很麻烦。

这只是冰山一角。我正在写一本物理书,还有比这更复杂的图形布局。我读过一些书,例如,为了理解一个特定的问题,人们必须记住一个图表、一个规则表和一个推导,它们位于三个不同的位置,这最终会成为一种痛苦的经历。使用标准程序将这些元素组合成一个更大的图形,使其易于阅读且呈现良好,这绝非易事,过去几年我尝试了许多现有的软件包。

无论如何,我现在对我的问题有了答案,并在下面进行了介绍。

附录:知道方程列的宽度不一定是最终目的。减去这个值\textwidth,您就计算出了行上剩余的空间,因此即使方程不需要放在框中,正在动态组装的其他东西也可以使用该值来确定各种元素的宽度,最终得到行上不太宽或不会被推到下一行的东西。还有其他情况,例如以一组方程式结束在各种元素的右侧,这需要在各行上有多个方程式编号,或者在最后一行末尾有一个定理领结,需要在右边距。精确的剩余空间使它们能够完美排列。

答案1

align总是占据整个宽度,因为这就是它的设计目的。然而,还有另一种数学环境,aligned,它(几乎,见下文)设置为方程的自然宽度。与 不同align,它启动数学显示,aligned必须在数学模式下使用。要测量宽度,您可以使用类似这样的代码

\newlength{\test}\settowidth{\test}{$\!\begin{aligned}a&=b\\H&=d\end{aligned}$}\the\test

然后你可以将它设置在一个 parbox 中,现在应该已经完全填充了(虽然我不确定为什么你首先需要将它包装在一个 parbox 中,因为无论如何它已经具有正确的宽度)

\parbox{\test}{$\!\begin{aligned}a&=b\\H&=d\end{aligned}$}

您可以尝试为其定义一个命令(\widthof需要calc包)

\newcommand{\measuredparboxalign}[1]{\parbox{\widthof{$\!\begin{aligned}#1\end{aligned}$}}{$\!\begin{aligned}#1\end{aligned}$}}

然后像这样使用它:

\measuredparboxalign{a&=b\\H&=d}

警告:这不允许方程式数字

随机花絮:没有明显的原因aligned被定义为插入额外的细空格。为了补偿这一点并获得准确的宽度,\!必须在每个 之前插入一个负细空格 ( ) 。(除非您使用最新版本的 amsmath 并启用了阻止添加该空格的\begin{aligned}选项)alignedleftspaceno

答案2

只需使用以下完整编码示例中演示的代码:

\documentclass[10pt]{article}
\usepackage[a6paper,landscape]{geometry}
\usepackage{amsmath}
\begin{document}
\newlength\alignwidth
\settowidth{\alignwidth}{\parbox{20pt}{\begin{align*}
\vec a+\vec b&=(\vec a_x+\vec a_y)+(\vec b_x+\vec b_y) \\
&=(\vec a_x+\vec b_x)+(\vec a_y+\vec b_y) \\
\vec a+\vec b&=(\vec a+\vec b)_x+(\vec a+\vec b)_y
\end{align*}}}
\par The width of the page: \the\textwidth
\par The width of the align*: \the\alignwidth
\end{document}

输出以下内容:

在此处输入图片描述

这是精确的宽度,然后可以使用它来创建完全正确尺寸的 parbox。

警告:根据提供的建议,我正在使用它aligned来测量宽度和大部分图形组织。我在这里回答的方法从一开始就困扰着我,因为它至少有点丑陋,而且只能由于编码特性而起作用,而编码特性可能会在未来发生变化并破坏这一点。但是,在关注了这个论坛上许多讨论各种对齐结构之间差异的帖子后,我注意到有些人非常热衷于使用align*,所以我会把这个答案留给他们。

相关内容