postscriptAan de slag met postscript


Opmerkingen

PostScript is een reverse-polish stack-gebaseerde, dynamisch getypte, dynamische naamruimte, scripttaal met ingebouwde primitieven voor het genereren van gerenderde afbeeldingen uit vectorbeschrijvingen. PostScript gebruikt hetzelfde "Adobe Image Model" als het PDF-bestandsformaat.

PostScript wordt door veel programma's als uitvoerformaat gebruikt, omdat het zo is ontworpen dat het gemakkelijk door een machine kan worden gegenereerd.

Net als LISP is PostScript homo-elektronisch en hebben code en gegevens dezelfde weergave. Procedures kunnen procedures als data en opbrengstprocedures als resultaten aannemen, en lenen zich ook voor technieken uit concatenative-programmering .

leerplan

Lees de documentatie in deze volgorde om gemakkelijk postscript te leren:

  1. De uitstekende zelfstudie van Paul Bourke: http://paulbourke.net/dataformats/postscript/

  2. Blue Book, eerste helft, de originele officiële tutorial:
    http://www-cdf.fnal.gov/offline/PostScript/BLUEBOOK.PDF

  3. Green Book, hoe postscript effectief te gebruiken:
    http://www-cdf.fnal.gov/offline/PostScript/GREENBK.PDF

  4. Denken in Postscript, 'zei nuff: http://wwwcdf.pd.infn.it/localdoc/tips.pdf

  5. Wiskundige illustraties . Begin klein, bouw groot. De wiskunde achter Bezier Curves. Het Hodgman-Sutherland-algoritme voor het knippen van polygonen. Affiene transformaties en niet-lineaire transformaties van het pad. 3D-tekening en Gouraud-arcering. Uit het voorwoord:

Welke [van de vele hulpmiddelen om iemand te helpen bij het maken van wiskundige afbeeldingen], kiest blijkbaar een afweging tussen eenvoud en kwaliteit, waarbij de meeste kiezen voor wat zij als eenvoud beschouwen. De waarheid is dat de afweging niet nodig is - als je eenmaal een kleine initiële investering hebt gedaan, is het verreweg het beste om in de meeste situaties een programma te schrijven in de grafische programmeertaal PostScript. Er is praktisch geen limiet aan de kwaliteit van de uitvoer van een PostScript-programma, en naarmate men ervaring opdoet, nemen de moeilijkheden om de taal te gebruiken snel af. De ogenschijnlijke complexiteit van het produceren van eenvoudige cijfers door programmeren in PostScript, zoals ik hoop dat dit boek zal aantonen, is grotendeels een illusie. En de hoeveelheid werk die nodig is om meer gecompliceerde cijfers te produceren, zal meestal niet meer of minder zijn dan nodig is.

Algemene beschrijving van PostScript

PostScript is een Turing-complete algemene programmeertaal, ontworpen en ontwikkeld door Adobe Systems. Veel van de ideeën die tot bloei kwamen in PostScript waren gecultiveerd in projecten voor Xerox en Evans & Sutherland.

De belangrijkste real-world toepassing is historisch gezien een taal voor paginabeschrijving , of in de EPS-vorm van één pagina een beeldtaal met vectorafbeeldingen. Het is dynamisch getypeerd, dynamisch scoped en stack-gebaseerd, wat leidt tot een overwegend omgekeerde Poolse syntaxis.

Er zijn drie belangrijke releases van PostScript.

  1. PostScript niveau 1 - dit werd in 1984 op de markt gebracht als het vaste besturingssysteem van de Apple LaserWriter laserprinter, waarmee het tijdperk van Desktop Publishing werd ingehuldigd.
  2. PostScript Level 2 - uitgebracht in 1991, bevatte verschillende belangrijke verbeteringen aan niveau 1, waaronder ondersteuning voor beelddecompressie, in-RIP-scheiding, automatisch groeiende woordenboeken, garbage collection, Named Resources, binaire coderingen van de PostScript-programmastream zelf.
  3. PostScript 3 - de nieuwste en misschien wel meest gebruikte versie werd uitgebracht in 1997. Het bevat ook verschillende importverbeteringen ten opzichte van niveau 2, zoals Smooth Shading. De term "niveau" is geschrapt.

Hoewel PostScript meestal wordt gebruikt als paginabeschrijvingstaal - en daarom in veel printers wordt geïmplementeerd om rasterafbeeldingen te genereren - kan het ook voor andere doeleinden worden gebruikt. Als een snelle reverse-polish calculator met meer memorabele operatornamen dan bc . Als uitvoerformaat gegenereerd door een ander programma (meestal in een andere taal).

