
Agora estou aprendendo TikZ e experimentando algumas estruturas de controle. Alguém poderia me ajudar com meu código abaixo?
\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}
Eu sei que o problema vem de onde tento usar
\foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}
Existe alguma maneira do TikZ lidar com algo assim?
Responder1
Sim, há uma maneira de fazer isso.
Da seção 83/página 911 doManual PGF/TikZ (v3.0.0):
Múltiplas variáveis.Muitas vezes você desejará iterar duas variáveis ao mesmo tempo. Como você pode aninhar
\foreach
loops, isso normalmente é simples. No entanto, às vezes você deseja que as variáveis iterem “simultaneamente”. Por exemplo, podemos receber uma lista de arestas que conectam duas coordenadas e desejar iterar sobre essas arestas. Ao fazer isso, gostaríamos que a origem e o destino das arestas fossem definidos para duas variáveis diferentes.Para conseguir isso, você pode usar a seguinte sintaxe: O⟨variáveis⟩pode não ser apenas uma única variável TEX. Em vez disso, também pode ser uma lista de variáveis separadas por barras (
/
). Neste caso os itens da lista também podem ser listas de valores separados por barras.Supondo que o⟨variáveis⟩e os itens da lista são listas de valores, cada vez que o⟨comandos⟩são executadas, cada uma das variáveis em⟨variáveis⟩é definido como uma parte da lista que constitui o item da lista atual.
A documentação do PGF/TikZ é muito detalhada, e toda essa seção orienta você no uso de \foreach
loops muito bem. Eu não recomendaria a leitura do início ao fim quando você estiver aprendendo pela primeira vez (o documento completo tem mais de 1.000 páginas), mas é muito bom se você quiser aprender algo novo detalhadamente.
Então você deve substituir a linha
\foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}
com
\foreach \x/\col in {-2/green, -1/red, 0/black, 1/blue, 2/yellow}
Sugiro renomear a segunda variável para \col
ou \color
/ \colour
porque é mais descritiva. Você pode acabar repetindo pares de coordenadas (x,y) com bastante regularidade, então não quer se confundir.
Esta é a aparência do seu exemplo:
\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}
e aqui está o que ele compila como:
Responder2
Bem, mesmo que suportasse loops semelhantes ao Python, \(
ainda causaria problemas, uma vez que é a abertura do ambiente matemático inline, por \(\alpha\)
exemplo $\alpha$
.
Mas isso não acontece.
Daí você precisa usar
\foreach \x/\y in {-2/green,-1/red,0/black,1/blue,2/yellow}