pgfkeys è in conflitto con nodepart?
L'esempio seguente non viene compilato con l'output.
ARGS=id=I
id = I
FOOY: I
! Undefined control sequence.
<recently read> \myFooId
l.26 \node[] (Foo) at (0,0) {\FOOX{id=I}
};
?
Si compila durante la rimozione \nodepart{second}dalla FOOYmacro.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart}
\begin{document}
\newcommand{\FOOX}[1]{%
\pgfkeys{
id/.store in = \myFooId,
}
\pgfkeys{#1}%
\ifdefined\myFooId\else\def\myFooId{}\fi%
\typeout{ARGS=#1}%
\typeout{id = \myFooId}%
\FOOY{\myFooId}
\let\myFooId\undefined%
}
\newcommand{\FOOY}[1]{%
\typeout{FOOY: #1}%
A\nodepart{second}#1
}%
\begin{tikzpicture}
\node[] (Foo) at (0,0) {\FOOX{id=I}};
\end{tikzpicture}
\end{document}
Cosa posso modificare nella FOOXmacro per farla funzionare "come previsto"?
Risposte
Quanto segue funziona e include un paio di miglioramenti:
Usa una cartella per le tue chiavi in modo da non sovrascrivere accidentalmente quelle degli altri (o un conflitto diventa meno probabile)
Definisci le chiavi una volta nel preambolo (così come la macro in cui verrà memorizzata la chiave)
Le parti del nodo formano un gruppo, quindi se si imposta localmente una chiave in una parte, il suo valore verrà ripristinato nella parte successiva, quindi quanto segue non usa
.store inma.codedefinisce invece una chiave che agirà globalmente.se si utilizza
\nodepartma la forma del nodo corrente non supporta più parti (o il nome della parte scelto) il contenuto non verrà utilizzato.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart}
\pgfkeys{
/FOOX/.cd,
id/.code = \xdef\myFooId{\unexpanded{#1}},
}
\newcommand*\myFooId{}
\begin{document}
\newcommand{\FOOX}[1]{%
\gdef\myFooId{}%
\pgfqkeys{/FOOX}{#1}%
\typeout{ARGS=#1}%
\typeout{id = \myFooId}%
\FOOY{\myFooId}
}
\newcommand{\FOOY}[1]{%
\typeout{FOOY: #1}%
A\nodepart{second}#1
}%
\begin{tikzpicture}
\node[] (Foo) at (0,0) {\FOOX{id=I}};
\end{tikzpicture}
\end{document}