
Na maioria das linguagens de programação que conheço, os contadores aumentam, a menos que seja solicitado o contrário. Por exemplo a declaração
for i = 1 to 0 do { print "hi" }
não faria nada.
Mas no tikz, este não é o caso. Considere o seguinte:
\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}
Quero que isso imprima os números naturais menores que \i para cada \i, mas imprime
adicionando 0 e -1 supérfluos.
Eu sei que posso consertar isso com um \ifthenelse, mas esperava evitar isso. Eu gostaria de uma macro ou uma maneira fácil de ter o paradigma de programação usual de contadores que aumentam (a menos que seja solicitado o contrário).
Obrigado!
Responder1
{0,...,-4}
conta regressivamente, então passa por 0, -1, -2, -3, -4.
{0,1,...,n}
executa o código pelo menos para os dois primeiros números, veja, por exemploPor que \foreach \x em {0,1,...,0}{} executa duas iterações (em vez de uma)?
Você poderia usar uma função expl3-step:
\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}