你能解释一下为什么\delimitershortfall
不能在环境内修改吗align
?
这是一个 MWE:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{equation}
\delimitershortfall -1pt \left(\left((x)\right)\right)
\end{equation}
\begin{align}
\delimitershortfall = -1pt \left(\left((x)\right)\right)
\end{align}
\end{document}
输出如下:
在第一种情况下,外括号更大,正如预期的那样。但在第二种情况下,新的值\delimitershortfall
似乎被忽略了。
答案1
中发生的情况align
是,每个单元格都在一个组中,例如{<formula>}
,因此当公式最终排版时,对的更改\delimiterfactor
已被遗忘。如何摆脱这个问题?一种解决方法是在组结束后执行更改。
\documentclass{article}
\usepackage{amsmath}
\newcommand{\dsf}{\delimitershortfall=-1pt }
\begin{document}
\begin{align}
\aftergroup\dsf \left(\left((x)\right)\right)
\end{align}
\end{document}
amsmath.sty
该组在 的定义中的第 2074-2086 行中可见\align@preamble
;基本上,每个单元格都使用
$\m@th\displaystyle{##}$
其中\m@th
用于中\mathsurround
和可能的设置,##
代表对齐单元的实际内容。在我们的例子中,输入\aftergroup\dsf
相当于使用
$\m@th\displaystyle{\left(\left((x)\right)\right)}\dsf$
这会导致 TeX 使用所需的值。
请注意,TeX 仅使用一个值\delimitershortfall
,即退出数学模式并将数学列表转换为水平列表时的值。
例如,参见
\documentclass{article}
\newcommand{\test}{\left(\left((x)\right)\right)}
\newcommand{\testa}{\delimitershortfall=-1pt \test}
\begin{document}
$\displaystyle\test$
$\displaystyle\testa$
$\displaystyle\test\testa$
$\displaystyle\test{\testa}$
\end{document}
如您所见,在第三行和第四行中,仅使用了一个值\delimitershortfall
:在第三行中两个测试都使用 -1pt,在第四行中两个测试都使用默认值 5pt。
因此,您将无法更改\delimitershortfall
同一个等式或对齐单元的两个部分。
答案2
使用
\begin{align}
\global\delimitershortfall=-1pt
\left(\left((x)\right)\right)
\end{align}
或者
{\delimitershortfall=-1pt
\begin{align}
\left(\left((x)\right)\right)
\end{align}}
的内容align
设置在组内