我正在尝试解决如何正确旋转 Tikz 节点组合而不旋转其标签文本?;我发现tikz pgf - “命令后附加”和“插入路径”的问题。
这给了我以下想法 - 定义一个样式,这样它只需将另一个节点放置在“当前”节点之上,并使用彩色背景,这样新节点就会遮住旧节点,并且具有与“当前”节点相同的内容,但经过旋转。这就是我所取得的进展:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{fit}
% https://tex.stackexchange.com/questions/55722/problem-with-append-after-command-and-insert-path
\makeatletter
\def\mymacro{
\begin{scope}
% { % MUST have this group! or scope!
\setbox\tikz@figbox=\box\pgfutil@voidb@x
\node at (\tikzlastnode) [fill=yellow] {\rotatebox{180}{YY}}; %
% }
\end{scope}
}
\makeatother
\tikzstyle{drc} = [draw, rectangle, line width=1pt, align=center,
append after command={\pgfextra{\mymacro}},
% insert path={\pgfextra{\mymacro}}, % no \tikzlastnode
]
\begin{document}
\begin{tikzpicture}[line width=3mm]
\node[drc] at (0,0) {\ \ A};
\node[drc] at (1,1) {B\ \ };
\end{tikzpicture}
\end{document}
这是输出:
问题/疑问是:
- 附加节点是在后面原始节点,因此它的填充不能遮挡原始节点——有什么方法可以让它位于原始节点的前面吗?
- 我只是想用这些字母
YY
进行测试 - 但我更愿意“提取” 的文本\tikzlastnode
;但是,似乎\tikzlastnode
基本上只是最后一个节点的名称,而不是“对象引用”。无论如何,有没有办法提取和重用 的文本\tikzlastnode
?
答案1
我认为没有内置方法来保存最后一个节点的盒子,所以这是一种快速而肮脏的方法(并且可能不够健壮):
\documentclass[tikz, border=5]{standalone}
\newbox\lastnodebox
\begin{document}
\begin{tikzpicture}[every node/.style={draw,
execute at begin node=\global\setbox\lastnodebox\hbox\bgroup,
execute at end node=\egroup\copy\lastnodebox}]
\foreach \i [count=\y] in {A,...,F}
\node at (0,-\y/2) {\box\lastnodebox \i};
\end{tikzpicture}
\end{document}
编辑:关于 OP 示例,即使使用此方法通过 添加附加节点append after command={\pgfextra{\mymacro}}
,附加的节点仍然“在后面”(因此不会“覆盖”前一个节点)。但是,此方法可以直接在样式中使用,与包turn
中的环境一起使用rotating
以“按时”发出旋转,因此“附加”或“覆盖”第二个旋转节点是不必要的。所以我们可以使用:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{fit}
\usepackage{rotating} %tlmgr install rotating
\newbox\lastnodebox
\tikzstyle{drc} = [draw, rectangle, line width=1pt, align=center,]
\tikzstyle{drcr} = [drc,
execute at begin node=\begin{turn}{180}\global\setbox\lastnodebox\hbox\bgroup,
execute at end node=\egroup\copy\lastnodebox\end{turn},
]
\begin{document}
\begin{tikzpicture}[line width=3mm]
\node[drc] at (0,0) {\ \ A\\A\ \ };
\node[drcr] at (1,1) {B\ \ \\\ \ B};
\end{tikzpicture}
\end{document}
... 获得: