매크로가 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. 다른 방법으로 roung은 다음과 같습니다.

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

그러나 이중 괄호를 원한다면 다음을 사용하여 해결할 수 있습니다.

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

답변2

Herbert가 지적했듯이 \psdots두 번째가 아닌 첫 번째 오른쪽 괄호를 구분 기호로 사용합니다. 이 일반적인 TeX 문제는 패키지에서 해결되었습니다 xparse. 여기서는 의 정의를 저장 \psdots하고 로 재정의하여 xparse"필수" 인수 " "를 and 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명령의 기초가 되는 것으로 보이는 것을 재정의하는 것입니다.

관련 정보