CSplain

čeština a slovenština v plain TeXu

Petr Olšák, květen 2016

en English

CSplain je konzervativní rozšíření plain TeXu Donalda Knutha. Rozdíl mezi formátem plain a formátem csplain spočívá v tom, že místo CM fontů se pracuje implicitně s CS-fonty, což umožňuje:

  • přímé zpracování znaků české a slovenské abecedy,
  • zavedení vzorů dělení pro český a slovenský jazyk.

ve verzi May 2016 csplain nově obsahuje:

  • fontové soubory se opírají o makro ff-mac.tex, což nabízí koncept na sobě nezávislých fontových modofikátorů. Vlastnost je popsána a ilustrována v článku KP-fonts in plain TeX,
  • je přidána podpora Unicode Math fontů v souboru uni-math.tex,
  • OPmac umožní pomocí makra \fontfam vypsat fontové rodiny implementované ve fontových souborech a tisknout z nich katalog.

Ve vezi Dec. 2012 proběhly v CSplainu tyto významné změny:

  • implicitně podporuje vstupní kódování UTF-8,
  • umožňuje pohodlnou manipulaci s fonty (včetně jejich nastavování do různých velikostí),
  • spolupracuje s TeXem, eTeXem, pdfTeXem, XeTeXem i LuaTeXem,
  • má připravenu podporu kódování CS-fontů i kódování T1 (v případě použití XeTeXu nebo LuaTeXu pochopitelně podporuje Unicode),
  • podporuje zavedení vzorů dělení více než 50 jazyků v různých kódováních,
  • obsahuje balíček užitečných maker OPmac.

csplain.tar.gz
tpp.pdf
prednaska v Brne

Balíček csplain.tar.gz obsahuje kromě souborů potřebných pro vygenerování formátu csplain ještě další podpůrná makra. Je součástí CSTeXu a je dokumentován v Manuálu k CSTeXu (v souboru cstexman.pdf). Balíček CSplain pravděpodobně nemusíte stahovat a rozbalovat z této stránky, protože je součástí běžných TeXových distribucí (TeXlive, MikTeX).

Obsah

  1. Formáty csplain a pdfcsplain
  2. Příprava: generování formátu
  3. Vstupní a interní kódování csplainu
  4. Použití češtiny a slovenštiny
  5. Soubor maker opmac.tex
  6. UTF-8 vstup
  7. Fonty v csplainu
  8. Vzory dělení různých jazyků různě kódované
  9. Doporučená literatura

1. Formáty csplain a pdfcsplain

Formát csplain má implicitně nastaven výstup do DVI, zatímco pdfcsplain vystupuje implicitně do PDF. Ke spuštění TeXu s formátem csplain (na dokument s názvem dokument.tex) je možno použít příkaz

   csplain dokument

Vytvoří se dokument.dvi. Ke spuštění TeXu s formátem pdfcsplain (na dokument s názvem dokument.tex) lze použít příkaz

   pdfcsplain dokument

Vytvoří se dokument.pdf. Příkazy csplain a pdfcsplain jsou implementovány různě v závislosti na distribuci TeXu a na operačním systému.

Pro první testování můžete soubor dokument.tex naplnit následujícím obsahem:

Tady je český textík.
\end

2. Příprava: generování formátu

Na novějších TeXových distribucích (od prosince 2012) byste měli mít automaticky připraveny tyto formáty:

1. csplain.fmt ...... vstup: UTF-8, výstup: DVI, stroj: pdfTeX+encTeX,
                      příkaz ke spuštění: csplain dokument 
2. pdfcsplain.fmt ... vstup: UTF-8, výstup: PDF, stroj: pdfTeX+encTeX,
                      příkaz ke spuštění: pdfcsplain dokument
3. pdfcsplain.fmt ... vstup: UTF-8, výstup: PDF, stroj: luaTeX,
                      příkaz ke spuštění: luatex -fmt pdfcsplain dokument
4. pdfcsplain.fmt ... vstup: UTF-8, výstup: PDF, stroj: XeTeX,
                      příkaz ke spuštění: xetex -fmt pdfcsplain dokument

Běžně stačí použít formáty 1 nebo 2 podle požadovaného formátu výstupu. Jste-li experti a chcete vyzkoušet něco nového, můžete použít formáty 3 a 4. Poznámka: Může se stát, že formáty 3 a 4 nejsou vygenerovány (např. na DVD TeXlive 2013). Můžete je vygenerovat dle instrukcí, které následují.

