![If..then else 並翻轉量](https://rvso.com/image/330727/If..then%20else%20%E4%B8%A6%E7%BF%BB%E8%BD%89%E9%87%8F.png)
我正在嘗試編寫一個模板來自動加載以某種方式格式化的目錄內的文件,並且每次在以前為空的目錄中找到新文件時我想打印一些內容。
我的程式碼如下所示:
\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
或\togglefalse
a 內應用\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}