Šablona pro e-knihu v HTML

Ruda Kořínek mě na diskusním fóru požádal, jestli bych nemohl dát dohromady nějaký článek o tom, v jaké podobě vlastně schraňuji elektronické knihy – prostě nějaký template, do kterého by se dal relativně jednoduše „napustit“ text a po nějaké základní konverzi by z toho vznikla použitelná elektronická kniha. Přišlo mi to jako docela zajímavý námět, přestože můj přístup k tvorbě e-knih je právě opačný (začnu s víceméně prostým textem a ten pak obalím vhodným kódem), takže tady máte můj přístup. Netvrdím, že je nejlepší možný ani že bude vyhovovat každému, ale pokud momentálně tápete, třeba vám poskytne inspiraci. Článek vychází ze starších příspěvků HTML jako e-bookový formát a Z papíru do čtečky 5: Technická korektura, takže pokud jste je nečetli, doporučuji začít s nimi. Na druhou stranu jsem se snažil psát tak, aby tu byly čistě praktické záležitosti, které můžete použít i tehdy, pokud vůbec HTML neumíte.

Co budeme potřebovat

Ještě než se pustím do seznamu softwaru, který pro vytváření e-knih používám nebo doporučuji, je třeba zmínit se o jednom: Celý návod předpokládá, že už máte k dispozici text, který už má „rozumnou“ strukturu – to znamená, že v něm už jsou konzistentně vyznačeny začátky a konce kapitol a odstavců, sjednoceny uvozovky atd., prostě a jednoduše už proběhla technická korektura. Je přitom v podstatě jedno, v jakém formátu a jakým způsobem jsou jednotlivé části textu vyznačeny – klidně může jít o prostý text, kde co řádek, to odstavec, a název kapitoly je vyznačen tím, že příslušný řádek začíná zavináčem; podstatné je jenom to, aby to vyznačení bylo v celém textu pořád stejné: například aby každý řádek začínající zavináčem byl nadpisem nové kapitoly a nedošlo k tomu, že kapitola „První potíže“ byla uvedena jako dva řádky „@První“ a „@potíže“.

Pozn.: Šlo by se obejít i bez tohoto požadavku, ale v takovém případě budete muset všechno dělat ručně. Pokud jde o části, které se vyskytují poměrně zřídka (například právě názvy kapitol), tak to není problém, ale speciálně běžný text to chce mít ve zmíněné podobě; pokud to tak nemáte (například jste si stáhli z internetu Karla Maye v PDB, kde tvůrce preferoval přístup „celá kapitola je v jednom odstavci“), je jednodušší a rychlejší soubor zahodit a začít u papírové knihy a skeneru.

Pokud už je požadavek na „rozumný vstup“ splněn, zbytek je poměrně nenáročný. Budete potřebovat nějaký programátorský editor nebo editor podobného typu – musí pracovat s čistě textovými soubory (nevytvářet žádné svoje hlavičky nebo značky, takže zapomeňte na všechny Microsoft Officy, Open Officy a podobné produkty; je lepší se vyhnout i editorům, které jsou vizuální jen „napůl“, jako je Frontpage, Dreamweaver nebo e-bookový Sigil), musí umět vyhledávání a nahrazování, a to pokud možno s využitím regulárních výrazů, měl by zvýrazňovat syntaxi a pokud možno „vizuálně“ zalamovat řádky. Možností je spousta, můžete zkusit PSPad českého autora, libovolnou náhražku Notepadu (Notepad++ apod.) nebo cokoliv jiného. Osobně používám kombinaci FAR Manager (s pluginem Regular Expression Search and Replace) pro „hrubou práci“ a SciTE pro „jemné doladění“. Podstatné je jen to, abyste v dotyčném editoru dokázali udělat požadované operace – zejména upozorňuji na to, že každý editor používá trochu odlišnou implementaci regulárních výrazů, takže pokud budete chtít regulární výrazy použít, musíte buď použít kompatibilní implementaci nebo si ty výrazy přepsat do implementace „své“.

Formát souboru

Důvody, proč jsem zvolil pro ukládání knih formát*) HTML, jsem už uvedl ve článku HTML jako e-bookový formát, takže se nebudu zbytečně opakovat. Zmíním jen jednu věc, kterou jsem tehdy pominul: proč použít přímo čisté HTML a ne nějaký odvozený nebo podobný formát, který by mi dovolil sjednotit některé HTML struktury. V dalším textu například uvidíte, že pro vyznačení kapitoly musím napsat docela hodně textu, přičemž jeho většina je pořád stejná – nešlo by použít nějaký formát, ve kterém bych jenom použil nějakou jednoduchou značku „tohle je kapitola“ a ten formát už by mi veškerou obsluhu (dopsání společného textu, vygenerování tabulky obsahu, vytvoření odkazů) udělal sám? Šlo, celkem snadno – mohl bych použít XML, které má strukturu velmi podobnou jako HTML, ale dovoluje mi snadno vytvářet moje vlastní značky, nebo PHP, kde bych si ty opakované části napsal jako procedury. Mělo by to i nezpochybnitelné výhody – lepší konzistenci, snadný přechod na jiný typ vyznačkování atd. Mělo by to bohužel také nevýhody. Dvě hlavní jsou ty, že a) soubor knihy by nebyl přímo použitelný, vždy by musel projít nějakou konverzí (na knihy, jak je mám teď, mohu poklepat a ony se zobrazí v prohlížeči v podstatě stejně, jako bych je viděl v e-booku), a hlavně b) dříve či později narazíte na to, že zvolený zápis není dostatečně univerzální, takže ho začnete rozšiřovat, aby vyhovoval i nejnovějším požadavkům, a postupně zjistíte, že z toho máte stejně složitou konstrukci jako v původním HTML, ale bez jejích výhod (například zjistíte, že místo obyčejné knihy zpracováváte soubor povídek a tam je u každé kapitoly potřeba doplnit autora a rok napsání). Nicméně ano, jde to, a dokud nenarazíte na tyto zvláštní případy, pracuje se s XML i PHP docela dobře.

