Využití TEXu při organizaci Mezinárodní matematické soutěže Vojtěcha Jarníka Using TEX for Organizing Vojtěch Jarník International Mathematical Competition KMa PřF OU Vojtěch Jarník International Mathematical Competition VJIMC.osu.cz Brejlov.. 0
Využití TEXu při organizaci VJIMC Hlavní procesy Hromadný tisk před soutěží Main Processes Generated printing before the competition Driver file Infos about competition Logos Primes Database of universities Database of participants Generating numbers Generating rooms Sorting Generating printing Confirmation Nametags Lists Further printing Generated databases / BACK
Using TEX for Organizing VJIMC Tisk během soutěže Generated databases Driver file Printing during the competition Infos about competition Logos Changes in databases Choice of jury Generating printing Sorting Corrected printing Tables for jury Conversion tables Table of results / BACK
Využití TEXu při organizaci VJIMC Zpracování výsledků Generated databases Driver file Processing the results Infos about competition Table of results Processing Sorting PDF HTML RSS Generated tables / BACK
Using TEX for Organizing VJIMC Příklady do soutěže Problems for the competition Driver file Proposal File with problem File with problem Typesetting Choice Short Arrangement Competition Solution / BACK
Využití TEXu při organizaci VJIMC 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 Reading Data from Databases Consider a file with database of participants. This file can be read by macro This macro performs a loop over all lines of the file and applies macro \zpracuj on every line. After expansions we obtain \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
Using TEX for Organizing VJIMC Implementace \def\umazmezeru# \bflmpsvz{\def\radek{#}} \def\nactiudaje{% \ea\umazmezeru\radek\bflmpsvz \ea\def\ea\tmpfd\ea{\fdinp\bflmps}% \ea\nactiudaj\radek\bflmpsvz} \def\dalsicsudaje{\ea\dcsua\tmpfd:} \def\dcsua##:{% \def\csudaje{#}% \ifx:#:% \message{^^jspatny format databaze^^j}% \else \def\tmpfd{#}% \fi} \def\nactiudaj#:#\bflmpsvz{% \dalsicsudaje \ea\def\csudaje{#}% \ifx@#@% \let\next\relax% \else \def\next{\nactiudaj#\bflmpsvz}% \fi \next} \newread\inpfile \def\nactisoubor###{% \def\nazevsouboru{#}% \def\fdinp{#}% \def\zpracujradek{#}% \openin\inpfile=# \nsb \nsa \closein\inpfile} \def\nsa{% \read\inpfile to \radek \ifeof\inpfile \let\next\relax \else \def\next{\nactiudaje\zpracujradek\nsa}% \fi \next} \def\nsb{\ifeof\inpfile \edef\nsba{program bude ukoncen. Vizte sekci \nazevsouboru\space v dokumentaci.}% \errhelp\ea{\nsba}% \errmessage{nacitany soubor \nazevsouboru\space neexistuje}% \csname enddocument\endcsname \fi} Implementation / BACK
Využití TEXu při organizaci VJIMC 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 Writing Unicode Characters to File Text Žlutý kůň in UTF encoding is after loading of the utf package represented by TEX as tokens \write{žlutý kůň} Po zápisu do souboru příkazem bude v souboru text \IeC {\v Z}lut\IeC {\ y} k\iec {\r u}\iec {\v n} After writing to a file by command the file will contain text \def\x{žlutý kůň}\meaning\x Po příkazech TEX vrátí tokeny After commands TEX returns tokens m a c r o : - > / BACK
Using TEX for Organizing VJIMC Pomocí příkazů Using commands \def\bezzacatku#>{} \def\write##{\def\x{#}\write#{\expandafter\bezzacatku\meaning\x}} \WRITE\file{Žlutý kůň} TEX do souboru zapíše správné tokeny (znaky) TEX writes correct tokens (characters) to the file Takto lze změnit kategorie znaků již zpracovaných token procesorem. In this way one can change catcodes of characters already processed by token processor. / BACK
Využití TEXu při organizaci VJIMC 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 Rekurentní vztah lze jednoduše přepsat do TEXu. \advance\a\p \ifnum\a>\n \advance\a-\n \fi a k = kp mod N. Generating Pseudorandom Numbers One has to assign unique numbers a,..., a N {,..., N} to students,..., N. If a number p is coprime with N, it is a generator of group ( {,..., N}, + ). Student k then can have number The recurrence a k+ = a k + p mod N can be easily written in TEX. / BACK
Using TEX for Organizing VJIMC Řazení Různé jazyky mají různá pravidla pro abecední řazení. Sorting Different languages have different rules for alphabetic sorting. Čeština: víchlavý < vidle < Vícha < vichřice :Czech Maďarština: menza < menyét < mennyi :Hungarian Ruština: véktor < grádus < dispérsiya < znachenie < índeks :Russian Při VJIMC se odstraní akcenty a řadí se podle anglické abecedy. TEX musí zaměnit During VJIMC we remove accents and sort according to english alphabet. TEX has to replace,,,... Nahrazování posloupností tokenů řeší makra Petra Olšáka [Zpravodaj CsTUG /00]. Replacing sequences of tokens is done by macros of Petr Olšák [Bulletin CsTUG /00]. / BACK
Využití TEXu při organizaci VJIMC Pro jednoduchost se pro samotné řazení používají příkazy operačního systému: sort -o výstup vstup sort vstup > výstup \OS{linux} \def\os{\def\theos} \sort{vstup}{výstup} V TEXu se operační systém zadá makrem které je definováno Řazení pak provádí makro 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} For simplicity the sorting itself is done by commands of the operating system: In TEX the user enters operating system by macro which is defined by Sorting is then done by macro Its definition depends on operating system. / BACK
Using TEX for Organizing VJIMC 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 Simple Ingoring of Macros and Environments The following macro allows to ignore macros with their argument, including optional arguments. First expansion of macro \ignoruj\usepackage \def\usepackage##{\toks0=} \usepackage[czech]{babel} vede na Při použití se leads to Then the following expanduje na expands to \toks0={babel} Toto přiřazení se dále nepoužije. This assignment is not used later. / BACK
Využití TEXu při organizaci VJIMC Jednoduché ignorování maker a prostředí Při změně názvu makra \ignoruj dostaneme hříčku \def\##{\def#####{\toks0=}} \#\usepackage \def\usepackage##{\toks0=} \usepackage[czech]{babel} \toks0={babel} První expanze makra vede na Při použití se expanduje na Toto přiřazení se dále nepoužije. Simple Ingoring of Macros and Environments Changing the name of macro \ignoruj we obtain puzzle First expansion of macro leads to Then the following expands to This assignment is not used later. / BACK
Using TEX for Organizing VJIMC Následující makro umožňuje ignorovat obsah prostředí. The following macro allows to ignore content of an environment. \def\ignorujprostredi#{\@namedef{#}{\setbox0=\vbox\bgroup \hsize\maxdimen \emergencystretch\maxdimen \hbadness00 \ignoruj\ref} \@namedef{end#}{\egroup}} \ignorujprostredi{solution} První expanze makra vede na \def\solution{\setbox0=\vbox\bgroup } \def\endsolution{\egroup} Při použití se \begin{solution} text text \end{solution} \setbox0=\vbox{ text text } expanduje na Toto přiřazení se dále nepoužije. First expansion of macro leads to Then the following expands to This assignment is not used later. / BACK
Využití TEXu při organizaci VJIMC Použití jednoho zdrojového souboru pro šest výstupů Using One Source File for Six Outputs \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
Using TEX for Organizing VJIMC \documentclass [vyber]{vjc-prob} \rocniksouteze{$^{\text{th}}$} \datumsouteze{$^{\text{st}}$ April 00} \documentclass{vjc-prob} \year{} \category{ii} \problemno{} \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
Využití TEXu při organizaci VJIMC \documentclass [short]{vjc-prob} \rocniksouteze{$^{\text{th}}$} \datumsouteze{$^{\text{st}}$ April 00} \documentclass{vjc-prob} \year{} \category{ii} \problemno{} \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
Using TEX for Organizing VJIMC \documentclass[uprava]{vjc-prob} \rocniksouteze{$^{\text{th}}$} \datumsouteze{$^{\text{st}}$ April 00} \documentclass{vjc-prob} \year{} \category{ii} \problemno{} \points{} \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
Využití TEXu při organizaci VJIMC \documentclass[soutez]{vjc-prob} \rocniksouteze{$^{\text{th}}$} \datumsouteze{$^{\text{st}}$ April 00} \poceti{} \pocetii{} \shiftii{0} \documentclass{vjc-prob} \year{} \category{ii} \problemno{} \points{} \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
Using TEX for Organizing VJIMC \documentclass[reseni]{vjc-prob} \rocniksouteze{$^{\text{th}}$} \datumsouteze{$^{\text{st}}$ April 00} \poceti{} \pocetii{} \shiftii{0} \documentclass{vjc-prob} \year{} \category{ii} \problemno{} \points{} \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
Využití TEXu při organizaci VJIMC 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. Macros Depending on Class Option \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{} By the following constructions one can define macros which behave differently depending on the option of the document class called. / BACK
Using TEX for Organizing VJIMC Makra závislá na volbě Macros Depending on Class Option \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{} Pokud je v řídicím souboru \documentclass[vyber]{vjc-prob} dochází k následující expanzi If the main file contains then the expansion is \prob \csname prob@\volba\endcsname \csname prob@vyber\endcsname \prob@vyber / BACK
Využití TEXu při organizaci VJIMC \podlevolby\zapati \cfoot{\zapati} \def\zapati@vyber{} \def\zapati@uprava{} Uvedenou konstrukci lze využít při sazbě zápatí. Při volbě soutez se zápatí nesází. Stačí makro \zapati@soutez nenadefinovat. Potom dochází k expanzi This construction can be used for typesetting page footer. There is no footer when option soutez is used. In this case macro \zapati@soutez is not defined. Then the expansion is \zapati \csname zapati@\volba\endcsname \csname zapati@soutez\endcsname \relax / BACK
Using TEX for Organizing VJIMC Efektivně je předchozí konstrukce využita v těle hlavního dokumentu. The above construction is effectively used in the body of main document. \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
Využití TEXu při organizaci VJIMC Generated tables Tisk diplomů Driver file Infos about competition Diplomas Logos Generating printing Diplomas / BACK
\bye.. 0 Ostrava