TikZ 中可以实现这种高级定位吗?

TikZ 中可以实现这种高级定位吗?

我在 TikZ 中重现了下图:

tikz 高级定位示例

右上角的 '}' 花括号及其完整标签由 TikZ 代码生成,如下所示:

\tikzstyle{ssbrace} = [decorate, decoration = {brace, amplitude = 6pt}, xshift = 8pt]
\tikzstyle{ssbracemath} = [midway, anchor = west, xshift = 4pt]
\draw [ssbrace] (\xvrr,\yGt) -- (\xvrr,\yPb)
    node [ssbracemath] (upperss) {$\in \mathbb{S}_d \oplus 0_{n_\text{sl}}$};

其中\xvrr,、\yGtyPb是可展开为字符串的宏,例如0.5/2+0.85/2+10pt/2-3pt,含义为:将图形单位宽度的一半与图形单位宽度的 85% 的一半相加,与 10 点的一半相加,然后减去 3 点。语法复杂是因为字符串的各个组成部分来自定义大量可调整参数的更原始的宏。假设

\newcommand{\xvrr}{0.5/2+0.85/2+10pt/2-3pt}
\newcommand{\yGt}{0.1+10pt}
\newcommand{\yBp}{0.5+10pt}
\newcommand{\yyPc}{1+0.1+10pt}
\newcommand{\eqmarg}{2pt}

为了举例子。

然后我想要做的是渲染\mathbb{S}_{n_\text{P}}下部标签的“S”部分,以便其X中心等于X上部标签(节点upperss)的中心以及参数的坐标\yyPc。也就是说,

\draw (upperss.center,\yyPc) node [anchor=center] (lowerss) {$\mathbb{S}_{n_\text{P}}$};

尽管上述内容引发了错误“包 PGF 数学错误:未知函数‘upperss’(在‘upperss.center’中)。 \draw (upperss.center,\yyPc)”等等,因此我直观了解 TikZ 语法的尝试显然失败了。

节点lowerss就位后,我最终想将\in下部标签的“in”()渲染到下部括号最右侧范围和 最左侧范围之间lowerss。为此,我将一个名为lowerssbrace下部括号的空节点附加到其中,然后调用

\draw (lowerssbrace.east/2+lowerss.west/2,\yyPc) node [anchor=center] {$\in$};

我也不知道这是否可行。事实上,我对 TikZ 支持哪些类型的坐标算法的排列的了解仅限于“它似乎理解(1/2+1/2,1-1/2)(lowerss.center)作为坐标的含义。”它是否可以混合相对和绝对维度,混合命名坐标和维度,或执行基本算术,例如lowerssbrace.east/2:我不知道,尽管我寄予厚望。

还要注意,最右边的标记箭头依赖于坐标(upperss.center,upperss.south+\eqmarg)(upperss.center,lowerss.north-\eqmarg),因此我也遇到过命名坐标与绝对尺寸相加的情况。

图中的其他一切都按预期运行。

我在这里尝试完成的事情可以在 TikZ 中完成吗?如果可以,所需的语法是什么?

非常感谢您的帮助。如果可能的话,您将节省我数天的查阅文档的时间。

答案1

首先,请注意,如果在坐标规范中混合使用无量纲数字和长度,则无量纲数字将读作长度pt,如手册第 13.2 节所述指定坐标。因此,1+0.1+10pt变为 11.1pt,因此以下代码会生成一个指向左的箭头:

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\newcommand{\yyPc}{1+0.1+10pt}
\begin{document} 
\begin{tikzpicture}
\draw [->] (1,0) -- (\yyPc,0);
\end{tikzpicture}
\end{document}

有多种方法可以采用。

要获取一个节点的 x 分量和另一个节点的 y 分量,最简单的方法是使用垂直坐标,我在TikZ:箭头的 |- 符号到底起什么作用?

要将节点放置在两个其他节点中间,您可以执行以下操作

\path (a) -- node{this is halfway between a and b} (b);

要将一个节点放置在与另一个节点之间给定距离的位置,一种方法是使用相对坐标,

\path (lowerssbrace) ++(20pt,0) node {20pt right of lowerssbrace};

calc您还可以研究第 13.5 节中描述的库的功能坐标计算TikZ 手册。

如果您需要更具体的建议,请在您的问题中添加一个完整的示例。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{amsfonts,amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand{\yyPc}{1+0.1+10pt}
\begin{document} 
\begin{tikzpicture}
\node [draw] (upperss) {};
\node [draw, red] (lowerssbrace) at (-2,0) {};

\draw (upperss.center |- 0,\yyPc) node (lowerss) {$\mathbb{S}_{n_\text{P}}$};

\path (lowerssbrace |- lowerss) -- node {$\in$} (lowerss);

\node at ($(lowerssbrace) + (20pt,0)$) {a};
\end{tikzpicture}
\end{document}

相关内容