Latex ja muut työkalut

Olen koonnut tälle sivulle vinkkejä siitä, mitä työkaluja voi käyttää tieteellisen kirjoitelman laatimisessa, ja miten niitä kannattaa käyttää. Lähtökohtana on lähinnä meidän laitoksemme suomenkielisen tiki-tutkielman tai gradun kirjoittaminen, mutta useimmat vinkit sopivat muihinkin vastaaviin tilanteisiin.

Vaihtoehtoja löytyy verkosta liiankin kanssa. Tässä pyrin välttämään lukuisten vaihtoehtojen esittelemistä, ja kerron yhden työkalujoukon, jolla työn voi tehdä. Tämä tuskin on paras vaihtoehto, mutta se on ainakin testatusti mahdollinen vaihtoehto.

Suosittelen, että pyrit mahdollisimman systemaattiseen ja automatisoituun työskentelyyn heti alusta asti. Kun loppuvaiheessa aikarajat painavat päälle, on mukavaa, jos pieni muutos ei tarkoita suurta määrää virhealtista käsityötä.

Uutta (tammikuu 2013): Tämän sivun sisältö on monilta osin jo vanhentunut. Laitoksen tyylipohjasta on olemassa uusi versio, jota ylläpidetään GitHubissa:

Käytä jatkossa uutta versiota, ja seuraa sen mukana tulevaa dokumentaatiota.

Sisältö

Latex ja Bibtex

Jos päädyt käyttämään Latexia, lue ensin Pitkänpuoleinen johdanto LaTeX2e:n käyttöön eli lyhyt2e.pdf. Teksti on suomeksi, ja kirjoitettu varsin selkeästi ja ymmärrettävästi. Huomaa, että tuota dokumenttia päivitetään silloin tällöin; englanninkielinen versio voi olla joiltain osin tuoreempi.

Jos teet lähdeluettelon Bibtexin avulla, kannattaa tutustua Bibtexin dokumentaatioon ja FAQiin. Nämä kaksi dokumenttia yhdessä verkosta löytyvien alkeisoppaiden kanssa (ks. esim. bibtex.org ja Wikipedia) auttavat jo varsin pitkälle.

Rubber

Toiset tulevat toimeen Latexilla sellaisenaan, minä en. Suosittelen tutustumaan Rubber-työkaluun. Tämän avulla Latex-dokumenttien kanssa työskentely helpottuu huomattavasti.

Rubberin idean oppinee parhaiten esimerkin avulla:

Tässä kaikki. Rubber tekee kaiken tarvittavan. Se muuntaa XFig-kuvan PDF-muotoon, joka soveltuu käytettäväksi Latex-dokumentissa. Tämän jälkeen Rubber ajaa oikeassa järjestyksessä tarvittavan määrän komentoja latex ja bibtex sopivilla parametreilla. Hakemistosta löytyy nyt valmis PDF-tiedosto esimerkki.pdf.

Näissä kaikissa esimerkeissä on Rubberia ohjeistettu tuottamaan suoraan PDF-tiedosto pdflatexin avulla. Vanhanaikaseen ratkaisuun (ensin latexilla dvi-tiedosto, sitten dvips:llä sopivien komentoriviparametrien avulla PostScript-tiedosto ja lopuksi ps2pdf:llä pdf-tiedosto) ei nykyään ole yleensä tarvetta turvautua — onneksi.

Erityisen kätevää tämä on siinä vaiheessa, kun editoit dokumenttia. Jos muokkaat mitä tahansa lähdetiedostoa, riittää, että annat uudestaan komennon ”rubber -Wall esimerkki.tex”. Rubber tutkii, mikä on muuttunut, ajaa tarvittavat ohjelmat uudestaan, ja tuloksena on joka kerta ajantasainen versio dokumentista. Käytännön työskentely sujuu mukavasti, kun yhdessä ikkunassa pitää Latex-tiedostoa editoitavana, yhdessä ikkunassa on valmis PDF-tiedosto esikatseltavana, ja yhdessä ikkunassa ajaa rubber-komentoja.

Rubber myös tulkitsee Latexin virheilmoitukset ja varoitukset, ja osaa näyttää niistä oleelliset hiukan ihmisluettavammassa muodossa. Valitsin -Wall on tarpeen, jotta Rubber näyttäisi kaikki varoitukset joka kerta. Näin virheet eivät unohdu.