1) Tedy, on je to spíš jazyk než formát, ale pro účel tohoto článku jde o nepodstatné rozlišení.

Adresářová struktura

Ještě než se pustím přímo do vyznačování obsahu, pár slov k tomu, jak vlastně soubory e-knih organizuji. Postižen svým DOSovým původem jsem zvolil hierarchickou adresářovou strukturu, začínající dejme tomu adresářem D:\Knihy. V tomto adresáři jsou vytvořeny adresáře pro jednotlivé autory (např. May Karel) nebo pro „tematické celky napříč autory“ (např. _Časopisy nebo _Kompilace). v nich jsou pak adresáře pro jednotlivé série (např. Ve stínu Pádišáha v Karlu Mayovi) nebo další rozdělení (v časopisech třeba adresář pro jednotlivé časopisy, abych neměl na jedné hromadě Weird Tales a Excalibur). Následují podsérie atd., až nakonec na nejnižší úrovni se nacházejí přímo jednotlivé knihy. Na každé úrovni navíc mohou být „společné soubory“, které jsou nějakým způsobem (k tomu ještě dojdu) využity ve všech knihách pod nimi – tzn. v hlavním adresáři Knihy bude například soubor popisující základní formátování všech knih, zatímco v adresáři Knihy\Pratchett Terry\Zeměplocha bude formátovací předpis postihující konkrétní zvláštnosti knih ze série Úžasná Zeměplocha (např. mluvení Smrtě nebo golemů).

Značkování knihy v HTML

Konečně se dostáváme k jádru článku, totiž jak knihy značkuji. Jak už víte, používám HTML, respektive jeho velmi malou podmnožinu. Mohl bych použít i složitější konstrukce, ale zatím jsem nenarazil na knihu, kde bych to opravdu potřeboval – v drtivé většině beletrie je použito jen několik málo základních struktur, na které mnou použitá podmnožina HTML bohatě stačí. I v případě, že HTML vůbec nerozumíte, s jejich použitím dostanete docela přijatelně vypadající a hlavně univerzálně použitelné knihy, jejichž vzhled můžete dále zlepšovat podle toho, jak se budete seznamovat s dalšími podrobnostmi HTML a CSS.

Prostý text

Prostého textu je v běžné knize nejvíc a proto ho vyznačuji co nejjednodušeji. Až na naprosté výjimky si vystačím se zápisem:

<p>Tohle je text odstavce. Může mít kolik vět chce, důležité je jen to, abych správně vyznačil začátek a konec.</p>

Odstavec může být rozložen přes libovolný počet řádků, ale aby se dobře zpracovával, důrazně doporučuji držet se systému „jeden odstavec textu = jeden řádek v e-knize“. Text by neměl začínat žádnými mezerami ani tabulátorem (odsazení se zařídí „hromadně“ pomocí CSS předpisu).

Kapitoly

Pro vyznačení kapitol používá jazyk HTML symbolů <h1><h6> pro vyznačení začátku nadpisu a odpovídající </h1></h6> pro jeho konec; přitom h1 značí nadpis, nejvyšší úrovně, h2 je o trochu nižší atd., až h6 je úplně nejnižší. Mě se pro běžné kapitoly osvědčuje používat h2 a případně h3 pro podkapitoly (v románech se moc nevyskytují, ale setkáte se s nimi například v Černých baronech, a dost běžné jsou ve sbírkách povídek, kde se kapitoly týkají právě jednotlivých povídek, zatímco na úrovni sbírky jako celku jsou „kapitolami“ právě jednotlivé povídky). V zásadě by tak šlo použít zápis v podobě <h2>Nadpis kapitoly</h2>, to však postihuje právě jen nadpis kapitoly, ale už to nevyznačuje, kde která kapitola začíná a končí; logicky se sice nabízí, že kapitola končí tam, kde začíná kapitola nová, ale to se špatně strojově zpracovává. Navíc potřebuji nějaký symbol, který mi umožní sestavit tabulku obsahu. Pro vyznačení kapitoly proto používám poněkud delší sekvenci:

