variables "indirectas" en foreach

variables "indirectas" en foreach

Estoy intentando dibujar tres "gráficos", que son rectángulos situados uno al lado del otro. Cada uno tiene cuatro puntos que se les colocarán. Estos cuatro puntos son las "puntuaciones".

Usar un foreachbucle es natural para los gráficos, ya que todo el diseño y las etiquetas son iguales.

Lo que no puedo entender es cómo pasar la lista de datos a cada iteración. En otros idiomas, usaría algo como anidado foreach, usando una variable indirecta cuyo nombre apunta a los datos a trazar, para colocar los puntos de datos. Parece que no puedo encontrar una dirección indirecta variable en tikz.

En la actualidad, parece que el segundo \foreach solo ve un valor, en lugar de una lista de cuatro elementos. Puede que esté usando el método equivocado. Por eso, otras estrategias son bienvenidas.

MWE:

\documentclass[]{article}
\usepackage{tikz}

\usetikzlibrary{positioning}
\usetikzlibrary{calc}

\begin{document}

% Use A4 page shape. 
% Base size of one graph is A4 page, but with pt instead of mm.

\begin{tikzpicture}

\pgfmathsetmacro{\scale}{1.75}
\pgfmathsetmacro{\graphHeight}{297 pt/\scale}   
\pgfmathsetmacro{\graphWidth}{201 pt/\scale}

\def\labelsM{85, 10, 55, 75}
\def\labelsC{75, 20, 55, 65}
\def\labelsP{65, 30, 55, 55}

\def\graphInfo{ Graph one/{(-\graphWidth pt, 0pt)}/\labelsM,
                Graph two/{(0pt, 0pt)}/\labelsC,
                Graph three/{(\graphWidth pt, 0pt)}/\labelsP
                }



\foreach \name/\pos/\values in \graphInfo
        {
    % Draw box
    \node    [
                at = {\pos},
                draw, 
                rectangle, 
                line width = 2pt,
                minimum width = \graphWidth pt,
                minimum height = \graphHeight pt,
                fill = black!15,
                name=\name
                ] 
                {} ;

    % Name graph            
    \node   [
            font = \bfseries,
            below = 2pt of \name.south
            ]
            {\name} ;   

    % Vertical lines and labels (should be 4 equidistant vertical lines) 
    \foreach \s [count=\i] in \values {
        \coordinate  (top) at  ($(\name.north west)!\i/5!(\name.north east)$) ;
        \coordinate (bottom) at ($(\name.south west)!\i/5!(\name.south east)$) ;
        \draw [dashed] (top)  --  (bottom) ;
        % Data to be plotted when this works
        };

} % end foreach \name


\end{tikzpicture}

Respuesta1

foreach no se expande \valuescompletamente sino solo un nivel de profundidad. Entonces ve sólo \labelsMy no los valores. Expande \valuesal menos una vez antes de usarlo:

\expandafter\let\expandafter\values\values

\expandafterexpande el siguiente comando. Entonces el primero \expandafterexpande el segundo \expandafter, que expande el segundo \valuesy \labelsXluego TeX continúa con el \letcomando. Al final obtienes \let\values\labelsX.)

información relacionada