\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
部分,空间会减少,但事情仍然不正确。
我希望能够做以下几件事:
额外的空间考虑到了传递的参数。
空间不是太大(如在这个例子中,删除 = 使其看起来更加合理。
使边界框正确并且第一个输入的“基线”与周围文本的“基线”一致,这样它看起来像正常的内联文本,而不是混乱的东西。
如果缺少某些参数,我希望它们不参与布局。例如,如果没有提供 B,则 C 将“取代它的位置”,而不是偏移“空”元素。
有一些元素/参数(示例中未显示)不参与边界框。本质上,我需要在某个点之后“冻结”边界框,然后之后绘制的任何内容都不会影响整体边界框。
谢谢...
答案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}