<div class="chapter">
<h2 id="chapter-1">Název kapitoly 1</h2>
<p>První odstavec kapitoly 1.</p>
<p>Druhý odstavec kapitoly 1.</p>
<p>...</p>
<p>Poslední odstavec kapitoly 1.</p>
</div>

Případně pro podkapitoly:

<div class="chapter">
<h2 id="chapter-1">Název kapitoly 1</h2>
<h3 id="chapter-1-1">Podkapitola 1</h3>
<p>První odstavec kapitoly 1.1.</p>
<p>Druhý odstavec kapitoly 1.1.</p>
<p>...</p>
<h3 id="chapter-1-2">Podkapitola 2</h3>
<p>První odstavec kapitoly 1.2.</p>
<p>...</p>
<p>Poslední odstavec kapitoly 1.</p>
</div>

Pozn.: Držím se anglického obsahu id víceméně ze setrvačnosti, není žádný zásadní důvod, proč nepoužít i českou verzi – snad kromě toho, že Calibre některé standardní (pochopitelně anglické) obsahy detekuje a používá. Klidně můžete použít třeba id="kapitola-1", jestli se vám líbí víc, jen je vhodné omezit svou tvořivost jen na písmena latinské abecedy (tj. bez háčků a čárek), číslice, mínus a případě podtržítko. A i když to u knih vyplývá z logiky věci, neuškodí napsat výslovně, že každý id="..." může být v HTML souboru jen jednou, nikdy se nesmí opakovat.

Obrázky

Pokud kniha obsahuje obrázky, uložím je do samostatného podadresáře ve vhodném formátu (dvoubarevný PNG pro černobílé obrázky, JPEG pro barevné a šedoškálové) a do knihy je zakomponuji jedním ze tří základních způsobů:

  1. Nepopsaná ilustrace

    Jde o půl- až celostránkový obrázek, který má v čtenáři navodit náladu. Není přímo spojen s konkrétním místem v knize.

    <div class="image"><img src="./podadresar_s_obrazky/obr-1.jpg" alt="" /></div>
  2. Popsaná ilustrace

    Opět velký obrázek, ke kterému je ale uveden konkrétní popisek. Běžné to je u odborné literatury, ale lze se s tím setkat i v beletrii (například u Verneovek).

    <div class="image"><img src="./podadresar_s_obrazky/obr-1.jpg" alt="Popisek v prostém textu" /><p>Popisek i s možnostmi zvýrazňování textu nebo víc odstavců popisu.</p></div>
  3. Obrázek uvnitř toku textu

    Jde o poměrně vzácný případ, kdy je přímo v toku textu použit buď úryvek v nějakém exotickém jazyce (hebrejština, čínština), speciálně zapsaný text v běžném jazyce (např. „dětské písmo“), nebo nějaký symbolický zápis (např. šachová notace s obrázky figurek místo písmenkového značení). V takovém případě dodržuji vložení obrázku do toku textu (předchozí případy tok přeruší a vloží obrázek) s tím, že v popisku je vyznačeno, co vlastně obrázek znamená.

    <p>Nějaký text .... <img src="./podadresar_s_obrazky/obr-1.jpg" alt="Textová podoba obrázku" /> ... pokračování textu.</p>

Všimněte si, že se v prvních dvou případech opět snažím dodržet pravidlo „1 obrázek = 1 řádek v e-knize“, zatímco v posledním případě je obrázek přímo vložen do odstavce. To, co je uvedeno v uvozovkách v src="..." je adresa obrázku (tj. pokud obrázek vložím do adresáře 20000mil pod název chobotnice1.jpg, použiji src="./20000mil/chobotnice1.jpg"), alt="..." obsahuje textový popis obrázku (např. pro případ, že bych obrázek samotný ztratil nebo nedokázal rozeznat, co to má znázorňovat).

Citáty

Někteří autoři mají v oblibě kapitoly (nebo knihu jako takovou) začínat nějakým vhodným citátem nebo citáty – za příklad poslouží Jak jsem vyhrál válku od Patricka Ryana, dalším příkladem jsou poznámky v kompilacích, kterými editor kompilace uvádí každou povídku. Obvykle následují hned za titulkem kapitoly, ale v zásadě se mohou vyskytovat i jinde. Pro jejich zápis používám následující formát (i s hlavičkou kapitoly, aby byl dobře vidět ten nejběžnější případ):

<div class="chapter">
<h2 id="chapter-1">Kapitola 1</h2>
<blockquote class="citat">
  <p>První odstavec prvního citátu</p>
  <p>Druhý odstavec prvního citátu</p>
  <p class="autor">Označení autora a původu citátu</p>
</blockquote>
<blockquote class="citat">
  <p>První odstavec druhého citátu</p>
  <p class="autor">Označení autora a původu citátu</p>
</blockquote>
...
<p>První odstavec kapitoly.</p>

Místo <blockquote class="quote"> by se dalo použít jenom samotné <blockquote>, které už samo o sobě označuje citaci, ale za chvíli uvidíte, že tag <blockquote> používám i v dalších situacích a je vhodné jednotlivé typy odlišit pomocí vhodného class="...".

Básně, písně

Básně i písně se mohou vyskytovat buď v pozici citátu (viz výše), mohou tvořit vlastní text kapitoly v případě povídkových sbírek, případně se mohou vyskytnout uprostřed prózy, když si třeba některá postava něco prozpěvuje. Ve všech případech používám identický zápis, který opět využívá <blockquote>:

<blockquote class="basen">
  <p>První verš první sloky<br />
     Druhý verš první sloky<br />
     ...<br />
     Poslední verš první sloky</p>
  <p>První verš druhé sloky<br />
     ...
     ...</p>
</blockquote>

Dopisy, nápisy, vizitky…

Pro všechny vložené textové bloky používám opět <blockquote> s příslušně nastaveným class="...". Tzn. například:

<blockquote class="dopis">
  <p>Drahý pepaku,</p>
  <p>tvůj web nestojí za nic.</p>
  <p class="autor">Anonym</p>
</blockquote>

Zvýrazněný text

V překvapivě hodně knihách se používá zvýrazněný text, obvykle v kurzívě. Typické použití je pro zvýraznění názvů (knih, lodí, atd.), myšlenek hrdinů (ve sci-fi často telepatie) nebo cizích, vymyšlených a úmyslně zkomolených slov, ironie, a pochopitelně i „obyčejného“ zvýšení hlasu. Obvykle jde o jednotlivá slova nebo věty uvnitř odstavce, které vyznačuji pomocí tagu <em>, případně s vyznačenou hodnotou class="...":

<p>Vesmírná loď <em class="nazev">Atlantis</em> plula pomalu prostorem. <em class="myslenky">To jsem zvědav, kdy se rozpadne,</em> pomyslel si pozorovatel. <em class="myslenky">Jsem rád, že <em>já</em> na ní nejsem.</em></p>

Všimněte si toho <em>já</em> – jde o „běžné“ zvýrazněné slovo uvnitř myšlenek; zvýraznění se může vnořovat, i když v případě knih určených pro konverzi programem Calibre to má nepříjemné vedlejší efekty (zvýraznění skončí hned po prvním </em>) – ale třeba bude Calibre časem opraveno.

Vesměs tímto způsobem zvýrazňuji i text, který v knize není uveden přímo kurzívou ale nějakým jiným speciálním tvarem – v Zeměploše například Smrťovu přímou řeč:

<p><em class="zp_smrt">Ho, ho, ho,</em> řekl Smrť.</p>

Tady ale nejsem úplně přesvědčen o správnosti svého řešení – znamená to, že kurzívu musím odstraňovat a nahrazovat něčím jiným. Ne že by to byl problém, ale… Zase na druhou stranu, i kdybych zobrazil jen samotné HTML bez CSS stylů, budu díky výchozímu formátování obsahu elementu <em> upozorněn na to, že se děje něco zvláštního, zatímco při použití „neutrálního“ <span> bych tu informaci nedostal.

Poznámky pod čarou

HTML nemá žádný mechanismus pro vytvoření opravdové poznámky pod čarou, ale to nás nemusí až tak trápit, protože tento mechanismus nemá žádný e-bookový formát a ani žádná čtečka. Díky existenci odkazů ale lze prakticky stejného efektu dosáhnout „poznámkou na konci dokumentu“. Uvnitř textu vyznačím, že na daném místě je odkaz na poznámku:

<p>Zvolil jsem formát<a class="poznamka" id="poznamka-1-zpet" href="#poznamka-1">1</a> HTML<a class="poznamka" id="poznamka-2-zpet" href="#poznamka-2">2</a>.</p>

Někde za koncem dokumentu potom vytvořím seznam jednotlivých poznámek:

<ol id="poznamky">
  <li id="poznamka-1">
    <p>On to vlastně není formát ale jazyk, ale to je pro nás lhostejné.</p>
    <p><a href="#poznamka-1-zpet">Zpět</a></p>
  </li>
  <li id="poznamka-2">
    <p>Hypertext Markup Language.</p>
    <p><a href="#poznamka-2-zpet">Zpět</a></p>
  </li>
</ol>

Všimněte si, jak jsou „křížově“ uspořádány obsahy atributů id a href: href="#něco" říká, že odkaz skočí na místo, které je označeno pomocí id="něco".

Poznámky pro uživatele Sony Readerů:

  1. PRS-505 obsahuje tlačítko „Zpět“ (šipka vlevo na pravém „joysticku“), takže v zásadě není potřeba vůbec vytvářet ani jeden kód pro poznamka-1-zpet. Protože ale jiné čtečky touto funkcí nedisponují, je lepší tento nadbytečný kód přeci jenom psát (ale přiznám se, sám to nedělám – až to budu potřebovat, vhodným regulárním výrazem to ve všech mých knihách udělám najednou; teď by to stejně nefungovalo, protože poznámka 2).

  2. Formát LRF umí udělat odkazy celkem kamkoliv, ale pak na ně neumí skočit. Pokud plánujete používat LRF jako svůj cílový formát, je lepší dát id="poznamka-1" k prvnímu <p> poznámky, a obdobně id="poznamka-1-zpet" dát k <p>, ve kterém je odkaz umístěn:

    <p id="poznamka-1-zpet">Zvolil jsem formát<a class="poznamka" href="#poznamka-1">1</a> HTML.</p>
    ...
    <ol id="poznamky">
      <li>
        <p id="poznamka-1">On to vlastně není formát ale jazyk, ale to je pro nás lhostejné.</p>
        <p><a href="#poznamka-1-zpet">Zpět</a></p>
      </li>
    </ol>

    Tento zápis ostatně funguje všude, takže i když formálně vzato není ideální, je lepší mu dát přednost.

