![如何以图表形式标记特定单词](https://linux22.com/image/276420/%E5%A6%82%E4%BD%95%E4%BB%A5%E5%9B%BE%E8%A1%A8%E5%BD%A2%E5%BC%8F%E6%A0%87%E8%AE%B0%E7%89%B9%E5%AE%9A%E5%8D%95%E8%AF%8D.png)
我想要为特定的单词添加描述,如下ls
图foo.bar
所示。
答案1
一个简单但不太灵活的解决方案是使用mathtools
包及其\underbracket
宏。
您可以使用两个可选参数来改变括号的结果\underbracket
:
\underbracket[<rule thickness>][<bracket height>]{<arg>}
另一种解决方案是使用 TikZ(如果您希望绘图的灵活性较低,出于性能原因,最好使用 PGF)。
代码
\documentclass{article}
\usepackage{mathtools,tikz}
\newcommand*{\underDesc}[2]{%
$\underbracket{\smash[b]{\text{\,#1\,}}}_{\text{#2}}$}
\tikzset{
underDesc line/.style={draw,rounded corners=\pgflinewidth, line cap=round},
underDesc node/.style={
anchor=base, text depth=+0pt, inner ysep=+0pt, inner xsep=.1667em, outer sep=+0pt},
underDesc node*/.style={
inner xsep=+0pt, inner ysep=+1pt, font=\scriptsize},
underDesc path/.style={
underDesc line, to path={-- ++(down:.7ex) -|
node[below, near start, underDesc node*] {#1} (\tikztotarget)}}}
\newcommand*{\underDescTikZ}[3][]{%
\tikz[baseline, #1]
\node[underDesc node, append after command={
(\tikzlastnode.south west) edge[underDesc path={#3}] (\tikzlastnode.south east)}
] {#2};}
\begin{document}
\underDesc{Is}{word}
\underDesc{foo.bar}{word}
\bigskip
\underDescTikZ{Is}{word}
\underDescTikZ[underDesc line/.append style={draw=red}]{foo.bar}{word}
\end{document}
输出
答案2
此解决方案使用stackengine
包。在这里,我使用两个嵌套\stackunder
宏将括号和下划线放置在主参数下方。括号的规则粗细、颜色以及主参数下方的垂直间距均可使用\def
此 MWE 中给出的 s 进行重置。
\documentclass{article}
\usepackage{stackengine}
\usepackage{xcolor}
\def\thk{.4ex}% RULE THICKNESS
\def\vsep{1pt}% SEPARATION BETEEN PRIMARY WORD AND UNDERBRACE
\def\bracecolor{red}% BRACE COLOR
\def\bracestrut{\hsmash{\rule{\thk}{1ex}}}
\newcommand\ubrace[2]{%
\stackunder[-2pt]{%
\stackunder[\vsep]{#1}{%
\color{\bracecolor}\bracestrut\rule{\widthof{#1}}{\thk}\bracestrut%
}%
}{\strut\scriptsize#2}
}
\begin{document}
\ubrace{foo}{word} ~ \ubrace{foo.bar}{macro}
\end{document}