Formáty 2, 3, 4 mají stejný název, liší se strojem, který jej generuje a používá, a dále příkazem, kterým činnost TeXu s tímto formátem vyvoláte.

Pokud je nutné formátový soubor vygenerovat, pak můžete postupovat takto:

1. pdftex -jobname csplain -ini -enc csplain-utf8.ini
   ... vygenerovaný csplain.fmt uložit do distribuce/web2c/pdftex/
2. pdftex -jobname pdfcsplain -ini -enc csplain-utf8.ini   
   ... vygenerovaný pdfcsplain.fmt uložit do distribuce/web2c/pdftex/
3. luatex -jobname pdfcsplain -ini csplain.ini
   ... vygenerovaný pdfcsplain.fmt uložit do distribuce/web2c/luatex/
4. xetex -jobname pdfcsplain -ini -etex csplain.ini
   ... vygenerovaný pdfcsplain.fmt uložit do distribuce/web2c/xetex/

Před generováním i po uložení formátového souboru do distribuce je obvykle nutné použít příkaz texhash, který aktualizuje vyhledávací tabulky.

Poznámka Pro XeTeX a LuaTeX si můžete připravit vlastní formáty xeplain a luaplain podle pokynů v souborech xeplain.ini a luaplain.ini

Poznámka 2 Csplain (ani opmac) nepotřebují rozšíření eTeX. Pokud ho ale potřebuje uživatel (nebo jiná jím použitá makra) je potřeba vygenerovat csplain s podporou tohoto rozšíření. V takovém případě přidejte do řádků 1. a 2. za přepínač -enc ještě přepínač -etex. TeXlive přidává tento přepínač při generování csplainu implicitně.

3. Vstupní a interní kódování csplainu

Vstupní kódování csplainu bylo původně závislé na použitém operačním systému. Od prosince roku 2012 je vstupním kódováním jednotně UTF-8.

Interní kódování csplainu je implicitně podle CSfontů (odvozeno z ISO-8859-2). Tyto fonty jsou též implicitně do formátu nataženy. Na toto kódování musejí navazovat uživatelem zavedené další fonty. Pokud chcete použít interní kódování podle Corku (v něm je připravena většina TeXových fontů), je třeba na začátku dokumentu psát

\input t1code

Je-li použit XeTeX nebo LuaTeX, není implicitní kódování csplainu použitelné, protože tyto stroje pracují interně v UNICODE. Je tedy bezpodmínečně nutné na začátku dokumentu psát

\input ucode
a dále všechny použité fonty musejí být kódované v UNICODE (fonty ve formátu OpenType). Můžete například použít \input lmfonts.

4. Použití češtiny a slovenštiny

Formát csplain je inicializován tak, aby se implicitně choval jako plain. To znamená, že je nastaveno anglické dělení slov a sekvence typu \v, \' expandují na primitiv \accent. Rovněž je aktivní \nonfrenchspacing. Toto výchozí nastavení je tedy zcela stejné jako v plainTeXu. Rozdíl je jen ve velikosti implicitního rozměru zrcadla sazby, které je v csplainu nastaveno pro palcové okraje při formátu A4, zatímco v plainu je nastaveno pro palcové okraje formátu Letter.

Pro inicializaci vzorů dělení slov a nastavení expanze sekvencí \v, \', \^, \`, \", \r na přirozené znaky jsou rezervovány následující příkazy:

   \chyph      % inicializuje české dělení slov a \frenschpacing
   \shyph      % inicializuje slovenské dělení slov a \frenschspacing
   \csaccents  % způsobí jiné chování \', \v, \^, \`, \" a \r, které
               % od této chvíle expandují přímo na znaky podle CSfontů

Doporučení: První řádek dokumentu by měl být například

   \chyph  % use format csplain

Když bude uživatel takový dokument zpracovávat jiným formátem, který nemá definovan příkaz \chyph, výše uvedený řádek se objeví v chybovém hlášení včetně komentáře takže uživatel vidí, čím má dokument zpracovat.

Návrat k původnímu nastavení:

   \ehyph      % americké dělení a \nonfrenchspacing
   \cmaccents  % \', \v aspol. expandují na primitiv \accent

Další příkazy jsou jen zkratkami k některým znakům v CS-fontech:

   \clqq       % levá dvojitá česká uvozovka
   \crqq       % pravá dvojitá česká uvozovka
   \flqq       % levá dvojitá francouzská uvozovka
   \frqq       % pravá dvojitá francouzská uvozovka
   \promile    % znak pro promile
   \uv         % text uvozený českými uvozovkami: \uv{text}
   \ogonek a   % polské ,,a s ocáskem`` (sestaveno z komponent)

