- CS-A0100
- Tekstin ladontaa LaTeXilla
- 4 Tekstin rakenne, ristiviitteet ja lähdeviitteet
Tekstin rakenne, ristiviitteet ja lähdeviitteet¶
LaTeX soveltuu hyvin isojen ja mutkikkaiden teknisten dokumenttien luontiin. Keskeinen väline tällaisissa teksteissä on mahdollisuus viitata tekstin osasta toiseen.
Väliotsikot¶
Tuodaan ensin hiukan tekstiin rakennetta. Komennolla \section
voi tuottaa luvun ja vastaavasti esimerkiksi \subsection
tuottaa aliluvun:
\documentclass[a4paper,12pt]{article}
\usepackage[finnish]{babel}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\begin{document}
\section{Johdanto}
Tässä esitellään pian hyödyllinen tulos, kunhan opimme tarvittavat LaTeX-komennot.
\section{Sovellus}
Tässä taas esittelemme sen sovelluksia.
\end{document}
Käännettynä lopputulos näyttää tältä:

Teoreemat¶
Matemaattisessa tekstissä tarvitaan usein teoreemoja, korollaareja, lemmoja ja sen kaltaisia otuksia. Niitä voi tuottaa esimerkiksi amsthm
-paketin avulla (ks. dokumentaatio). Tässä \newtheorem
-komennolla kerromme, että theorem
-ympäristö luo teoreemoja ja corollary
-ympäristö luo korollaareja. Valinta [section]
kertoo, että nämä numeroidaan lukukohtaisesti (siis esimerkiksi luvussa 7 on teoreemat 7.1, 7.2 jne.):
\documentclass[a4paper,12pt]{article}
\usepackage[finnish]{babel}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{amsthm}
\newtheorem{theorem}{Teoreema}[section]
\newtheorem{corollary}{Korollaari}[section]
\begin{document}
\section{Johdanto}
Seuraava tulos on hyödyllinen:
\begin{theorem}
Kaikki järjestyy.
\end{theorem}
\begin{proof}
Jätetään harjoitustehtäväksi.
\end{proof}
\section{Sovellus}
Edellä esitellyllä teoreemalla on muun muassa seuraava sovellus:
\begin{corollary}
Sä pärjäät kyllä.
\end{corollary}
\end{document}
Käännettynä lopputulos näyttää tältä (huomaa, että proof
-ympäristön yhteydessä sana "Todistus" tuli suomeksi automaattisesti, kiitos babel
-paketin yhteydessä astetun kielen):

Ristiviitteet¶
Nyt tekstissä on jo sen verran rakennetta, että haluaisimme pystyä viittaamaan tekstin eri osiin. Haluttu tulos näyttäisi siis tältä:

Juuri tähän on LaTeXissa valmiit toiminnot. Voit antaa \label
-komennolla haluamillesi elementeille (esimerkiksi luvut ja teoreemat) nimiä, ja voit \ref
-komennolla viitata niihin, yksinkertaisesti tähän tapaan (~
tässä lähdekoodissa tuottaa sitovan välilyönnin, jotta rivinvaihto ei tule hassuun paikkaan):
\documentclass[a4paper,12pt]{article}
\usepackage[finnish]{babel}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{amsthm}
\newtheorem{theorem}{Teoreema}[section]
\newtheorem{corollary}{Korollaari}[section]
\begin{document}
\section{Johdanto}\label{sec:johdanto}
Seuraava tulos on hyödyllinen:
\begin{theorem}\label{thm:kaikki-jarjestyy}
Kaikki järjestyy.
\end{theorem}
\begin{proof}
Jätetään harjoitustehtäväksi.
\end{proof}
Luvussa~\ref{sec:sovellus} nähdään, miten tätä voi hyödyntää.
\section{Sovellus}\label{sec:sovellus}
Luvussa~\ref{sec:johdanto} esitellyllä teoreemalla~\ref{thm:kaikki-jarjestyy} on muun muassa seuraava sovellus:
\begin{corollary}
Sä pärjäät kyllä.
\end{corollary}
\end{document}
Kirjoita tämä lähdekoodi tiedostoon lapio.tex
ja yritä kääntää se tuttuun tapaan komennolla pdflatex -interaction=nonstopmode lapio.tex
. Katso tuloksena syntyvää PDF-tiedostoa! Lue myös huolella, mitä LaTeX tulostaa ruudulle!
Kahdesti käännettävä¶
Jos seurasit ohjeita täsmällisesti, edessäsi pitäisi olla PDF-tiedosto, joka — surullista kyllä — näyttääkin tältä:

