Witam!

BJ> input epsf
BJ> ^^^^^^^^^^^ [...] wspominałem o niebezpieczeństwach związanych
BJ>             z używaniem pakietu epsf

Adam Kolany:
> toś mnie zaskoczył! używam go już od jakichś czterech lat
> i chwalę sobie. mogę prosić o powtórkę (w skrócie) o jakie
> niebezpieczeństwo chodzi?

Piotr Budzik:
> Jest w archiwum listy:
> http://www.man.torun.pl/cgi-bin/wa?A2=ind0106&L=gust-l&F=&S=&P=17940

Dzięki -- mi też się może ta wiadomość przydać ;-).

Po przemyśleniu sprawy doszedłem do wniosku, że jednak warto rozwinąć temat,
a nuż kiedyś powstanie FAQ... (Kto woli czytać na skróty, niech przejdzie
od razu do punktu 5.)

1. Po pierwsze, istnieją (i żyją niezależnym życiem) dwa pakiety epsf:
oryginalny Rokickiego i -- bardziej popularny -- rozbudowany przez 
przez Nelsona H. F. Beebego.

2. Podstawowy problem w obu pakietach to brak neutralizacji
pewnych ,,niebezpiecznych'' instrukcji postscriptowych, mianowicie
instrukcji zmieniających ustawienia strony.

Pakiet epsfx (produkcji BOP) zawiera następujący kawałek kodu:

  \vbox{\special{ps: /SItps save N /isls false N
    statusdict begin
      /setpageparams {pop pop pop pop} def /setpage {pop pop pop} def
    end
   userdict begin /bop-hook {} def end }%

Dzięki niemu nieprawidłowe z formalnego punktu widzenia (tzn. niezgodne
ze specyfikacją Adobe) EPS-y produkowane przez dvipsa mogą być bezpiecznie
włączane. Brak takich zabezpieczeń powoduje, że np. mogą wystąpić kłopoty
z lustrzanym odbiciem tekstów zawierających EPS-y wygenerowane przez
dvipsa (za ten aspekt odpowiedzialny jest fragment ,,/bop-hook {} def'').

3. Ostatnio stwierdziliśmy, że Nelson H. F. Beebe wprowadził drastyczną
zmianę w funkcjonalności: makro \epsfbox -- wbrew nazwie -- zmienia tryb na
horyzontalny (zawsze wywołuje \leavevmode), zamiast po prostu wstawiać
pudełko. Naszym Beebe zdaniem nie powinien był tego robić. Ale trudno, stało
się -- od tamtego czasu (5 maja 1992) oryginalny pakiet Rokickiego jest
niekompatybilny z pakietem rozbudowanym przez Nelsona H. F. Beebego.

4. Mija dwa i pół roku, jak Tomasowi Rokickiemu wysłaliśmy obszerne
memorandum dotyczące dvipsa i spraw związanych z dvipsem. Nasze uwagi dotarły
do Rokickiego, który był uprzejmy odpisać:

> Wow, what a lot of stuff! I appreciate it all and will incorporate
> almost all of your changes, I am sure. very soon.

Po czym nic się nie wydarzyło...

Jeden z punktów memorandum dotyczył pakietu epsf. Poniżej cytuję
najistotniejsze fragmenty tłumaczenia tego punktu:

=== === === === === === === === === === === === === === === === === === ===
Natrafiliśmy na dwa problemy związane z pakietem EPSF:

   a) ponieważ parametry `rwi' i `rhi' są podawane w dzięsiątych
      częściach bp, oryginalne makra mnożą niektóre z rozmiarów
      przez dziesięć, co powoduje kłopoty już przy stosunkowo
      niewielkich obrazkach [rzędu 0,5m; ponadto dokładność
      obliczania parametrów `rwi' i `rhi' jest niepotrzebnie
      zaniżona -- przyp. tłum ;-]

[...]

   b) makro epsfframe ma poważną wadę: nie zachowuje rozmiaru
      oryginalnego EPS-a; to wyklucza możliwość użycia ramek
      do testowania gdyż ustawienie \epsfframetrue może zmienić
      łamanie stron i/lub wierszy.
=== === === === === === === === === === === === === === === === === === ===

5. Reasumując:
     -- są dwa pakiety epsf (a na STANie nawet więcej ;-), niekompatybilne
        ze sobą
     -- oba nie neutralizują ,,niebezpiecznych'' instrukcji postscriptowych
     -- oba niedokładnie wyliczają (z użyciem TeX-owej operacji \divide)
        rozmiary obiektu postscriptowego (rwi, rhi)
     -- oba nie potrafią przetworzyć EPS-ów większych niż ok. 0,5m
        (0,1\maxdimen)
     -- żaden nie zostawia po sobie porządnego pudełka, a na dobitkę
        rozbudowany przez Nelsona H. F. Beebego wywołuje nieproszony
        \leavevmode
     -- pakiet rozbudowany przez Nelsona H. F. Beebego ma nieprzyjemną
        własność polegającą na tym, że ,,włączenie'' ramek może wpłynąć
        na łamanie tekstu.

Te kłopoty nam doskwierały, Rokicki nie reagował, więc musieliśmy
wyprodukować własny pakiet, epsfx, który tych akurat wad nie posiada,
za to ma całkiem inne ;-)

Pozdrawiam -- Jacko

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 Bogus\l{}aw Jackowski: [EMAIL PROTECTED]
----------------------------------------------------------------
 Hofstadter's Law: It always takes longer than you expect, even
                   when you take into account Hofstadter's Law.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Odpowiedź listem elektroniczym