使用 TikZ v2 添加居中于其他单词上方的单词

使用 TikZ v2 添加居中于其他单词上方的单词

编辑:请投票关闭此问题,因为“不清楚你在问什么”。我的问题和我对它的理解已经发展到这个问题现在太混乱了。我已经打开了新的问题在 TikZ 中,调整文本上方节点的位置调整 TikZ txt 样式中逗号和句号的位置

------------------------------------

这是我在 使用 TikZ 将单词添加到其他单词的中心.我尝试过实现Jason 的建议但我发现它已经引发了足够多的后续问题,最好在这里用单独的问题来解决它们。

编辑:现在最好跳到该问题底部的编辑。)

具有以下输出的 MWE:

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

\newcommand{\inline}[2]{%
    \begin{tikzpicture}[baseline=(word.base), txt/.style={shape=rectangle, inner sep=0pt}]
    \node[txt] (word) {#1};
    \node[above] at (word.north) {\footnotesize{#2}};
    \end{tikzpicture}%
    }
\newcommand{\phraselabel}[2]{%
    \begin{tikzpicture}[baseline=(word.base), txt/.style={shape=rectangle, inner sep=0pt}, text height = \Aheight, text depth = 0pt]
    \node[txt] (word) {#1};
    \node[above] at (word.north) (label) {\footnotesize{#2}};
        \pgfkeysgetvalue{/pgf/inner xsep}{\myxsep}
        \pgfresetboundingbox
        \useasboundingbox ($(label.south west) + (\myxsep,0)$) rectangle (label.north east);
    \end{tikzpicture}%
    }

\begin{document}
\begin{enumerate}
\item \inline{gg}{xx} \inline{aa}{jj} \inline{tt}{xx} \inline{bb}{jj}.
\item \phraselabel{gg}{xx} \phraselabel{aa}{jj} \phraselabel{tt}{xx} \phraselabel{bb}{jj}.
\item gg aa tt bb.
\item \phraselabel{gg}{xxxxx} \phraselabel{aa}{jjjjj} \phraselabel{tt}{xxxxx} \phraselabel{bb}{jjjjj}.
\end{enumerate}
\end{document}

在此处输入图片描述

新的命令\inline是 Jason 的建议,而新的命令\phraselabel是我尝试根据自己的需要进行调整。

第一个问题:在中1.,我们看到标签不受下面单词的下降部分的影响,有些杰森做到了通过设置baseline = (word.base)(xx与 前两个单词水平对齐jj)。但1.也表明标签受到其自身具有降部(xxjj前两个单词相比)和下方单词具有升部( 上方xx低于tt上方jjbb因为t的升部比 短b)的强烈影响。

我已经2.通过设置解决了这个问题text depth = 0pt(参见这个答案)以及text height字体字符的高度A,通常是字体中最高的文本字符(参见维基百科这个答案)但现在我有一个担心。我这样做是不是为了两个都下面的单词和上面的标签的文本框高度为A?显然,我不需要将上面标签的文本框高度设置为A。我只需要对下面的单词执行此操作,以便上面的标签不会与具有升序字符的单词(如)发生冲突A。有没有更好的方法可以做到这一点?此外,我使用了高度,A因为它是我所知道的最高字符。但如果我想要标签更高怎么办?我该怎么做?大概是通过调整设置node[above]

第二个问题:在 中1.,句子被推离左边距。我已使用 中2.的代码修复了这个问题这个答案。它解决了该问题,但我认为它与第三个问题纠缠在一起。

第三个问题:在 中1.,尽管使用了代码inner sep = 0pt,但单词之间仍然有很多额外的空间。这在 中得到了改善,2.因为通过更改边界框,标签左侧的额外空间已被删除。不仅单词之间仍然有太多空间,如与 相比时所见3.,但我很确定这是不是调整单词间距的正确方法。例如,如果我使用 删除标签右侧的额外空间,那么单词就会混在一起。我如何才能正确设置此处的空间?但请注意,如果标签太宽以至于有与其他标签发生冲突的风险(参见)\useasboundingbox ($(label.south west) + (\myxsep,0)$) rectangle ($(label.north east) - (\myxsep,0)$);,则单词之间应该出现额外的空间。4.

第四个问题:在 和 中1.2.由于.上述问题,最后一个句号被推离了最后一个单词。在4.标签较宽的地方,这种情况更加明显。我怎样才能让最后一个单词上方的标签(以及位于逗号后面的单词上方的标签)不关心最后一个句号?请注意,简单地将句号包含在单词中并不是一个合适的解决方案,\phraselabel{bb.}{jj}因为标签jj将相对于 和 居中,bb.而不是bb。因此对齐将偏离。

如果这一切都意味着这种方法存在太多问题,而另一种方法会更好,我愿意听取建议。TikZ但我认为最好还是坚持使用,因为我稍后会添加花括号和箭头之类的东西。

-----------------------------------------------------

编辑

现在我取得了一些进展,部分原因是我突然意识到,通过在单词和标签周围添加方框,我可能会更好地理解发生了什么draw

梅威瑟:

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

\newcommand{\phraselabel}[2]{%
    \begin{tikzpicture}[baseline = (word.base), txt/.style = {shape = rectangle, 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) (label) {\footnotesize{#2}};
    \end{tikzpicture}%
    }

\begin{document}
\begin{enumerate}
\item \phraselabel{gg}{xx} \phraselabel{aa}{jj} \phraselabel{tt}{xx} \phraselabel{bb}{jj}.
\item gg aa tt bb.
\item \phraselabel{gg}{xxxxx} \phraselabel{aa}{jjjjj} \phraselabel{tt}{xxxxx} \phraselabel{bb}{xxxxx}.
\end{enumerate}
\end{document}

这里的主要修复是我指定了两种不同的样式txt/.styleabove/.style,并以适当的方式指定它们(例如添加inner sep = 0ptabove/.style)。输出现在是这样的: 在此处输入图片描述

这些框让我看到,单词之间的空格1.现在是正确的。它与常规空格相匹配。现在我需要实现两件事:

  1. 如何调整单词上方节点的垂直位置?
  2. 最后一个句号(参见)的放置4.不是基于基线上的单词,而是基于边距更远的元素(基线单词或上方节点)。我怎样才能让它只关心基线单词?

相关内容