Ссылка на содержимое lasttikznode и наложение его на узел

Ссылка на содержимое lasttikznode и наложение его на узел

Я пытаюсь решитьКак правильно повернуть композицию узлов 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}

Вот что получилось:

test61.png

Проблемы/вопросы следующие:

  • Добавленный узел — этопозадиисходный узел, чтобы его заливка не могла затенять исходный узел. Есть ли способ разместить его перед исходным узлом?
  • У меня есть только буквы 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}

введите описание изображения здесь


EDIT: В отношении примера 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}

... чтобы получить:

test62.png

Связанный контент