![指定高度的右花括号,其下端正好位于基线](https://linux22.com/image/421519/%E6%8C%87%E5%AE%9A%E9%AB%98%E5%BA%A6%E7%9A%84%E5%8F%B3%E8%8A%B1%E6%8B%AC%E5%8F%B7%EF%BC%8C%E5%85%B6%E4%B8%8B%E7%AB%AF%E6%AD%A3%E5%A5%BD%E4%BD%8D%E4%BA%8E%E5%9F%BA%E7%BA%BF.png)
我需要指定高度的右花括号,其下端位于基线上。
我需要 LaTeX 中的这个,但我的尝试中的问题可以在纯 TeX 中更好地说明。
\myrightbraceofheight
下面是我有一个宏故意的*来制作这样的支架。(我保留了第二个默认值,\hrule
以便您可以看到基线。)
*本来是想这么做,但事实却并非如此。
两个问题:
- 括号有点太高了。
我以为我可以通过 graphicx-package 的 LaTeX 来处理这个问题\resizebox*{\width}{<desired height>}{\myrightbraceofheight{<desired height>}}
。
但我不能。因为问题 2: - 支架的下端并非在所有情况下都位于基线。
如何确保在所有情况下支架的下端都位于基线?
基线和括号底部之间的垂直间隙很小 - 是胶水造成的吗?还是 TeX 制作括号时使用的字形的字体规格造成的?
\def\myrightbraceofheight#1{%
\vbox{\topskip=0pt \offinterlineskip %<- this not necessary but who knows?
\hrule height 0pt depth 0pt
\hbox{\topskip=0pt \offinterlineskip %<- this not necessary but who knows?
$\left.\vbox{\topskip=0pt \offinterlineskip %<- this not necessary but who knows?
\hrule height .5\dimexpr#1\relax depth .5\dimexpr#1\relax
}\right\}$%
}%
\hrule% height 0pt depth 0pt
}%
}%
A \myrightbraceofheight{5cm}
B \myrightbraceofheight{2cm}
C \myrightbraceofheight{1cm}
D \myrightbraceofheight{2mm}
\bye
答案1
基本上不可能得到精确的高度,因为 TeX 要么使用现有的字形,要么连接各个部分,但这仅适用于一组离散的长度。它具有参数\delimiterfactor
和,\delimitershortfall
可以在一定程度上控制对指定长度的容差。
如果你想要一个 5 厘米高的分隔符,你需要使用一个延伸 2.5 厘米的\left
框\right
公式轴上方,其位置在\fontdimen22\textfont2
基线上方。请参阅 TeXbook 第 152 页的最后一个双重危险弯曲。
如果您设置\delimiterfactor=1000
和\delimitershortfall=0pt
,则分隔符将是至少与指定的长度一样高,但通常会更高。使用标准纯 TeX(和 LaTeX)值\delimiterfactor=901
和\delimitershortfall=5pt
,分隔符将至少为 0.901*5cm 和至少 5cm – 5pt(因此通常更短)。
\def\myrightbraceofheight#1{%
\vbox{
\delimiterfactor=1000
\delimitershortfall=0pt
\hbox{%
$\mathsurround=0pt % start math mode
\kern-\nulldelimiterspace % remove the space introduced by \left.
\left.
\vbox to0.5\dimexpr#1+2\fontdimen22\textfont2{}
\right\}
$% end math mode
}%
\hrule height 0pt % set the reference point at the bottom
}%
}
\leavevmode\rlap{\vrule height 0pt depth 0.1pt width 3cm}% to show the baseline
\vrule height 5cm depth 0pt\myrightbraceofheight{5cm}
\vrule height 2cm depth 0pt\myrightbraceofheight{2cm}
\bye
与参数标准值相同
顺便说一下\topskip
,绝不在 中使用\vbox
,当然在 中设置它\hbox
是没有效果的。由于 TeX 从来不会在 周围添加行间粘连\hrule
,所以\offinterlineskip
也不需要。
您不需要用说明符来设置 的内容\vbox
,to
因此它比 更\vbox to
简单\vbox{\hrule...}
。