Если... то иначе и инвертирование переменной

Если... то иначе и инвертирование переменной

Я пытаюсь написать шаблон для автоматической загрузки файлов в каталоги, отформатированные определенным образом, и хочу печатать что-то каждый раз, когда в ранее пустом каталоге обнаруживается новый файл.

Мой код выглядит так:

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

Связанный контент