Využití TEXu při organizaci Mezinárodní matematické soutěže Vojtěcha Jarníka KMa PřF OU Vojtěch Jarník International Mathematical Competition VJIMC.osu.cz Brno.. 0
Hromadný tisk před soutěží Databáze univerzit Řídicí soubor Informace o soutěži Generování čísel Loga Třídění Prvočísla Potvrzení Jmenovky Databáze účastníků Rozmístění do učeben Generování tisku Generované databáze Seznamy Další tisk 0 / BACK
Tisk během soutěže Generované databáze Řídicí soubor Informace o soutěži Loga Změny v databázi Výběr porotců Generování tisku Třídění Opravný tisk Tabulky pro porotu Převodní tabulky Tabulka výsledků 0 / BACK
Zpracování výsledků Generované databáze Řídicí soubor Informace o soutěži Tabulka výsledků Zpracování Třídění PDF HTML RSS Generované tabulky 0 / BACK
Příklady do soutěže Řídicí soubor Zaslání Soubor s příkladem... Soubor s příkladem Sazba Výběr Short Úprava Soutěž Řešení 0 / BACK
0 Primitiv \csname Konstrukce \csname...\endcsname slouží k sestavení řídicí sekvence s názvem... \csname hbox\endcsname hbox V L A TEXu se používá expanze \begin{theorem}... \end{theorem} theorem... endtheorem Primitiv lze použít jako lepší alternativu \ifcase. \token#_# begingroup csname b a r v a # endcsname # endgroup \expandafter\def\csname barva\endcsname{\color{green}}... Nedefinovaná řídicí sekvence je primitivem \csname na úrovni expand procesoru definována jako ekvivalent primitivu \relax. / BACK
0 Unicode a L A TEX V kódování UTF- je znak Ž reprezentován dvěma oktety ^^c^^bd. V L A TEXu jsou tyto oktety aktivní a podléhají expanzi. ^^c ^^bd UTFviii@two@octets ^^c ^^bd... csname u : ^^c string ^^bd endcsname csname u : ^^c ^^bd endcsname u:^^c^^bd { \IeC {\v Z} IeC { v Z } v Z... / BACK
0 Zápis unicodových znaků do souboru Text Žlutý kůň v kódování UTF- je po načtení balíčku utf TEXem reprezentován jako tokeny ^^c ^^bd l u t ^^c ^^bd ^^ 0 k ^^c ^^af ^^c ^^ Po zápisu do souboru příkazem \write\file{žlutý kůň} bude v souboru text \IeC {\v Z}lut\IeC {\ y} k\iec {\r u}\iec {\v n} Po makrech \def\x{žlutý kůň}\meaning\x TEX vrátí tokeny m a c r o : - > ^^c ^^bd l u t ^^c ^^bd ^^ 0 k ^^c ^^af ^^c ^^ / BACK
0 Pomocí příkazů \def\bezzacatku#>{} \def\write##{\def\x{#}\write#{\expandafter\bezzacatku\meaning\x}} \WRITE\file{Žlutý kůň} se do souboru zapíší správné tokeny (znaky) ^^c ^^bd l u t ^^c ^^bd ^^ 0 k ^^c ^^af ^^c ^^ Takto lze změnit kategorie zpracovaných tokenů. / BACK
0 Načítání údajů z databází Mějme soubor s databází účastníků. Karel:Horák:Praha: Jaromír:Kuben:Brno: Petr:Olšák:Praha: Pavel:Stříž:Zlín: Tento soubor lze načíst makrem \nactisoubor{soubor.dat}{\jmeno\prijmeni\mesto}\zpracuj Makro provede cyklus přes všechny řádky souboru a na každý řádek aplikuje makro \zpracuj. Po expanzích dostaneme \def\jmeno {Karel}\def\prijmeni{Horák}\def\mesto{Praha}\zpracuj \def\jmeno{jaromír}\def\prijmeni{kuben}\def\mesto {Brno}\zpracuj \def\jmeno {Petr}\def\prijmeni{Olšák}\def\mesto{Praha}\zpracuj \def\jmeno {Pavel}\def\prijmeni{Stříž}\def\mesto {Zlín}\zpracuj / BACK
0 Generování pseudonáhodných čísel Studentům,..., N se mají přiřadit jednoznačně čísla a,..., a N {,..., N}. Pokud je číslo p nesoudělné s N, je generátorem grupy ( {,..., N}, + ). Studentovi k tak lze přiřadit číslo a k = kp mod N. Rekurentní vztah lze jednoduše přepsat do TEXu. \advance\a\p \ifnum\a>\n \advance\a-\n \fi a k+ = a k + p mod N 0 / BACK
0 Má se rozmístit a j studentů do učebny u j. Studentovi se jménem c c... c m c m+ c m+... c n je přiřazeno číslo n ascii(c i ) mod. i= Podle této hodnoty se studenti setřídí do souboru a shora dolů se rozesadí do učeben. / BACK
0 Řazení Různé jazyky mají různá pravidla pro abecední řazení. Čeština: víchlavý < viď < vidle < vichřice Maďarština: meggyaláz < megzavar < megy < meggy Ruština: véktor < grádus < znachenie < índeks Při VJIMC se odstraní akcenty a řadí se podle anglické abecedy. Je třeba zaměnit,,,... Nahrazování posloupností tokenů řeší makra Petra Olšáka [Zpravodaj CsTUG /0]. / BACK
0 Pro jednoduchost se pro samotné řazení používají příkazy operačního systému: sort -o výstup vstup sort vstup > výstup V programu se operační systém zadá makrem \OS{linux} které je definováno \def\os{\def\theos} Řazení pak provádí makro \sort{vstup}{výstup} Definice je závislá na operačním systému. \def\sortlinux##{\execute{sort -o # #}} \def\sortwindows##{\execute{sort # > #}} \def\sort{\csname sort\theos\endcsname} / BACK
0 Transformační matice Prohlížeče pdf souborů pracují s transformační maticí, která trasformuje uživatelský souřadnicový systém na souřadnicový systém výstupního zařízení, ( ) ( ) x y α β 0 = x y γ δ 0 ε ζ Změna transformační matice se provádí pdf operátorem cm. Příkaz \pdfliteral{η θ ι κ λ µ cm} nastaví novou transformační matici α β 0 γ δ α β 0 η θ 0 0 = γ δ 0 ι κ 0 ε ζ ε ζ λ µ pdf operátory q a Q slouží k práci se zásobníkem grafických stavů. / BACK
.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 / BACK
0 \def\cm{\pdfliteral{\c-\s\s\c0 0 cm}}\def\c{0. }\def\s{0. }\def\activedef#{\begingroup\uccode \~#\uppercase{\endgroup\def~}}\newcount\i\i\loop\ifnum\i<\advance\i \expandafter\activedef\expandafter\i\expandafter{\expandafter\char\the\i\cm}\repeat\activedef{ \}}{\endgroup}\def\spirala#{\begingroup\i\loop\ifnum\i<\advance\i\catcode\i\repeat\catcode \} \let\x}\overfullrule0pt\spirala{...}\bye / BACK
0 Zúžená sazba do tabulky Pomocí transformační matice lze dosáhnout zvýraznění textu. \def\xscale##{\setbox0=\hbox{#}% \hbox{\pdfliteral{q # 0 0 0 0 cm}\rlap{#}\pdfliteral{q}% \kern#\wd0}} \xscale{}{zvýraznění} \xscale{}{textu} V tabulkách je výhodné široký text zúžit na danou šířku. První Druhý Třetí sloupec je sloupec je sloupec je zarovnán zarovnán zarovnán doleva na střed doprava V pátém řádkujsou všechnypoložky široké \def\radektabulky###% {\leftboxmm{#}\centerboxmm{#}\rightboxmm{#}} \radektabulky{první}{druhý}{třetí} \radektabulky{sloupec je}{sloupec je}{sloupec je}... / BACK
0 Jednoduché ignorování maker a prostředí Následující makro umožňuje ignorovat makra včetně jejich i nepovinných argumentů. \def\ignoruj#{\def#####{\toks0=}} První expanze makra \ignoruj\usepackage vede na def usepackage # # { toks 0 = } Při použití se \usepackage[czech]{babel} expanduje na toks 0 = { b a b e l } Toto přiřazení se dále nepoužije. Po změně názvu makra dostaneme hříčku \def\##{\def#####{\toks0=}} / BACK
0 Následující makro umožňuje ignorovat obsah prostředí. \def\ignorujprostredi#{\@namedef{#}{\setbox0=\vbox\bgroup \hsize\maxdimen \emergencystretch\maxdimen \hbadness000 \ignoruj\ref} \@namedef{end#}{\egroup}} Expanze makra \ignorujprostredi{solution} vede na def solution { setbox 0 = vbox bgroup... } def endsolution { egroup } Při použití se \begin{solution} text text \end{solution} expanduje na setbox 0 = vbox {... t e x t 0 t e x t 0 } Toto přiřazení se dále nepoužije. / BACK
0 0 Použití jednoho zdrojového souboru pro šest výstupů \documentclass{vjc-prob} \year{} \category{ii} \author{robert Skiba} \university{nicolaus Copernicus...} \def... \begin{document} \begin{problem} Let $E$ be the set... \end{problem} \begin{solution} By the fundamental theorem... \end{solution} \end{document} / BACK
0 / BACK
\documentclass [vyber]{vjc-prob} \documentclass{vjc-prob} \year{} \rocniksouteze{$^{\text{th}}$} \category{ii} \datumsouteze{$^{\text{st}}$ April 0} \problemno{} 0 \begin{problems} \prob bonnb \prob vilnius \prob zagreba \prob warsaw \prob mariborc \prob torun \prob targujiua \prob zagreba \prob katowice \prob toruna \prob torunb \prob ostravaa... \end{problems} \author{robert Skiba} \university{nicolaus Copernicus...} \def... \begin{document} \begin{shortproblem} Show that... \end{shortproblem} \begin{problem} Let $E$ be the set... \end{problem} \begin{solution} By the fundamental theorem... \end{solution} \end{document} / BACK
\documentclass [short]{vjc-prob} \documentclass{vjc-prob} \year{} \rocniksouteze{$^{\text{th}}$} \category{ii} \datumsouteze{$^{\text{st}}$ April 0} \problemno{} 0 \begin{problems} \prob bonnb \prob vilnius \prob zagreba \prob warsaw \prob mariborc \prob torun \prob targujiua \prob zagreba \prob katowice \prob toruna \prob torunb \prob ostravaa... \end{problems} \author{robert Skiba} \university{nicolaus Copernicus...} \def... \begin{document} \begin{shortproblem} Show that... \end{shortproblem} \begin{problem} Let $E$ be the set... \end{problem} \begin{solution} By the fundamental theorem... \end{solution} \end{document} / BACK
0 \documentclass[uprava]{vjc-prob} \documentclass{vjc-prob} \year{} \rocniksouteze{$^{\text{th}}$} \category{ii} \datumsouteze{$^{\text{st}}$ April 0} \problemno{} \points{0} \author{robert Skiba} \university{nicolaus Copernicus...} \begin{problems} \prob () bonnb \prob () vilnius \prob () zagreba \prob () warsaw \prob () mariborc \prob () torun \prob () targujiua \prob () zagreba \prob katowice \prob toruna \prob torunb \prob ostravaa... \end{problems} \def... \begin{document} \begin{shortproblem} Show that... \end{shortproblem} \begin{problem} Let $E$ be the set... \end{problem} \begin{solution} By the fundamental theorem... \end{solution} \end{document} / BACK
0 \documentclass[soutez]{vjc-prob} \documentclass{vjc-prob} \year{} \rocniksouteze{$^{\text{th}}$} \category{ii} \datumsouteze{$^{\text{st}}$ April 0} \problemno{} \poceti{} \points{0} \pocetii{} \author{robert Skiba} \shiftii{00} \university{nicolaus Copernicus...} \begin{problems} \prob () bonnb \prob () vilnius \prob () zagreba \prob () warsaw \prob () mariborc \prob () torun \prob () targujiua \prob () zagreba \prob katowice \prob toruna \prob torunb \prob ostravaa... \end{problems} \def... \begin{document} \begin{shortproblem} Show that... \end{shortproblem} \begin{problem} Let $E$ be the set... \end{problem} \begin{solution} By the fundamental theorem... \end{solution} \end{document} / BACK
0 \documentclass[reseni]{vjc-prob} \documentclass{vjc-prob} \year{} \rocniksouteze{$^{\text{th}}$} \category{ii} \datumsouteze{$^{\text{st}}$ April 0} \problemno{} \poceti{} \points{0} \pocetii{} \author{robert Skiba} \shiftii{00} \university{nicolaus Copernicus...} \begin{problems} \prob () bonnb \prob () vilnius \prob () zagreba \prob () warsaw \prob () mariborc \prob () torun \prob () targujiua \prob () zagreba \prob katowice \prob toruna \prob torunb \prob ostravaa... \end{problems} \def... \begin{document} \begin{shortproblem} Show that... \end{shortproblem} \begin{problem} Let $E$ be the set... \end{problem} \begin{solution} By the fundamental theorem... \end{solution} \end{document} / BACK
0 Makra závislá na volbě Následující konstrukce ukazuje, jak lze definovat makra, která se chovají různě v závislosti na volbě, se kterou je volána třída. \DeclareOption {vyber}{\def\volba {vyber}} \DeclareOption{uprava}{\def\volba{uprava}}... \ProcessOptions... \def\podlevolby#{\def#{\csname\string#@\volba\endcsname}} \podlevolby\prob... \def\prob@vyber{...} \def\prob@uprava{...} / BACK
0 Pokud je v řídicím souboru \documentclass[vyber]{vjc-prob} dochází k následující expanzi \prob csname p r o b @ volba endcsname csname p r o b @ v y b e r endcsname prob@vyber... / BACK
0 Uvedenou konstrukci lze využít při sazbě zápatí. \podlevolby\zapati... \cfoot{\zapati}... \def\zapati@vyber{...} \def\zapati@uprava{...} Při volbě soutez zápatí nechceme. Stačí makro \zapati@soutez nenadefinovat. Potom dochází k expanzi \zapati csname z a p a t i @ volba endcsname csname z a p a t i @ s o u t e z endcsname zapati@soutez = relax / BACK
0 Efektivně je předchozí konstrukce využita v těle hlavního dokumentu. \podlevolby\cykluspressoutezici \podlevolby\sloupce \podlevolby\endsloupce... \def\sloupce@short{\begin{multicols}{}} \def\endsloupce@short{\end{multicols}} \def\cykluspressoutezici@soutez{...}... \begin{document} \sloupce \cykluspressoutezici\obsah \endsloupce \end{document} / BACK
Tisk diplomů Generované tabulky Řídicí soubor Informace o soutěži Loga Generování tisku Diplomy 0 / BACK
\bye.. Ostrava