![If.. then else 및 변수 뒤집기](https://rvso.com/image/330727/If..%20then%20else%20%EB%B0%8F%20%EB%B3%80%EC%88%98%20%EB%92%A4%EC%A7%91%EA%B8%B0.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
A는 그룹을 형성하기 때문에 a 이전 이나 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}