Könyvírástudásom fejlődése

Elkészült a harmadik könyvem, és ennek alkalmából végiggondoltam, miként fejlődött  a könyvírási képességem.

Nem, nem a stílusomról lesz szó; ám ha a stílus mégis szóba kerül, akkor csakis az ún. style sheet kapcsán. Ugyanis mindhárom könyv csak elektronikus formában került létrehozásra és publikálásra, a nyomdagépeket mellőzve és a papír alapanyagát adó erdőket megkímélve.
Egyébként a könyvszekrényem roskadozik a rengeteg hagyományos könyv súlya alatt, amelyek közül egyre ritkábban, talán csak két-három havonta lapozok már fel egyet-egyet. Ilyenkor azt előzőleg kiviszem az udvarra, ahol többször sebesen átpörgetve a lapokat megszabadulok az enyészet évtizedek alatt felgyülemlett poros jelenlététől. Még roskadoznak a polcok, de évek óta nem nő rajtuk a teher, új kötetek számára már hely sem lenne. Számos könyv sorsa meg is pecsételődött; régen nagy becsben állottak, kitüntetett figyelemben és gondoskodásban volt részük, de ennek mostanra vége. Már nem pótolhatatlanok, és ha valamelyik mégis hiányozna, nem kellene a Múzeum körúti antikváriumokban vagy a könyvtárellátó vállalat akciós lerakataiban vadászni rájuk, mint ahogy azt egyetemista koromban tettem. Van belőlük "tartalék", azaz biztonsági másolat. És manapság egyszerre a hónom alá csaphatom az egész elektronikus könyvtáramat a tablet vagy a laptop magamhoz vételével.

Lehet, hogy ennek az írásnak mégsem ezt a címet kellett volna adnom; a "fejlődés" olyan nagyzoló, talán a "változás" jobban fedi a valós állapotot. No, mindegy, vegyük sorra a műveket.

Az első könyv

Négy éve hogy megírtam. Programozási tankönyv lévén, már az elkészítésének legelső halvány gondolatának felmerülésekor eldöntöttem, hogy ha egyszer nekikezdek, akkor csakis elektronikus formában fogom megalkotni. A témája miatt ez természetesnek tűnt, hiszen programozni úgy lehet a legjobban megtanulni, ha az ember a gép mellett ül és rögtön ki is próbálja az olvasottakat. A két legelterjedtebb könyvpublikációs formátum, a PDF és az EPUB  közül kellett választanom. Valahogy az EPUB idegen volt számomra, nem is tartottam igazán könyvformátumnak, olyan "webes szaga" volt. Még normális oldalszámozást sem lehet benne létrehozni, meg micsoda dolog már, hogy az ember a linkek segítségével ide-oda ugrálhat, ahelyett, hogy csak komótosan, az író által "vezérelten" haladhatna előre az olvasmányban. Persze nem kötelező linkeket használni, na, mindegy... Meg akkoriban nem találtam gyors, számomra kényelmes e-könyvolvasó programot Linuxra, amin dolgoztam; ráadásul még az állomány is méretesebb lesz, mint a másik formátumban. A PDF viszont fix oldalmérettel rendelkezik, mint egy "normális" könyv, rendes oldalszámozással bír stb.; persze ebbe is el lehet helyezni linkeket, na de mindegy... Még az is az elfogultságomat erősítette, hogy ha a "kalózok" módosítani szándékoznák az én briliáns művemet, akkor a PDF-formátum nagyobb védelmet nyújt. Az sem tántorított el a választásomtól, hogy tudtam, a vágólap használata a forráskódok átmásolásánál problémás lesz, mert a PDF "megeszi" a sor eleji behúzásokat, mivel nem tárolja el a "space"-eket, hanem csak "kimilliméterezi" hol kell kezdeni az első nem-szóköz karakter megjelenítését. Ez bizony az átmásolt pythonos forráskódot használhatatlan teszi; de ezen nem akadtam fel, mert úgy véltem, hogy a tanulást nagymértékben segíti, ha az olvasó a saját kezével begépeli az egész kódot. Meg hát azok amúgy is elég rövidek voltak, tehát még külön állományként sem szükséges őket a könyvhöz csatolni.

