Hlavní navigace

Emacs pro mírně pokročilé (8): Emacs a TeX

Jan Kohout

Elektronická sazba dokumentů často přináší podobný koloběh práce, jako kompilace programů. Úprava zdrojového textu, zpracování dokumentu a prohlížení výsledku. Emacs usnadňuje nejen tento monotónní rytmus, ale přináší i další výhody, o kterých bude řeč v dnešním pokračování.

Povíme si především o zpracovávání TeXovských dokumentů v prostředí editoru Emacs, ale také se okrajově zmíníme o dalších dvou silných pomocnících při tvorbě dokumentů: kontrole pravopisu (za použití ispellu) a tzv. zkratkách (abbrevs).

Zpracování dokumentu pro TeX (či LaTeX) se nabízejí dvě odlišné varianty. První z nich je použití módů obvykle distribuovaných přímo s balíkem Emacsu (tedy tex-mode a latex-mode). Druhou možností je použití rozsáhlejší knihovny AUC-TeX (určené pro zpracování zejména LaTeXovských dokumentů). První možnost přináší formou jednoduchého hlavního módu obvyklé usnadnění práce v podobě klávesových zkratek, párování závorek apod. V druhém případě se jedná o poměrně propracované a rozsáhlé prostředí, které nabízí kromě jiného zpracování chybového výstupu LaTeXu apod.

Pro jednodušší dokumenty si jistě vystačíme s první zmiňovanou variantou. Tyto módy umožňují spouštět TeX (LaTeX) na celý soubor (klávesy C-c C-b), ale také například na region ( C-c C-r), kdy se k regionu přidá preambule ze začátku souboru. Dále lze prohlížet výsledný dvi soubor ( C-c C-v), tisknout dvi soubor ( C-c C-p). Změnou příslušných proměnných lze docílit přizpůsobení módu. Lze tedy například měnit, jaký prohlížeč se má volat ( tex-dvi-view-command) apod. Poměrně snadno ( C-c C-o) lze také vkládat LaTeXovské bloky, tedy části uvozené klíčovými slovy \begin\end.

Pokud chceme zpracovávat rozsáhlejší dokumenty nebo pracujeme-li s LaTeXem velmi často, bývá druhá možnost, tedy použití prostředí AUC-TeX, daleko přijatelnější. AUC-TeX zejména nabízí možnost procházení chybového výstupu tím způsobem, že posouvá kursor přímo po řádcích s nalezenou chybou (funkce TeX-next-error, zde je souvislost se zpracováním kompilace, o kterém již byla řeč). Dále AUC-TeX umožňuje odsazování textu (nejen během vytváření dokumentu, ale lze takto zformátovat i již vytvořený dokument). Kromě zmíněných funkcí dále přináší celou řadu maker, která tvorbu LaTeXovských dokumentů značně usnadňuje. Podívejme se proto na tento balík podrobněji.

Doplňování příkazů podle typu dokumentu uvedeného v hlavičce ( documentclass) je další vymožeností tohoto prostředí. Stiskem M-<TAB> se spustí funkce TeX-complete-symbol a pokusí se doplnit rozepsaný příkaz. Užitečná jsou i klávesová makra, např. LaTeX-environment (klávesy C-c C-e) uvozuje prostředí vložením odpovídajících „závorek“ begin a end. Funkce LaTeX-section (klávesy C-c C-s) vkládá LaTeXovou sekci dokumentu (kapitolu, apod.). Prefixem kláves C-c C-f doplněným o kombinaci volící font, například C-i pro italiku (skloněné písmo), docílíme vložení příslušné konstrukce pro daný řez (v uvedeném příkladě je to \textit{ \/}). Samozřejmostí je i spouštění TeXu či LaTeXu na celý soubor (tentokrát pomocí C-c C-c) a region, který se spouští stejně, jako v již zmíněném prvním případě.

