我正在尝试得到这样的东西:
\underbrace
这与或不同\underbracket
。它说a.c=3
。是否已经有这样的命令?我还没有找到。或者应该定义它?如果是,有人能帮我定义它吗?
谢谢。
答案1
此处已完成堆叠。我添加了下降器以确保下部支柱不会干扰。支柱/规则参数是可调的。 \rldp
是水平杆的垂直下部,\rlht
是垂直支柱的高度,\rlwd
是规则厚度。
由于答案已被接受,我正在对其进行编辑以提供对此处所做工作的更完整解释。至于堆叠命令的语法如何工作,显然阅读手册是最好的。但除此之外,简而言之,对齐方式是r
右、c
中、l
左(默认为c
)。S
或短堆叠垂直放置两个项目,项目之间有指定的间隙,而L
长堆叠垂直放置两个项目,两个项目的基线之间有指定的距离。的可选参数\stackunder
是堆叠间隙(短或长,取决于类型)。当堆栈嵌套时(\stackunder{...\stackunder{}{}...}{}
),最简单的方法是从内向外尝试破译它。
例如,在\uvbarR
创建对象左侧的 中,内部\stackunder
将居中对齐的垂直规则放置在首字母下方,其底部放置\rldp
在该字母基线下方一定距离处(长堆栈)。外部\stackunder
获取该堆叠对象,并将右对齐的水平规则块放置在其下方,规则仅为字母宽度的 1/2。它将其放置在规则宽度的负垂直间隙(重叠)处(短堆栈),以便有限规则宽度的线条齐平。
解决方案的另一个可能不太明显的方面是,\setbox0\hbox{${}#1{}$}
它用于将中心部分(的第二个参数\ubar
)排版为非打印框。我这样做只是为了测量该框的宽度(\wd0
),以便我知道水平下划线的长度。{}
参数两侧的(${}#1{}$
)指示数学模式排版\cdots
第二个参数的前导和尾随,就好像它们左侧和右侧有其他内容一样(当然,它们确实有)。
已编辑,以允许标签内容比下支架的扩展更宽。
\documentclass{article}
\usepackage{stackengine}
\stackMath
\def\rldp{1.3ex}
\def\rlht{.8ex}
\def\rlwd{.8pt}
\setstackgap{L}{\rldp}
\def\uvbarR#1{%
\def\stackalignment{r}\def\stacktype{S}\stackunder[-\rlwd]{%
\def\stackalignment{c}\def\stacktype{L}\stackunder{#1}{\rule{\rlwd}{\rlht}}%
}{\setbox0\hbox{$#1$}\rule{.5\wd0}{\rlwd}}%
}
\def\uvbarL#1{%
\def\stackalignment{l}\def\stacktype{S}\stackunder[-\rlwd]{%
\def\stackalignment{c}\def\stacktype{L}\stackunder{#1}{\rule{\rlwd}{\rlht}}%
}{\setbox0\hbox{$#1$}\rule{.5\wd0}{\rlwd}}%
}
\def\uvbar#1#2{%
\def\stacktype{S}\def\stackalignment{c}\def\useanchorwidth{T}\stackunder[0pt]{%
\def\stacktype{L}\setbox0\hbox{${}#1{}$}%
\stackunder[\rldp]{{}#1{}}{\rule{\wd0}{\rlwd}}%
}{\def\stacktype{S}\stackunder[1pt]{\rule{\rlwd}{\rlht}}{\scriptscriptstyle#2}}%
}
\newcommand\ubar[4]{\uvbarR{#1} \uvbar{#2}{#4} \uvbarL{#3}}
\begin{document}
$\ubar{a}{\cdot b\cdot d\cdot e\cdot f\cdot}{g}{a\cdot g=3} \cdot h = 1$
\end{document}
答案2
使用 TikZxparse
我定义了一个宏\linkterms
,其用法如下
\linkterms[pin length]{left term}[middle term]{right term}{term underneath}
其中括起来的参数[]
是可选的,可以省略。
例子
\documentclass{article}
\pagestyle{empty}% for cropping
\usepackage{tikz,xparse}
\NewDocumentCommand{\linkterms}{ O{1ex} m O{} m m }{
\tikz[remember picture,baseline=(A.base)]{\node[inner xsep=0pt] (A) {$#2$};}
#3
\tikz[remember picture,baseline=(C.base)]{\node[inner xsep=0pt] (C) {$#4$};}
\tikz[remember picture,overlay]{
\draw (A.south) -- ([yshift=-#1]A.south) -- coordinate (Z) ([yshift=-#1]C.south) -- (C.south);
\draw (Z) -- +(0,-#1) node[below] {$#5$};
}
}
\begin{document}
\noindent
$\linkterms{a}[\cdot b \cdot]{c}{a \cdot c = 3} \cdot d = 1$ \\[1cm]
$\linkterms{a}{c}{a \cdot c = 3} \cdot d = 1$ \\[1cm]
$\linkterms[1mm]{a}[\cdot b \cdot]{c}{a \cdot c = 3} \cdot d = 1$
\end{document}
输出
答案3
一种利用环境的低重量方法picture
。
\documentclass{article}
\usepackage{picture}% great package to use dimensions in picture environment
\newsavebox{\linkboxleft}
\newsavebox{\linkboxright}
\newsavebox{\linkboxall}
\newsavebox{\linkboxunder}
\makeatletter
\newcommand{\linktwoterms}[4]{%
% #1=left term, #2=middle term, #3=right term
% #4=stuff to be put underneath
\sbox{\linkboxleft}{\m@th$#1$}%
\sbox{\linkboxright}{\m@th$#3$}%
\sbox{\linkboxall}{\m@th$#1#2#3$}%
\sbox{\linkboxunder}{$#4$}%
\raisebox{-\height}
{\begin{picture}(0,\ht\linkboxunder+3ex)(0,-\ht\linkboxunder-3ex)
\linethickness{.2ex}
\put (.5\wd\linkboxleft,-.5ex){\line(0,-1){1ex}}
\put (\wd\linkboxall-.5\wd\linkboxright,-.5ex){\line(0,-1){1ex}}
\put (.5\wd\linkboxleft-.1ex,-1.5ex){\line(1,0)
{\wd\linkboxall-.5\wd\linkboxleft-.5\wd\linkboxright+.1ex}}
\put (.5\wd\linkboxall,-1.5ex){\line(0,-1){1ex}}
\put (.5\wd\linkboxall,-3ex){\makebox(,)[t]{\usebox{\linkboxunder}}}
\end{picture}}
\usebox{\linkboxall}%
}%
\makeatother
\begin{document}\thispagestyle{empty}
$\linktwoterms{a}{\cdot b \cdot}{c}{\scriptstyle (a\cdot c = 3)}\cdot d = 1$
% aahuiauhdaihda for testing depth above.
\end{document}
答案4
语法是
\linkterms{left}[optional middle]{right}{underset}
运行以下命令xelatex
:
\documentclass{article}
\usepackage{pst-node}
\parindent=0pt
\makeatletter
\def\linkterms#1{\@ifnextchar[{\linkterms@i#1}{\linkterms@i#1[]}}
\def\linkterms@i#1[#2]#3#4{%
\rnode{@A}{\mathstrut#1}#2\rnode{@B}{\mathstrut#3}\pcline[linestyle=none](@A)(@B)%
\nbput[labelsep=7mm]{\rnode{@C}{#4}}%
\ncangles[angleA=-90,angleB=90,arm=1.5ex,nodesep=1pt]{@A}{@C}%
\ncangles[angleA=-90,angleB=90,arm=1.5ex,nodesep=1pt]{@B}{@C}}
\makeatother
\begin{document}
$\linkterms{a}[\cdot b \cdot]{c}{a \cdot c = 3} \cdot d = 1$ \\[1cm]
$\linkterms{a}{c}{a \cdot c = 3} \cdot d = 1$ \\[1cm]
$\linkterms{a}[\cdot b\cdot d\cdot e\cdot f\cdot]{g}{a\cdot g=3} \cdot h = 1$
\end{document}