如何在没有空间的情况下正确定位元素

如何在没有空间的情况下正确定位元素
\newcommandx{\s}[4]{%
    \begin{tikzpicture}%
        \node (a) {#1};
        \node[above right = of a] (b) {#2};
        \node[right = of b] (c) {#3};
        \node[above left = of a] (c) {#4};
        \draw [brown] (current bounding box.south west) rectangle (current bounding box.north east);
    \end{tikzpicture}%
}%

这是一个 \s{A}{B}{C}{D} 符号。

我会有更多的参数,问题是会添加很多空间。如果我删除这些= of x部分,空间会减少,但事情仍然不正确。

我希望能够做以下几件事:

  1. 额外的空间考虑到了传递的参数。

  2. 空间不是太大(如在这个例子中,删除 = 使其看起来更加合理。

  3. 使边界框正确并且第一个输入的“基线”与周围文本的“基线”一致,这样它看起来像正常的内联文本,而不是混乱的东西。

  4. 如果缺少某些参数,我希望它们不参与布局。例如,如果没有提供 B,则 C 将“取代它的位置”,而不是偏移“空”元素。

  5. 有一些元素/参数(示例中未显示)不参与边界框。本质上,我需要在某个点之后“冻结”边界框,然后之后绘制的任何内容都不会影响整体边界框。

谢谢...

答案1

一个非常简单的解决方法可能是添加一些适当的距离。我不确定节点是否不应该位于您绘制的边界框中,或者图片的边界框中。在第二种情况下,使用overlay,相应的宏称为\so

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newcommand{\s}[5][]{%
    \begin{tikzpicture}[node distance=0pt,inner sep=0pt,outer sep=0pt,
    minimum height=height("A")]%
        \node (a) {#2};
        \node[above right = of a] (b) {#3};
        \node[right = of b] (c) {#4};
        \node[above left = of a] (d) {#5};
        \draw [brown] (current bounding box.south west) rectangle (current bounding box.north east);
        \node [right=1pt of c] {#1};
    \end{tikzpicture}%
}%
\newcommand{\so}[5][]{%
    \begin{tikzpicture}[node distance=0pt,inner sep=0pt,outer sep=0pt,
    minimum height=height("A")]%
        \node (a) {#2};
        \node[above right = of a] (b) {#3};
        \node[right = of b] (c) {#4};
        \node[above left = of a] (d) {#5};
        \draw [brown] (current bounding box.south west) rectangle (current bounding box.north east);
        \node [right=1pt of c,overlay] {#1};
    \end{tikzpicture}%
}%
\begin{document}
This is a \s{A}{B}{C}{D} symbol. This is a \s{A}{}{C}{D} symbol. This is a \s[X]{A}{}{C}{D} symbol.
This is a \so[X]{A}{}{C}{D} symbol.
\end{document}

在此处输入图片描述

相关内容