Mezi další vymoženosti prostředí AUC-TeX patří například určení tzv. master file při zpracování dokumentu rozděleného do více souborů. Takto označený soubor je ten, který obsahuje pomocí klíčových slov \input nebo \include vložené soubory a AUC-TeX tedy sám dokáže určit, který soubor se má po spuštění „kompilace“ zpracovávat. Dále nabízí možnost jakéhosi „předparsování“. Nastavením proměnné TeX-parse-self na hodnotu různou od nil tuto volbu zapneme. Pokud navíc zapneme proměnnou TeX-auto-save, bude se informace o parsování ukládat a při dalším otevření tohoto souboru bude využita. Celá řada dalších zajímavých vlastností je popsána v on-line dokumentaci, která je distribuována s balíkem AUC-TeX.

Abbrevs

Při tvorbě dokumentace se často opakují (opisují) stejná slova, někdy i celé fráze. Pomoc Emacsu v takovémto případě přichází v podobě tzv. zkratek neboli abbrevs. Jedná se o tzv. minor mód. Definováním zkratky se rozumí slovo, které se po napsání expanduje na nějaký jiný text. Definujeme-li například emacs jako zkratku pro větu „Emacs Manuals Always Couse Senility“, expanduje se slovo ‚ e m a c s <SPC>‘ po napsání do příslušné věty. Další možností je využít tzv. dynamické doplňování, kdy se na přímý příkaz pokusí Emacs doplnit slovo před kursorem podle slov obsažených v bufferu.

Definování globální zkratky, tedy takové, kterou bude možno použít ve všech bufferech pro jedno či více slov před kursorem, se provede pomocí C-x a g (funkce add-global-abbrev). Takto se jednoduše doplňují zkratky pro text, který přímo píšeme. Podobně lze definovat zkratky specifické pro aktuální hlavní mód. Naopak lze definovat i slova, která představují zkratky (tedy za něž se nahrazuje) pomocí C-x a i g (funkce inverse-add-global-abbrev). Zkratky se expandují přímo během vytváření textu poté, co vložíme mezeru, tečku či podobný ukončující znak. Při expanzi se zachovávají velká a malá písmena, napíšeme-li proto EMACS, bude expandovaná věta celá napsána velkými písmeny. Zkratky lze také editovat (funkce edit-abbrevs) nebo si nechat zobrazit jejich seznam ( list-abbrevs). Pokud chceme, aby definované zkratky byly dostupné i při příštím spuštění Emacsu, je třeba je uložit ( write-abbrev-file; Emacs se nás na to při ukončení zeptá) a při startu znovu nahrát ( read-abbrev-file).

Výše zmíněné zkratky se expandují automaticky tak, jak je text vkládán, a všechny zkratky musí být explicitně definovány. Na rozdíl od nich tzv. dynamická expanze zkratek určuje svoji expanzi na základě obsahu editovaného bufferu. Slouží k tomu zkratka M-/, které odpovídá funkce dabbrev-expand. Slovo před kursorem se expanduje na slovo, které obsahuje toto slovo. Pokud je takovýchto slov víc, vybere se poslední z nich. Zkratka C-M-/ (funkce dabbrev-completion) se pokusí o totéž. Existuje-li však v bufferu více takových slov, doplní pouze jim všem společnou část. Nemají-li žádnou takovou část, zobrazí všechna možná slova ve zvláštním bufferu. Podrobný popis lze nalézt v manuálu.

Ispell

Neméně důležitou pomůckou při psaní dokumentu je kontrola pravopisu. Emacs k tomu používá externí program ispell. Šíře jeho použití je veliká a kontrolovat lze pravopis jednoho slova (klávesy M-$), regionu (funkce ispell-region) nebo celého bufferu ( ispell-buffer). Lze ale také například zapnout průběžnou kontrolu pravopisu, tzv. flyspell-mode. Změnu slovníku (jazyka) provedeme funkcí  ispell-change-dictionary.

Tolik tedy ke zpracovávání dokumentů pomocí TeXu (LaTeXu) a nástrojům či službám souvisejícím. Samozřejmě škála podpůrných nástrojů není úplná. Existuje celá řada dalších více či méně rozšířených utilit. Příště si povíme něco málo o Elispu, tedy o jazyce, který je pro Emacs životně důležitý.

Našli jste v článku chybu?