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}

我希望true分支只被呼叫一次,但它每次都會被呼叫。我究竟做錯了什麼?

謝謝

答案1

A\foreach構成一個群組,因此您需要\global在 a 之前\toggletrue\togglefalsea 內應用\foreach

MEW 的結果如下沒有\global

在此輸入影像描述

\global

在此輸入影像描述

筆記:

  • 無需\newtoggle在 內聲明\foreach.

  • 請注意後面的空格,foreach {因為這可能會累積。看Tex 容量超出(如果在使用巨集後刪除 %)

  • 另外,對於諸如 之類的宏\IfFileExists,請確保覆蓋兩個都真假案件。用於{}不需要執行任何操作的情況。您提供的程式碼中缺少此內容。

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

相關內容