
\pgfmathparse
-式内で使用されるか、-式の外部で使用されるかに応じて動作が異なるマクロを作成するつもりです\pgfmathparse
。
例えば、式内の\MyNicePi
シーケンスに展開されるコマンドpi
\pgfmathparse
"
...の間にネストされていません"
それ以外の場合は、制御ワード トークンに適用されます\textpi
。
(シーケンスは、 -expressionspi
内で認識される関数です\pgfmathparse
。
パッケージ textgreek をロードすると、\textpi
水平モードと垂直モードでは π シンボルが出力されます。は、-expressions
"
内の引用符演算子です。\pgfmathparse
つまり、引用符で囲まれたものは によって展開されますが、評価されません\pgfmathparse
。)
質問は次のとおりです:
PGF の数学エンジンには、現在式の評価が行われているかどうかを確認するためのテストまたはスイッチが搭載\pgfmathparse
されていますか?
そうでない場合:
- このようなテストを自分で実装する最善の方法は何ですか?
\pgfmathparse
-式の評価が現在行われているかどうかを判断するために使用できる基準は何ですか?
何かのようなもの:
\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の開発者への機能リクエストになると思いますけPGF。