當巨集作為 RPN 表示法中的點傳遞時,如何使括號可用作巨集分隔符號?

當巨集作為 RPN 表示法中的點傳遞時,如何使括號可用作巨集分隔符號?

當巨集作為 RPN 表示法中的點傳遞時,如何製作(並可用作巨集分隔符號?)

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}

\def\f#1{#1 2 exp 1 sub}
\def\g[#1]{#1 2 exp 1 sub}
\def\h(#1){#1 2 exp 1 sub}
\def\i<#1>{#1 2 exp 1 sub}
\def\j|#1|{#1 2 exp 1 sub}

\begin{document}
\begin{pspicture}[showgrid=bottom](-4,-2)(4,4)
    \psplot{-2}{2}{\f x}
    \psdots(!0 \f{0})
    \psdots(!-2 \g[-2])
%   \psdots(!2 \h(2))% <== cannot be compiled!
    \psdots(!1.25 \i<1.25>)
    \psdots(!1.5 \j|1.5|)
\end{pspicture}
\end{document}

答案1

這是 TeX 的預設問題以及它如何讀取標記。它尋找第一個(和第一個),這就是你不能使用這種符號的原因。這是一個與眾所周知的類似的問題[...[...]]。但是,您可以使用代數符號:

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}

\def\f#1{#1 2 exp 1 sub}
\def\g[#1]{#1 2 exp 1 sub}
\def\h(#1){#1^2-1}

\begin{document}
\begin{pspicture}[showgrid=bottom](-4,-2)(4,4)
\psplot{-2}{2}{\f x}
\psdots(!0 \f{0})(!-2 \g[-2])(*2 {\h(x)})(*1 {x^2-1})
\end{pspicture}
\end{document}

作為替代方案,你可以使用

\def\h{dup 2 exp 1 sub}
\psdot(!2 \h)

使用已經存在於堆疊頂部的 h 參數是沒有意義的。對於 也一樣\g。另一種方法是(也有效):

\def\h(#1){#1 dup 2 exp 1 sub}
\psdot(!{\h(2)})

但是,如果想要雙括號,那麼可以用以下方法解決

\psdot(!2 {\h(2)}/Y ED Y)

答案2

正如赫伯特所指出的,\psdots將第一個右括號作為分隔符,而不是第二個。這個常見的 TeX 問題在xparse包中得到了解決。在這裡,我保存 的定義\psdots並重新定義它,以採用由和分隔的xparse“必需”參數“ ” 。這些分隔符號將按照需要配對。然後,我將其輸入保存在括號內的內容:周圍的額外大括號確保使用正確的參數。r()#1!2 \h(2)#1\psdots#1

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}

\usepackage{xparse}
\let\savedpsdots\psdots
\RenewDocumentCommand {\psdots} {r()} {\savedpsdots({#1})}

\def\f#1{#1 2 exp 1 sub}
\def\g[#1]{#1 2 exp 1 sub}
\def\h(#1){#1 2 exp 1 sub}
\def\i<#1>{#1 2 exp 1 sub}
\def\j|#1|{#1 2 exp 1 sub}

\begin{document}
\begin{pspicture}[showgrid=bottom](-4,-2)(4,4)
    \psplot{-2}{2}{\f x}
    \psdots(!0 \f{0})
    \psdots(!-2 \g[-2])
    \psdots(!2 \h(2))% <== could be compiled!
    \psdots(!1.25 \i<1.25>)
    \psdots(!1.5 \j|1.5|)
\end{pspicture}
\end{document}

更通用的解決方案是重新定義\pst@object這似乎是一些pst-plot命令的基礎。

相關內容