Hlavička knihy

Tím jsem probral všechny hlavní komponenty elektronické beletrie. Zbývá jenom jedno – obalit vlastní text knihy správnou „obálkou“, která řekne, „já jsem správný HTML soubor“. Drtivá většina této obálky je fixně daná a v mých knihách má následující tvar:

<?xml version="1.0" encoding="windows-1250"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250" />
<title>Pouští</title>
<meta name="author" content="Karel May" />
<meta name="translator" content="František Dušek" />
<meta name="@include" content="../_may.inc" />
<meta name="*:--title" content="Pouští" />
<meta name="lrf:--title-sort" content="POUSTI" />
<link rel="stylesheet" href="../_may.css" type="text/css" />
</head>

<body>
<div class="header">
<h1 class="title">Pouští</h1>
<h1 class="subtitle">Ve stínu pádišáha 1</h1>
<h1 class="author">Karel May</h1>
<h1 class="year">1880-81</h1>
</div>

<div class="toc">
<h2>Obsah</h2>
<ol>
  <li><a href="#chapter-1">Mrtvý ve Vádí Tarfáví</a></li>
  <li><a href="#chapter-2">Jízda smrti</a></li>
  <li><a href="#chapter-3">Soudnictví na Východě</a></li>
  <li><a href="#chapter-4">V moci Ibrahíma Ma'múra</a></li>
  <li><a href="#chapter-5">Podivuhodné setkání</a></li>
  <li><a href="#chapter-6">Únos</a></li>
  <li><a href="#chapter-7">U Faraónova moře</a></li>
  <li><a href="#chapter-8">Otec šavle</a></li>
  <li><a href="#chapter-9">Můj věrný Halef</a></li>
  <li><a href="#chapter-10">U Atejbů</a></li>
  <li><a href="#chapter-11">V posvátné Mekce</a></li>
  <li><a href="#chapter-12">Na Tigridu</a></li>
  <li><a href="#chapter-13">Ríh</a></li>
  <li><a href="#chapter-14">Na výzvědech</a></li>
  <li><a href="#chapter-15">Atejbové přicházejí</a></li>
  <li><a href="#chapter-16">Bitva v poušti</a></li>
  <li><a href="#chapter-17">Hrůzný objev</a></li>
  <li><a href="#chapter-18">U mosulského paši</a></li>
  <li><a href="#chapter-19">U vyznavačů ďábla</a></li>
  <li><a href="#chapter-20">Velká slavnost</a></li>
</ol>
</div>

Co není fixní a je třeba upravit pro každou jednotlivou knihu:

  • Řádek 6: Mezi <title> a </title> je název knihy, jak se zobrazí například v titulku okna prohlížeče.

  • Řádky 7, 8: V podstatě nejsou potřeba, mám je tam jen proto, aby informace o autorovi knihy byla dostupná i prohlížeči, kdyby o ni měl náhodou zájem.

  • Řádky 9 až 11: Parametry pro můj konverzní program H2LRF, kterým můžu celou knihovnu zkonvertovat do zvoleného cílového formátu jediným příkazem. Detaily o tom, jak tyto parametry fungují, jsou uvedeny v odkazovaném článku.

  • Řádek 12: Tímto příkazem načtu CSS stylopis nacházející v souboru ../_may.css (to je jediná měněná část řádku), kde mám nastavení pro vykreslování všech Mayovek. Tento soubor následně volá další soubor ../../common.css, kde jsou vykreslovací parametry pro všechny knihy. Někde v procesu konverze (konkrétně při zpracování utilitou H2LRF) se vkládá ještě jeden ze souborů ../../common.lrf.css nebo ../../common.epub.css, kde jsou parametry pro jednotlivé formáty (pro EPUB například nastavení českých fontů podle článku o češtině v EPUBu).

  • Řádky 17-20: Tvoří standardní úvodní stránku mnou zpracovaných knížek. Význam je asi zřejmý z obsahu.

  • Řádky 26-45: Tabulka obsahu na začátku knihy (mohla by být i na konci, pochopitelně). Je dobré ji mít i proto, že z ní Calibre dokáže snadno vygenerovat obsah, který se zobrazí přímo v menu čtečky. Způsob jejího zápisu je snad také zřejmý, nabídnu jen fintu, jak celý seznam vygenerovat skoro úplně automaticky: Napřed na příkazovém řádku napište a spusťte příkaz: type soubor_knihy.htm | find "<h2 " >soubor_knihy.xxx. Následně si nově vzniklý soubor soubor_knihy.xxx otevřete v editoru podporujícím regulární výrazy a nechte výraz <h2 id="(.*)</h2> nahradit výrazem <li><a href="#$1</a></li> a máte celý vnitřek tabulky obsahu, i s odsazením 🙂

