![Если... то иначе и инвертирование переменной](https://rvso.com/image/330727/%D0%95%D1%81%D0%BB%D0%B8...%20%D1%82%D0%BE%20%D0%B8%D0%BD%D0%B0%D1%87%D0%B5%20%D0%B8%20%D0%B8%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9.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
Группа \foreach
формирует группу, поэтому вам необходимо подать заявку \global
до \toggletrue
или \togglefalse
в течение группы \foreach
.
Результат MEW нижебез the \global
ис:\global
Примечания:
Нет необходимости объявлять
\newtoggle
внутри\foreach
.Будьте осторожны с пробелом после,
foreach {
так как он может накапливаться. СмотритеПревышена емкость текста (если удалить % после использования макроса).Кроме того, с такими макросами, как
\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}