
Как можно увеличить переменную из той же переменной?
\pgfmathsetmacro\S{5};
\pgfmathsetmacro\S{\S + 1};% not working
Как это обойти? Мне нужны счетчики, которые я использую в качестве приращения координат линии в определенных условиях.
Обновлять
\pgfmathsetmacro\cA{0};
\newcounter{cB}
\foreach \x in {1,...,10}
{
\pgfmathtruncatemacro\cA{\cA+1)};
\pgfmathaddtocounter{cB}{1};
\node at (\x,1) { \cA };
\node at (\x,0) { \the\numexpr\value{cB} };
}
распечатал это
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
мне нужно
1 2 3 4 ...
Да, я мог бы сделать это в этом простом примере, просто используя \x
переменную, но в моей реальной диаграмме мне нужно увеличивать их нерегулярно. Поэтому мне нужна переменная, которая может быть увеличена внутри цикла без сбросов. Или я что-то упускаю и это должно работать?
решение1
Для использования в \foreach
цикле есть более подходящие варианты:
\documentclass[tikz,border=2pt]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \i [count=\S from 5] in {1,...,5}
\node [draw, xshift=\i cm] {\S};
\end{tikzpicture}
\end{document}
где синтаксис count=\S from 5
используется здесь для установки \S
и 5
продвижения его на 1
в каждой итерации. Другой синтаксис может быть evaluate=\i as \S using \i+4
, который достигнет того же результата.
Обновлять
Приращение можно изменить внутри цикла на основе такого условия:
\newcounter{cA}
\setcounter{cA}{0}
\newcounter{cB}
\setcounter{cB}{0}
\begin{tikzpicture}
\foreach \x in {1,...,10}{
\addtocounter{cA}{1}
\ifnum\x<6\addtocounter{cB}{1}\else\addtocounter{cB}{2}\fi
\node at (\x,1) { \thecA };
\node at (\x,0) { \thecB };
}
\end{tikzpicture}
решение2
Нет необходимости использовать pgf
математику для счетчиков. Вы можете просто использовать \setcounter
, \stepcounter
или \addtocounter
. Используя их, значение счетчика сохраняется после \foreach
цикла:
Не уверен, что полностью понимаю приведенный фрагмент кода намерения, но его можно легко адаптировать для использования счетчиков TeX (как показано во втором MWE ниже):
Код:
\documentclass{article}
\usepackage{tikz}
\newcounter{foo}
\begin{document}
\setcounter{foo}{0}
After \verb|\setcounter|: foo=\arabic{foo}
\stepcounter{foo}
After \verb|\stepcounter|: foo=\arabic{foo}
\addtocounter{foo}{4}
After \verb|\addtocounter|: foo=\arabic{foo}
\foreach \x in {1,...,20} {%
\stepcounter{foo}%
}%
After \verb|\foreach|: foo=\arabic{foo}
\end{document}
Код:
\documentclass{article}
\usepackage{tikz}
\newcounter{cA}
\newcounter{cB}
\begin{document}
\begin{tikzpicture}
\foreach \x in {1,...,10} {%
\stepcounter{cA};
\stepcounter{cB};
\node at (\x,1) { \the\value{cA} };
\node at (\x,0) { \the\value{cB} };
}
\end{tikzpicture}
\end{document}
решение3
Работает с pgf 3.0.1a:
\documentclass{article}
\usepackage{pgf}
\pgfmathsetmacro\S{5}
\pgfmathsetmacro\S{\S + 1}
\begin{document}
\S
\end{document}
Замечания:
\pgfmathsetmacro
не является командой пути, поэтому ее синтаксис не знает закрывающей точки с запятой. В преамбуле дополнительная точка с запятой вызывает ошибку (Missing\begin{document}
).Если вы хотите получить целое число в качестве результата, то
\pgfmathtruncatemacro
поможет:\documentclass{article} \usepackage{pgf} \pgfmathsetmacro\S{5} \pgfmathtruncatemacro\S{\S + 1} \begin{document} \S \end{document}