TikZ: nombre de nodos de matriz desconocido después de la actualización

TikZ: nombre de nodos de matriz desconocido después de la actualización

Acabo de actualizar de la versión 32 de Fedora a la versión 33. Por lo tanto, Tikz se actualizó (de 3.1.4b a 3.1.5b). Desde este cambio, esta figura ya no se compila (yo uso Lualatex):

\documentclass{minimal}

\usepackage[french]{babel}

\usepackage{xcolor}
\definecolor{RdBu-9-1}{RGB}{178,24,43}
\definecolor{RdBu-9-2}{RGB}{214,96,77}
\definecolor{RdBu-9-8}{RGB}{67,147,195}
\definecolor{RdBu-9-9}{RGB}{33,102,172}

\usepackage{tikz}  
\usetikzlibrary{patterns}
\usetikzlibrary{fadings}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows}
\usetikzlibrary{matrix}
\usetikzlibrary{decorations.pathreplacing}

\tikzset{%
  ffa/.style={%
    pattern=north west lines,
    pattern color=RdBu-9-2, 
    draw=none
  },
  ffc/.style={%
    draw=RdBu-9-1, 
    line width=1}
}

\usepackage[babel, autostyle]{csquotes}

\begin{document}

\begin{tikzpicture}
  \matrix [matrix of nodes,
  anchor=west,
  nodes={minimum size=.75cm}
  ] (zla0) at (0,0)
  {
    \draw[ffa,ffc] (0,0) circle (.3cm);&
    \draw[ffa,ffc] (0,0) circle (.3cm);\\
  };

  \matrix [matrix of nodes,
  anchor=north,
  nodes={minimum size=.75cm},
  below=2cm of zla0] (zlb0)
  {
    \draw[ffa,ffc] (0,0) circle (.3cm);\\
  };

  \foreach \m in {0} {
    \draw (zla\m.south west) |- ($(zla\m.south west)!0.5!(zla\m.south
    east) + (0,-.1)$) -| (zla\m.south east)  node[pos=0, yshift=.2]
    (zla\m-g) {};
    % 
    \draw (zlb\m.north west) |- ($(zlb\m.north west)!0.5!(zlb\m.north
    east) + (0,.1)$) -| (zlb\m.north east)  node[pos=0, yshift=.2]
    (zlb\m-g) {};
    % 
    \draw[->>, black,] ([yshift=-.2cm]zla\m.south) -- ([yshift=.2cm]zlb\m.north);
  }

  \draw[|-, black] ([yshift=1.25cm]zla0-1-2.north) -- (zla0-1-2.north)
  node[pos=.6,fill=white, minimum size=.75cm]{};

  \node[above=0cm of zla0-1-1.north, anchor=south, align=center,
  font=\tiny, text width=1.75cm]{\enquote{Je suis proche du \emph{Pic
        Jean Ray}}};

  \node[above=1.25cm of zla0-1-2.north, anchor=south, align=center,
  font=\tiny, text width=1.75cm]{\enquote{Je suis sous une \emph{crête}}};

  \node[below=0cm of zlb0.south, anchor=north, align=center,
  font=\tiny, text width=4cm]{\enquote{Je suis proche du \emph{Pic
        Jean Ray} et sous une crête}};

  \node[fill=white,align=center, font=\large\sffamily] at ($(zla0.south east)!0.5!(zlb0.north
  west)$){\emph{Fusion} des \emph{indices de localisation}};
\end{tikzpicture}

\end{document}

Al compilar me salen errores como:

ERROR: Package pgf Error: No shape named `zla0-1-2' is known.

Al buscar en el repositorio de tikz, he identificado el problema: las células de a matrix of nodesque contienen un \pathderivado (como \draw) se tratan directamente y no se agregan a node(fuente). Pero no he descubierto por qué este código, que funcionó en ferora 32, ya no funciona (no pude encontrar ninguna información en el tikzregistro de cambiosO algo más).

¿Cuál es la mejor solución para que esta figura vuelva a funcionar? Sabiendo que tengo varias figuras que están construidas sobre este esquema (ésta es la más sencilla, por ejemplo) y que tengo poco tiempo para hacer estas modificaciones.

Lo mejor sería si hubiera una opción para cambiar a la forma anterior de trabajar, pero no encontré nada similar en la documentación.

Ps: hice la misma pregunta en francés.aquí, si tengo una respuesta allí, la publicaría aquí y viceversa.

Respuesta1

Las celdas en matrices TikZ que no son solo un nodo no tienen nombre. (Incluso los nodos que se colocan en celdas de matrix of nodesno \nodetienen nombre a menos que usted les dé uno).

Además de usar nodos reales como ese

\matrix [
  matrix of nodes,
  anchor=west,
  nodes in empty cells,
  nodes={ffa, ffc, circle, minimum size=.6cm}
] (zla0) at (0,0) { & \\};

lo que colocaría el mismo círculo en la celda que el suyo. \drawPuede dejar que TikZ instale un nodo rectangular ajustado alrededor del cuadro delimitador de cada celda. Por supuesto, todavía no podrás hacer referencia a los elementos reales dentro de la celda. (A menos que sean nodos y les dé nombres).

La install fitted node at end cellllave instalará lo necesario \nodeal final de cada celda. La \path[every node/.code]parte se asegura de que no heredemos ningún estilo de la every nodeclave. Estos nodos reciben nombres <matrix name>-<row>-<column>'(observe el ') para que no haya conflictos con los nodos reales en un archivo matrix of node.

También intenté darle current bounding boxun alias o instalar un local bounding boxpara cada celda, pero todos necesitan más trabajo porque los nodos reales (que se usarán más adelante) deben instalarse en un gancho de matriz especial para que se conozca su posición después de la matriz. e incluso entonces no se consideró el ancho de línea.

Código

\documentclass[tikz]{standalone}
\usepackage[french]{babel}
\definecolor{RdBu-9-1}{RGB}{178,24,43}
\definecolor{RdBu-9-2}{RGB}{214,96,77}
\definecolor{RdBu-9-8}{RGB}{67,147,195}
\definecolor{RdBu-9-9}{RGB}{33,102,172}
\usetikzlibrary{patterns, calc, positioning, arrows, matrix, fit}
\tikzset{% This is the new key.
  install fitted node at end cell/.style={
    execute at end cell={%
      \path[every node/.code=] node[shape=rectangle, fit=(current bounding box),
        inner sep=+0pt, minimum size=+0pt, outer sep=+0pt, name=\tikzmatrixname-%
          \the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn']{};}}}
\tikzset{
  ffa/.style={pattern=north west lines, pattern color=RdBu-9-2,  draw=none},
  ffc/.style={draw=RdBu-9-1, line width=1}}
\usepackage[babel, autostyle]{csquotes}

\begin{document}
\begin{tikzpicture}[radius=.3cm]
\matrix [
  install fitted node at end cell, % ← Here's the new key used.
  anchor=west] (zla0) at (0,0) {
  \draw[ffa,ffc] (0,0) circle []; &
  \draw[ffa,ffc] (0,0) circle []; \\};
\matrix [below=2cm of zla0] (zlb0) {\draw[ffa,ffc] (0,0) circle [];\\};
\foreach \m in {0} {
  \draw (zla\m.south west)
    |- ($(zla\m.south west)!0.5!(zla\m.south east) + (0,-.1)$)
    -| (zla\m.south east) node[pos=0, yshift=.2] (zla\m-g) {};
  \draw (zlb\m.north west)
    |- ($(zlb\m.north west)!0.5!(zlb\m.north east) + (0,.1)$)
    -| (zlb\m.north east)  node[pos=0, yshift=.2] (zlb\m-g) {};
  \draw[->>, black,] ([yshift=-.2cm]zla\m.south) -- ([yshift=.2cm]zlb\m.north);
}
\draw[|-, black] ([yshift=1.25cm]zla0-1-2'.north) -- (zla0-1-2')
  node[pos=.6,fill=white, minimum size=.75cm]{};
\node[above=0cm of zla0-1-1'.north, anchor=south, align=center, font=\tiny,
  text width=1.75cm]{\enquote{Je suis proche du \emph{Pic Jean Ray}}};
\node[above=1.25cm of zla0-1-2'.north, anchor=south, align=center, font=\tiny,
  text width=1.75cm]{\enquote{Je suis sous une \emph{crête}}};
\node[below=0cm of zlb0.south, anchor=north, align=center, font=\tiny,
  text width=4cm]{
    \enquote{Je suis proche du \emph{Pic Jean Ray} et sous une crête}};
\node[fill=white, align=center, font=\large\sffamily]
  at ($(zla0.south east)!0.5!(zlb0.north west)$)
  {\emph{Fusion} des \emph{indices de localisation}};
\end{tikzpicture}
\end{document}

Producción

ingrese la descripción de la imagen aquí

información relacionada