
В большинстве известных мне языков программирования счетчики увеличиваются, если не указано иное. Например, оператор
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}