![Wenn... dann, sonst und Umdrehen einer Variable](https://rvso.com/image/330727/Wenn...%20dann%2C%20sonst%20und%20Umdrehen%20einer%20Variable.png)
Ich versuche, eine Vorlage zu schreiben, um Dateien automatisch in Verzeichnisse zu laden, die auf eine bestimmte Weise formatiert sind, und ich möchte jedes Mal etwas ausdrucken, wenn eine neue Datei in einem zuvor leeren Verzeichnis gefunden wird.
Mein Code sieht folgendermaßen aus:
\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}
Ich würde erwarten, dass der true
Zweig nur einmal aufgerufen wird, er wird jedoch jedes Mal aufgerufen. Was mache ich falsch?
Danke
Antwort1
Ein \foreach
bildet eine Gruppe, daher müssen Sie sich \global
vor einem \toggletrue
oder \togglefalse
innerhalb eines bewerben \foreach
.
Ergebnis des MEW untenohneDie\global
UndmitDie \global
:
Anmerkungen:
\newtoggle
Es ist nicht erforderlich, innerhalb das anzugeben\foreach
.Achten Sie auf das Leerzeichen nach dem,
foreach {
da sich dieses summieren kann. SieheTex-Kapazität überschritten (wenn % nach Verwendung des Makros entfernt wird).Stellen Sie außerdem bei Makros wie
\IfFileExists
sicher, dass Siebeideder wahre und der falsche Fall. Verwenden Sie es{}
für den Fall, dass Sie nichts ausführen müssen. Dies fehlte in dem von Ihnen bereitgestellten Code.Das
filecontents
Paket wurde verwendet, um eine Datei zum Lesen für diesen Testfall einzurichten. In Ihrem tatsächlichen Anwendungsfall wird es nicht benötigt. Um das MWE zu vereinfachen, wurde außerdem die Dateibenennung geändert, sodass keine zusätzlichen Verzeichnisse erforderlich sind.
Code:
\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}