Csodálatos kép lebegett a lelki szemeim előtt: egy izgalmas szerkezetű, szövegdobozokat, táblázatokat és képeket körülfolyó szöveg.
Mivel Linuxon dolgoztam (és dolgozom) nyílt forrású programokkal, így a LibreOffice Writer-t választottam  szövegszerkesztőnek, ami mindent tudott, amit megkívántam valósítani, és bármikor egy gombnyomásra legenerálta a PDF-állományt. Azaz mégsem tudott mindent, mert a forráskódokat, amiket a *Geany*-vel állítottam elő, még a pygmentize nevű programmal előbb szintaxis színezésű RTF-formátumba kellett konvertálnom, amit azután a vágólapon keresztül bevittem a Writer-be. A rajzokat a LibreOffice Draw-val alkottam meg.
Mindent kipróbáltam, és minden működött. Belevetettem hát magam a munkába, igyekeznem kellett, mert időre el akartam készülni. Valójában nem volt megszabott határidő, nem rendelésre vagy szerződés alapján dolgoztam, hanem elsősorban a gyerekeim számára. A könyvpiacon nem találtam minden, az általam elvárt igényeket kielégítő magyar nyelvű programozási tankönyvet, így magamnak kellett azt megírnom. El szerettem volna készülni arra az időre, amikorra a gyerekeimnek tanulmányaik során szükségük lehet rá.
Láttam, hogy sok munka áll előttem, ezért nagyon kellett igyekeznem. És a nagy sietségnek megfizettem az árát. Nem hagytam elegendő időt magamnak a Writer alapos megtanulására, hanem rögtön a lovak közé csaptam. Ahogy haladtam előre, egyre több munkát adott, hogy a szövegdobozok és a köré folyatott magyarázó szövegek jól illeszkedjenek, és hogy az oldal jobb oldalán be tudjam úgy fejezni az írást, hogy a sor ne legyen túl hézagos. Keresgéltem a rokonértelmű, de rövidebb vagy éppen hosszabb szavakat, elhagytam egy-egy névelőt stb.
Nehézkes volt, és bosszantott, hogy ilyen sok időt kellett a formázásra fordítanom, de végül elkészültem, és a sok fáradságért kárpótolt, hogy a könyv elérte célját.

A második könyv

Ez egy teljesen más műfaj, egy tudományos-fantasztikus regény.
Itt nem volt szükség forráskód beillesztésére vagy szövegdobozokra, és képre is csak a címlaphoz és a záróképhez. Szavak formázását (például a bold használatát) is csupán a címek esetén kellett alkalmazni. Tanulva az előző könyvem írásakor szerzett tapasztalatokból, hamar eldöntöttem, hogy egyrészt egy egyszerű szerkesztőprogramot, egy "plain text editor"-t fogok használni, másrészt, hogy a végső formátum majd EPUB lesz.
Semmi bajom a Writer-rel, csak nem arra és úgy használtam, ahogy kellett volna. De egy egyszerű szerkesztővel már igazán semmi sem szabhat határt a gondolataim és a betűk folyamának. Vége már annak a középkornak, amikor a fatálcára ólomból készült festékes betűket rakosgattak, és amikor a fix oldalméret miatt szavakat kellett cserélgetni, névelőket meg elhagyni. Ennek számomra már vége. Áradjon a szöveg minden dimenzióban; aztán majd azt a csekély megkívánt formázást utólag valahogy megejtjük.
Az írást a Geany-vel végeztem, egyetlen nagy fájlt gyarapítva nap mint nap. Előnyösnek tűnt, hogy a fejezeteket nem osztottam külön fájlokba, mert gyakran lapoztam előre a már megírt részekhez, és sokszor kerestem rá korábban felhasznált kifejezésekre; és ez így gyorsabbnak bizonyult, mint több fájl egyidejű nyitvatartása és kezelése. A fájl mérete nem lett vészesen nagy, még az 1 megabájtot sem érte el. Az EPUB-bá alakításhoz a Sigil nevű programot használtam, de előtte írtam egy pár soros Python programot, amely a fájlt fejezetekre tördelte és..., de most jut eszembe, hogy erről egyszer már írtam egy blog-bejegyzést.

A harmadik könyv

Az első könyvem elkészülte után, nagyjából rá egy évre, nyomasztani kezdett a gondolat, hogy azért csak nem lett olyan jó, mint ahogy elképzeltem. A legnagyobb bajom az volt vele, hogy nem sikerült elég olvasmányosra, túl tömör lett, nem elegendően tagolt. De még további évekre volt szükség ahhoz, hogy újra munkába lendüljek. Minek sietni? Lassan járj, tovább é[lr]sz. Ha gyorsan elvégeznék mindent, akkor mi a francot kezdenék magammal a következő háromszáz évben? (De lehet, hogy ezt a mondatot az előző részhez, a sci-fi-hez kellett volna beszúrnom.)
Egy szó mint száz, nekiálltam, és fél éves munka eredményeként a napokban meg is jelent az új kötet, mint második kiadás. Ez egy teljesen új átirat, alig maradt benne néhány mondat az eredeti könyvből, az ismeretek közlésének sorrendje is teljesen megváltozott, és az anyaga jelentősen kibővült. Mondhatom, hogy ez 99%-ban egy új könyv.
Ezt megint másképp írtam, mint az előző kettőt. Nagy segítségemre volt a munkában a drága Kate; a feleségemnek nem volt ellenérzése a kapcsolatunkat illetően, de gyakran nehezményezte, hogy már egy ideje kevesebb időt töltők vele. Szerencsére a családi béke nem forgott veszélyben, ugyanis Kate egy "plain text editor", aki miatt csak Geany-vel szakítottam.
Még az elején, amikor már majdnem belefogtam az írásba, ismét megjelent előttem ugyanaz a csodálatos kép, ami az eredeti mű írásának megkezdése előtt felrémlett: egy izgalmas szerkezetű, szövegdobozokat, táblázatokat és képeket körülfolyó szöveg. Na, álljunk meg!
Elkezdtem töprengeni, miként vegyíthetném az előző két könyv írásakor használt technológiát úgy, hogy hatékonyan tudjak munkálkodni. Mire volt szükségem? Egyrészt valami EPUB-ot előállító eszközre, mert már habozás nélkül ezt a formátumot választottam, másrészt valami olyasmire, ami mégis lehetővé teszi a változatos formázást, de mégsem akasztja meg egy pillanatra sem a kezem alól kiáradó betűk folyamát. A neten történő keresgélés során pár napon belül találtam valamit, ami sikerrel kecsegtetett, majd az annak próbálgatásával-tanulgatásával folytatott egy hét után már megkönnyebbülten dőlhettem hátra.
Előírás, hogy az EPUB-ba csak minimális stílus elemet vigyünk be, mert az e-könyvolvasóban a felhasználó úgyis mindent átdefiniálhat, másrészt a túl bonyolult stílusok esetleg egyik-másik olvasóprogramnak gondot okozhatnak. Átgondoltam a "csodálatos elképzelésemet" úgy véltem, hogy a művet szövegdobozok és táblázatok nélkül, és középre igazított képekkel is el tudom készíteni tetszetős formában.
A választott technológia kulcsszavai tehát: plain text editor, markdown, pandoc, EPUB.

A pandoc egy nagyszerű parancssoros alkalmazás, ami a különféle markdown verziók között képes konvertálni, ezekből többek között EPUB- vagy PDF-formátumú állományt is tud készíteni. A szövegben többféle markdown verzió jelölése keveredhet, akár HTML és LaTeX is lehet benne. Talán ha tíz darab különböző markdown jelet kellett elsajátítanom, amelyekkel már folyamatosan, ide-oda kattintgatás nélkül képes voltam a szövegezéssel egyidejűleg a formázási jeleket is beilleszteni. Nagy könnyebbség volt, hogy a forráskódokat ugyanabban szerkesztőben, a Kate-ben írtam, mint a könyvet, és a szintaxis szerinti színezéshez csak át kellett emelnem a kódot a könyv szövegébe és megjelölnöm, hogy az milyen programozási nyelven íródott; a többit már a pandoc elvégezte: az EPUB-ba a nyelvnek megfelelő színezéssel került be a kód. Azért volt részem némi izgalomban is, mert a pandoc, sajnos, a hibaüzeneteket illetően nem bőbeszédű, és így előfordulhat, hogy a markdownban elkövetett tévesztésekről, mint például a duplikált azonosítókról nem szól, de valahogy mégis előállítja az EPUB-állományt; az e-könyvolvasó pedig ugyancsak átsiklik a problémás rész felett. Ezért létfontosságú, hogy az epubcheck parancssoros programmal ellenőrizzük az állományt.
A pandoc annyira nem szól a hibákról, hogy időnként teljesen magába fordul. De ez nálam mindösszesen csak kétszer történt meg. Az első esetben már az utolsó fejezeten dolgoztam, amikor a pár napnyi munka termésével gyarapított fájlokra ráengedtem a pandocot, ami csak dolgozott, és dolgozott, de hogy mit is csinált, azt nem tudom, mert csak a számítógép áramtalanítása után nyertem vissza az önuralmamat. Hiába nézegettem az utoljára írt szövegrészeket, nem voltam képes rájönni, hol bicsaklott meg a pandoc. Szerencsére ezzel nem sok idő ment el, mert egy gyors elhatározással letöltöttem a program újabb verzióját, ami azután ugyanazt a szöveget rendetlenkedés nélkül feldolgozta. Egy másik alkalommal, amikor már teljesen kész volt a könyv, de még a metaadatokkal ki kellett egészíteni, ugyancsak rossz élményeket szereztem. Az adatokat a leírás szerint többféle formátumban meg lehet adni, de én bármivel is próbálkoztam, azok nem lettek bedolgozva az EPUB-állományba. Végül egy YAML formátumba írt fájl nyert, de csak másodjára. Elsőre a "description" meta tag-hoz nagyjából kétezer karakteres szöveget vittem be, ami nagy illetlenség, és ezért a pandoc rákapcsolódott Paksra. A rendszer újraindítása után (nem Paksról beszélek) a hiba okára a yamlint parancssoros program világított rá.
A pandoc mindig korrekt eredményt produkált, de az elején még nem mindig bíztam benne. Előfordult, hogy egy kisebb módosítás után összehasonlítottam az eredményt az előző EPUB- fájllal, amit úgy vittem véghez, hogy az állományokat kibontottam, lévén azok "csak" ZIP-formátumú fájlok, és a komparálást a meld grafikus programra bíztam (a fiam meg is kérdezte, hogy ugyan miért nem gittel dolgozom, tényleg, miért is nem?).
Az egyik újabb pandoc verzió használata után az e-könyvolvasó program a kódrészleteknél a hosszú sorokat megtörte, ahelyett, hogy görgető sávot jelenített volna meg, ahogy azt én  szerettem. Kiderült, hogy az iBook-ok hibás működése miatt a style sheet kiegészítésre került pár sorral, köztük ezzel: `overflow: visible !important;`. Nos, ez nekem nem kell, mert az iBook-ot nem tekintem elsődleges célplatformnak. Tehát unzip, style sheet szerkesztése, nem kívánt rész törlése, majd zip műveletek következtek egymás után. Az e-könyvolvasóban ránézésre minden rendben volt, így feltöltöttem a PublishDrive-ra, ahol hibás formátum miatt visszautasították. Nézem a hibaüzenetet, hát látom, hogy ez egy epubcheck hibaüzenetnek felel meg; azt meg tényleg nem futtattam előzőleg. Mint kiderült, az EPUB ugyan ZIP-formátumú fájl, de nem lehet tetszőleges a belső struktúrája, például a mimetype nevű fájlnak az archív állományban a legelső helyen kell szerepelnie, és nem lehet tömörített csak beillesztett (stored). Szerencsére a zip programnak meg lehet adni a tömörítendő fájlok nevének listáját az stdin-en keresztül, így a kívánt sorrend felállítható.
A rajzoló programok közül legtöbbször az Inkscape-t alkalmaztam, azután a gimp-et, és egy-két alkalommal, a régi rajzok okán, a LibreOffice Draw-t. A Kate a helyesírás ellenőrzését is elvégzi, ha kívánjuk.
Ízelítőül ide teszem a mkbook.sh nevű szkriptemet:

   

    cd $SRC
    pandoc --verbose  --log=pandoc.log \
                    --highlight-style tango \
                    --number-sections \
                    --toc-depth=4 \
                    -H style_extender.css  \
                    --epub-cover-image=$COVER  \
                    -o $TARGET metadat.yaml $COPYRIGHT [0-9][0-9][0-9]_*.md

