Я хочу получить разделитель точного и указанного пользователем размера (в точках), а не стандартный «дискретный размер, достаточно большой для хранения содержимого» \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 и получил следующее "ручное построение" от Дэна Люкинга. Я подумал, что этим стоит поделиться (я немного изменил интервалы и включил код только для левой скобки):
\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 и не имеет (по общему признанию, небольших) разрывов в толщине скобок, которые возникают из-за \scalebox решения Вернера. Однако вышеприведенный вариант гораздо менее гибок, поскольку он использует только один конкретный размер «скобки» (поэтому он работает только если содержимое выше 50pt), он полностью зависит от современных шрифтов компьютера и имеет артефакты в программах просмотра PDF.