我需要类似的东西,\underbrace
但不是花括号,而是文本下方的普通圆形水平括号。类似\textbottomtiebar
但跨越整个文本。
我如何用 tex 实现这个目标?
答案1
这里有一个你想要的完全用 TeX 完成的事情的实现(没有 tikz,没有 mathtools,没有 pstricks,没有额外的东西,等等):
\documentclass{article}
\pagestyle{empty}
\makeatletter
\def\underparen#1{\mathop{\vtop{\m@th\ialign{##\crcr
$\hfil\displaystyle{#1}\hfil$\crcr
\noalign{\kern3\p@\nointerlineskip}%
\upparenfill\crcr\noalign{\kern3\p@}}}}\limits}
\def\upparenfill{$\m@th \setbox\z@\hbox{$\braceld$}%
\bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru$}
\makeatother
\begin{document}
$\underparen{\textrm{The quick brown fox jumped over the lazy dog}}$
\end{document}
以下是使用 graphicx 包的另一种解决方案:
\documentclass[12pt]{article}
\usepackage{graphicx}
\makeatletter
\newdimen\myboxwidth
\newdimen\myboxheight
\newdimen\myboxdepth
\def\underparen#1{%
\setbox\z@\hbox{#1}%
\myboxwidth\wd\z@%
\myboxheight\ht\z@%
\myboxdepth\dp\z@%
\mathop{\box\z@}\limits_{\kern-\myboxdepth\resizebox{\myboxwidth}{\myboxheight}{\rotatebox{90}{(}}}}
\makeatother
\begin{document}
$\underparen{The quick brown fox jumped over the lazy dog}$
\end{document}
答案2
这是一个TikZ
基于 的解决方案(事实上,这个解决方案可以被看作是Werner 提供的解决方案TikZ
的版本PS-Tricks
);这个想法是在文本的开头放置一个节点,在文本的结尾放置另一个节点,然后在这两个节点之间画一条曲线;可选参数可以\myunderline
控制用于绘制线条的属性:
\documentclass{article}
\usepackage{tikz}
\newcommand\myunderline[2][]{%
\tikz[overlay,remember picture] \node (a) {};#2%
\tikz[overlay,remember picture] \node (b) {};
\begin{tikzpicture}[overlay,remember picture,out=315,in=225,distance=0.2cm]
\draw[#1] (a.center) to (b.center);
\end{tikzpicture}}
\begin{document}
\myunderline{The quick brown fox jumped over the lazy dog}
\myunderline[red]{The quick brown fox jumped over the lazy dog}
\myunderline[blue,dashed]{The quick brown fox jumped over the lazy dog}
\end{document}
答案3
这是 Gonzalo 答案的一个轻微变体,使用了书法包将括号内的样式变得更像括号。
结果如下:
不幸的是,虚线不再可用。唯一允许的修改是颜色(尽管可以配置粗细)。
下面是代码,明显改编自 Gonzalo 的回答:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations}
\usepackage{calligraphy}
\newcommand\myunderline[2][black]{%
\rule[-1.5ex]{0pt}{1.5ex}\tikz[overlay,remember picture,baseline=.5ex] \coordinate (a);#2%
\tikz[overlay,remember picture,baseline=.5ex] \coordinate (b);
\begin{tikzpicture}[overlay,remember picture]
\draw[thick,/pgf/calligraphy/pen colour=#1,decorate,decoration={calligraphic straight parenthesis}] (b) to (a);
\end{tikzpicture}}
\begin{document}
\myunderline{The quick brown fox jumped over the lazy dog}
\myunderline[red]{The quick brown fox jumped over the lazy dog}
\myunderline[blue]{The quick brown fox jumped over the lazy dog}
\end{document}
(我应该警告所有读者,书法包仍在开发中,因此应该被视为处于“alpha”级别。此外,您还需要spath
可从同一站点获取的库。)
答案4
还有一些其他的替代方案\underbrace
,\underbracket
比如mathtools
包裹。但是,为了实现最佳控制,您可以使用图形包在文本下方绘制弧线。
以下最小示例显示了\underbrace
、\underbracket
、之间的区别tipa
和\textbottomtiebar
新创建的\textbottomtie
宏。
\documentclass{article}
\usepackage{tipa}% http://ctan.org/pkg/tipa
\usepackage{mathtools}% http://ctan.org/pkg/mathtools
\usepackage{pst-node}% http://ctan.org/pkg/pst-node
\newcounter{tbtcntr}% \textbottomtie counter
\newcommand{\textbottomtie}[2][]{%
\stepcounter{tbtcntr}% For uniqueness
\psDefBoxNodes{tbt\thetbtcntr}{#2}% typeset contents
\ncarc[linewidth=0.5pt,arcangle=-5,linestyle=solid,#1]{-}{tbt\thetbtcntr:bl}{tbt\thetbtcntr:br}% arc
}
\begin{document}
$\underbracket{\textrm{The quick brown fox jumped over the lazy dog}}$ \par
$\underbrace{\textrm{The quick brown fox jumped over the lazy dog}}$ \par
\textbottomtiebar{The quick brown fox jumped over the lazy dog} \par
\textbottomtie{The quick brown fox jumped over the lazy dog}
\end{document}
建设依赖\ncarc
于pstricks
捆-5
并默认设置角度为、宽度为0.5pt
和solid
线型为 的圆弧。或者,pstricks
可以\ncarc
通过 的可选参数传递 的所有丰富功能\textbottomtie[<options>]{...}
。例如,传递linecolor=blue
将排版蓝线,而offset=-5pt
将垂直放下5pt
。您也可以通过仅重新指定 来覆盖默认值(例如,使用linewidth=1pt,linestyle=dashed
产生1pt
虚线领带)。
节点使用pst-node
并在文本参数的左下角 ( bl
) 和右下角 ( br
) 插入弧线(或连接线)尖端。如果需要,可以扩展此功能以适用于更大的文本组,例如段落等,minipage
例如使用 。
由于这使用了pstricks
,您的编译顺序应该是latex
-> dvips
->ps2pdf
或xelatex
。此外,如果使用弧线不令人满意,您可以使用许多节点连接替代方案中的任何一个;只需查看pstricks
文档(VII 节点连接,第 58 页)。
请注意,您可能必须在下面进行一些垂直校正,\textbottomtie
以避免它覆盖下面的文本。