Survo ja LaTeX (Viikon Vinkeimpiä #3)

[viesti Survo-keskustelupalstalla (2001-2013)]

Kirjoittaja: Kimmo Vehkalahti
Sähköposti:    -
Päiväys: 10.1.2004 15:59

Tämä juttu kuuluu joulukuun 2003 alussa aloittamaani jatkosarjaan
"Viikon Vinkeimpiä".

Tulin jokin aika sitten maininneeksi miten kätevää Survon ja LaTeX:in
yhteiselo on. Tämän kerran aiheena on demonstroida hieman tätä asiaa.
LaTeX:han on erityisesti matemaattisen mutta yhtähyvin minkä tahansa
tekstin ladontaan tarkoitettu ohjelmisto, joka sisältää monipuoliset
välineet dokumentin rakenteen ja ulkoasun hallintaan.

Teen aivan pienen dokumentin ja näytän sen työvaiheet hyvinkin
yksityiskohtaisesti. Tekstiä esimerkkidokumentissa on vain nimeksi,
mutta siihen sisältyy yksi Survolla tehty kuva.

Koko tämä juttu on rakennettu yhdessä Survon toimituskentässä. Tuon
kontrollisarakkeen näkyviin niiltä kohdin kuin se on välttämätöntä.

..........................................................................

Tehdään kuva ensin; käytetään "legendaarista" KUNNAT-aineistoa
(tässä lyhyemmällä nimellä SF):

>COPY <Survo>\U\D\KUNNAT.SVO SF.SVO
FILE SHOW SF

Ajatuksia ja tavoitteita kuvanpiirtoa varten:
  - Piirretään muuttujien Tulotaso ja SYNT hajontakuva.
  - Nostetaan muutama yksittäinen kunta erikseen näkyviin.
  - Tehdään lopullinen kuva kerrostamalla kolme kuvaa yhteen.
  - Käytetään myös hieman värejä, tekstin kiertoja yms.

Asetetaan ensin joitain yleisiä täsmennyksiä:

 LINETYPE=[Swiss(8)][rot(0)][move(0,0)][BLACK]
      PEN=[Swiss(8)][rot(0)][move(0,0)][BLACK]

Valitaan kuvan kooksi vaikkapa 90 mm x 90 mm:  SIZE=900,900

Kaikenlaisia täsmennyksiä (lisäilty tietenkin vaiheittain):

 HEADER= FRAME=6 YDIV=1,8,0    Kolmenlaisia havaintopisteitä:
 YSCALEPOS=-30   XDIV=0,1,0  *p1=0,2 (mustat pallukat)
 YSCALE=[rot(90)],0(5)30    *p2=[RED],10,8 (punaiset kolmiot)
 XSCALE=5000(5000)30000    *p3=[SwissB(10)][BLUE],Kunta (siniset nimet)

 YLABEL=[rot(90)][move(-80,-500)],Syntyvyys_(%)
 XLABEL=Tulotaso_(veroäyrejä_asukasta_kohti)

Kuntien valikointia:

 *all=ORDER,1,464 *few=Kunta:Nokia,Luopioinen,Helsinki

Piirretään osakuvat tiedostoihin 1.PS, 2.PS ja 3.PS:

PLOT SF Tulotaso SYNT / DEVICE=PS,1.PS POINT=*p1 CASES=*all LAG=0,0
PLOT SF Tulotaso SYNT / DEVICE=PS,2.PS POINT=*p2 CASES=*few LAG=0,0
PLOT SF Tulotaso SYNT / DEVICE=PS,3.PS POINT=*p3 CASES=*few LAG=750,0

Yhdistetään kuvat yhdeksi .ps-tiedostoksi:
EPS JOIN tulotaso_ja_syntyvyys.ps 2 1 3
(Huomaa järjestys: punaiset kolmiot jäävät alimmaisiksi.)

Esikatselua GSview-ohjelmalla:
/GV-SHOW tulotaso_ja_syntyvyys.ps
(Ei tarvitse aktivoida kuin kerran; uusi versio latautuu automaagisesti.)

Muunnosta Encapsulated PostScript -muotoon (.eps) ei tässä tarvita,
mutta sen voisi helposti tehdä EPS-komennolla. Professionaalisena
ladontaohjelmana LaTeX osaa lukea Survolla tehtyjä PostScript-kuvia
suoraankin.

..........................................................................

Toimituskenttään kirjoitetun LaTeX-muotoisen tekstin (ks. alempana)
hallinta alkaa tästä. Huom! Lopussa on lyhyt tiivistelmä, tästä tuli
melko pitkä, yksityiskohtainen ja teknisluontoinen selostus...

Talletus .tex-tiedostoksi (tavallinen tekstitiedosto):
SAVEW A,O sf.tex

Kääntäminen LaTeX-kääntäjällä laiteriippumattomaan .dvi-muotoon:
>LATEX sf.tex

Esikatselu (esim. MiKTeX-paketissa käynnistyy ohjelma nimeltä Yap):
>START sf.dvi

Kuvan näkyminen esikatselussa edellyttää että uudehko versio
Ghostscript-ohjelmasta on asennettu ja konfiguroitu käyttöön.
Itselläni on ver.8.11 asennuksen oletushakemiston C:\GS alla.
Sen kummempia konfigurointeja ei edes tarvita vaan Yap löytää
Ghostscriptin ja kuva tulee siististi mukaan näyttöön.

Kääntämisen ja esikatselun olen yhdistänyt sukroksi /LATEX
(ks. alempana), jolloin homma sujuu myös komennolla
/LATEX sf

Suoraan .tex-muodosta .pdf-muotoon teksti kääntyisi näin:
>PDFLATEX sf.tex
mutta kuva jää pois! Kääntäjä ilmoittaa: "Non-PDF special ignored!"
En tiedä onnistuuko homma näin lainkaan, jos jutussa on kuvia.
Mikäli kuvia ei ole, tämä on ihan kätevä tapa.
Onneksi muitakin tapoja on.

Toinen tapa perustuu .dvi-tiedoston muuntamiseen .ps-muotoon:
>DVIPS sf.dvi

Nyt koko homma on .ps-muodossa tiedostossa sf.ps:
/GV-SHOW sf.ps
Tämä Survon yleinen sukro /GV-SHOW käynnistää minulla edelleen
GSview:n vanhan version 2.7, jota käytän .ps-tiedostojen
pikaselailuun. Tarkempaan esikatseluun käytän Adobe Acrobat:ia.
/GV-SHOW-sukroon voi kytkeä uudemmankin GSview:n, jos haluaa.
Muuttamalla systeemiparametria gv_path voi kertoa, mistä
hakemistosta Survon pitäisi GSview hakea käyttöön. (Oletuksena
Survon asennuksen mukana tulevassa SURVO.APU-tiedostossa on
vanhojen GSview-versioiden mukainen C:\GSTOOLS\GSVIEW.)

Tästä .ps-muodosta jutun saa .pdf-muotoon mm. Adoben työkaluilla:
/PS-PDF sf.ps
Tämä Survon yleinen sukro /PS-PDF edellyttää siis Adoben Acrobat-
pakettia, johon kuuluu mm. muunnoksen tekevä Distiller-ohjelma.

Kooltaan näin saatu tiedosto on varsin pieni, ja soveltuu mainiosti
sekä tulostettavaksi paperille että jaeltavaksi verkossa. Fonttien
näkyminen ruudullakin nätisti riippuu oleellisesti LaTeX-koodissa
annettavista optioista (ks. alempana).

Tuloksena saatavan tiedoston /PS-PDF avaa automaattisesti (Adoben
Acrobat-ohjelmalla, jolla voi monipuolisesti myös editoida ja mm.
yhdistellä .pdf-dokumentteja), mutta erikseen sen voi avata mm.
aktivoimalla sukrokomennon
/OPEN sf.pdf
Tämä Survon yleinen sukro /OPEN avaa annetun tiedoston sillä ohjelmalla
joka siihen on Windows-tasolla (tiedoston tyypin perusteella) liitetty
ja palauttaa sitten kontrollin Survoon. Usein .pdf on liitetty Acrobat
Reader:iin, jonka saa ilmaiseksi verkosta.

Muunnoksen .pdf:ksi voi tehdä myös GSview-ohjelman riittävän uudella
(esim. ver.4.5) versiolla valinnoilla Open - Convert - pdfwrite jne.
Tulos on aivan sama, mutta kooltaan pikkuisen suurempi.

Edelleen sen voi tehdä myös suoraan Ghostscript-ohjelman avulla.
Komento on sen verran monimutkainen, että se kannattaa paketoida
sukroksi (ks. alempana):
/GS-PDF sf.ps
Tulos on jälleen aivan sama, ja kooltaan vain hitusen suurempi.

Itse dokumentin määrittely (kaiken A ja O) on muuten tässä välissä:

*..........................................................................
A
*% Survolla tehdyn kuvan liittäminen LaTeX-dokumenttiin (10.1.2004/KV)
*
*\documentclass[a4paper]{article}
*
*\usepackage[T1]{fontenc}
*\usepackage[finnish]{babel}
*\usepackage{ae}
*\usepackage[dvips]{graphicx}
*
*\begin{document}
*
*\section{Kuvan kuvailua}
*
*Kuva \ref{tulotaso ja syntyvyys} on tehty Survolla kerrostamalla ensin
*kolme sen \verb|PLOT|-operaatiolla piirrettyä PostScript-kuvaa yhdeksi
*.ps-tiedostoksi. Yksityiskohtainen selostus sekä kuvan että tämän
*tekstin laadinnasta löytyy Survon kotisivujen \verb|www.survo.fi| 
*keskusteluryhmästä. Kyseisen viestin otsikkona on ''Survo ja \LaTeX
*(Viikon Vinkeimpiä \#3)''.
*
*\begin{figure}
*  \centering  % kuvan keskistys, kuten voi arvata
*  \includegraphics{tulotaso_ja_syntyvyys.ps}
*  \caption{Tulotaso ja syntyvyys Suomen kunnissa}
*  \label{tulotaso ja syntyvyys}
*\end{figure}
*
*10.1.2004/K.Vehkalahti
*
*\end{document}
O
*..........................................................................

Se miltä dokumentti lopulta näyttää, löytyy osoitteesta
http://www.helsinki.fi/%7ekvehkala/tmp/sf.pdf 

Juttu muuttuu tässä vaiheessa vielä aavistuksen teknisemmäksi...

Seuraavassa on pari sukroa, ensin sukro /LATEX kääntämiseen
ja esikatseluun:

*TUTSAVE <Survo>\U\S\LATEX / (tai omaan sucropath-hakemistoon, jos on)
/ K.Vehkalahti 28.3.2003
/ --------------------------------------------------------------
*{tempo -1}{init}{save stack}{disp off}{W1=LATEX}{call SUR-SAVE}
*{break on}{del stack}{load stack}
- if W1 '=' ? then goto Help
- if W1 '=' (empty) then goto Help
*{line start}{erase}{erase}
/
/ def Wfile=W1
/
*>LATEX {print Wfile}.tex{act}{home}{erase}
/
*>START {print Wfile}.dvi{act}{home}{erase}
/
*{goto E}
/
+ Help: {message}        /LaTeX <file> does it.@{disp on}{disp off}
- on key
-    key _: continue
-   wait 600
*{message}@
/
+ E: {W1=LATEX}{call SUR-RESTORE}{disp on}{message}@{tempo +1}{end}

Sukro .pdf-tiedoston tekemiseen .ps-tiedostosta Ghostscriptin avulla
(ei niin yleiseksi laadittu sukro kuin /PS-PDF mutta samantapainen):

*TUTSAVE <Survo>\U\S\GS-PDF / (tai omaan sucropath-hakemistoon, jos on)
/ K.Vehkalahti 10.1.2004
/ --------------------------------------------------------------
*{tempo -1}{init}{save stack}{disp off}{W1=GSPDF}{call SUR-SAVE}
*{break on}{del stack}{load stack}
- if W1 '=' ? then goto Help
- if W1 '=' (empty) then goto Help
/ def Wfile=W1 Wgs_path=W2 Wx=W3
/
/ Varmistetaan että kentän leveys riittää:
/
*{line start}{erase}{erase}INIT 1000,200{act}{R}
/
/ Oletetaan että Ghostscriptin polku on annettu systeemiparametrina
/ gs_path (myös vuosia vanhat GS:n versiot osaavat muunnoksen, mutta
/ jälki on ruudulla suttuista uudempiin versioihin verrattuna).
/ Itselleni laitoin SURVO.APU-tiedostoon rivin
/ gs_path=C:\GS\GS8.11\BIN\
/
*{save system gs_path Wgs_path}
- if Wgs_path '<>' {} then goto ok1
*{message}        gs_path not given in the SURVO.APU file! Press ENTER!@
*{disp on}{disp off}
- on key
-    key _: continue
-   wait 600
*{message}@{goto E}
/
+ ok1: {print Wfile}{line start}{find .}{save char Wx}
- if Wx '<>' . then goto ok2
*{erase}
+ ok2: {line start}{save word Wfile}{erase}{ref set 1}{R}
/
/ Rakennetaan komentorivi Ghostscriptin kutsumiseksi:
/
*>{print Wgs_path}GSWIN32C.EXE  {R}
*-dNOPAUSE                      {R}
*-dBATCH                        {R}
*-sDEVICE=pdfwrite              {R}
*-sOutputFile={print Wfile}.pdf {R}
*{print Wfile}.ps               {R}
/
/ Siirretään se yhdelle riville ja aktivoidaan:
/
*{ref jump 1}TRIM 200{act}{R}{act}{erase}
/
/ Avataan syntynyt .pdf-tiedosto ja lopetetaan:
/
*/OPEN {print Wfile}.pdf{act}{goto E}
/
+ Help:
*{message}        /GS-PDF converts a .ps file to .pdf using Ghostscript.@
*{disp on}{disp off}
- on key
-    key _: continue
-   wait 600
*{message}@
/
+ E: {W1=GSPDF}{call SUR-RESTORE}{disp on}{message}@{tempo +1}{end}

Edellä käytettyjen komentojen LATEX, PDFLATEX ja DVIPS oletetaan löytyvän
hakupolun (Path) varrelta, tavalla tai toisella. Eräs tapa on lisätä
tarvittava hakemisto (MiKTeX:in tapauksessa C:\TEXMF\MIKTEX\BIN) tuohon
polkuun. Windowsissa (XP) se tapahtuu valinnoilla Start -> Settings -> 
Control Panel -> System -> Advanced -> Environment Variables -> System
variables -> Path -> Edit -> Variable value (!).

Toinen vaihtoehto (jota itse suosin) on lisätä em. hakupolkuun jokin oma
työkaluhakemisto (minulla C:\UTIL) ja luoda sinne kulloinkin tarvittavat
komentotiedostot. (Sinne olen sijoittanut muitakin työkaluja kuten zip-
ja unzip-ohjelmat.) Esimerkiksi LATEX-komentoa vastaa seuraava tiedosto:

SAVEP CUR+1,CUR+2,C:\UTIL\LATEX.CMD
@echo off
c:\texmf\miktex\bin\latex %1 %2 %3 %4 %5

--------------------------------------------------------------------------

Selostuksessa on esiintynyt melko paljon teknisiä ym. yksityiskohtia.
TIIVISTETYSTI työskentely sujuu varsin lyhyesti, kas näin:

1. kirjoitusta ja korjailua; yrityksiä ja erehdyksiä;
   mahdollisten kuvien rakentelua ja säätämistä

2. tuotoksen talletus (myös toimituskenttä talteen aika ajoin!)
   SAVEW A,O sf.tex

3. kääntö ja esikatselu
   /LATEX sf

Tarvittaessa tehdään muunnos .pdf-muotoon:

>DVIPS sf.dvi
/PS-PDF sf.ps

Tässä voisi myös ajatella DVIPS:n lisäystä samantien /LATEX-sukroon,
jolloin .pdf:n saisi pelkällä /PS-PDF:llä (tai /GS-PDF:llä).

--------------------------------------------------------------------------

Toivottavasti näistä vinkeistä on iloa, itselleni ainakin on! :)
Selvennän mielelläni mahdollisia epäselviä kohtia toivoen ettei
niistä tule entistä epäselvempiä.

terveisin Kimmo

PS. On tullut tavaksi "arvioida" näiden VV-juttujen "lukukelpoisuutta".
Tällä kertaa LUE-komento sanoo, että "Teksti muistuttaa lastenlehtiä". ;)

Vastaukset:

Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.