Estructuras de control en TikZ

Estructuras de control en TikZ

Recién estoy aprendiendo TikZ y estoy experimentando con algunas estructuras de control. ¿Alguien podría ayudarme con mi código a continuación?

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{center}
\begin{tikzpicture}
    \draw[fill=black] (0,0)circle(0.05) node[above=1.5]{You};
    \foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}
    {
        \filldraw[draw=\y] (0,0)--(\x,-1);
        \draw[fill=black] (-\x,-1)circle(0.05);
    }   
\end{tikzpicture}
\end{center}

\end{document}

Sé que el problema proviene de donde intento usar

\foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}

¿Hay alguna manera de que TikZ pueda manejar algo como esto?

Respuesta1

Sí, hay una manera de hacer esto.

Del artículo 83/folio 911 de laManual PGF/TikZ (v3.0.0):

Múltiples variables.A menudo querrás iterar sobre dos variables al mismo tiempo. Dado que puedes anidar \foreachbucles, esto normalmente es sencillo. Sin embargo, a veces desea que las variables se repitan "simultáneamente". Por ejemplo, es posible que se nos proporcione una lista de aristas que conectan dos coordenadas y es posible que deseemos iterar sobre estas aristas. Al hacerlo, nos gustaría que el origen y el destino de los bordes se establezcan en dos variables diferentes.

Para lograr esto, puede utilizar la siguiente sintaxis: El⟨variables⟩puede no ser sólo una única variable TEX. En cambio, también puede ser una lista de variables separadas por barras ( /). En este caso, los elementos de la lista también pueden ser listas de valores separados por barras.

Suponiendo que el⟨variables⟩y los elementos de la lista son listas de valores, cada vez que⟨comandos⟩se ejecutan, cada una de las variables en⟨variables⟩se establece en una parte de la lista que constituye el elemento de la lista actual.

La documentación de PGF/TikZ es ~muy detallada, y toda esa sección le guía \foreachmuy bien en el uso de bucles. No recomendaría leer de principio a fin cuando estás aprendiendo por primera vez (el documento completo tiene más de 1000 páginas), pero es muy bueno si quieres aprender algo nuevo con gran detalle.

Entonces deberías reemplazar la línea.

\foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}

con

\foreach \x/\col in {-2/green, -1/red, 0/black, 1/blue, 2/yellow}

Sugeriría cambiar el nombre de la segunda variable a \colo \color/ \colourporque es más descriptiva. Es posible que te encuentres recorriendo pares de coordenadas (x,y) con bastante regularidad, por lo que no querrás confundirte.

Así es como se ve su ejemplo:

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
    \draw [fill=black] (0,0) circle (0.05) node [above=1.5] {You};
    \foreach \x/\col in {-2/green, -1/red, 0/black, 1/blue, 2/yellow}
    {
      \filldraw [draw=\col] (0, 0) -- (\x, -1);
      \draw [fill=black] (-\x, -1) circle (0.05);
    }
\end{tikzpicture}

\end{document}

y esto es lo que se compila como:

ingrese la descripción de la imagen aquí

Respuesta2

Bueno, incluso si admitiera bucles similares a Python, \(aún causaría problemas ya que, por ejemplo, la apertura del entorno matemático en línea \(\alpha\)es $\alpha$.

Pero no es así.

Por lo tanto es necesario utilizar

\foreach \x/\y in {-2/green,-1/red,0/black,1/blue,2/yellow}

información relacionada