Rubber ei ole ainoa vaihtoehto, ja suunnilleen samaan lopputulokseen voi päästä myös sopivalla itse kirjoitetulla skriptillä. Rubber ei myöskään ole täydellinen. Joissain tilanteissa Rubber ei onnistu tulkitsemaan oikein Latexin tuottamia virheilmoituksia; jos Rubber tuntuu tekevän jotain mystistä, kannattaa käydä katsomassa, mitä Latexin ja Bibtexin logitiedostoissa (*.log, *.blg) lukee. Välillä riittää yksinkertaisesti aloittaminen puhtaalta pöydältä; kaikki Latexin ja Bibtexin tuottamat väliaikaistiedostot voi poistaa helpoiten komennolla ”rubber --clean esimerkki.tex”.

Esikatselu

PDF-tiedostojen esikatseluun soveltuu varsin mukavasti esimerkiksi ohjelmat kpdf ja evince. Nämä osaavat havaita, kun tarkasteltava PDF-tiedosto muuttuu, ja päivittää näkymän.

PDF-tiedostojen esikatseluun ei sovellu Adobe Reader. Tämä ohjelma ei osaa havaita, kun tarkasteltava tiedosto muuttuu, ja lähinnä vain sekoaa, jos muuttunutta tiedostoa yrittää edelleen selailla. Adobe Readerissa tiedoston joutuu käsin sulkemaan ja avaamaan joka muutoksen jälkeen, ja tämä menee käytännössä turhan työlääksi.

Myöskään esimerkiksi kghostview ei ole tähän erityisen sovelias. Se kyllä huomaa muutokset, mutta ohjelma alkaa sekoilla isompien tiedostojen kohdalla yrittäessään avata puolivalmista tiedostoa, jonka Latex-käännös on edelleen kesken.

Laitoksen tyylipohja

Hakemistossa esimerkki on kaksi esimerkkiä laitoksen tyylipohjan käytöstä: pitempi esimerkki.tex, jossa on tiivistelmäsivu, sisällysluettelo ja lähdeluettelo, sekä lyhyempi esimerkki-lyhyt.tex, josta nämä puuttuvat.

Tyylipohjasta on liikkeellä useita eri versioita. Esimerkiksi laitoksen koneilta hakemistosta /opt/tktltiki löytyvä versio on vanha ja viallinen. Tiivistelmäsivun asettelu on pielessä. Varmistu, että käytät kaikkialla tuoreinta versiota; tiedostosta tktltiki.cls pitäisi löytyä päiväys ”2007/09/12 v1.1”.

Normaalisti kaikki Latexin antamat virheet on syytä lukea. Varoitukset eivät ole harmittomia; ne tarkoittavat lähes aina tilannetta, joka pitää korjata. Valitettavasti laitoksen tyylipohja on hiukan viallinen ja tyylipohja itsessään aiheuttaa joitain varoituksia. Seuraavat kolme varoitusta voi jättää huomiotta; kaikkiin muihin on syytä reagoida (kaksi jälkimmäistä tulee vain, jos tiivistelmäsivu on mukana):

Myös laitoksen Bibtex-tyylissä on pieni vika. Jos article-tyyppiselle merkinnälle on annettu kentät volume ja year muttei kenttää number, lähdeluetteloon tulee vain volume eikä volume(year). Tämän voi korjata muokkaamalla hiukan tiedostoa tktl.bst riviltä 550 alkaen. Vanha:

FUNCTION {format.vol.num.year}
{ volume field.or.null
  number empty$
    'skip$
    { ","  number * *
      volume empty$
    { "there's a number but no volume in " cite$ * warning$ }
    {year empty$
      'skip$
       { "("  year * ")" * *
       }
       if$
     }
     if$
    }
  if$
}

Uusi:

FUNCTION {format.vol.num.year}
{ volume field.or.null
  number empty$
    'skip$
    { ","  number * *
      volume empty$
        { "there's a number but no volume in " cite$ * warning$ }
        'skip$
      if$
    }
  if$
  year empty$
    'skip$
     { "("  year * ")" * * }
  if$
}

Lähdeluettelon hallinta

Bibtexin kaipaaman lähdeluettelon voi toki kirjoittaa kokonaan käsin. Bibtexissä hyvin kätevää on kuitenkin se, että eri artikkeleissa voidaan hyödyntää samaa lähdeluettelotiedostoa; saman lähteen tietoja ei tarvitse ylläpitää eri tiedostoissa. Kun Bibtexiä hyödyntää tähän tapaan, lähdeluettelotiedoston koko kasvaa, ja sen hallintaan alkaa kaivata havainnollisempaa työkalua.

Työkaluja on lukuisia, ja jokaisessa tuntuu olevan omat ongelmansa. Itse olen käyttänyt JabRef-työkalua. Sen käyttöliittymä on varsin surkea, mutta sen omituisuuksien kanssa pystyy tulemaan toimeen. Mukavana piirteenä on mm. mahdollisuus luokitella artikkeleita eri kategorioihin, ja mahdollisuus tallentaa helposti saataville myös artikkelin PDF-versio. JabRefia voi hyvin käyttää jo siinä vaiheessa, kun vasta etsii mahdollisesti kiinnostavia lähteitä.

