如果...则否则并翻转变量

如果...则否则并翻转变量

我正在尝试编写一个模板来自动加载以特定方式格式化的目录内的文件,并且我想每次在先前为空的目录中发现新文件时打印一些内容。

我的代码如下:

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

相关内容