es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El bucle for está “atascado” dentro de un pgfplot.

Estoy intentando producir algunos gráficos en LaTeX utilizando pgfplots; debido al hecho de que tengo varios gráficos diferentes que producir, estoy tratando de usar un bucle for. Desafortunadamente, sin éxito. De hecho, el código se ejecuta tres veces pero el valor de la variable del bucle for siempre es igual al primer valor de la lista que define el bucle.

Por ejemplo, el siguiente código mínimo

\documentclass[a4paper, 11pt]{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\usepgfplotslibrary{groupplots}

\begin{document}

\makeatletter
\begin{tikzpicture}
  \begin{groupplot}[group style={group size= 2 by 3}]
    \@for\refin:={1,2,3}\do{%
      \nextgroupplot[ylabel={$h = \frac{1}{\refin}$}]
        \addplot {exp(x)};
      \nextgroupplot
        \addplot{2  * x};
    }
  \end{groupplot}
\end{tikzpicture}
\makeatother

\end{document}

produce una figura con 6 gráficos (como se esperaba) pero la etiqueta siempre es 1/1 y nunca 1/2 o 1/3. ¿Por qué?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema es que la variable \refin se asigna solo el primer valor de la lista una vez al principio del bucle for. Para usar el valor actual de \refin dentro del bucle, debe ser expandido con \expandafter antes de usarlo en la etiqueta del gráfico.

    El código corregido debería verse así:

    \documentclass[a4paper, 11pt]{article}
    
    \usepackage{pgfplots}
    \pgfplotsset{compat=1.13}
    \usepgfplotslibrary{groupplots}
    
    \begin{document}
    
    \makeatletter
    \begin{tikzpicture}
      \begin{groupplot}[group style={group size= 2 by 3}]
        \@for\refin:={1,2,3}\do{%
          \expandafter\nextgroupplot\expandafter[\expandafter ylabel=\expandafter{$h = \frac{1}{\refin}$}]
            \addplot {exp(x)};
          \expandafter\nextgroupplot
            \addplot{2  * x};
        }
      \end{groupplot}
    \end{tikzpicture}
    \makeatother
    
    \end{document}
    

    Esto debería producir una figura con 6 gráficos, cada uno con la etiqueta correcta.

Comments are closed.