我很好奇如何\vrule
确定当前盒子的高度?
\documentclass{article}
\usepackage{amsmath}
\[
\Big(
~
\vrule width.7pt
~
\Big)
\]
该图像是通过使用\Bigg
、\Big
和\big
分隔符进行编译后将不同的图像拼接在一起而创建的。
我怎样才能保留当前框的高度作为满足我需要的尺寸?
为了简单起见,让我们考虑以下内容:使用\rule[]{}{}
以高度为强制参数的命令制定相同的规则。我希望它产生与\vrule width.7pt
通过设置包含当前框尺寸的某种参数相同的规则
\rule[<current depth>]{.7pt}{<current height>}
tikz
但实际需要的是利用当前框的高度绘制一条曲线。
这个是仅凭目测创建的
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\[
\Big(
\,
\tikz[overlay]\draw (0,-9pt) to[in=10] (5pt, 16.5pt);
\hspace{2ex}
\Big)
\]
笔记:
主要要求是避免事先用框保存一大段代码。目标是使其像内联一样\vrule
。
答案1
它内置于 TeX 中。该命令\vrule
是一个原语,它接受通过关键字指定的尺寸
\vrule width <len> height <len> depth <len>
关键字可以以任何顺序出现,甚至可以出现多次,最后指定的顺序优先。
该命令\vrule
还有另一个属性:它是一个水平命令,这意味着一旦 TeX 扫描它,如果它处于垂直模式,它就会切换到水平模式(形成一个段落);在数学模式下使用时它不会切换,而只是排版规则。
在任何一种情况下(水平或数学模式),最终\vrule
都会出现在水平框内(可能是段落的一行),这对于回答您的问题很重要。如果\vrule
未指定尺寸,则会应用一些默认值:
- 默认
width
值为0.4pt
- 默认值
height
是封闭的高度\hbox
- 默认值
depth
是封闭的深度\hbox
这就解释了为什么
$\Bigl(\vrule\Bigr)$
将排版一条 0.4pt 宽(如果您愿意,也可以是粗体)的规则,其高度和深度(在基线上方和下方)与公式相同,在本例中为括号。使用以下方法可以获得相同的尺寸
$\Big|\vrule$
这些默认值不可用,因为它们是在排版时确定的,此时用户已经失去了对该过程的任何控制。
对于您的问题,您可以测量一个盒子:
\sbox0{Some text you want to measure height and depth of}
将提供高度为\ht0
,深度为\dp0
。
您还可以分配自己的盒子寄存器(如果不是偶尔使用会更好):在序言中您声明
\newsavebox{\mybox}
(或任何你认为合适的未使用的名称)并在完成后
\sbox\mybox{Some text you want to measure height and depth of}
您可以在任何需要长度的上下文中使用\ht\mybox
and \dp\mybox
,例如\dimexpr
。
答案2
埃格尔给了出色的解释关于\vrule
;我不会试图重复这一努力。
使用此处展示的技术,可以获得您感兴趣的公式部分的深度、高度以及总高度,而无需任何额外的装箱,但这需要两次编译运行。我建议使用蒂克兹马克钛钾Z 库。(实际上,我不知道这个库是如何实现的;也许有是这种方法需要一些拳击,但如果是这样,它就是完全自动化的。
但请注意, 是数学列表中的\tikzmarknode
一项\mathchoice
;因此,与周围数学项的间距可能会受到影响。但是,您可以将其包裹在里面\mathopen{...}
,然后将其放在后面\mathclose{}
,以便根据节点内容调整间距行为。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc, tikzmark}
\begin{document}
\[
\tikzmarknode{paren}{\Bigl( \mkern 18mu \Bigr)}
%
\begin{tikzpicture}[remember picture, overlay]
\fill[red] (paren.north) circle[radius=1pt];
\fill[blue] (paren.south) circle[radius=1pt];
\draw (paren.south) to[in=10] (paren.north);
\path let \p{north} = (paren.north),
\p{base} = (paren.base),
\p{south} = (paren.south),
\n{totalheight} = {\y{north} - \y{south}},
\n{depth} = {\y{base} - \y{south}} in
\pgfextra{%
\xdef\parenTotalHeight{\n{totalheight}}%
\xdef\parenDepth{\n{depth}}%
};
\end{tikzpicture}
%
\typeout{The total height of the parenthesis is \parenTotalHeight.}% 18.40015pt
\typeout{The depth of the parenthesis is \parenDepth.} % 6.70009pt
%
\textcolor{green}{%
\raisebox{-\parenDepth}{%
\rule{0.4pt}{\parenTotalHeight}%
}%
}
\]
\end{document}
注意:由于坐标是从 .aux 文件中读取的,因此完全可以在括号前绘制绿色规则 - 甚至可以在括号后立即使用坐标\begin{document}
。