数学模式中无法解释的空间(左/右括号,vphantom)

数学模式中无法解释的空间(左/右括号,vphantom)

我目前正在编写一个小工具,可以自动生成方程式的乳胶代码。我偶然发现了以下问题,其极其简化的形式如下:

\begin{align*}
a
&=
\left( \left[ \left\{ \left( b
\vphantom{x} \right.
\vphantom{x} \right.
\vphantom{x} \right.
\vphantom{x} \right. 
\\&\quad\;
%--------
c
\\&\quad\;
%--------
\left. \vphantom{x}
\left. \vphantom{x}
\left. \vphantom{x}
\left. \vphantom{x}
d
\right) \right\} \right] \right)
\\&\quad\;
%--------
\left. \left. \left. \left.
e
\right) \right\} \right] \right)
\end{align*}

输出包含一些我无法解释的空间:

在此处输入图片描述

请让我指导您完成此操作。

在对齐环境中,我仅在第一行中设置左侧 (a),在所有行中设置右侧。我\quad\;在每行(第一行除外)的开头插入 a 以跳过=字符的空格。

在第一行 (a, b) 中,我有四个带自动缩放功能的左括号 ( \left)。\vphantom在我的代码中,需要 来保持换行符上的括号的垂直大小;它们包含更复杂的文本,但在这里我只是传递x。我用虚拟的右括号 ( \right.) 来补偿四个左括号。

在第二行 (c) 中,我只需将c其与第一行的右侧对齐即可。这也是我对第三行的期望。

在第三行 (d)(实际上是我的代码生成的形式)中,我有四个虚拟的左括号 ( \left.) 和四个右括号。现在此行在 之前生成了大量空格d

在第四行(e)中,我删除了所有\vphantom命令。令人惊讶的是,这减少了空间。剩余的空间似乎是由命令生成的\left.。我可以理解这是否是右括号占用的空间,但它更小(请与第一行进行比较)。

因此,我的问题是我想通过插入负空格(例如\!)来补偿第三行中不需要的空格,但我不知道 latex 首先如何以及为什么生成该空格。由于代码是自动生成的并且具有任意数量的括号,因此我不能只使用固定大小的负空格。

有没有谁非常熟悉内部乳胶代码,可以告诉我乳胶在这种情况下做了什么,以便我可以补偿不需要的空间?非常感谢!


编辑以回应 campa:我包含了\setlength{\nulldelimiterspace}{0pt}似乎可以减少间距的内容,但并没有完全消除它(第二个例子):

在此处输入图片描述

答案1

我觉得你需要跑\setlength\nulldelimiterspace{0pt},加载左右包裹,分别用\left和替换和的所有实例。\right\mleft\mright

&\quad\;另外,我将用替换所有实例,&\phantom{{}={}}以保证正确对齐。

在以下屏幕截图中,我|仅使用 来指示(可见或隐藏)符号右侧材料的开始和结束=。请注意,我还删除了所有\vphantom{x}指令,因为它们不执行任何操作。

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}    % for 'align*' environment
\usepackage{mleftright} % for '\mleft' and '\mright' macros
\begin{document}
\setlength\nulldelimiterspace{0pt}
\begin{align*}
a
&=
|\mleft( \mleft[ \mleft\{ \mleft( 
b
\mright. \mright. \mright. \mright. | \\
&\phantom{{}={}}
|b| \\
&\phantom{{}={}}
|\mleft. \mleft. \mleft. \mleft. 
b
\mright) \mright\} \mright] \mright) | 
\end{align*}
\end{document}

相关内容