如何计算 \left\right 添加的精确宽度

如何计算 \left\right 添加的精确宽度

我已定义宏来生成可调整大小的括号,这些括号也可跨换行符工作。这需要使用一组额外的\left.和,\right.它们会增加一点水平空间。

现在,当我尝试通过计算其大小来删除额外的空间时\settowidth{\KernAmount}{$\left.\right.$},我发现我需要添加一个17%模糊因子来使事情接近,所以很明显我没有正确地进行这个计算。

\newdimen{\KernAmount}%
\newcommand*{\BracKern}{%
    \settowidth{\KernAmount}{$\left.\right.$}%
    \kern-1.17\KernAmount%
}%

以下是正常输出和应用调整后\left...\right输出的比较:\bracc\kern17%

在此处输入图片描述

问题:

调整由,造成的额外水平间距的正确方法是什么\left.\right.

代码:

\documentclass{article}
\usepackage{amsmath}
\usepackage{showframe}

\newdimen{\KernAmount}%
\newcommand*{\BracKern}{%
    \settowidth{\KernAmount}{$\left.\right.$}%
    \kern-1.17\KernAmount%
}%

\makeatletter
\newcommand{\@Brac}[3]{% #1,#3 = left/right bracket type
    \ensuremath{%
        \left#1\vphantom{#2}\right.% left bracket
        \BracKern%
        #2%  content
        \BracKern%
        \left.\vphantom{#2}\right#3% right bracket
    }%
}%
\newcommand{\bracr}[1]{\@Brac{(}{#1}{)}}%   round brackets
\newcommand{\bracc}[1]{\@Brac{\{}{#1}{\}}}% curly bracktes
\makeatother

\begin{document}
\noindent
Comparrison of using \verb|\left\{ ...\right\}| and \verb|\bracc{}|:
\begin{align*}
    \left\{x = \frac{1}{2} \right\}\\
    \bracc{x = \frac{1}{2} }
\end{align*}
%
As we can see in the following, the \verb|\bracr| wraps around lines: 
$\bracr{x^{-1} + x^{-2} + x^{-3} +x^{-4} + x^{-5} + \cdots }$
\end{document}

答案1

正确的删除空格方式是\nulldelimiterspace;下面这种方法也可以避免由\left和插入的额外空格\right

\newcommand{\BracKern}{\kern-\nulldelimiterspace}

\makeatletter
\newcommand{\@Brac}[3]{% #1,#3 = left/right bracket type
        \mathopen{\left#1\vphantom{#2}\BracKern\right.}% left bracket
        #2%  content
        \mathclose{\left.\BracKern\vphantom{#2}\right#3}% right bracket
}
\newcommand{\bracr}[1]{\@Brac{(}{#1}{)}}%   round brackets
\newcommand{\bracc}[1]{\@Brac{\{}{#1}{\}}}% curly bracktes
\makeatother

\ensuremath(当然,我已经删除了。)

相关内容