
特定の方法でフォーマットされたディレクトリ内のファイルを自動的にロードするテンプレートを作成しようとしています。また、以前は空だったディレクトリで新しいファイルが見つかるたびに何かを印刷したいと考えています。
私のコードは次のようになります:
\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
グループを形成するため、\global
a の前\toggletrue
または\togglefalse
a 内に適用する必要があります\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}