Patička knihy

Proti hlavičce je patička zcela triviální a hlavně vždy stejná:

</body>
</html>

Když je kniha hotová

Když je kniha hotová, je velmi vhodné otevřít si W3 Validátor a tu knihu mu podstrčit. Pokud zobrazí zelené „VALID“, je kód v pořádku. Pravděpodobně ale zobrazí desítky až stovky (nebo taky tisíce) chyb. Z toho si nemusíte nic dělat – pravděpodobně je někde v knize zapomenutý uzavírací tag nebo tak něco, a po jeho opravení značná část chyb zmizí. Prostě si najděte první chybu, kterou Validátor oznámil, najeďte si na příslušný řádek ve svém souboru a podívejte se, co vám tam chybí nebo přebývá. Po opravení pošlete celý soubor validátoru znovu a postup opakujte tak dlouho, dokud nedostanete kýžené „VALID“.

Download

Nabízím vám ke stažení svoje ověřené CSS (vykreslovací) a INC (konvertovací) soubory. I když se vám moje vykreslování nebude líbit, můžete je použít jako inspiraci, jak by to třeba mohlo vypadat. Podrobné rozepsání bude případně předmětem nějakého budoucího článku (ovšem jen v případě INC souborů, na vysvětlování CSS se opravdu necítím – zaběhněte radší na web Jak psát web, tam je to popsáno dost srozumitelně, včetně rozsáhlého seznamu možných pravidel).

Pozn.: CSS soubory jsou psané na anglické obsahy class="...", ale to si jistě dokážete snadno opravit.

Závěr

Každý z nás máme jiný pohled na to, jak by měla elektronická kniha vypadat, a co se líbí jednomu, nemusí se líbit dalším. Neberte proto tento článek jako dokonalý návod na tvoření knih, ale spíš jako námět, na jehož základě si sami vytvoříte vlastní formátovací šablonu. Odměnou vám budou knihy, které se vám samotným budou líbit.

Ve článku jsem se vůbec nedotkl několika oblastí, které budou předmětem dalších článků. V první řadě bych chtěl co nejdříve navázat článkem, ve kterém vezmu soubor, jak vylezl z OCR programu, a názorně na něm ukážu, jak ho zpracovat pomocí návodu v technické korektuře a tohoto článku k dosažení přijatelného výsledku, který už se dá nahrát do čtečky a začít opravovat obsahově. Termín nedokážu říct, už mám sice připravený vhodný materiál, ale provedení těch oprav není zase časově až tak nenáročné; doufám ale, že to zvládnu do konce ledna.

Dále bych se rád podrobně podíval na problematiku uvozovek v HTML knihách, kterou jsem v tomto článku ani nezmínil a v technické korektuře naznačil jen velmi obecně. Zdaleka totiž nejde o jednoduchý problém, jak uvidíte. Popravdě řečeno, ideální řešení jsem dosud nenašel, ale třeba vás napadne něco, co mě nenapadlo. Uvidíme.

No a pochopitelně, pokud budou nějaké dotazy, můžeme je také probrat.

Podobné příspěvky:

28 Responses to “Šablona pro e-knihu v HTML”

  1. avatar pepak napsal:

    Milan: Ano. S osmibitovým kódováním se mi líp pracuje: například v konzoli, ve které provádím většinu editací, je jen omezená množina znaků, které jde zobrazit. Editor samozřejmě dokáže odlišit různé unicode znaky, ale všechny je zobrazí pod jedním symbolem. No ale já potřebuju vědět, jestli " je " nebo nebo nebo . Nebo například moje starší programy pracují s ANSI a zatím jsem neměl potřebu je předělávat, protože jsem nenarazil na knihu, kde by mi ANSI nestačilo. Tzn. důvody nejsou v tom, co by čtečky dokázaly zobrazit (těm je to jedno, resp. Calibre, kterým kniha stejně napřed projde, je to jedno), ale v tom, jak mám vytvořené procesy pro vytváření těch knih. Není důvod, proč by někdo jiný nemohl použít UTF8.

  2. avatar Milan napsal:

    Máte nějaký konkrétní důvod, proč neděláte e-booky v UTF-8 ale používáte obskurní kódování win-1250? Kindle s utf-8 nemá žádný problém, čtečky v mobilech by s tím také problém mít neměly, tak snad Sony nebo Hanka (hanlin)?

  3. avatar JirkaS napsal:

    Jo, dobry napad. Staci pridat <meta "lrf:–autors" s odstranenou diakritikou a je to, ze? Asi se do toho pustim. Dik za radu.

  4. avatar pepak napsal:

    Šlo by to, ale radši bych se do toho nepouštěl. To už stejně dobře můžeš udělat příslušnou změnou v zdrojovém souboru v parametrech pro H2LRF a aspoň budeš mít jistotu, že se to odstraní správně.

  5. avatar JirkaS napsal:

    No ja jsem myslel odstranit diakritiku ze jmena autora pro LRF.

  6. avatar pepak napsal:

    V ColBuildu to zabudovane je, ale co je to platne, kdyz to Reader stejne nepouzije…

  7. avatar JirkaS napsal:

    Hmm, skoda – napadlo me, nedalo by se to nejak zabudovat do h2lrf, nebo ColBuild?

  8. avatar pepak napsal:

    Bude to muset být „Capek Karel“…

    Taky mě to mrzí, že zmizela podpora pro author-sort, ale co se dá dělat…

  9. avatar JirkaS napsal:

    No jo, to je v pytli. Ani tohle totiz nebude fungovat – kdyz tam dam „Čapek Karel“, neuvidim ho pod „C“ ale az za „Z“ (v seznamu podle autoru.

  10. avatar pepak napsal:

    Čtečka už nyní author-sort nepodporuje. To fungovalo jen v první verzi firmwaru, v 1.1 už to z neznámých důvodů není. Nepomůže ani, když příslušné atributy vytvoříš v media.xml pomocí ColBuildu – čtečka to prostě bude ignorovat. Pro autory bohužel není v současné době jiné řešení než zapsat je do knih „obráceně“ („Čapek Karel“).

  11. avatar JirkaS napsal:

    Ahoj,
    diky (predevsim tve) pomoci mam (konecne) svou (pocestenou) PRS-505. Pouzil jsem hodne z tveho prikladu (a pouzivam i tvuj H2LRF). Vsiml jsem si ale jedne chybky – po uploadu do ctecky mam autory s ceskymi jmeny az za Z (napr Čapek). U vsech svych knih (konvertovane z HTM do LRF)mam pouzity meta nad autor-sort, takze jsem doufal, ze tohle bude stacit. Nemas predstavu jak overit, ze byl LRF spravne vytvoreny? Nebo je to neco na ctecce?

  12. avatar pepak napsal:

    O žádné takové nevím.

  13. avatar Peca napsal:

    Ještě takový štek k HTML e-booku: použití metatagů DublinCore. Podporuje to nějaká čtečka (třeba při třídění e-books nebo vyhledávání v nich)?

  14. avatar pepak napsal:

    – Není vysloveně nutné použít XHTML 1.0 Strict, ale má to praktické výhody (ve srovnání s XHTML na webu). Některé z nich asi ocení málokdo (možnost knihu snadno zpracovat jakýmkoliv XML parserem), jiné nemusí být podstatné (snadno se ověří, že je XHTML technicky v pořádku), ale například pro konverze do jiných formátů je dost zásadním požadavkem, aby vstupní soubor byl XML-kompatibilní. Například EPUB je založen na XHTML 1.1 a lze očekávat, že nedodržení specifikací dopadne špatně (Adobe Digital Editions padají i na normálních platných XHTML souborech, co teprve na neplatných…). Osobně si myslím, že doplňování koncových značek je nízkou cenou za snadnost budoucích konverzí. Tím odpovídám i na otázky 2 a 3.

    – Lze použít v zásadě libovolný HTML tag, ale pokud se budeš držet těch několika základních, máš větší šanci, že s konverzí do žádného formátu nenarazíš. Ostatně, není snad až takový problém udělat „search <b>, replace <strong>„.

    – Podpora CSS2 je vyžadována EPUB standardem, praktická implementace je ovšem více či méně pochybná. Rozhodně se nedá generalizovat, každé zařzení se chová jinak.

  15. avatar Peca napsal:

    Skvělý článek, insproval mě, že si nějakou knihu do HTML převedu. Mám jenom pár dotazů:
    – Je nutné používat doctype XHTML 1.0 Strict, radši bych HTML 4.01 transitional.
    – Z toho plyne další dotaz HTML 4.01 umožňuje navypsání některých koncových značek, typicky , prostě tam kde začíná nový blokový prvek, končí předchozí odstavec.
    – Je nutné u e-knih uvádět značky HTML,HEAD,BODY? Prohlížeče si s tím obvykle poradí. Značky pouze vyznačují oblasti textu. V praxi tam kde se vysktne první zobrazitelný text, prohlížeč zahájí sekci BODY bez ohledu na t HTML značky.
    – značka EM znamená zvýraznění, značka I italiku podobně STRONG sïlný důraz a B tučné písmo. Je možné s tímto pracovat i u e-knih?
    – Jaká je podpora CSS 2 u čteček?

    Díky moc.

  16. avatar pepak napsal:

    Má to celkem dobrý smysl, když je _may.css o úroveň výš než kniha samotná :-). Já mám adresář pro Karla Maye, kde mám _may.css a hromadu adresářů podle jednotlivých sérií, ve kterých jsou rozmístěné příslušné knížky.

  17. avatar JirkaS napsal:

    Jeste druha otazka – je nejaky dobry duvod, proc psat referenci na css jako „../_may.css“ a nikoli jako „may.css“?
    Dik Jirka

  18. avatar pepak napsal:

    Snažím se udělat co nejlepší e-book, papírová kniha je pro mě vedlejší, pokud „e-bookovosti“ vadí. Forma je nepodstatná, pokud nenese význam. Takže vůbec neřeším konce řádků v knize, ale lpím na dodržení konců odstavců. Nezajímají mě použité typy nebo velikosti písma, místo toho používám vzhled společný pro všechny knihy. Poznámky pod čarou řeším jako poznámky pod dokumentem provázané hyperlinky.

    Pokud někde vzhled nese význam (např. pro šeptání je použité menší písmo, text je nějak speciálně rozházený apod.), tak se to snažím dodržet.

  19. avatar pepak napsal:

    V podstatě to neladím vůbec: Snažím se dokumenty rozumně strukturovat a to mi stačí; vzhled si můžu kdykoliv libovolně předělat pomocí CSS. Jestli se to v prohlížečích zobrazí stejně nebo různě mě nezajímá – zastávám názor, že snaha o shodný vzhled je nesmyslná i přímo na webu, natož v knihách.

  20. avatar JirkaS napsal:

    Jeste jedna otazka – snazis se drzet knizky tak, jak je vytistena – vcetne uvodni stranky (s vydavatelm, atd), nebo se drzis jenom textu (a pripadnych obrazku v nem)?
    Dik Jirka

  21. avatar JirkaS napsal:

    Dik, clanek i priklady moc pekny mas to fakt dobre vymysleny. Jak to ladis? Pouzivas IF/Firefox/Chrome, nebo jiny nastroj?

  22. avatar Mirda napsal:

    Nerikam, ze musis pouzit tento soubor – jde mi spise o to, ze vetsinu knih mam z jineho, nez vlastniho zdroje… A pak se musim poprat s nejakym prevodem (a ukazany soubor je jeden z tech lepe zpracovanych). Celkove vychazim z myslenky, ze se snazim precist knihy, ktere bych si nikdy nekoupil – i romany a nekdy mne to chytne natolik, ze si celou serii koupim v papirove podobe. Jinak se mi velmi tezko kupuji knihy od autoru, ktere neznam – tezko dokazi posoudit v obchode, nakolik mne ta kniha chytne.

  23. avatar pepak napsal:

    Přímo tenhle soubor zjevně použít nemůžu (autorská práva atd.), ale myšlenka není úplně špatná – napsat něco malého o převodu textů, které pocházejí z jiných zdrojů než HTML vyprodukované FineReaderem, by možná nebylo úplně od věci. To ale ještě nějakou dobu potrvá, než se k tomu dostanu…

  24. avatar pepak napsal:

    Až se mi podaří soubor stáhnout, tak se na něj podívám, přinejmenším soukromě. Pokud by to byl soubor, který půjde rozumně zpracovat, a nebude podléhat autorským právům, můžu následně udělat další článek s úpravou.

  25. avatar Mirda napsal:

    Oki, jen se chci zeptat, zda bude i nejaky navod na knihy, ktere jiz nekdo udelal. Tech je nejvice, sam vse neskenuji – napriklad tento soubor: **Odkaz zcenzurován**. Jde mi tedy o prevod jiz hotovych knih (vim, ze jsi psal, ze maji splnovat urcite parametry, jinak je lepsi zacit znovu, ale sam kolikrat tu knihu nemam k dispozici…).

  26. avatar pepak napsal:

    Článek demonstrující přechod od výstupu FineReaderu na text připravený ke korektuře připravuju, je to jen otázka času, než se tu objeví.

  27. avatar Mirda napsal:

    Ahojky 🙂
    Nejakou dobu mam eReader Sony 505 a musim rici, ze mi tvuj web neustale pomaha 🙂 Bohuzel neni tolik casu, abych se cetbe porad venoval a prevod knih mi dela stale problemy. Kdyz si uz myslim, ze mam vse OK, tak najednou zjistim, ze format a postup, ktery jsem pouzival, na danou knihu nefunguje :(… Ja vim, formatu spousta, postupu take.Proto jsem privital tvou snahu na vytvoreni HTML sablony a velmi bych ocenil i moznost celkoveho navodu postacuje mi od nejakeho formatu (ze scaneru pres FineReader zvladam – nakonec nejmensi problem).Jak dodelam skolu, rad bych se tomu venoval vice (penize nejsou tak velky problem, tim je cas – mam ctecku, scaner Plustek 3600 a presto ctu knihy, ktere nevypadaji uplne ok – zpravidla jsem rad, kdyz tam mam ceske znaky a na zbytek jsem rezignoval). Rad bych si tedy vytvoril jeden format, ve kterech bych si knihy uchovaval a mohl se k opakovane cetbe vratit bez obavy, ze musim formatovani resit znovu…

  28. avatar Rudla napsal:

    🙂 Dekuju pepaku, jsi nejlepsi na Svete 🙂 vubec nevim jak se ti za tohle odvdecit! Tohle je presne co jsem myslel a doufam, ze to pomuze i ostatnim. Hned zitra vecer si udelam chvilku a zacnu prepisovat – pak napisu komentar jak to dopadlo 🙂

    Rudla

Leave a Reply

Themocracy iconWordPress Themes

css.php