Wenn... dann, sonst und Umdrehen einer Variable

Wenn... dann, sonst und Umdrehen einer Variable

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 trueZweig nur einmal aufgerufen wird, er wird jedoch jedes Mal aufgerufen. Was mache ich falsch?

Danke

Antwort1

Ein \foreachbildet eine Gruppe, daher müssen Sie sich \globalvor einem \toggletrueoder \togglefalseinnerhalb eines bewerben \foreach.

Ergebnis des MEW untenohneDie\global

Bildbeschreibung hier eingeben

UndmitDie \global:

Bildbeschreibung hier eingeben

Anmerkungen:

  • \newtoggleEs 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 \IfFileExistssicher, 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 filecontentsPaket 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}

verwandte Informationen