![Si... entonces otra cosa y volteando una variable](https://rvso.com/image/330727/Si...%20entonces%20otra%20cosa%20y%20volteando%20una%20variable.png)
Estoy intentando escribir una plantilla para cargar automáticamente archivos dentro de directorios formateados de cierta manera y quiero imprimir algo cada vez que se encuentra un archivo nuevo en un directorio previamente vacío.
Mi código se ve así:
\documentclass[11pt,twoside,a4paper]{article}
\usepackage{tikz}
\usepackage{etoolbox}
\usepackage[utf8]{inputenc}
\begin{document}
\foreach \Year in {2016,...,2020}
{
\newtoggle{mytoggle}
\toggletrue{mytoggle}
\foreach \Month in {Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}
{ \foreach \Day in {1,...,31}
{ \IfFileExists{\Year/\Month/\Day}
{
\iftoggle{mytoggle}{
\togglefalse{mytoggle}
true
}{
false
}
\input{\Year/\Month/\Day.tex}
}
}
}
}
\end{document}
Esperaría que true
se llame a la rama solo una vez, sin embargo, se llama cada vez. ¿Qué estoy haciendo mal?
Gracias
Respuesta1
A \foreach
forma un grupo, por lo que debe presentar la solicitud \global
antes de a \toggletrue
o \togglefalse
dentro de a \foreach
.
Resultado del MEW a continuaciónsinel\global
yconel \global
:
Notas:
No es necesario declarar el
\newtoggle
dentro del\foreach
.Tenga cuidado con el espacio que sigue a
foreach {
ya que puede acumularse. VerCapacidad de Tex excedida (si se elimina el % después del uso de la macro).Además, con macros como
\IfFileExists
, asegúrese de cubrirambosel caso verdadero y falso. Úselo{}
en el caso de que no necesite ejecutar nada. Esto faltaba en el código que proporcionaste.El
filecontents
paquete se utilizó para configurar un archivo para leer en este caso de prueba. No es necesario en su caso de uso real. Además, para simplificar el MWE, se modificó el nombre del archivo para que no requiera directorios adicionales.
Código:
\begin{filecontents}{2016-Mar-24.tex}
content for file 2016-Mar-24\par
\end{filecontents}
\begin{filecontents}{2016-Jul-10.tex}
content for file 2016-Jul-10\par
\end{filecontents}
\begin{filecontents}{2017-Dec-31.tex}
content for file 2017-Dec-31\par
\end{filecontents}
\documentclass[11pt,twoside,a4paper]{article}
\usepackage{tikz}
\usepackage{etoolbox}
\newtoggle{mytoggle}
\begin{document}
\foreach \Year in {2016,...,2020} {%
\global\toggletrue{mytoggle}%
%
\foreach \Month in {Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec} {%
\foreach \Day in {1,...,31} {%
\IfFileExists{\Year-\Month-\Day.tex}{%
\iftoggle{mytoggle}{%
true
\global\togglefalse{mytoggle}%
}{%
false
\global\toggletrue{mytoggle}%
}%
\input{\Year-\Month-\Day.tex}
}{}%
}% foreach \Day
}% foreach \Month
}%
\end{document}