Hoewel PostScript-bestanden doorgaans 7-bit-clean ASCII zijn, bestaan er verschillende soorten binaire codering beschreven in de niveau 2-standaard. En omdat het programmeerbaar is, kan een programma zijn eigen willekeurig complexe coderingsschema voor zichzelf implementeren. Er is een Internationale Obfuscated Postscript-competitie, iets minder actief dan de C-wedstrijd.

Online referenties

Veelgestelde vragen

Boeken

  • Naslaggids voor PostScript-taal, 1ed, 1985. Aanbevolen voor zijn kleine formaat en eenvoudige gebruikersindex op de overzichtspagina's (ontbreekt in latere edities).

  • Real World Postscript. Hoofdstukken van verschillende auteurs over verschillende onderwerpen, waaronder een uitstekende dekking van halftonen.

Hallo wereld voorbeeld

Selecteer een lettertype en lettergrootte, selecteer locatie, show tekenreeks.

%!PS
/Palatino-Roman 20 selectfont
300 400 moveto
(Hello, World!) show
showpage
 

Opmerkingen en veel voorkomende valkuilen:

  • Geen lettertype instellen (wat resulteert in geen tekst of een standaard (lelijk) lettertype)

  • findfont en setfont maar scalefont vergeten te scalefont . Het gebruik van level-2 selectfont voorkomt dit probleem en is beknopter.

  • Niet in staat om een punt in te stellen met moveto of het punt buiten de pagina te plaatsen. Voor VS-briefpapier is 8,5x11 792x612 ps punten. Het is dus gemakkelijk om ongeveer 800x600 te onthouden (maar een stukje korter en breder). Dus 300 400 is ongeveer het midden van de pagina (beetje hoog, beetje links).

  • Vergeten om de showpage te bellen. Als u een voorbeeld van een ps-programma met gs en het niet op de showpage eindigt, kan gs een afbeelding voor u weergeven. En toch zal het bestand op mysterieuze wijze geen uitvoer produceren wanneer u probeert te converteren naar pdf of iets anders.

Installatie of instellingen

De authentieke Adobe PostScript-interpreters zijn beschikbaar in geavanceerde printers, het Display PostScript (DPS) -product en het Acrobat Distiller-product. Als auteurs van de standaard worden deze producten beschouwd als "de standaardimplementatie" om verschillen tussen PostScript-implementaties te beschrijven.

De standaardinterface voor de interpreter die in de PLRM is gedefinieerd, is de programmastroom die tekst of binair kan zijn, afhankelijk van de details van het onderliggende kanaal of OS / controller. Acrobat Distiller heeft een GUI-front-end om het invoerpostcript-programma te selecteren en de uitvoer als pdf weer te geven. Distiller biedt ook beperkte ondersteuning voor het gebruik van de uitvoertekststroom voor het melden van fouten en andere programma-uitvoer. GSView biedt een vergelijkbare GUI front-end voor een vergelijkbare workflow met Ghostscript als de tolk.

Ghostscript en Xpost werken beide in een opdrachtregelmodus. Het uit te voeren postscript-programmabestand kan worden vermeld op de opdrachtregel ( gs program.ps xpost program.ps of xpost program.ps ) die een grafisch venster opent om de grafische uitvoer weer te geven. Opties kunnen worden gebruikt om de afbeeldingen ergens anders weer te geven, zoals een schijfbestand of om de afbeeldingen volledig te onderdrukken en postscript te gebruiken als tekstscripttaal.

De verschillende tolken hebben elk hun eigen installatie- en configuratie-instructies en het zou verspillend (en gevoelig zijn voor veroudering) om ze hier te reproduceren.

Vrij beschikbare PostScript-tolken

  • Ghostscript is beschikbaar voor alle belangrijke platforms en Linux-distributies, in bron- of binaire vorm, onder de GNU-licentie of onder andere licentieovereenkomsten met de auteurs, Artifex-software . Ghostscript implementeert de volledige PostScript 3-standaard.

  • Xpost is beschikbaar in bronvorm voor alle belangrijke platforms, onder de BSD-3-clausule-licentie. Het implementeert de Level-1-standaard met enkele Level-2-extensies en sommige DPS-extensies.

Lokale naamruimten voor functies

Postscript is een taal met dynamische naamruimte of LISP 1 . Maar het biedt de tools om lokale variabelen in procedures en andere effecten te implementeren die nodig zijn om algoritmen te implementeren.

Voor lokale namen in een procedure, maak een nieuw woordenboek aan het begin en pop het aan het einde.

/myproc {
    10 dict begin
    %... useful code ...
    end
 } def
 

Je kunt dit ook mooi combineren met een snelkoppeling om de argumenten van de functie als variabelen te definiëren.

% a b c  myproc  result
/myproc {
    10 dict begin
    {/c /b /a} {exch def} forall
    %... useful code yielding result ...
    end
 } def
 

Als je een * "globale" * variabele moet bijwerken terwijl het lokale woordenboek bovenaan staat, gebruik dan store plaats van def .