Как увеличить переменную, используя ту же переменную?

Как увеличить переменную, используя ту же переменную?

Как можно увеличить переменную из той же переменной?

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

    Результат с \pgfmathtruncatemacro

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