# [pstricks] pspicture: shift vs. baseline

Antonio Polo antonio.polo at pu.t-com.hr
Wed Jul 26 18:16:22 CEST 2006

On 2006, July 4th, Bernd Westphal wrote:
> Moin.
> If I understand it correctly, old versions of pstricks use
>   \begin{pspicture}[0.5]
> to set the baseline at half the height of the box and
>   \begin{pspicture}[]
> puts the baseline through the origin.
> The newer versions only have 'shift' where
>   \begin{pspicture}[shift=0.5]
> shifts by 0.5 "units", i.e. not related to the box' height.
> Is there a way to obtain the "old" behaviour with the newer versions, other
> than explicitly calculating the height and setting shift correspondingly?
> Is there in particular an easy way to put the baseline through the origin
> with the newer versions?
> Schoen'n Gruss
>   Bernd Westphal

I had the same problem, expecially when I tried to use old pspictures with the
new version of pstricks: the problem is not to calculate the shift parameter
for the new pictures, but to re-edit and re-calculate it for the old ones. I
solved this problem by myself and also I (think to have) solved the problems
of compatibility of the old version with the new one; after the loading of
pstricks package, you put these lines in your preamble:

%---------------------------------------------------------------------------
%--begin-------Re-definition of "\pst at picture"-------------------------
%---------------------------------------------------------------------------
\makeatletter
\def\pst at picture{%
\@ifnextchar[%
{\pst at picture@}%
{\pst at picture@[shift=0]}}
\def\pst at picture@[#1]#2(#3,#4){%
\@ifnextchar(%
{\pst@@picture@#1,(#3,#4)}
{\pst@@picture@#1,(0,0)(#3,#4)}}
\def\pst@@picture@#1(#2,#3)(#4,#5){%
\pssetylength\pst at dimb{#3}%
\pssetylength\pst at dimd{#5}%
\ifdim\pst at dimb>\pst at dimd%
\pst at dimg=\pst at dimb%
\pst at dimb=\pst at dimd%
\pst at dimd=\pst at dimg%
\fi%
\pst@@@picture@#1(#2,\pst at dimb)(#4,\pst at dimd)}
\def\pst@@@picture@{%
\@ifnextchar,%
{\pst@@@@picture@ shift=\pst at dimb}%
{\pst@@@@picture@}}
\def\pst@@@@picture@#1,{%
\set at ps#1==\@nil%
\@ifnextchar(%
{\pst@@@picture[]}%
{\pst@@@@picture@}}
\def\set at ps#1#2=#3=#4\@nil{%
\ifx#4=%
\psset{#1#2=#3}%
\else%
\ifx#1b%
\pst at dimg=0pt%
\else%
\ifx#1o%
\pst at dimg=\pst at dimb%
\else%
\pst at dimg=-\pst at dimd%
\advance\pst at dimg\pst at dimb%
\ifx#1t%
\else%
\ifx#1c%
\pst at dimg=0.5\pst at dimg%
\else%
\pst at dimg=#1#2\pst at dimg%
\fi%
\fi%
\fi%
\fi%
\psset{shift=\pst at dimg}%
\fi}
\makeatother
%---------------------------------------------------------------------------
%---end--------Re-definition of "\pst at picture"-------------------------
%---------------------------------------------------------------------------

Obviously it would be better to change the command directly in the
"pstricks.tex" file, but I can't do it and these lines work fine too.
With this change, the environment "pspicture" works so:

1)\begin{pspicture}[<number>]...
It shifts the baseline linearly along the height of the pspicture.
<number>=0 means "bottom" and <number>=1 means "top";
all decimal numbers are allowed.

2)\begin{pspicture}[]...
The baseline is aligned with the origin of the pspicture.

3)\begin{pspicture}[<letter>]...
This is something more:
<letter>=b same as <number>=0: baseline aligned with the bottom
<letter>=c same as <number>=0.5: baseline aligned with the center
<letter>=t same as <number>=1: baseline aligned with the top
<letter>=o means baseline aligned with the origin
Expecially the last is useful with the next case.

4)\begin{pspicture}[...,<option>,<number> or <letter>,<option>...]...
You can put the number or the letter also between the other classical options
such as "showgrid=true", "linestyle=dashed" and so on.

Now I hope you enjoy shifting pspictures.

Toni



More information about the PSTricks mailing list