Makros können nicht in eckigen Klammern verwendet werden

Makros können nicht in eckigen Klammern verwendet werden

Ich habe in einer Beamer-Präsentation eine Matrix erstellt und versuche, die Knoten zu gestalten.

\newcommand\foo{row 1/.style={inuse}}
\begin{frame}{Chunks}
  \tikzset{
    inuse/.style={text=red},
    free/.style={text=green},
    addr/.style={minimum width=3em},
    data/.style={nodes=draw,minimum width=6em},
  }
  \scalebox{0.6}{
  \begin{tikzpicture}[node distance=2mm]
    \matrix(magic) [matrix of nodes,ampersand replacement=\&,row sep=-\pgflinewidth,
                    column 1/.style={addr},
                    column 2/.style={data, column sep=1em},
                    %row 1 column 2/.style={inuse},
                    %\foo ,
                    %\foreach \r in { 1,2,3 } {row \r column 2/.style={inuse}, }
                    column 3/.style={addr},
                    column 4/.style={free, data, column sep=1em},
                  ]
    {
      100: \& 00000010 \& 110: \& 12345678 \& 120: \& 12345678 \& 130: \& 12345678    \\
      101: \& 00000001 \& 111: \& 12345678 \& 121: \& 12345678 \& 131: \& 12345678    \\
      102: \& 00000002 \& 112: \& 12345678 \& 122: \& 12345678 \& 132: \& 12345678    \\
      103: \& 00000003 \& 113: \& 12345678 \& 123: \& 12345678 \& 133: \& 12345678    \\
    };
  \end{tikzpicture}
}
\end{frame}

Von den drei auskommentierten Zeilen funktioniert die erste und die anderen beiden schlagen fehl. Für das \foo-Makro erhalte ich:

Package pgfkeys Error: I do not know the key '/tikz/row 1/.style={inuse}' and
I am going to ignore it. Perhaps you misspelled it.

Aber wenn ich den Makrokörper dort einfüge, wo ich ihn verwenden wollte, ist das kein Problem. Offensichtlich übersehe ich etwas Grundlegendes zu Makros, aber was?

Der Aufruf von \foo im Tikzset ergab das gleiche Ergebnis.

Das foreach gibt mir etwas völlig Kryptisches:

! Undefined control sequence.
\foreach ...reach \let \pgffor@assign@before@code 
                                                  =\pgfutil@empty \let \pgff...

Jede Hilfe ist herzlich willkommen.

Antwort1

Ich glaube nicht, dass Sie Makros in diesem Sinne verwenden können, aber Sie können stattdessen einfach einen neuen Stil definieren, d. h.

\tikzset{foo/.style={row #1/.style={inuse}}}

Fügen Sie mit dieser Definition foo=1den inuseStil zu Zeile 1, foo=2für Zeile 2 usw. hinzu.

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{foo/.style={row #1/.style={inuse}}}
\begin{document}
\begin{frame}{Chunks}
  \tikzset{
    inuse/.style={text=red},
    free/.style={text=green},
    addr/.style={minimum width=3em},
    data/.style={nodes=draw,minimum width=6em},
  }
  \scalebox{0.6}{
  \begin{tikzpicture}[node distance=2mm]
    \matrix(magic) [matrix of nodes,ampersand replacement=\&,row sep=-\pgflinewidth,
                    column 1/.style={addr},
                    column 2/.style={data, column sep=1em},
                    foo=1,
                    column 3/.style={addr},
                    column 4/.style={free, data, column sep=1em},
                  ]
    {
      100: \& 00000010 \& 110: \& 12345678 \& 120: \& 12345678 \& 130: \& 12345678    \\
      101: \& 00000001 \& 111: \& 12345678 \& 121: \& 12345678 \& 131: \& 12345678    \\
      102: \& 00000002 \& 112: \& 12345678 \& 122: \& 12345678 \& 132: \& 12345678    \\
      103: \& 00000003 \& 113: \& 12345678 \& 123: \& 12345678 \& 133: \& 12345678    \\
    };
  \end{tikzpicture}
}
\end{frame}  
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen