¿Qué hace que mi línea se desplace hacia la izquierda cuando invoco \LoadConstants?

¿Qué hace que mi línea se desplace hacia la izquierda cuando invoco \LoadConstants?

ingrese la descripción de la imagen aquí

Al principio utilizo el siguiente código. Hasta ahora, todo bien.

ingrese la descripción de la imagen aquí

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido}
\usepackage[nomessages]{fp}
\def\LoadConstants{}
\newcommand\const[3][3]{%
    \edef\temporary{round(#3}%
    \expandafter\FPeval\csname#2\expandafter\endcsname
        \expandafter{\temporary:#1)}%
        \edef\LoadConstants{\LoadConstants
            \noexpand\pstVerb{/#2 \csname#2\endcsname\space def}}%
}


\const[1]{G}{9.8}
\const[1]{Tfinal}{2.0}
\def\y(#1){-G/2*#1^2}
\const[1]{Yfinal}{\y(Tfinal)}

\SpecialCoor
\usepackage{siunitx}
\begin{document}
\begin{pspicture}[showgrid=false](3.5,\Yfinal)
    \LoadConstants
    \psline(1.5,0)(1.5,\Yfinal)
    \multido{\n=0.0+0.5}{5}
    {
        \const[1]{Yt}{\y(\n)}%
        \rput[r](*1.25 {\y(\n)}){$\SI{\Yt}{\meter}$}
        \psline(1.4,\Yt)(1.6,\Yt)
        \rput[l](*1.75 {\y(\n)}){$t=\SI{\n}{\second}$}
        \pscircle*(*3.5 {\y(\n)}){5pt}
    }
\end{pspicture}
\end{document}

Cambié de opinión para usar Yten lugar \Ytde lo siguiente. Como Ytes en el mundo PostScript, tengo que invocar un extra \LoadConstantsnuevamente (verlo en el bucle).

ingrese la descripción de la imagen aquí

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido}
\usepackage[nomessages]{fp}
\def\LoadConstants{}
\newcommand\const[3][3]{%
    \edef\temporary{round(#3}%
    \expandafter\FPeval\csname#2\expandafter\endcsname
        \expandafter{\temporary:#1)}%
        \edef\LoadConstants{\LoadConstants
            \noexpand\pstVerb{/#2 \csname#2\endcsname\space def}}%
}


\const[1]{G}{9.8}
\const[1]{Tfinal}{2.0}
\def\y(#1){-G/2*#1^2}
\const[1]{Yfinal}{\y(Tfinal)}

\SpecialCoor
\usepackage{siunitx}
\begin{document}
\begin{pspicture}[showgrid=false](3.5,\Yfinal)%
    \LoadConstants%
    \psline(1.5,0)(!1.5 Yfinal)%
    \multido{\n=0.0+0.5}{15}%
    {%
        \const[1]{Yt}{\y(\n)}%
        \LoadConstants%This is needed to provide Yt in PostScript world.
        \rput[r](*1.25 {\y(\n)}){$\SI{\Yt}{\meter}$}%
        \psline(!1.4 Yt)(!1.6 Yt)%
        \rput[l](*1.75 {\y(\n)}){$t=\SI{\n}{\second}$}%
        \pscircle*(*3.5 {\y(\n)}){5pt}%
    }%
\end{pspicture}%
\end{document}

Desafortunadamente, la línea vertical se desplaza hacia la izquierda. Intenté encontrar la causa del problema pero me di por vencido. Puede ver que eliminé todos los espacios en blanco posibles, pero el problema aún persiste.

¿Pudiste encontrar la fuente del problema? ¡Es un rompecabezas difícil!

Editar:

Verifiqué el valor de Yt usar \psPrintValuey usan ,en lugar de .como separador decimal. ¿Está bien?

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido}
\usepackage[nomessages]{fp}
%\def\LoadConstants{}
%\newcommand\const[3][3]{%
    %\edef\temporary{round(#3}%
    %\expandafter\FPeval\csname#2\expandafter\endcsname
        %\expandafter{\temporary:#1)}%
        %\edef\LoadConstants{\LoadConstants\ignorespaces
            %\noexpand\pstVerb{/#2 \csname#2\endcsname\space def}\ignorespaces}\ignorespaces%
%}
\newcommand\const[3][3]{%
    \edef\temporary{round(#3}%
    \expandafter\FPeval\csname#2\expandafter\endcsname
        \expandafter{\temporary:#1)}%
        \pstVerb{/#2 \csname#2\endcsname\space def}%
}

\const[1]{G}{9.8}
\const[1]{Tfinal}{2.0}
\def\y(#1){-G/2*#1^2}
\const[1]{Yfinal}{\y(Tfinal)}

\SpecialCoor
\usepackage{siunitx}
\usepackage{pst-tools}
\begin{document}
\begin{pspicture}[showgrid=false](5,\Yfinal)%
    %\LoadConstants%
    \psline(1.5,0)(!1.5 Yfinal)%
    \multido{\n=0.0+0.5}{15}%
    {%
        \const[1]{Yt}{\y(\n)}%
        %\LoadConstants%
        \rput[r](*1.25 {\y(\n)}){$\SI{\Yt}{\meter}$}%
        \psline(!1.4 Yt)(!1.6 Yt)%
        \rput[l](*1.75 {\y(\n)}){$t=\SI{\n}{\second}$}%
        \pscircle*(*3.5 {\y(\n)}){5pt}%
        \rput(*4 {\y(\n)}){\psPrintValue{Yt}}
    }%
\end{pspicture}%
\end{document}

Respuesta1

Hay un final de línea desprotegido en fp-exp.sty; agrega esto a tu preámbulo

\makeatletter
\def\FP@pow#1#2#3{% <---- This was unprotected
  % #1 macro, which gets the result
  % #2 base
  % #3 exponent
  %
  \FP@beginmessage{POW}%
  %
  {\def\FP@beginmessage##1{}%
   \def\FP@endmessage##1{}%
   %
   \FPifzero{#2}%
     \FP@pow@zero{#3}%
   \else%
     \FPln\FP@tmpd{#2}%
     \FPmul\FP@tmpd\FP@tmpd{#3}%
     \FPexp\FP@tmp\FP@tmpd%
   \fi%
   %
   \global\let\FP@tmp\FP@tmp%
  }%
  %
  \FP@endmessage{}%
  %
  \let#1\FP@tmp%
}
\makeatother

ingrese la descripción de la imagen aquí

Aquí está el código completo para una doble verificación. Hay muchos %que no usaría, pero aun así los dejé.

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido}
\usepackage[nomessages]{fp}
\def\LoadConstants{}
\newcommand\const[3][3]{%
    \edef\temporary{round(#3}%
    \expandafter\FPeval\csname#2\expandafter\endcsname
        \expandafter{\temporary:#1)}%
        \edef\LoadConstants{\LoadConstants
            \noexpand\pstVerb{/#2 \csname#2\endcsname\space def}}%
}


\const[1]{G}{9.8}
\const[1]{Tfinal}{2.0}
\def\y(#1){-G/2*#1^2}
\const[1]{Yfinal}{\y(Tfinal)}

\SpecialCoor
\usepackage{siunitx}

\makeatletter
\def\FP@pow#1#2#3{%
  % #1 macro, which gets the result
  % #2 base
  % #3 exponent
  %
  \FP@beginmessage{POW}%
  %
  {\def\FP@beginmessage##1{}%
   \def\FP@endmessage##1{}%
   %
   \FPifzero{#2}%
     \FP@pow@zero{#3}%
   \else%
     \FPln\FP@tmpd{#2}%
     \FPmul\FP@tmpd\FP@tmpd{#3}%
     \FPexp\FP@tmp\FP@tmpd%
   \fi%
   %
   \global\let\FP@tmp\FP@tmp%
  }%
  %
  \FP@endmessage{}%
  %
  \let#1\FP@tmp%
}
\makeatother


\begin{document}


\begin{pspicture}[showgrid=false](3.5,\Yfinal)%
    \LoadConstants%
    \psline(1.5,0)(!1.5 Yfinal)%
    \multido{\n=0.0+0.5}{15}%
    {%
        \const[1]{Yt}{\y(\n)}%
        \LoadConstants%This is needed to provide Yt in PostScript world.
        \rput[r](*1.25 {\y(\n)}){$\SI{\Yt}{\meter}$}%
        \psline(!1.4 Yt)(!1.6 Yt)%
        \rput[l](*1.75 {\y(\n)}){$t=\SI{\n}{\second}$}%
        \pscircle*(*3.5 {\y(\n)}){5pt}%
    }%
\end{pspicture}%
\end{document}

El final de línea desprotegido está en la línea 444 de fp-exp.sty.

información relacionada