\pgfmathparse-expression/if 내부의 \pgfmathparse-expression을 평가하는 동안 확장이 발생하는지 감지하는 방법은 무엇입니까?

\pgfmathparse-expression/if 내부의 \pgfmathparse-expression을 평가하는 동안 확장이 발생하는지 감지하는 방법은 무엇입니까?

\pgfmathparse나는 -expression 내에서 사용되는지, -expression 외부에서 사용되는지 에 따라 다르게 동작하는 매크로를 작성하려고 합니다 \pgfmathparse.

예를 들어 -expressions 내의 \MyNicePi시퀀스로 확장되는 commendpi\pgfmathparse"... 사이에 중첩되지 않았습니다 ."그렇지 않으면 제어 단어 토큰에 적용됩니다 \textpi.

(시퀀스 는 -expressions pi내에서 인식되는 함수입니다 \pgfmathparse.
textgreek 패키지를 로드할 때 \textpi수평 및 수직 모드에서 기호 π를 전달합니다. 는 -expressions
"의 따옴표 연산자입니다 . 즉, 따옴표 안의 항목은 확장되지만 에 의해 평가되지 않습니다 .)\pgfmathparse\pgfmathparse

따라서 질문은 다음과 같습니다.

\pgfmathparsePGF의 수학 엔진은 현재 -expression의 평가가 진행 중인지 알아보기 위한 테스트나 스위치를 제공합니까 ?

그렇지 않은 경우:

  • 그러한 테스트를 직접 구현하는 가장 좋은 방법은 무엇입니까?
  • \pgfmathparse-expression의 평가가 현재 진행 중인지 여부를 결정하기 위해 어떤 기준을 사용할 수 있습니까 ?

다음과 같은 것 :

\documentclass{article}
\usepackage{textgreek}
\usepackage{tikz}

\newcommand\MyNicePi{%
  % A test for checking if pgfmathparse-evaluation takes place and either
  % pi or \textpi
}%

\begin{document}

\leavevmode\MyNicePi{} is approximately
\pgfmathparse{\MyNicePi}\pgfmathprintnumber[fixed, precision=3]{\pgfmathresult}\,.

\end{document}

같은 것을 배달하는

\documentclass{article}
\usepackage{textgreek}
\usepackage{tikz}

\begin{document}

\leavevmode\textpi{} is approximately
\pgfmathparse{pi}\pgfmathprintnumber[fixed, precision=3]{\pgfmathresult}\,.

\end{document}

여기에 이미지 설명을 입력하세요

답변1

TeX가 수행 중인지 여부를 인식할 특별한 방법은 없지만 , 정의가 로 시작한다는 \pgfmathparse사실을 활용하여 테스트를 추가하는 것은 어렵지 않습니다 .\pgfmathparse\begingroup

\documentclass{article}
\usepackage{textgreek}
\usepackage{tikz}
\usepackage{etoolbox}

\newif\ifudparse
\patchcmd{\pgfmathparse}
  {\begingroup}
  {\begingroup\udparsetrue}
  {}{}

\newcommand\MyNicePi{\ifudparse pi\else\textpi\fi}

\begin{document}

\MyNicePi{} is approximately
\pgfmathparse{\MyNicePi}\pgfmathprintnumber[fixed, precision=3]{\pgfmathresult}\,.

\MyNicePi{} is approximately half of
\pgfmathsetmacro\foo{2*\MyNicePi}\pgfmathprintnumber[fixed, precision=3]{\foo}\,.

\end{document}

예제에서는 이것이 \pgfmathsetmacro작동함을 보여줍니다(내부적으로 호출하기 때문입니다 \pgfmathparse).

여기에 이미지 설명을 입력하세요

또한 테스트하려는 Phelype Oleinik의 아이디어 \pgfmath@parse@next는 좋지만 특정 이름에 의존하는 결함이 있습니다. 대신에,\begingroup 가지다에 의해 수행됩니다 \pgfmathparse. 물론, 관리자가 최상위 정의를 변경하고 \begingroup다른 매크로에 숨기기로 결정하면 우리는 멸망할 것입니다.

나는 이것이 Ti 개발자에게 기능 요청이 되어야 한다고 생각합니다.케이Z/PGF.

관련 정보