> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/fi/syvalliset-artikkelit/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# Uusi artikkelisarja: TeX-tokenit ja niihin liittyvät käsitteet—mutta miksi (ja miten)?

Tämä johdantoartikkeli pyrkii selittämään, miksi tämä sarja kirjoitettiin, mitä toivon saavuttavani, sekä tarjoamaan taustatietoa tekniikoista, joita käytetään TeX-tokenien tutkimiseen havainnoimalla TeX-moottorin sisäistä toimintaa. Tälle artikkelille on myös suunniteltu sivu, joka sisältää linkit sarjan kaikkiin artikkeleihin, ja sitä päivitetään antamaan nuo linkit sitä mukaa kuin kukin uusi artikkeli julkaistaan.

### Linkit artikkeleihin

Jokaisessa artikkelissa on joukko linkkejä tämän sarjan muihin artikkeleihin.

* [Mikä on “TeX-token”?](/latex/fi/syvalliset-artikkelit/53-what-is-a-tex-token.md)
* [Mikä on “TeX-token-luettelo”?](/latex/fi/syvalliset-artikkelit/54-what-is-a-tex-token-list.md)

## Taustaa tälle artikkelisarjalle

Tämän artikkelisarjan kirjoittamisen motiivi syntyi, kun luin TeXistä kertovaa materiaalia, jossa monia TeXin toimintoja selitettiin “tokenien”, TeXin “tokenisointiprosessin”, “token-luetteloiden” ja niihin liittyvien käsitteiden, kuten “makrolaajennuksen” ja “laajennettavien komentojen”, avulla. Aina kun törmäsin TeXiin liittyviin selityksiin, jotka oli muotoiltu “TeX-tokenien” termein, mieleeni nousi sama kysymys: mitä tarkalleen ottaen, *on* on TeX-tokeni? Minun oli saatava se selville.

Ensimmäisen artikkelin laajuus ja sisältö, [Mikä on “TeX-token”?](/latex/fi/syvalliset-artikkelit/53-what-is-a-tex-token.md), on luonteeltaan varsin “lähellä rautaa”, niin kuin ohjelmoijat saattaisivat sanoa, eikä ole epäilystäkään siitä, että “TeX-tokenit” voisi luokitella melko esoteeriseksi aiheeksi kirjoittaa: miksi siis nähdä vaivaa? Lopulta teet ratkaisun — tai ehkäpä uskonloikan — että muutkin ovat saattaneet miettiä samaa aihetta ja että on tilaa yhdelle tai kahdelle artikkelille täyttämään joitakin aukkoja. Tavoitteeni on tarjota hyödyllisiä taustaselityksiä, jotka voivat täydentää muuta materiaalia, jota saatat lukea, ja toivottavasti auttaa ymmärtämään paremmin joitakin keskeisiä käsitteitä, jotka tulevat esiin, kun opit TeXistä ja tutustut makroihin ja ohjelmointiin.

On selvää, että blogiartikkelien puitteissa voimme vain raapaista pintaa — ei yksinkertaisesti ole käytännöllistä yrittää selittää kaikkia olennaisia aiheita tai sukeltaa kaikkein sameimpiin vesiin. Välttämättä jätän huomattavasti yksityiskohtia pois ja kuljen hienoa rajaa liiallisen yksinkertaistamisen ja vertauskuvien viemisen äärirajoille asti.

“Kirjoita artikkeleita, joita itse haluaisit lukea” on hyödyllinen ohjenuora, ja olen yrittänyt parhaani mukaan noudattaa sitä kirjoittaessani tätä sarjaa.

## Kun kysymys on esitetty, mitä seuraavaksi?

Välitön haaste oli selvä: miten TeX-tokeneista voi saada tietoa, koska tällaiset yksityiskohdat (tokeneista, tokenisoinnista jne.) ovat syvällä TeX-moottorien ohjelmistokoodissa — niistä ei oikeastaan ole tarkoituskaan huolehtia, ellei tietenkin ole aidosti kiinnostunut juuri näistä yksityiskohdista.

