我想使用 underbrace 来澄清一些文本,经过一番搜索,我找到了一个解决方案使用 Tikz 包。但是我在垂直对齐方面遇到了一些问题。以下是说明我的问题的 MWE:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{decorations.pathreplacing}
\tikzstyle{underbrace style}=[decorate,decoration={brace,raise=0.5mm,amplitude=3pt,mirror,pre=moveto,pre length=1pt,post=moveto,post length=1pt}]
\tikzstyle{underbrace text style}=[font=\tiny, below, pos=.5, yshift=-1mm]
\newcommand{\tikzunderbrace}[2]{\draw [underbrace style] (#1.south west) -- (#1.south east) node [underbrace text style] {#2};}
\begin{document}
Begining text
\begin{tikzpicture}
\matrix[matrix of nodes, inner sep=0pt, column sep=0pt, nodes={anchor=south}, text height=1.5ex,text depth=.25ex]{
\node (text) {some underlined text};\\
};
\tikzunderbrace{text}{explanation}
\end{tikzpicture}
and some more text
\end{document}
这是我得到的结果:
如您所见,文本垂直不对齐。经过更多搜索后,我意识到我必须在环境中添加一个选项tikzpicture
。
我尝试了以下选项[baseline={(text.south)}]
,得到了以下结果:
以及[baseline={([yshift={-\ht\strutbox}]text.north)}]
,这给了我以下结果:
如您所见,两种情况下的对齐效果都不太好。我希望整个文本出现在同一行上。
有人能帮我看看需要使用哪些参数才能实现正确的垂直对齐吗?提前谢谢了。
附言:我之所以使用矩阵环境,是因为实际文档比我在此处展示的要复杂得多。我刚刚将其精简为 MWE 的情况。
答案1
答案2
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usetikzlibrary{matrix}
\usetikzlibrary{decorations.pathreplacing}
\tikzstyle{underbrace style}=[decorate,decoration={brace,raise=0.5mm,amplitude=3pt,mirror,pre=moveto,pre length=1pt,post=moveto,post length=1pt}]
\tikzstyle{underbrace text style}=[font=\tiny, below, pos=.5, yshift=-1mm]
\newcommand{\tikzunderbrace}[2]{\draw [underbrace style] (#1.south west) -- (#1.south east) node [underbrace text style] {#2};}
\begin{document}
You should use \tikzmarknode{N1}{the tikzmark library} to underbrace your text.
\begin{tikzpicture}[overlay,remember picture]
\tikzunderbrace{N1}{explanation}
\end{tikzpicture}
\end{document}
请注意,您必须至少编译两次才能正确定位您的图片。
答案3
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{decorations.pathreplacing}
\tikzstyle{underbrace style}= [decorate,decoration={brace,raise=0.5mm,amplitude=3pt,mirror,pre=moveto,pre length=1pt,post=moveto,post length=1pt}]
\tikzstyle{underbrace text style}=[font=\tiny, below, pos=.5, yshift=-1mm]
\newcommand{\tikzunderbrace}[2]{\draw [underbrace style] (#1.south west) -- (#1.south east) node [underbrace text style] {#2};}
\begin{document}
Begining text
\begin{tikzpicture}[baseline=-0.12cm]
\matrix[matrix of nodes, inner sep=0pt, column sep=0pt, ]{
\node (text) {some underlined text};\\
};
\tikzunderbrace{text}{explanation}
\end{tikzpicture}
and some more text
\end{document}