
\pgfmathparse
나는 -expression 내에서 사용되는지, -expression 외부에서 사용되는지 에 따라 다르게 동작하는 매크로를 작성하려고 합니다 \pgfmathparse
.
예를 들어 -expressions 내의 \MyNicePi
시퀀스로 확장되는 commendpi
\pgfmathparse
"
... 사이에 중첩되지 않았습니다 ."
그렇지 않으면 제어 단어 토큰에 적용됩니다 \textpi
.
(시퀀스 는 -expressions pi
내에서 인식되는 함수입니다 \pgfmathparse
.
textgreek 패키지를 로드할 때 \textpi
수평 및 수직 모드에서 기호 π를 전달합니다. 는 -expressions
"
의 따옴표 연산자입니다 . 즉, 따옴표 안의 항목은 확장되지만 에 의해 평가되지 않습니다 .)\pgfmathparse
\pgfmathparse
따라서 질문은 다음과 같습니다.
\pgfmathparse
PGF의 수학 엔진은 현재 -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.