在 TikZ 中,调整文本上方节点的位置

在 TikZ 中,调整文本上方节点的位置

在下面的例子中,我已成功通过设置text height = \Aheight单词(即让所有单词的高度等于字符A)和text depth = 0pt节点(即让所有节点的中心相同)将单词和它们上方的节点正确对齐到基线上。我不知道该怎么做的是调整单词和上方节点之间的垂直空间。我想将上方的节点提升到更合适的位置。

\documentclass{article}
\usepackage{tikz}
\newlength{\Aheight}
\setlength{\Aheight}{\fontcharht\font`A}

\newcommand{\phraselabel}[2]{%
    \begin{tikzpicture}[%
        baseline = (word.base),
        txt/.style = {inner sep = 0pt, text height = \Aheight, draw},
        above/.style = {inner sep = 0pt, text depth = 0pt, draw}%
        ]
    \node[txt] (word) {#1};
    \node[above] at (word.north) {\footnotesize{#2}};
    \end{tikzpicture}%
    }

\begin{document}
\phraselabel{gg}{xxxxx} \phraselabel{aa}{jjjjj} \phraselabel{tt}{xxxxx} \phraselabel{bb}{xxxxx}.
\end{document}

在此处输入图片描述

答案1

您可以为指定一个值above

\documentclass{article}
\usepackage{tikz}
\newlength{\Aheight}
\setlength{\Aheight}{\fontcharht\font`A}

\newcommand{\phraselabel}[2]{%
    \begin{tikzpicture}[%
        baseline = (word.base),%
        txt/.style = {inner sep = 0pt, text height = \Aheight},%
        tag/.style = {above=0.75ex, inner sep = 0pt, text depth = 0pt}% (tweak the above value as needed)
        ]%
    \node[txt] (word) {#1};%
    \node[tag] at (word.north) {\footnotesize{#2}};%
    \end{tikzpicture}%
    }

\begin{document}
\phraselabel{gg}{xxxxx} \phraselabel{aa}{jjjjj} \phraselabel{tt}{xxxxx} \phraselabel{bb}{xxxxx}.
\end{document}

在此处输入图片描述

答案2

覆盖 TiKZ 的默认值是个坏主意above,因为这样你就不能用它来指定单词上方节点的相对位置!该positioning库增强了这一点,但前提是你为你的样式使用了新名称。

以下将节点放置在单词上方指定距离处。默认情况下,这\jdepth等于脚注大小文本中字母“j”的深度。但您可以使用可选的第一个参数覆盖它\phraselabel

\jdepth显然,您通常不会希望在同一行上使用不同的距离 - 第二行只是为了说明添加到指定维度的效果。

\documentclass{article}
\usepackage{tikz,calc}
\usetikzlibrary{positioning}
\newlength{\Aheight}
\setlength{\Aheight}{\fontcharht\font`A}
\newlength{\jdepth}
\settodepth{\jdepth}{\footnotesize j}


\newcommand{\phraselabel}[3][\jdepth]{%
    \begin{tikzpicture}[%
        baseline = (word.base),
        txt/.style = {inner sep = 0pt, text height = \Aheight, draw},
        my above/.style = {inner sep = 0pt, text depth = 0pt, draw}%
        ]
    \node[txt] (word) {#2};
    \node [my above, above=#1 of word.north] {\footnotesize{#3}};
    \end{tikzpicture}%
    }

\begin{document}
\phraselabel{gg}{xxxxx} \phraselabel{aa}{jjjjj} \phraselabel{tt}{xxxxx} \phraselabel{bb}{xxxxx}.\bigskip

\phraselabel[5pt]{gg}{xxxxx} \phraselabel[\jdepth+5pt]{bb}{xxxxx}\bigskip

\phraselabel[-1pt]{aa}{jjjjj} \phraselabel[\jdepth-1pt]{tt}{xxxxx}

\end{document}

示范

不过,我不得不怀疑,您是否在重新发明轮子。虽然我不清楚您要做什么,但我有点怀疑这是最有效或最高效的方法。

相关内容