
¿Cómo puedo incrementar una variable desde la misma variable?
\pgfmathsetmacro\S{5};
\pgfmathsetmacro\S{\S + 1};% not working
¿Cómo puedo solucionar esto? Necesito contadores que utilizo como incremento de coordenadas de línea en determinadas condiciones.
Actualizar
\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ó esto
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
Necesito
1 2 3 4 ...
Sí, podría hacer esto en este ejemplo simple simplemente usando \x
variables, pero en mi diagrama real necesito incrementarlas de manera irregular. Entonces necesito una variable que pueda incrementarse dentro del ciclo sin reinicios. ¿O me falta algo y debería funcionar?
Respuesta1
Para usarlo en \foreach
bucle, existen mejores opciones:
\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}
donde la sintaxis count=\S from 5
se usa aquí para configurarla \S
y 5
avanzarla 1
en cada iteración. Otra sintaxis puede ser evaluate=\i as \S using \i+4
, que logrará el mismo resultado.
Actualizar
El incremento se puede cambiar dentro del bucle según una condición 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}
Respuesta2
No es necesario utilizar pgf
las matemáticas para los contadores. Puedes simplemente usar \setcounter
, \stepcounter
o \addtocounter
. Con estos, el valor del contador se conserva después del \foreach
ciclo:
No estoy seguro de entender completamente el fragmento de código de intención proporcionado, pero también se puede adaptar fácilmente para usar contadores TeX (como se muestra en el segundo MWE a continuación):
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}
Respuesta3
Funciona con pgf 3.0.1a:
\documentclass{article}
\usepackage{pgf}
\pgfmathsetmacro\S{5}
\pgfmathsetmacro\S{\S + 1}
\begin{document}
\S
\end{document}
Observaciones:
\pgfmathsetmacro
no es un comando de ruta, por lo tanto su sintaxis no conoce un punto y coma de cierre. En el preámbulo, el punto y coma adicional provoca un error (Falta\begin{document}
).Si desea tener un número entero como resultado, entonces
\pgfmathtruncatemacro
ayuda:\documentclass{article} \usepackage{pgf} \pgfmathsetmacro\S{5} \pgfmathtruncatemacro\S{\S + 1} \begin{document} \S \end{document}