Yksi tapa lähestyä näiden kysymysten selvittämistä on yrittää lukea läpi TeXin alkuperäistä lähdekoodia [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)—ajamalla [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) TeX-dokumentaation poimimiseksi — tai ostamalla kopion kirjasta [Computers & Typesetting, Volume B: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). Ostin painetun kirjan kappaleen! On ehdottomasti erittäin hyödyllistä, että TeXin lähdekoodi on julkaistu kirjan muodossa, ja siellä on tietenkin monia hyödyllisiä selityksiä kauttaaltaan. Knuthin TeX on kuitenkin kirjoitettu Pascalilla, ja luonnollisesti Pascal-lähdekoodi on dokumentoitu Knuthin litteraarisen ohjelmoinnin menetelmällä — koodia esitellään pieninä, helposti sulatettavina paloina. On helppo nähdä, miten Knuthin lähestymistapa dokumentointiin todella auttaa näin monimutkaisen ohjelmiston kuin TeX kohdalla, mutta kirjan lukeminen vaatii silti melko paljon ristiinviittauksia ja sivujen välillä hyppimistä.

Vaikka kirja oli hyödyllinen, se ei yksin riittänyt (minulle) siihen, että olisin saanut paremman käsityksen siitä, mitä tapahtuu, kun TeX luo “tokeneita” — aiheesta olin erityisen kiinnostunut. On vain yksi tapa todella ottaa asiasta selvää: kääntää TeX-ohjelma, suorittaa se pienellä TeX-tiedostolla ja kirjaimellisesti seurata, miten koodi suorittuu TeXin lukiessa ja skannatessa syötettä. TeXin kääntäminen lähdekoodista on melko esoteerista — Pascalin muuntamista C:ksi — mutta seuraavassa osiossa on lyhyt kuvaus sekä linkki henkilökohtaiseen blogikirjoitukseen, jossa asiaa käsitellään yksityiskohtaisemmin.

Toisin kuin XeTeX ja LuaTeX — jotka voivat käsitellä UTF-8-muotoista tekstiä ja tukea Unicode-merkistökoodausta — Knuthin TeX on 8-bittinen moottori, mikä tarkoittaa, että se olettaa syötemerkkien olevan välillä 0–255. Vaikka tämä on tärkeä ero, se ei *olennaisesti* vaikuta keskusteluumme TeX-tokenien kanssa, koska käsittelemme kaikille TeX-moottoreille yhteisiä aiheita ja periaatteita: ne ovat aivan ohjelmiston ytimessä.

## Miten voit tutkia TeX-tokeneita?

Syötetekstistä TeX-tokeneihin kulkevan reitin selvittäminen on ollut minulle varsinainen matka — minun on tunnustettava, että vaihteleva hämmennyksen aste seurasi mukana melkein pysyvänä matkakumppanina: TeX on niin monimutkainen ohjelmisto.

Useiden vuosien ajan (suunnilleen vuodesta 2009 lähtien) olen säännöllisesti kääntänyt LuaTeXin uusimman version sen lähdekoodista — prosessi on varsin suoraviivainen, kiitos tavattoman erinomaisen tavan, jolla LuaTeXin lähdekoodi on jaettu. Tämän kokemuksen perusteella kiinnostuin ymmärtämään paremmin, miten Knuthin alkuperäinen TeX käännetään sen lähdekoodista — *erittäin* erilainen ajatus, koska TeX on kirjoitettu käyttäen Knuthin litteraarisen ohjelmoinnin menetelmää. Tuo oma TeX:n käännös Windowsissa, mutta avoimen lähdekoodin kääntäjiä ja työkalusarjoja käyttäen, tehtiin TeX Live -jakelun ulkopuolella, ja se on itsenäinen projekti. Se vaati myös työkaluketjun rakentamista, joka tarvitaan muuntamaan `tex.web` C-ohjelmaksi, joka voitaisiin kääntää ja sitten suorittaa debuggerissa, jotta nähtäisiin, mitä TeX itse asiassa tekee käsitellessään syötteen merkkejä.

Knuthin alkuperäistä TeXiä käytettiin pdfTeXin, XeTeXin tai LuaTeXin sijaan, koska tarvitsin TeX-version, joka oli lähimpänä kirjassa TeX: The Program painettua lähdekoodia. Kirja julkaistiin ensimmäisen kerran vuonna 1986, ja vaikka TeX on sittemmin kokenut joitakin päivityksiä, TeXin uusin versio (3.14159265, julkaistu tammikuussa 2014) on varmasti riittävän lähellä kirjassa olevaa lähdekoodia.

