我希望获得一个精确且用户指定(点)大小的分隔符,而不是默认的“足够大以容纳内容的离散大小”\left(
等。
这可能吗?我试过弄乱 的定义\big*
,
\newlength{\vbraceheight}
\setlength{\vbraceheight}{50pt}
\def\vbig#1{{\hbox{$\left#1\vbox to\vbraceheight{}\right.\n@space$}}}
\def\vbigl{\mathopen\vbig}
\def\vbigr{\mathclose\vbig}
但由于一个值不断变化,因此它们仍然会出现跳跃\vbraceheight
(我不太清楚为什么)。
答案1
我将捕获内容\vbig
并垂直调整大小(保持纵横比)为\vbraceheight
:
\documentclass{article}
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\makeatletter
\newlength{\vbraceheight}
\setlength{\vbraceheight}{50pt}
\def\vbig#1{{\resizebox{!}{\vbraceheight}{$\left#1\vbox to\vbraceheight{}\right.\n@space$}}}
\def\vbigl{\mathopen\vbig}
\def\vbigr{\mathclose\vbig}
\makeatother
\begin{document}
\[
\setbox0=\hbox{$\displaystyle\vbigl\{\frac{1}{2}\vbigr\}$}\usebox0\ \mbox{has height \the\ht0}
\]
\end{document}
答案2
[答案由 OP 撰写,从问题中移出]
感谢您的评论和回复。我想我已经明白为什么这是一件困难的事情了。我在 comp.text.tex 上发布了一个类似的问题,并从 Dan Luecking 那里收到了以下“手动构造”,我认为值得分享(我做了一些小的间距修改,并仅包含左括号的代码):
\DeclareMathSymbol{\bracetr}{\mathord}{largesymbols}{"38}
\DeclareMathSymbol{\bracetl}{\mathord}{largesymbols}{"39}
\DeclareMathSymbol{\bracebr}{\mathord}{largesymbols}{"3A}
\DeclareMathSymbol{\bracebl}{\mathord}{largesymbols}{"3B}
\makeatletter
\def\leftbracefill{%
\setbox\z@\hbox{$\m@th\bracetr$}%
\@tempdima=.5\wd\z@
\advance\@tempdima-.6\p@
\offinterlineskip
\hbox{\kern-\@tempdima$\m@th\bracetr$}
\leaders\hrule \@width 1.18\p@ \vfill
\hbox{\kern-\@tempdima$\m@th\bracebl$}
\kern-.5\p@
\hbox{\kern-\@tempdima$\m@th\bracetl$}
\leaders\hrule \@width 1.18\p@ \vfill
\hbox{\kern-\@tempdima$\m@th\bracebr$}
}
\newcommand\leftbrace[1]{%
\setbox\z@\hbox{$\m@th\bracetl$}%
\@tempdima=.5\wd\z@
\advance\@tempdima-.6\p@
\vcenter{\m@th\everycr{}\tabskip\z@skip
\hbox{\valign{##\crcr\noalign{\kern\@tempdima}
\leftbracefill\crcr
\hbox{$\m@th\displaystyle{#1}$}\crcr
}}%
}%
}
这样做的好处是它不依赖于 graphicx,而且不会出现 Werner 解决方案中 \scalebox 导致的括号厚度不连续(虽然很小)。但是,上面的方法灵活性差很多,因为它只使用一种特定大小的“括号片”(因此只有当内容高度超过 50pt 时才真正有效),它完全依赖于计算机现代字体,并且在 pdf 查看器中存在瑕疵。