
En la mayoría de los lenguajes de programación que conozco, los contadores aumentan a menos que se les indique lo contrario. Por ejemplo la declaración
for i = 1 to 0 do { print "hi" }
no haría nada.
Pero en tikz, este no es el caso. Considera lo siguiente:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\[
\begin{tikzpicture}
\foreach \i in {-1,...,3}
{
\node at (\i,-2) {$\leq$ \i};
\foreach \j in {0,...,\i} {\node at (\i,\j) {\j};};
}
\end{tikzpicture}
\]
\end{document}
Quiero que esto imprima los números naturales menores que \i para cada \i, pero imprime
agregando un 0 y -1 superfluo.
Sé que puedo solucionar este problema con \ifthenelse, pero esperaba evitarlo. Me gustaría una macro o una manera fácil de tener el paradigma de programación habitual de contadores que aumentan (a menos que se me indique lo contrario).
¡Gracias!
Respuesta1
{0,...,-4}
cuenta hacia atrás, por lo que pasa por 0, -1, -2, -3, -4.
{0,1,...,n}
ejecuta el código al menos para los dos primeros números, ver por ejemplo¿Por qué \foreach \x en {0,1,...,0}{} realiza dos iteraciones (en lugar de una)?
Podrías usar una función expl3-step en su lugar:
\documentclass{article}
\usepackage{tikz,expl3}
\begin{document}
\ExplSyntaxOn
\let\intstepvariable\int_step_variable:nnnNn
\ExplSyntaxOff
\begin{tikzpicture}
\intstepvariable {-1}{1}{3}\i
{
\node at (\i,-2) {$\leq$ \i};
\intstepvariable {0}{1}{\i}\j
{
\node at (\i,\j) {\j};
}
}
\end{tikzpicture}
\end{document}