Hlavní navigace

ConTeXt: psaní TeXnických textů

Jakub Šťastný 1. 3. 2007

V dnešním článku o systému ConTeXt se budeme zabývat psaním technických textů, tedy různými způsoby zápisu programového kódu a zvýrazňování jeho syntaxe. Povíme si také, jaké znaky TeX nerad vidí použité samostatně a co dělat s tím, abychom je vůbec v běžném textu mohli používat a zobrazovat.

Prostředí verbatim

V ConTeXtu se toto prostředí nejmenuje verbatim, jak je již poměrně zažité zejména z LaTeXu, ale typing. Poněvadž je to prostředí, je třeba kód umístit mezi \starttyping\stoptyping.

V tomto prostředí je každý znak zpracován v námi zapsané podobě, tedy zpětné lomítko je pouhým zpětným lomítkem, nikoliv znakem uvozujícím příkaz. Takto to platí na všechny znaky včetně znaků konce řádku a tabulátorů. Co se tabulátorů týče, osobně si myslím, že je zde rozumnější místo nich používat mezery, tabulátory mi zde přijdou zbytečně velké.

Kromě zmíněného prostředí typing máme k dispozici příkaz \type. Ten slouží k témuž, s tím rozdílem, že je určen k použití v textu. Jinými slovy chcete-li zapsat větší kus kódu, použijete prostředí typing, kdežto na jednotlivý příkaz umístěný přímo v odstavci příkaz použijte  \type.

Snadno se vám může stát, že obsahem příkazu \type bude kód obsahující složené závorky. Budou-li navíc nespárované, tedy počet levých závorek nebude odpovídat závorkám pravým, pak nebude možno použít \type{text se závorkou {}, nýbrž bude třeba jako oddělovač použít jiný znak, třeba znak roury: \type|text se závorkou {|. Nebo místo znaku roury můžete použít klidně lomítko, je to jedno.

Dalším požadavkem na toto prostředí bývá zvýrazňování syntaxe. To jsme si již předvedli v prvním díle, dnes si podrobněji vysvětlíme, co se to tam vlastně dělo. Kód vypadal takto:

\definetyping[TEX][option=TEX] 

Vezmeme-li to obecně, lze to přepsat jednoduše takto:

\definetyping[jakékoliv jméno][option=jazyk, jehož syntaxi chceme zvýrazňovat] 

Toto je jeden z příkazů, které mají za cíl něco definovat, tedy vytvořit novou instanci prvku s námi zadanými parametry. Jste-li programátory, možná vám ke snazšímu pochopení může pomoci informace, že v základě je naprosto stejné jako je v objektovém programování vytvoření nového objektu. Všechny takové příkazy začínají řetězcem \define, za nímž následuje, co že to vlastně chceme vůbec definovat.

Zde definujeme nové prostředí s vlastnostmi podobnými prostředí typing, ale s některými námi upravenými parametry. Protože definujeme něco nového, musíme to také nějak pojmenovat. A samozřejmě tím jménem to pak budeme volat. Protože jsme definovali nové prostředí, a protože víme, že příkazy prostředí se sází mezi \start prostředí a \stop prostředí, je nasnadě, že prostředí definované v ukázce výše se bude volat \startTEX  – \stopTEX. Stejně tak ale můžete použít třeba „mysackovokras­neprostredi” či jakýkoliv jiný název, je to jedno.

Jazyky, jejichž syntaxi umí ConTeXt zvýrazňovat, jsou MetaPost, TeX, Perl a JavaScript, respektive nepodařilo se mi nikde najít, že by uměl něco dalšího, ovšem vzhledem k jeho rychlému vývoji to nemohu vyloučit. Víte-li o nějakých dalších, budu potěšen, podělíte-li se o znalosti v diskusi. MetaPost zapíšeme jako MP, TeX jako TEX, Perl jako PL a JavaScript jako  JS.

Co třeba podívat se do minulého dílu seriálu o MetaPostu a zkusit si vysázet ukázku? Pokud vám to nepůjde, doporučuji zkontrolovat, zda máte v dokumentu \setupcolors[state=start], jak jsem ostatně již upozorňoval v minulém díle.

Další moc milý příkaz je \typefile{soubor}. Ten jako verbatim text vloží zadaný soubor.

Chování verbatim režimu můžeme ještě v mnohém změnit, ale o tom si řekneme, až budeme vědět něco o setupech.

Psaní speciálních znaků v běžném textu

TeX využívá některé znaky jako speciální, které nelze zapsat přímo. S několika z nich jsme se již seznámili – v prvé řadě je to zpětné lomítko uvozující kterýkoliv TeXový příkaz, dále je to komentář značící znak procenta a konečně závorky. Složené závorky tvoří skupinu, příkazy v ní obsažené mají význam pouze v ní (vzpomeňte na minulý díl a příklad s řezy).

Nicméně to není vše, existují ještě další speciální znaky. Pro vstup do matematického módu se používá znak dolaru, tilda značí nezlomitelnou mezeru, při definici maker se setkáváme se znakem mřížky a do toho všeho ještě znak ampersandu, kterým nebudu plést, v ConTeXtu je to s ním totiž trochu jinak než třeba v plainu. Tedy alespoň na první pohled, interně je to totéž.

Co tedy s tím? Obecná rada je lupnout před to zpětné lomítko a již by vše mělo fungovat v pořádku. Není to však zcela stoprocentní, problém dělají totiž závorky. Složenou závorku je třeba psát v matematickém módu a ještě k tomu escapovanou, tedy $\{$, a špičatou tagovou závorku taktéž v matematickém módu, ale neescapovanou, tedy pouze  $<$.

S problémem se dále můžete setkat u znaku stříšky a tildy. Jak již víte z minula, Knuth si o unicode mohl nechat tak leda zdát, a tedy všechno je vymyšleno tak, abyste si vystačili s ASCII. No a tak \^u vám vyplivne û a podobně \~O zase Õ. Řešení je prosté, stejně jako minule, prostě za příkaz dáme prázdnou skupinu a máme vystaráno: \~{}u už normálně vytiskne  ~u.

Našli jste v článku chybu?

2. 3. 2007 18:23

No, jeste vetsi porod byl prevod do PDF :(
onu velmi jednoducho vec jsem delal dnes 5 hodin.... no bohuzel to nevypada na obraceni smeru nasi firmy. Tohle byl asi posledni hrebicek do rakvicky :)

2. 3. 2007 9:12

Aha, děkuji za upozornění, tohle jsem nevěděl (matematiku neznám, neumím a tedy ani nesázím).
Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?