Knuthin litteraarisen ohjelmoinnin menetelmää heijastaen TeXin lähdekoodi jaetaan tekstimuodossa nimeltä WEB: sekoitus TeX-dokumentaatiota ja Pascal-lähdekoodia. Perusajatus on, että käytät kahta apuohjelmaa, nimeltä TANGLE ja WEAVE, jotka käsittelevät WEB-tiedostoja poimiakseen joko TeX-dokumentaation tai Pascal-lähdekoodin:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) poimii Pascal-lähdekoodin WEB-tiedostosta
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) poimii TeX-dokumentaation WEB-tiedostosta

Mutta ennen kuin poimit Pascal-lähdekoodin, sinun on esikäsiteltävä Knuthin `tex.web` tiedosto, jotta siihen voidaan tehdä useita muutoksia, jotka mahdollistavat TeXin Pascal-koodin muuntamisen C-koodiksi Web2C-nimisellä prosessilla. Tätä esikäsittelyvaihetta kutsutaan *muutostiedostojen soveltamiseksi*.

Knuthin alkuperäistä kooditiedostoa (tex.web) ei saa muokata suoraan millään tavoin; sen sijaan muutokset tehdään niin sanotuilla muutostiedostoilla (tiedostopääte `.ch`) jotka sisältävät muutokset, jotka haluat soveltaa pää `.web` tiedostoon — esimerkiksi `tex.web`. Muutostiedostot yhdistetään Knuthin alkuperäiseen lähdekoodiin — käyttäen lisäapuohjelmaa nimeltä TIE — luodakseen tiedoston, jonka nimi voisi olla vaikkapa `ja tuottaa uusi, koostettu, WEB-tiedosto, jota kutsumme` jonka käsittelet TANGLElla poimiaksesi Pascal-koodin tiedostoon `mytex.pas`. Kun sinulla on asianmukainen Pascal-lähdetiedosto, voit suorittaa Web2C-prosessin viimeiset vaiheet muuntaaksesi sen C-lähdekooditiedostoksi, jonka voit kääntää suoritettavaksi TeX-ohjelmaksi. Jos haluat lukea melko mutkikkaasta Web2C-muunnosprosessista, tästä kirjoittajan [henkilökohtaisessa blogisivustossa](http://www.readytext.co.uk/?p=2529).

Lopputuloksena on TeX-ohjelma, jota voi suorittaa ilmaisella ja erinomaisella [Eclipse IDE:llä C/C++:lle](http://www.eclipse.org/home/index.php) askeltaakseen TeXin C-lähdekoodin läpi ja tarkkaillakseen, mitä tapahtuu sen käydessä syötteesi läpi. Se ei todellakaan ole viihdyttävintä ajanvietettä, koska C-koodi on koneellisesti generoitu ja paikoitellen erittäin vaikealukuista (TeXin lähdekoodi käyttää hyvin runsain määrin GOTO-komentoja ja globaaleja muuttujia). Kirja TeX: The Program on yhä korvaamaton apu C-lähdekoodin hahmottamisessa, vaikka kirja sisältääkin TeXin lähdekoodin kauniisti ladotussa Pascal-koodissa.

Lopuksi tässä on esimerkkikaappaus, joka näyttää TeXin suorittamisen Eclipse IDE:n kautta ja suorituksen ollessa pysäytettynä funktioon `getnext()`—joka on TeXin tokenien muodostusprosessien ytimessä.

![Kuvakaappaus, joka näyttää TeXin suorittamisen Eclipse IDE:n kautta](/files/1cb95cc89a36e4c88b055c75403e231a578fd821)

TeXin C-lähdekoodin läpikäynti avoimen lähdekoodin Eclipse IDE:llä C/C++:lle.

## Päätelmät ja kiitos

Ensimmäisen artikkelin kirjoittaminen ja ajatusten kokoaminen sarjan tulevia blogikirjoituksia varten on varmasti vienyt paljon aikaa. Olen äärimmäisen kiitollinen John Hammersleylle ja Mary Anne Baynesille Overleafilla heidän tuestaan tälle sarjaidealle sekä siitä, että he sallivat minun käyttää tarvittavan ajan lisätaustatutkimukseen. Toivon, että tämä artikkelisarja tunnistaa ja käsittelee onnistuneesti yhteisiä huolenaiheita ja osoittautuu arvokkaaksi niille, jotka sitä lukevat.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/fi/syvalliset-artikkelit/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
