
Como posso incrementar uma variável a partir da mesma variável?
\pgfmathsetmacro\S{5};
\pgfmathsetmacro\S{\S + 1};% not working
Como posso contornar isso? Preciso de contadores que utilizo como incremento de coordenadas de linha em determinadas condições.
Atualizar
\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} };
}
imprimi isso
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
Eu preciso de
1 2 3 4 ...
Sim, eu poderia fazer isso neste exemplo simples usando apenas \x
variáveis, mas no meu diagrama real preciso incrementá-las irregularmente. Então preciso de uma variável que possa ser incrementada dentro do loop sem redefinições. Ou estou faltando alguma coisa e deveria funcionar?
Responder1
Para ser usado em \foreach
loop, existem opções melhores:
\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}
onde a sintaxe count=\S from 5
é usada aqui para definir \S
e 5
avançar 1
em cada iteração. Outra sintaxe pode ser evaluate=\i as \S using \i+4
, que alcançará o mesmo resultado.
Atualizar
O incremento pode ser alterado dentro do loop com base em uma condição como esta:
\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}
Responder2
Não há necessidade de usar pgf
matemática para contadores. Você pode simplesmente usar \setcounter
, \stepcounter
ou \addtocounter
. Usando estes, o valor do contador é retido após o \foreach
loop:
Não tenho certeza se entendi completamente o trecho de código de intenção fornecido, mas também pode ser facilmente adaptado para usar contadores TeX (conforme mostrado no segundo MWE abaixo):
Código:
\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}
Código:
\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}
Responder3
Funciona com pgf 3.0.1a:
\documentclass{article}
\usepackage{pgf}
\pgfmathsetmacro\S{5}
\pgfmathsetmacro\S{\S + 1}
\begin{document}
\S
\end{document}
Observações:
\pgfmathsetmacro
não é um comando de caminho, portanto sua sintaxe não conhece ponto e vírgula de fechamento. No preâmbulo, o ponto e vírgula adicional causa um erro (Missing\begin{document}
).Se você quiser ter um número inteiro como resultado, então
\pgfmathtruncatemacro
ajuda:\documentclass{article} \usepackage{pgf} \pgfmathsetmacro\S{5} \pgfmathtruncatemacro\S{\S + 1} \begin{document} \S \end{document}