Muista, että Bibtex-tiedoston kentät eivät ole paljasta tekstiä, vaan kentillä on sisäistä rakennetta; tämä koskee myös JabRefiä. Kentän author rakenne on hyvinkin tarkasti määritelty; älä arvaile vaan tarkista yksityiskohdat dokumentaatiosta. Artikkeleissa ja vastaavissa kentän title sisältö yleensä muunnetaan pieniksi kirjaimiksi, ellei kirjaimia ole erikseen suojattu {}-merkeillä. Lisäksi tekstissä voi käyttää Latex-koodia. Esimerkiksi artikkelin nimessä olevat matemaattiset kaavat voi latoa normaaliin tapaan $$-merkkien sisään.

Kuvat

Välillä tulee vastaan tarve piirtää kaaviokuvia, joissa käytetään matemaattisia merkintöjä. Yksi vaihtoehto tällaiseen on XFig-ohjelma. Ohjelman käyttöliittymä on varsin eksoottinen ja vanhanaikainen, mutta siinä on yksi hieno piirre: teksteissä voi käyttää Latex-koodia.

Käynnistä XFig esimerkiksi tällaisella komennolla:

Nyt voit piirtää kuvia normaalisti. Kaikissa teksteissä voit käyttää vapaasti Latex-koodia, mukaanlukien $$-merkkien sisällä olevaa matemaattista koodia. Voit jopa käyttää Latex-dokumentin alussa itse määrittelemiäsi makroja. Edellä Rubberin esittelyssä olikin esimerkki tällaisesta kuvasta, ja siitä, miten sitä käytetään Latex-dokumentissa. Lopputulos on varsin tyylikäs, kun kirjasinlaji ja kaavojen asettelu on kuvassa täsmälleen sama kuin tekstissäkin.

PDF-muotoisen grafiikan yhteydessä kuvan skaalaaminen on helppoa. Komennolle \includegraphics voi antaa scale-parametrin:

Latex-koodia sisältävien XFig-kuvien skaalaaminen ei onnistu näin. Tällöin voi kuitenkin käyttää komentoja \resizebox ja \scalebox:

Moni vanhempi työkalu osaa tuottaa EPS-kuvia muttei PDF-kuvia. Työkalu epstopdf voi tällöin auttaa.

Esityskalvot

PDF-muotoisten, tietokoneella ja videotykillä näytettävien esityskalvojen tekoon suosittelen Latexia ja Beamer-luokkaa (käyttöohje, paikallinen versio).

Hakemistossa esimerkki on esimerkki Beamerin käytöstä suomenkielisen esityksen tekemiseen: esitelma.tex. Tämäkin kääntyy PDF:ksi Rubberilla: ”rubber -Wall esitelma.tex”. Syntyneen PDF-tiedoston esitelma.pdf voi avata Adobe Readerissa ja esittää kokoruutumoodissa painamalla ctrl+L.

Posterit

Posterin eli julisteen laatiminen ei tule vastaan tiki-kurssilla tai gradun teossa, mutta esimerkiksi jatko-opinnoissa joutuu välillä esittelemään työtään posterina. Posterinkin voi tehdä Latexilla (esimerkkejä valmiista postereista: 1, 2, 3). Etuna Latexin käytössä on mm. se, että esityskalvojen kuvia on helppo hyödyntää suoraan myös posterin kuvituksessa.

Posterin tekoon ei ole hyvää valmista tyylipohjaa samaan tapaan kuin esityskalvojen tekoon. Tällaista ei oikein voikaan olla: posteri on varsin vapaamuotoinen ja jokainen posteri on oma yksilönsä. Seuraavassa on vihjeitä, joita olen itse havainnut hyödyllisiksi:

Jos haluat koota posterin erillisistä A4-kokoisista arkeista, voit käyttää Poster-työkalua (asennettu laitoksella polkuun /opt/bin/poster). Ota Latexilla ja dvips:llä tuotettu yksisivuinen PostScript-tiedosto ja syötä se komennolle poster -mA4 -pA0. Tuloksena syntyy 16-sivuinen PostScript-tiedosto; sivuilla on automaattisesti mukana marginaaleissa hiukan leikkausvaraa ja leikkausmerkit. Muunna saatu PostScript-tiedosto PDF-tiedostoksi komennolla ps2pdf. Avaa tiedosto Adobe Readerissa, katso, että kaikki näyttää hyvältä, ja tulosta haluamallesi tulostimelle. (Poster-komennon tuottaman PostScript-tiedoston suora tulostaminen ei näytä toimivan kunnolla.)

