V článku na Abclinuxu.cz pan Olšák (2013) popisuje konverzi TEXového souboru na html. Pod článkem se rozeběhla zajímavá debata nejen o nejlepším způsobu konverze (La)TEXu, ale také obecně o tom jestli má smysl psát dokumenty v TEXu, nebo spíše v nělterém značkovacím jazyce, ať již je to některý dialekt xml, nebo třeba Markdown.
Protože mám jisté zkušenosti s používáním TeX4ht1, rozhodl jsem se vytvořit krátký článek o jeho používání s češtinou a kódováním utf-8. V článku také ukážu použití některých balíčků, například biblatex, glossaries, nebo minted.
Zdrojové kódy tohoto článku jsou dostupné na Githubu.
TeX4ht se vyvíjí od druhé poloviny 90. let, v podstatě jako dílo jediného autora, Eitana Gurariho. Tento autor bohužel před několika lety zemřel a v současnosti patrně není nikdo, kdo by se v kódu plně orientoval a vývoj mírně řečeno stagnuje.
Na druhou stranu, v současnosti je nejlepším konvertorem z LATEXu a poskytuje funkční infrastrukturu pro konfigurací libovolných maker. V současnosti je na tvůrcích balíčků nebo jejich uživatelích, aby poskytovali tyto konfigurace, není v reálných silách současných správců, aby tvořili konfigurace pro všechny balíčky.
Bez konfigurací bychom nezískali logické značkování, postprocesor tex4ht sice vytvoří výstupní soubory, ale ty by obsahovaly jen vizuální formátování získané z dvi souboru, bez jakékoliv logické struktury (nadpisy, seznamy, odkazy).
Proto TeX4ht obsahuje mechanismus .4ht souborů, které jsou automaticky nahrávané spolu s balíčkem téhož jména a kde jsou umístěné redefinice některých maker, aby bylo možné je konfigurovat. Více informací v sekci 5
Mejme hypotetický článek pro XeLATEX, který se budeme snažit přeložit s TeX4ht:
TeX4ht obsahuje množství skriptů pro překlad dokumentů. Nejběžnější je htlatex, který překládá dokument čístým LATEXem. Protože máš dokument je určený pro XeLATEX, můžeme zkusit variantu tohoto skriptu, htxelatex.
Kompilace se zastaví s chybovou hláškou
To nám naznačuje, že něco není v pořádku. Podobných hlášek se objeví více, můžete zmáčkout klávesu r a enter pro pokračování kompilace bez přerušení. Kompilační skripty překládají dokument . Je to kvůli správnému fungování odkazů, TeX4ht ukládá při každém průchodu informace o odkazech do pomocných souborů, tento mechanismus funguje podobně jako \label - \ref mechanismus v LATEXu.
Po třech průchodech LATEXem přichází zpracování výstupního dvi souboru postprocesorem tex4ht. Zde vidíme další chybovou hlášku:
Naneštěstí, chyba v postprocesoru tex4ht znemožňuje použití opentype fontů, pokud si otevřete výsledný html soubor priklad1.html, neobjeví se žádný text. Chybové hlášky při překladu LATEXem byly způsobené balíčkem fontspec. Jak řešit tuto situaci? Máme v zásadě dvě možnosti:
Druhá možnost je lehce experimentální, ukážeme si tedy první.
TeX4ht se snaží, jak je to jenom možné, aby autor nemusel upravovat zdrojové kódy dokumentů. Někdy je to ale jediná možnost, jak zabránit načtení balíčků, které zprůsobují problémy při kompilaci s TeX4ht.
Pro zjištění, jestli je dokument kompilován s TeX4ht, můžeme použít konstrukci:
Makro \HCode je definováno TeX4ht a slouží k vkládání XML kódů do dokumentu.
Nyní náš dokument vypadá takto:
Místo htxelatexu nyní můžeme použít obyčejný htlatex, protože dokument neobsahuje žádná makra vyžadující ke svému běhu XeTEX.
Text výsledného dokumentu vypadá takto:
Jak je vidět, není výsledek úplně hezký, některé akcentované znaky byly nahrazené html entitami, ostatní jsou v kódování latin-2.
TeX4ht umí dokument uložit v kódování utf-8, jen je třeba přidat několik parametrů:
Tento ošklivý příkaz se skládá ze tří částí:
Kompletní seznam možných parametrů je možné najít na blogu CV Radhakrishnana.
Text nyní vypadá takto:
Tím jsme vyřešili problém s kódováním znaků, ale stále jsou tu další problémy. Některá slova jsou rozdělená mezi několik elementů <span> a text obsahuje ligatury2.
Tyto dva problémy nění snadné vyřešit čistě jenom v prostředí TeX4ht, což byl jeden z důvodů, proč jsem vytvořil make4ht. S pomocí tohoto nástroje můžete jednak zjednodušit předávání argumentů htlatexu, a můžete využít různé filtry, které umožňují vyčistit vygenerované soubory od nadbytečných elementů <span> nebo ligatur.
Vytvoříme si make soubor, se stejným názvem jako TEXový dokument, jenom s příponou .mk4. V našem případě priklad3.mk4:
V tomto případě využíváme pouze filtry. Build soubory pro make4ht jsou skripty v jazyce LUA, takže můžeme využít standardních funkcí jako je require pro nahrání knihovny make4ht-filter. Tato knihovna vrací funkci, která vytváří další filtrovací funkce. V našem případě vytváříme filtrovací funkci process, která obsahuje dva filtry – cleanspan pro sloučení nadbytečných elementů <span> a fixligatures pro rozdělení ligatur. S pomocí funkce Make:match pak aplikujeme tuto filtrovací funkci na všechny vygenerované soubory s příponou html. Další dostupné filtry a funkce make4ht jsou popsané na stránkách projektu.
Překlad dokumentu je podstatně jednodušší:
A výsledek:
Olšák, Petr (2013). „TeX – 5 (příklad makra pro generování HTML)“. In: AbcLinuxu.cz. URL: http://www.abclinuxu.cz/clanky/tex-5-priklad-makra-pro-generovani-html.
1Tvořím jednoduchý build systém make4ht a od něj odvozený tex4ebook pro přímou konverzi TeXu do formátů pro čtečky e-booků
2To z technických důvodů není ve výpisu vidět, ale můžete se podívat sami: priklad2.html