Wie erkennt man, ob eine Erweiterung stattfindet, während ein \pgfmathparse-Ausdruck/if innerhalb eines \pgfmathparse-Ausdrucks ausgewertet wird?

Wie erkennt man, ob eine Erweiterung stattfindet, während ein \pgfmathparse-Ausdruck/if innerhalb eines \pgfmathparse-Ausdrucks ausgewertet wird?

Ich beabsichtige, ein Makro zu schreiben, das sich unterschiedlich verhält, je nachdem, ob es innerhalb \pgfmathparseoder außerhalb eines \pgfmathparse-Ausdrucks verwendet wird.

Beispielsweise ein Befehl \MyNicePi, der sich auf die Sequenz piinnerhalb eines\pgfmathparse -Ausdrucksnicht verschachtelt zwischen "..."und andernfalls zum Steuerwort-Token \textpi.

(Die Sequenz piist eine erkannte Funktion innerhalb \pgfmathparsevon -Ausdrücken.
Wenn Sie das Paket textgreek laden, \textpiwird im horizontalen und vertikalen Modus das Symbol π zurückgegeben.
"ist der Anführungszeichenoperator in \pgfmathparse-Ausdrücken, d. h. Dinge in Anführungszeichen werden erweitert, aber nicht von ausgewertet \pgfmathparse.)

Die Fragen lauten also:

Bringt die mathematische Engine von PGF einen Test oder Schalter mit, um herauszufinden, ob aktuell die Auswertung eines \pgfmathparse-Ausdrucks stattfindet?

Wenn nicht:

  • Wie kann man einen solchen Test am besten selbst durchführen?
  • Anhand welcher Kriterien lässt sich feststellen, ob aktuell die Auswertung eines \pgfmathparse-Ausdrucks stattfindet?

Etwas wie:

\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}

liefert das gleiche wie

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

\begin{document}

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

\end{document}

Bildbeschreibung hier eingeben

Antwort1

Ich sehe keine besondere Möglichkeit, um zu erkennen, ob TeX gerade die Ausführung von durchführt \pgfmathparse, aber es ist nicht schwierig, einen Test hinzuzufügen, indem man die Tatsache ausnutzt, dass die Definition von \pgfmathparsemit beginnt \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}

Das Beispiel zeigt, dass das auch \pgfmathsetmacrofunktioniert (weil es \pgfmathparseintern aufruft).

Bildbeschreibung hier eingeben

Auch Phelype Oleiniks Idee, zu testen, \pgfmath@parse@nextist gut, hat aber den Nachteil, dass sie vom jeweiligen Namen abhängt. Stattdessen\begingroup hatausgeführt werden \pgfmathparse. Wenn die Betreuer sich natürlich dazu entschließen, die Definition der obersten Ebene zu ändern und \begingroupin einem anderen Makro zu verstecken, sind wir verloren.

Ich denke, dies sollte eine Funktionsanfrage an die Entwickler von Ti seinkZ/PGF.

verwandte Informationen