cstexman.pdf

Podrobnější informace o výchozím nastavení csplainu a jeho rozdílnosti proti plainu jsou k nalezení v Manuálu k CSTeXu v odst 4.3 a 4.9.

5. Soubor maker opmac.tex

Formát csplain je koncipován jako minimální rozšíření plainu, takže formát samotný nenabízí jiné příkazy mimo příkazů z plainu a příkazů popsaných v předchozí kapitole. Je to nízkoúrovňový základ pro zpracování českých a slovenských textů všeho druhu. Nicméně uživatel si musí k csplainu doprogramovat další typicky používané vlastnosti: automatickou tvorbu obsahu, číslování, křížové reference, verbatim prostředí, atd. Aby v jednoduchých případech nebylo nutno tuto práci dělat pořád znovu, vytvořil jsem soubor maker opmac.tex, který bude součástí balíku csplain od konce roku 2012.

Podrobnější informace o makru jsou na www stránce OPmac.

6. UTF-8 vstup

Od roku 2012 je UTF-8 doporučovaným implicitním kódováním. CSplain toto kódování podporuje nativně v XeTeXu a LuaTeXu a za použití rozšíření encTeX v ostatních případech (TeX, pdfTeX). Nejprve je zde podrobně rozebráno chování UTF-8 vstupu za použití encTeXu, tj. v TeXu a pdfTeXu.

Formát csplain s UTF-8 vstupem implicitně rozpozná na vstupu následující znaky:

  1. Všechny znaky ASCII (128 tzv. sedmibitových znaků),
  2. Znaky ÁáÄäČčĎďÉéĚěÍíĹ弾ŇňÓóÖöÔôŔŕŘřŠšŤťÚúŮůÜüÝýŽž.
  3. Znaky, které jsou definovány v plainu nebo csplainu jako kontrolní sekvence: \ss, \l, \L, \ae, \oe, \AE, \OE, \o, \O, \i, \j, \aa, \AA, \S, \P, \copyright, \dots, \dag, \ddag, \clqq, \crqq, \elqq, \erqq, \elq, \erq, \flqq, \frqq, \promile. UTF-8 kódy těchto znaků se v inputprocesoru TeXu promění v uvedené kontrolní sekvence a do \write souborů se vrací zase jako UTF-8 kódy.

