KTUG 한국 텍 사용자 그룹

Menu

KTUG :: Q&A 마당

1. \input{\pgfkeysvalueof ... 를 만났을 때 인자로 주어진 매크로는 "fully expandable"해야 합니다. 그런데 이 매크로가 풀리면 \forloop을 만나게 되는데 이것이 expand되지 않기 때문에 오류가 발생한 것으로 보입니다.

2. forloop을 쓰지 말고 pgffor의 \foreach를 써서 다음과 같이 해보기로 합니다.
\foreach \i in {1,...,\pgfkeysvalueof{Cansu}}{../}Problems/DBs/}
이렇게 해도 에러가 발생하는데 그 이유는 \foreach가 사용하는 \temp가 역시 expand되지 않아서 \edef되지 않기 때문입니다.

3. 이 문제들을 피해가기 위해서 사용자 리스트에 넣고 합치는 방법을 써보겠습니다.

\gdef\mytmplist{}
\foreach \i in {1,...,\pgfkeysvalueof{Cansu}}%
    {%
        \xdef\mytmplist{\mytmplist ../}%
    }%
\xdef\mytmplist{\mytmplist Problems/DBs/}
\SetValue{problemPath}{\mytmplist}
\pgfkeysvalueof{problemPath}

4. 이상을 정리하면 다음과 같이 되겠습니다.

\documentclass{oblivoir}
\usepackage{testy,pgffor}

\begin{document}

\SetValue{Cansu}{3}
\pgfkeysvalueof{Cansu}

\gdef\mytmplist{}
\foreach \i in {1,...,\pgfkeysvalueof{Cansu}}%
    {%
        \xdef\mytmplist{\mytmplist ../}%
    }%
\xdef\mytmplist{\mytmplist Problems/DBs/}
\SetValue{problemPath}{\mytmplist}
\pgfkeysvalueof{problemPath}

\input{\pgfkeysvalueof{problemPath}ours/2018/2018GA50Q01}

\end{document}

5. 위의 방법을 사용하게 되면 \pgfkeyssetvalue 매크로 자체가 (확장될 때) \foreach 따위를 물고 들어가지 않기 때문에 \foreach 대신 \forloop을 쓰더라도 마찬가지일 것이라고 예상합니다.

6. 그런데, 일정한 숫자에 맞추어서 ../를 추가하는 것을 꼭 \pgfkeys...로 해야 하는 이유가 있습니까? 더 간단한 해결책을 생각할 수 있을 것 같습니다만...

 

KTUG 한국 텍 사용자 그룹