我正在尝试编写一个模板来自动加载以特定方式格式化的目录内的文件,并且我想每次在先前为空的目录中发现新文件时打印一些内容。
我的代码如下:
\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
在 之前\toggletrue
或\togglefalse
之内申请\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}