Jestliže se ve vstupním souboru objeví jakýkoli jiný znak (dlouhá pomlčka, nedělitelná mezera atd.) pak UTF-8 kódovaný csplain vypíše na terminál hlášení podobné tomuto:

  WARNING: unknown UTF-8 code: `€ = ^^e2^^82^^ac' (line: 42)

a do výstupního DVI nebo PDF vloží černý čtvereček. Uživatel může nedefinovaný kód mapovat na kontrolní sekvenci a dále tuto sekvenci definovat, třeba takto:

  \mubyte\eurochar ^^e2^^82^^ac\endmubyte % kód znaku € mapován na \eurochar
  \def\eurochar{{\eurofont e}}            % definice \eurochar
  \font\eurofont=feymr10                  % použitý font

Poznámka: uvedené řešení bude fungovat jen v jedné velikosti a v jedné variantě (\rm) znaku Euro. Lepší řešení je přejít na některou z rodin fontů zmíněných v následující sekci (pak bude přímo fungovat příkaz \euro ve všech velikostech a variantách a stačí jej mapovat pomocí \mubyte \euro ^^e2^^82^^ac\endmubyte). Nebo můžete využít expertní sadu znaků pomocí \input exchars. Pak je k dispozici \exeuro, které rovněž funguje ve všech variantách a velikostech.

Pro práci s UTF-8 kódováním jsou připraveny následující soubory, které je možno načíst na začátku dokumentu pomocí \input:

  utf8lat1.tex ... doplní mapování UTF-8 kódů z Latin-1 Supplement U+0080--U+00FF
  utf8lata.tex ... doplní mapování UTF-8 kódů z Latin Extended-A U+0100--U+017F

Předpokládám, že v podobném duchu, jako jsou soubory utf8lat1.tex a utf8lata.tex, někdo rozšíří možnost mapování UTF-8 kódů o další důležité bloky UNICODE tabulky.

Jako příklad dalšího možného rozšíření UTF-8 kódů poslouží soubor cyrchars.tex, který zavádí UTF-8 kódy pro azbuku a umožní přímo bez přepínání fontů psát azbukou. Dokumentace je na konci uvedeného souboru.

Předložíte-li csplainu vstup, který není kódovaný podle UTF-8, objeví se chybové hlášení:

  ! UTF-8 INPUT IS CORRUPTED !  May be you are using another input encoding.

V takovém případě můžete na začátek dokumentu přidat jeden z následujích dvou možných \input příkazů:

  \input utf8off  ... vypíná UTF-8 kódování, vstup/výstup je v ISO-8859-2 
  \input mixcodes ... umožní mít ve vstupním dokumentu směs texů kódovaných
                      v UTF-8 nebo ISO-8859-2 nebo CP1250. Vše zpracuje 
                      správně bez nutnosti používat přepínače. 
                      Výstup pomocí \write probíhá v UTF-8.

Poznámka: \input utf8off samotné přepíná csplain do vstupu (a výstupu pomocí \write) v ISO-8859-2. Pokud za tento příkaz dále napíšete některý z následujících příkazů, máte vstup (a výstup pomocí \write) ve zvoleném kódování.

  % po \input utf8off je možno dále psát jeden z těchto příkazů:
  \input csenc-w ... vstup/výstup v CP1250 (MS Windows)
  \input csenc-p ... vstup/výstup v CP852 (MS DOS)
  \input csenc-k ... vstup/výstup v Kamenických (starodávný DOS)

cstexman.pdf

Podrobnější informaci o využití UTF-8 kódovaného vstupu lze najít v Manuálu k CsTeXu v odstavci 4.6.

XeTeX a LuaTeX převádějí veškeré vstupní UTF-8 kódy do interního UNICODE přímo bez použití encTeXu, takže nikdy neohlásí chybu typu ,,neznámý vstupní znak``.

7. Fonty v csplainu

Implicitní rodina fontů v csplainu jsou CSfonty, které jsou mírným rozšířením Knuthových Computer Modern fontů. Přejít na jinou rodinu fontů je možné zavedením jednoho z následujících souborů na začátku dokumentu:

  \input lmfonts      % Latin Moder fonts
  \input ctimes       % rodina fontů Times
  \input chelvet      % rodina fontů Helvetica
  \input cavantga     % rodina fontů AvantGarde
  \input cbookman     % rodina fontů Bookman
  \input cncent       % rodina fontů NewCenturySchlbk
  \input cpalatin     % rodina fontů Palatino
  \input cs-bera      % Bera
  \input cs-arev      % ArevSans
  \input cs-charter   % Charter
  \input cs-antt      % Antykwa Torunska
  \input cs-polta     % Antykwa Poltawskiego
  \input cs-termes    % TeX Gyre Termes
  \input cs-adventor  % TeX Gyre Adventor
  \input cs-bonum     % TeX Gyre Bonum
  \input cs-heros     % TeX Grye Heros
  \input cs-pagella   % TeX Gyre Pagella
  \input cs-schola    % TeX Gyre Schola
  \input cs-cursor    % TeX Gyre Cursor
  \input cs-libertine % Linux Libertine
  \input kp-fonts     % KP fonty

kpfonts-plain.pdf

Tyto tzv. fontové soubory typicky zavedou rodinu fontů, která je pak přístupná pomocí přepínačů \rm, \bf, \it a \bi. Některé fontové soubory navíc nabízejí modifikátory uvedených přepínačů, například \cond\it vybere v případě rodiny fontů TeX Gyre Heros zúženou variantu skolněného písma. Podrobnosti o modifikátorech včetně rozsáhlé ukázky lze najít v článku KP-fonts in plain TeX. Inspiraci pro tvorbu vlastních fontových souborů včetně dokumentace pro programátory lze najít v souboru cs-heros.tex.

opmac-u.pdf

Při použití OPmac je k dispozici makro \fontfam, které vylistuje přehled fontových rodin, pro které jsou připraveny fontové soubory a uvede i seznam dostupných modifikátorů a informaci o tom, jaká matematická sada fontů je implicitně s uvedenou rodinou fontů kombinována.

Matematické sady fontů mají svá makra připravena v souborech cosi-math.tex. K dispozici je vždy aspoň sada matematických symbolů známých z AMSTeXu a matematické abecedy \frak (fraktura), \script (skript kroucenější než \cal), \bbchar (písmena se zdvojenými tahy), \bf, \bi (tučná bezserifová abeceda normal a slanted). Zůstanete-li u implicitní rodiny fontů (CSfonty), je možné k ní zavést makro ams-math.tex, které připraví AMS fonty jež na textovou rodinu vizuálně navazuje.

tpp.pdf

Fonty v textu i matematice lze snadno zvětšovat a zmenšovat do požadované velikosti. V OPmac jsou na to připravena makra \typosize a \typoscale. Změna velikosti fontů bez použití balíčku OPmac je popsána v TeXu pro pragmatiky v kapitole páté.

Mnoho fontů v TeXových distribucích je kódováno jen v T1 kódování, které je s kódováním CSfontů použitým v csplainu nekompatibilní, To ale nevadí, stačí na začátek dokumentu napsat:

   \input t1code

a můžete pracovat s T1 kódovanými fonty. CSplain interně přejde na T1 kódování včetně vzorů dělení slov. Používáte-li UTF-8 na vstupu, nemusíte se o nic dalšího starat, změnu kódování v input procesoru si makro t1code vyřeší samo. Nepoužíváte-li encTeXem rozšířený csplain, je nutno se o překódování postarat jinak.

Pokud napíšete \input t1code dříve než \input fontových souborů, zavedou se odpovídající T1 kódované fonty.

V případě XeTeXu nebo LauTeXu se při použití fontových souborů zavedou OTF fonty a vnitřní kódování je nastaveno na Unicode. Implicitní rodina fontů (CSfonty) v české sazbě v XeTeXu a v LuaTeXu nefunguje, takže použití nějakého fontového souboru (např. \input lmfonts) je v tomto případě nutné.

8. Vzory dělení různých jazyků různě kódované

Vzory dělení slov se načítají při generování formátu. CSplain je připraven načíst vzory dělení 54 jazyků (viz) ve třech možných kódováních. Implicitně načítá jen angličtinu (výchozí vzor plainTeXu) a dále češtinu a slovenštinu v kódování CSfontů a v kódování T1 (Cork). Je-li při generování formátu detekován 16bitový TeX, jsou české a slovenské vzory dělení načteny ještě v Unicode.

Češtinu zapínáme pomocí \chyph (nebo \czlang, což je totéž), slovenštinu pomocí \shyph (nebo \sklang) a angličtinu pomocí \ehyph (nebo \uslang). Tyto přepínače pracují v kontextu podle kódování nastaveného příkazem \input t1code (kódování T1) nebo \input ucode (Unicode). Není-li takový příkaz předem použit, jsou vzory dělení inicializovány v kódování CSfontů.

Další vzory dělení lze při generování formátu načíst, pokud odkomentujete odpovídající řádek v souboru hyphen.lan. Nebo je možné požadavek na přidání vzoru dělení zapsat do příkazového řádku pro generování formátu třeba takto:

pdftex -ini -enc "\let\plCork=y \let\enc=u \input csplain.ini"

Tento příklad vygeneruje csplain s UTF-8 vstupním kódováním a k implicitním vzorům dělení jsou přidány vzory dělení našich polských přátel kódované podle Cork (tj. T1). Zapnout tyto vzory dělení je možné příkazem \pllang (něco jako \phyph už není podporováno, protože možných jazyků se svými vzory dělení je celkem 54 a písmen v abecedě je jen 26). Přepínač \pllang ovšem začne fungovat až po \input t1code, protože polské vzory dělení jsou zavedeny v kódování Cork (alias T1).

Je-li při generování formátu detekován 16bitový TeX (LuaTeX, XeTeX), je možné zavádět vzory dělení označené jako \..Unicode, např. \deUnicode, \ruUnicode, \plUnicode. Do těchto vzorů dělení je pak možné se přepnout (\delang, \rulang, \pllang, \czlang, ...), pokud předchází \input ucode. Je také nutné na sazbu v Unicode navázat Unicodovým fontem, jinak na výstupu uvidíte zmršenou sazbu. K dispozici je v tuto chvíli jen příkaz \input lmfonts, který v takovém případě zavádí Latin Modern fonty v Unicode. Zájemci o 16bitové dobrodružství si mohou vytvořit další fotnové soubory.

CSplain nastavuje po \input ucode parametry \lccode jen pro českou a slovenskou abecedu, tj. pokud používáte jiný jazyk, je nutné si pro něj nastavit potřebná \lccode. Jinak unikódované vzory dělení cizích jazyků nebudou fungovat.

9. Doporučená literatura

Položky jsou uvedeny v doporučeném pořadí.

  1. Petr Olšák: První setkání s TeXem.
  2. Petr Olšák: TeX pro pragmatiky.
  3. Petr Olšák: TeXbook naruby.
  4. Petr Olšák: Typografický systém TeX.
  5. Donald Knuth: The TeXbook.