Kaikki ristiviitteet näyttävät olevan rikki ja niiden paikalla näkyy vain ??. LaTeX myös tulosti käännöksen aikana tämän tyylisiä ilmoituksia:
LaTeX Warning: Reference `sec:sovellus' on page 1 undefined on input line 22.
LaTeX Warning: Reference `sec:johdanto' on page 1 undefined on input line 26.
LaTeX Warning: Reference `thm:kaikki-jarjestyy' on page 1 undefined on input li
ne 26.
LaTeX Warning: There were undefined references.
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
Mikä siis meni pieleen?
Yritä nyt ajaa komento pdflatex -interaction=nonstopmode lapio.tex
uudestaan! Kyllä, aja täsmälleen sama komento uudestaan. Älä tee välissä mitään muuta, älä poista mitään tiedostoja levyltä äläkä muokkaa mitään tiedostoja. Toisella ajokerralla LaTeX onkin tyytyväinen, mitään varoituksia ei tulostu ja lopputuloksena on täysin ehjä PDF-tiedosto, jossa kaikki ristiviitteet ovat kunnossa!
Tämä on, valitettavasti, jälleen yksi LaTeXin omituisuuksista. Huomasimme jo aiemmin, että LaTeX luo levylle tiedoston lapio.aux
. Tämä on tiedosto, jota LaTeX käyttää juuri ristiviitteiden hallintaan. Ensimmäisellä ajokerralla tämä tiedosto syntyi, ja LaTeX kirjasi sinne ylös, että esimerkiksi thm:kaikki-jarjestyy
on nimenomaan teoreema numero 1.1. Toisella ajokerralla tämä tieto oli LaTeXilla käytettävissä, ja LaTeX sai ristiviitteet luotua oikein.
LaTeXia tulisi siis periaatteessa käyttää niin, että pdflatex
-komennon ajamisen jälkeen huolella luetaan logista, sanoiko LaTeX jotain sen kaltaista kuin "Rerun to get cross-references right", ja tässä tapauksessa komento ajettaisiin uudestaan. Tämä on kovin työlästä ja virhealtista. Palaamme pian mahdollisiin ratkaisuihin!
Hyperlinkit¶
Nyt kahden käännöskerran jälkeen ristiviitteet ovat paikallaan. Ne eivät kuitenkaan ole PDF-dokumentissa linkkejä, joita voisi hiirellä klikata. Yksisivuisessa dokumentissa se ei vielä ole erityisen iso ongelma, mutta pidemmissä dokumenteissa hyperlinkit auttavat paljon. LaTeXissa on tähänkin oma pakettinsa: hyperref
; paketin dokumentaatio löytyy tuttuun tapaan CTAN-palvelusta tai omalta koneeltasi komennolla texdoc hyperref
. Normaalisti pitkälle pääsee jo yksinkertaisesti lataamalla tämän paketin. Jos ei halua hyperlinkeistä rumia ja silmiinpistäviä laatikoita, ne voi hienovaraisesti piilottaa valinnalla [hidelinks]
; haluttu lähdekoodi näyttäisi siis tältä:
\documentclass[a4paper,12pt]{article}
\usepackage[finnish]{babel}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{amsthm}
\usepackage[hidelinks]{hyperref}
\newtheorem{theorem}{Teoreema}[section]
\newtheorem{corollary}{Korollaari}[section]
\begin{document}
\section{Johdanto}\label{sec:johdanto}
Seuraava tulos on hyödyllinen:
\begin{theorem}\label{thm:kaikki-jarjestyy}
Kaikki järjestyy.
\end{theorem}
\begin{proof}
Jätetään harjoitustehtäväksi.
\end{proof}
Luvussa~\ref{sec:sovellus} nähdään, miten tätä voi hyödyntää.
\section{Sovellus}\label{sec:sovellus}
Luvussa~\ref{sec:johdanto} esitellyllä teoreemalla~\ref{thm:kaikki-jarjestyy} on muun muassa seuraava sovellus:
\begin{corollary}
Sä pärjäät kyllä.
\end{corollary}
\end{document}
Aloita nyt puhtaalta pöydältä. Poista kaikki LaTeXin luomat tilapäistiedostot. Varmistu, että hakemistossa on pelkästään em. tiedosto (mukaanlukien hyperref-paketin lataaminen). Käännä tiedosto ajamalla yhden kerran pdflatex -interaction=nonstopmode lapio.tex
.
Vielä eivät ristiviitteet toimi lainkaan. Aja nyt toisen kerran komento pdflatex -interaction=nonstopmode lapio.tex
.
Nyt PDF-tiedostossa pitäisi olla ristiviitteet kunnossa ja ristiviitteet toimivat myös hyperlinkkeinä. Hyperlinkkien toimintaa on useimmissa PDF-lukijoissa hankala havaita millään tapaa yhden sivun mittaisessa dokumentissa. Kokeile: tee dokumentista reilusti pidempi niin, että siinä on välissä useampi sivu tekstiä, ja testaa, että hyperlinkit tosiaan toimivat omassa PDF-lukijassasi!
Ongelmia?
Jos LaTeX-käännöksessä tulee mystisiä ongelmia, yritä ensiavuksi siivota pois kaikki tiedostot, joita LaTeX on luonut (esimerkiksi aux-tiedosto), ja yritä uudestaan! Jotkin paketit kirjaavat näihin tiedostoihin omia kirjanpitotietojaan ja erityisesti kun vaihdat yhden paketin tilalle toisen, ongelmia voi tulla vastaan.
Lähdeviitteet¶
Viimeistään opinnäytetöissä tulee vastaan tarve viitata kirjallisuuteen. LaTeX tarjoaa tähän valtavasti erilaisia välineitä, joista tässä raapaistaan vain aivan pintaa. Yritetään luoda tämän näköinen dokumentti:

Katsotaan tällaisen dokumentin luonti pala kerrallaan. Aloita taas tyhjästä hakemistosta. Luo ensin tiedosto nimeltä kirjallisuus.bib
, jonka sisältö näyttää tältä (voit käyttää haluamaasi tekstieditoria):
@article{mcculloch-pitts-1943,
author = {Warren S. McCulloch and Walter Pitts},
title = {A logical calculus of the ideas immanent in nervous activity},
journal = {Bulletin of Mathematical Biophysics},
pages = {127--147},
volume = {5},
year = {1943}
}
@book{knuth-1986,
author = {Donald E. Knuth},
title = {TeX: The Program},
publisher = {Addison-Wesley},
year = {1986}
}
Tässä olemme listanneet yhden lehtiartikkelin (article) ja yhden kirjan (book). Huomaa, että author
-kentällä on hyvin erityinen muoto: siinä luetellaan kirjoittajat and
-sanalla eroteltuina, tyyliin "Ensimmäinen Kirjoittaja and Toinen Kirjoittaja and Kolmas Kirjoittaja".
Luo seuraavaksi samaan hakemistoon LaTeX-lähdetiedosto nimeltä lapio.tex
ja kirjoita sen sisällöksi tällaista:
\documentclass[a4paper,12pt]{article}
\usepackage[finnish]{babel}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\begin{document}
Kun McCulloch ja Pitts \cite{mcculloch-pitts-1943} kirjoittivat artikkelinsa, heillä ei vielä ollut käytössä Knuthin luomaa TeX-ladontajärjestelmää \cite{knuth-1986}.
\bibliographystyle{plain}
\bibliography{kirjallisuus}
\end{document}
Tässä nyt \cite
-komennolla viitataan kirjallisuuteen. Komento \bibliographystyle
kertoo, millä tyylillä lähdeviitteet muotoillaan, ja komento \bibliography
puolestaan kertoo, mistä bib-tiedostosta lähdeviitteet haetaan. Tässä siis sana kirjallisuus
viittaa edellä luotuun tiedostoon kirjallisuus.bib
.
Käännä tiedosto ajamalla yhden kerran pdflatex -interaction=nonstopmode lapio.tex
. Mitä havaitset?
Aja seuraavaksi komento bibtex lapio
. Mitä havaitset?
Aja seuraavaksi toisen kerran pdflatex -interaction=nonstopmode lapio.tex
. Mitä havaitset?
Aja seuraavaksi kolmannen kerran pdflatex -interaction=nonstopmode lapio.tex
. Mitä havaitset?
Koko tämä ruljanssi on valitettavasti tarpeen. Ensimmäinen pdflatex
-komento luo tiedoston lapio.aux
. Kun tämän jälkeen ajat bibtex
-komennon, BibTeX käy katsomassa aux-tiedostosta, mihin lähdeluettelon lähteisiin viitataan, ja luo tiedoston lapio.bbl
, jossa on juuri näiden lähteiden tiedot. Toisella pdflatex
-komennon ajokerralla tämä lähdeluettelo saadaan mukaan bbl-tiedostosta, ja samalla kirjataan aux-tiedostoon, mikä on minkäkin lähdeviitteen järjestysnumero. Vielä kolmas ajokerta tarvitaan, jotta nämä aux-tiedostoon kirjatut tiedot saadaan mukaan. Kovin työlästä ja virhealtista. Katsotaan lopuksi, miten tästä sotkusta käytännössä selvitään.
LaTeX-käännös käytännössä¶
Käytännössä LaTeXin ja BibTeXin käyttäjät turvautuvat johonkin näistä ratkaisuista:
Kirjoitetaan oma skripti, joka ajaa oikean
pdflatex
+bibtex
+pdflatex
+pdflatex
-rimpsun joka kerta, vaikka se ei aina olisi välttämätöntä.Käytetään
latexmk
-komentoa (joka sinulla luultavasti on jo tullut TeXliven mukana). Kokeile! Aloita tyhjästä hakemistosta, jossa on pelkästään edellä luodut tiedostotlapio.tex
jakirjallisuus.bib
. Aja komentolatexmk -pdf lapio.tex
. Tämän pitäisi huolehtia siitä, että lopputuloksena on valmis PDF, jossa kaikki on kunnossa. Kun editoid lähdetiedostoja, voit aina ajaa uudestaanlatexmk -pdf lapio.tex
, jalatexmk
yrittää sinun puolestasi päätellä, mikä on oikea sekvenssipdflatex
- jabibtex
-komentoja.Käytetään sopivaa kehitysympäristöä, esim. VS Code -kehitysympäristö ja LaTeX Workshop -laajennus, jotka huolehtivat LaTeX-käännöksestä taustalla ja tarjoavat myös mahdollisuuden esikatsella valmista PDF-dokumenttia näppärästi Overleafin tapaan.
Käytetään Overleafia, joka huolehtii kaikesta tästä käyttäjän puolesta. Kokeile! Voit lisätä Overleaf-projektiisi myös BibTeX-tiedostoja.
Joka tapauksessa on etenkin ongelmatilanteiden selvittämiseksi erittäin hyödyllistä ymmärtää myös hiukan siitä, mitä pellin alla tapahtuu, vaikka käyttäisikin erilaisia LaTeX-kääntämistä helpottavia aputoimintoja.