Hát így történt.
Mondhatom, hogy ez 0.99 részben egy új könyv. Ha szerénységet mímelek, akkor az új rész csak 0.718, azaz eddig 1+1+0.718 ~ e darab könyvet írtam, így hát kétségtelenül e-könyves író vagyok. De vajon maradok-e?

Hozzászólások

Szép napot!

Felkeltette az érdeklődésem. Én is gyereknek keresek programozás tanuláshoz könyvet.

Hol érhető el, vehető meg a 2 programozás könyve?

Hát igen. Magára vessen, aki szövegszerkesztőt és más (nem arra való) programokat használ könyvek írására...

Én ezért tanultam meg a LaTeX-et. És hogy milyen előnyei vannak, arról itt a HUP-on is elég sokat lehet olvasni.

Az első könyvemre helytálló a megállapításod. A markdown használata a pandoc-kal már "versenyképes"  a LaTeX-kel, főleg, hogy a pandoc a markdown között LaTeX kódot is elfogad, hiszen az is egy markdown változat.

Kérdésem: a LaTeX egy oldalleíró nyelv vagy folyamatos (flow) szöveget is elő lehet vele állítani?

.. a pandoc a markdown között LaTeX kódot is elfogad, hiszen az is egy markdown változat...

Hát ez enyhe túlzás, ha a markdown egy csúzli, akkor a LaTeX minimum egy hidrogénbomba :-)

Kérdésem: a LaTeX egy oldalleíró nyelv vagy folyamatos (flow) szöveget is elő lehet vele állítani?

Gyakorlatilag bármit: 10 nyelvű szótárat, vasúti menetrendet, prezentációkat, posztereket :-)

Példák találhatók pl. itt: https://www.overleaf.com/gallery

Persze ahol legtöbbet használják: matematikai, informatikai és egyéb tudományok (ahol sok a képlet) - itt a megjelenítés precizitását és esztétikai minőségét tekintve verhetetlen.

Elso mondat:

"végig gondoltam" az egy szo.

Tudom ekezet de en nem is irok konyvet.