我已定义宏来生成可调整大小的括号,这些括号也可跨换行符工作。这需要使用一组额外的\left.
和,\right.
它们会增加一点水平空间。
现在,当我尝试通过计算其大小来删除额外的空间时\settowidth{\KernAmount}{$\left.\right.$}
,我发现我需要添加一个17%
模糊因子来使事情接近,所以很明显我没有正确地进行这个计算。
\newdimen{\KernAmount}%
\newcommand*{\BracKern}{%
\settowidth{\KernAmount}{$\left.\right.$}%
\kern-1.17\KernAmount%
}%
以下是正常输出和应用调整后\left...\right
输出的比较:\bracc
\kern
17%
问题:
调整由,造成的额外水平间距的正确方法是什么\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
(当然,我已经删除了。)