If.. then else と変数の反転

If.. then else と変数の反転

特定の方法でフォーマットされたディレクトリ内のファイルを自動的にロードするテンプレートを作成しようとしています。また、以前は空だったディレクトリで新しいファイルが見つかるたびに何かを印刷したいと考えています。

私のコードは次のようになります:

\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}

ブランチは 1 回だけ呼び出されることを期待していましたtrueが、毎回呼び出されます。何が間違っているのでしょうか?

ありがとう

答え1

A は\foreachグループを形成するため、\globala の前\toggletrueまたは\togglefalsea 内に適用する必要があります\foreach

MEWの結果は以下の通りですそれなし\global

ここに画像の説明を入力してください

そして\global:

ここに画像の説明を入力してください

ノート:

  • \newtoggle内でを宣言する必要はありません\foreach

  • スペースがforeach {長くなる可能性があるので注意してください。Tex 容量超過 (マクロ使用後に % を削除した場合)

  • また、 などのマクロでは\IfFileExists、次の点に注意してください。両方true と false の場合。{}何も実行する必要がない場合に使用します。提供されたコードにはこれがありませんでした。

  • そのfilecontents包み このテスト ケースで読み取るファイルを設定するのに使用されました。実際の使用ケースでは必要ありません。また、MWE を簡素化するために、追加のディレクトリを必要としないようにファイル名が変更されました。

コード:

\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}

関連情報