tikz: сделать так, чтобы счетчик только увеличивался

tikz: сделать так, чтобы счетчик только увеличивался

В большинстве известных мне языков программирования счетчики увеличиваются, если не указано иное. Например, оператор

for i = 1 to 0 do { print "hi" }

ничего не сделает.

Но в тикзе это не так. Рассмотрим следующее:

\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}

Я хочу, чтобы это вывело натуральные числа, меньшие \i для каждого \i, но оно выводит

введите описание изображения здесь

добавление лишних 0 и -1.

Я знаю, что могу исправить это с помощью \ifthenelse, но я надеялся избежать этого. Мне нужен макрос или простой способ иметь обычную парадигму программирования счетчиков, которые увеличиваются (если не сказано иного).

Спасибо!

решение1

{0,...,-4}отсчет ведется в обратном порядке, то есть через 0, -1, -2, -3, -4. {0,1,...,n} выполняет код как минимум для первых двух чисел, см. напримерПочему \foreach \x in {0,1,...,0}{} выполняет две итерации (вместо одной)?

Вместо этого можно использовать функцию 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}

введите описание изображения здесь

Связанный контент