Oikoluku

Suomen kielen oikolukuun on nykyään saatavilla vapaa oikolukuohjelmisto, Voikko. Yksi tapa oikolukea suomenkielinen Latex-dokumentti Voikon ja siihen liittyvän tmispell-komentorivityökalun avulla on seuraava:

Laitoksella Voikkoa ei vielä ole, mutta voit kokeilla soveltaa ylläolevaa vanhempaan Soikko-pohjaiseen oikolukutyökaluun, joka löytyy polusta /opt/tmispell/bin/tmispell.

Lisäapua Latexiin

Edellämainitussa lyhyt2e:ssä on muutamia puutteita, joita voi paikata seuraavilla:

TeX FAQ ja Hypertext Help with LaTeX voivat auttaa ongelmissa. Rivinvaihtojen ja vastaavien hienosäädöstä kertoo esim. M. J. Osborne.

Muita välineitä

Versionhallinta tekee työskentelystä sujuvampaa. Voit huolettomammin tehdä muutoksia, kun kaikki aiemmat versiot ovat aina tallella, ja näet helposti, mitä muutoksia olet tarkalleen ottaen tehnyt. En usko, että versionhallintaohjelmiston opiskelu pelkästään tiki-kurssin tarpeisiin on järkevää. Jos kuitenkin olet esimerkiksi ohjelmistotuotantoprojektin yhteydessä opetellut käyttämään jotain versionhallintajärjestelmää, huomaa, että sellaista voi helposti soveltaa myös Latex-dokumenttien, lähdeluetteloiden ja vastaavien hallintaan. Subversion on hyvä esimerkki modernista versionhallintajärjestelmästä, ja ohjelmistosta on myös laadukas käsikirja verkossa.

Kuvaajien piirtämiseen voi käyttää Gnuplot-ohjelmistoa. Gnuplotin avulla pystyy kohtalaisen helposti komentoriviltä käsin luomaan yhdellä käskyllä taulukkomuotoisesta lähdedatasta valmiin EPS-kuvan. Katso hakemistoa gnuplot-esimerkki: tiedosto plot on Gnuplot-skripti, jonka avulla piirretään kaksi EPS-kuvaa. Jos Gnuplot ei tunnu riittävän omiin tarpeisiin, yksi hyvä vaihtoehto on R, monipuolinen tilastollisen matematiikan ohjelmisto. R:n oppimiskynnys voi olla huomattavasti isompi kuin Gnuplotin, mutta R:llä on mahdollista tehdä hyvin monipuolisia ja näyttäviä kuvaajia.

Verkkojen ja vastaavien nuolista ja pallukoista koostuvien kuvien piirtämiseen soveltuu kohtalaisen hyvin Dia. Dialla piirretyn kuvan voi muuntaa EPS-muotoon (esim. ”dia -e x.eps -t eps x.dia”). Jos piirrettävää on niin paljon, ettei se enää käsityönä suju, voi käyttää esim. Graphviz-pakettia, joka yrittää asetella verkon solmut kuvaan automaattisesti; tuloksen voi tallentaa suoraan EPS-muotoon (esim. ”neato x.dot -Tps > x.eps”).

Jokin skriptikieli on hyvä osata. Jo hyvin yksinkertaisella Perl-skriptillä tai Unixin shell-skriptillä voi muokata dataa työkaluille sopiviin muotoihin, vähentää käsityön tarvetta, ja tehdä mekaanisia muutoksia.

Sanojen ja merkkien määrää voi arvioida esimerkiksi seuraavasti: muunna valmis PDF-dokumentti tekstiksi pdftotext-työkalulla ja ohjaa tulos wc-komennolle.

Dokumentin sisäisistä ristiviitteistä voi tehdä PDF-versiossa hyperlinkkejä varsin helposti käyttämällä pakkausta hyperref (käyttöohje). Mallia tämän käytöstä yhdessä laitoksen tyylipohjan kanssa löytyy hakemistosta esimerkki tiedostosta esimerkki-hyperref.tex. Tämä vaatii kuitenkin hiukan ylimääräistä vaivannäköä, enkä suosittele siksi ensi kertaa Latexia käyttävälle. Tärkeää: jos käytät laitoksen tyylipohjan kanssa liitteitä (esim. komennot \numberofappendixpages, \appendices, \internalappendix), hyperref-pakkaus ei toimi, vaan lopputuloksena on lähinnä kasa erikoisia virheilmoituksia dokumentin eri osista.

Aiheeseen liittyvää

Kiitokset: Seppo Syrjäselle tmispell-vinkistä. Otso Kivekkäälle hyperref-debuggauksesta.