
ifthenelse 및 pgf를 다음과 같이 사용하면 오류가 발생하는 이유를 이해할 수 없습니다.
\documentclass{article}
\usepackage{pgf}
\begin{document}
\pgfmathrandominteger{\a}{2}{7}
\pgfmathrandominteger{\b}{2}{3}
\def\c{\pgfmathparse{ifthenelse(\a!=\b,\a,int(\a+1))} \pgfmathresult}
\def\M{ \pgfmathparse{int(\c)} \pgfmathresult}
$\M$
\end{document}
나에게 오류를 알려주세요
! TeX capacity exceeded, sorry [input stack size=5000].
\@inmathwarn ...latex@warning {Command \protect #1 invalid in math mode}\fi
l.21 $\M
$
코드가 있는 동안
\documentclass{article}
\usepackage{pgf}
\begin{document}
\pgfmathrandominteger{\a}{2}{7}
\pgfmathrandominteger{\b}{2}{3}
\def\c{\pgfmathparse{ifthenelse(\a!=\b,\a,int(\a+1))} \pgfmathresult}
\pgfmathparse{int(\c)}
\def\M{\pgfmathresult}
$\M$
\end{document}
나에게 오류를 알려주세요 :
! Incomplete \iffalse; all text was ignored after line 20.
<inserted text>
\fi
<*> bugpgf
\c에 대한 계산을 시도하지 않는 한 오류는 없습니다. 예를 들어
\documentclass{article}
\usepackage{pgf}
\begin{document}
\pgfmathrandominteger{\a}{2}{7}
\pgfmathrandominteger{\b}{2}{3}
$\a$ $\b$ $\c$
\def\c{\pgfmathparse{ifthenelse(\a!=\b,\a,int(\a+1))} \pgfmathresult} \end{document}
Latex는 명령의 fi 부분을 놓쳤다고 말하는 것 같지만 그렇지 않았습니다. 사용
\a!=\b ?\a : int(\a+1)
비슷한 효과가 있습니다. 어떤 도움이라도 대단히 감사하겠습니다.
답변1
당신이 정의 \c
하고 정의하면 \M
무슨 일이 일어나는가?
int(\pgfmathparse{ifthenelse(\a!=\b,\a,int(\a+1))} \pgfmathresult) + 1
확장할 수 없으므로 정수 부분을 가져와서 1을 더할 수 없습니다. 두 번째 경우에도 비슷한 일이 발생하지만 다른 단계에서 문제가 발생합니다.
두 경우 모두 오류 메시지는 실제 문제를 반영하지 않지만 가장 먼저 발생한 문제를 보여줍니다.
\c
당신이 필요로하는 것은 다음 중 하나를 통해 계산 값을 할당하는 것입니다.
\pgfmathparse{\pgfmathparse{ifthenelse(\a!=\b,\a,int(\a+1))}}
\let\c=\pgfmathresult
또는
\pgfmathsetmacro\c{ifthenelse(\a!=\b,\a,int(\a+1))}
그런 다음 \c
계산 명령이 아닌 계산의 실제 값을 유지합니다.
\documentclass{article}
\usepackage{pgf,pgffor}
\begin{document}
\foreach\x in{0,...,10}{
\pgfmathrandominteger{\a}{2}{7}
\pgfmathrandominteger{\b}{2}{3}
\pgfmathsetmacro\M{int((\a!=\b?\a:int(\a+1))+1)}
$\a, \b \to \M$
}
\end{document}
답변2
실제로 pgf에는 이러한 상황에 딱 맞는 매크로가 있습니다. 문제는 에서 이러한 작업을 수행 \def
하고 일반적인 확장 문제가 있다는 것입니다(완전히 이해하지는 못합니다). 어쨌든 문제없이 실행됩니다.
\documentclass{article}
\usepackage{pgf}
\begin{document}
\pgfmathrandominteger{\a}{2}{7}
\pgfmathrandominteger{\b}{2}{3}
\pgfmathsetmacro{\c}{ifthenelse(\a!=\b,\a,int(\a+1))}
\pgfmathsetmacro{\M}{int(\c)}
$\M$
\pgfmathrandominteger{\a}{2}{7}
\pgfmathrandominteger{\b}{2}{3}
\pgfmathsetmacro{\M}{int(ifthenelse(\a!=\b,\a,int(\a+1)))}
$\M$
\end{document}