[cstex] Vlna pro XeTeX

Tomáš Kubina tomas.kubina at vsb.cz
Mon Jan 9 11:23:43 CET 2012


Krásné řešení,

prozatím jsem ho jen v rychlosti vyzkoušel na prvním textu co mi padl 
pod ruku a funguje...

Za sebe děkuji moc, bude v knihovničce skriptů pro xetex na čelním místě.

Tomáš Kubina

Dne 8.1.2012 16:43, Zdenek Wagner napsal(a):
> 2012/1/7 Zdenek Wagner<zdenek.wagner at gmail.com>:
>> TeXistky a TeXisté,
>>
> při podrobnějším zkoumání jsem zjistil, že se znak třídy 255 (začátek
> řetězce) vytvoří i vlivem příkazu hlavního procesoru mezi znaky. Pokud
> tedy bude slovo tvořeno pouze písmeny, která patří do třídy neslabičná
> předložka, vytvoří se nezlomitelná mezera i za nimi, tedy za slovy si,
> asi, oko, vak, kolo, okolo, sova, kus, kov, koza a zřejmě mnoho
> dalších. Zde je opravená verze, která již ten problém nemá:
>
> \XeTeXinterchartokenstate 1
> \newXeTeXintercharclass\CSopenpunctuation
> \newXeTeXintercharclass\CSnonsyllabicpreposition
> \XeTeXcharclass`\(\CSopenpunctuation
> \XeTeXcharclass`\[\CSopenpunctuation
> \XeTeXcharclass`\K\CSnonsyllabicpreposition
> \XeTeXcharclass`\k\CSnonsyllabicpreposition
> \XeTeXcharclass`\S\CSnonsyllabicpreposition
> \XeTeXcharclass`\s\CSnonsyllabicpreposition
> \XeTeXcharclass`\V\CSnonsyllabicpreposition
> \XeTeXcharclass`\v\CSnonsyllabicpreposition
> \XeTeXcharclass`\Z\CSnonsyllabicpreposition
> \XeTeXcharclass`\z\CSnonsyllabicpreposition
> \XeTeXcharclass`\O\CSnonsyllabicpreposition
> \XeTeXcharclass`\o\CSnonsyllabicpreposition
> \XeTeXcharclass`\U\CSnonsyllabicpreposition
> \XeTeXcharclass`\u\CSnonsyllabicpreposition
> \XeTeXcharclass`\A\CSnonsyllabicpreposition
> \XeTeXcharclass`\a\CSnonsyllabicpreposition
> \XeTeXcharclass`\I\CSnonsyllabicpreposition
> \XeTeXcharclass`\i\CSnonsyllabicpreposition
> \XeTeXinterchartoks 255 \CSnonsyllabicpreposition {\CSinterchartoks}
> \XeTeXinterchartoks \CSopenpunctuation \CSnonsyllabicpreposition
> {\CSinterchartoks}
> \def\CSnointerchartoks{\let\CSinterchartoks\PreCSpreposition}
> \def\PreCSpreposition{\def\next{}\let\CSinterchartoks\CSnointerchartoks
>    \ifnum\catcode`\ =10 % nothing will be done in verbatim
>    \ifmmode % nothing in math
>    \else
>    \let\next\ExamineCSpreposition
>    \fi \fi
>    \next}
> \def\ExamineCSpreposition #1{#1\futurelet\next\ProcessCSpreposition}
> \def\ProcessCSpreposition{\ifx\next\XeTeXspace\nobreak\fi}
> \futurelet\XeTeXspace{ }\CSnointerchartoks
>
>
>> dlouho mě trápilo, že encTeX umí vlnkovat pomocí \mubyte, ale XeTeX v
>> sobě encTeX nemá a mít nebude. Jeden mail (týkající se něčeho zcela
>> jiného) mě přivedl na myšlenku, že by se dalo dosáhnout automatického
>> vlnkování tímto způsobem:
>>
>> \XeTeXinterchartokenstate 1
>> \newXeTeXintercharclass\CSopenpunctuation
>> \newXeTeXintercharclass\CSnonsyllabicpreposition
>> \XeTeXcharclass`\(\CSopenpunctuation
>> \XeTeXcharclass`\[\CSopenpunctuation
>> \XeTeXcharclass`\K\CSnonsyllabicpreposition
>> \XeTeXcharclass`\k\CSnonsyllabicpreposition
>> \XeTeXcharclass`\S\CSnonsyllabicpreposition
>> \XeTeXcharclass`\s\CSnonsyllabicpreposition
>> \XeTeXcharclass`\V\CSnonsyllabicpreposition
>> \XeTeXcharclass`\v\CSnonsyllabicpreposition
>> \XeTeXcharclass`\Z\CSnonsyllabicpreposition
>> \XeTeXcharclass`\z\CSnonsyllabicpreposition
>> \XeTeXcharclass`\O\CSnonsyllabicpreposition
>> \XeTeXcharclass`\o\CSnonsyllabicpreposition
>> \XeTeXcharclass`\U\CSnonsyllabicpreposition
>> \XeTeXcharclass`\u\CSnonsyllabicpreposition
>> \XeTeXcharclass`\A\CSnonsyllabicpreposition
>> \XeTeXcharclass`\a\CSnonsyllabicpreposition
>> \XeTeXcharclass`\I\CSnonsyllabicpreposition
>> \XeTeXcharclass`\i\CSnonsyllabicpreposition
>> \XeTeXinterchartoks 255 \CSnonsyllabicpreposition {\PreCSpreposition}
>> \XeTeXinterchartoks \CSopenpunctuation \CSnonsyllabicpreposition
>> {\PreCSpreposition}
>> \def\PreCSpreposition{\def\next{}%
>>   \ifnum\catcode`\ =10 % nothing will be done in verbatim
>>   \ifmmode % nothing in math
>>   \else
>>   \let\next\ExamineCSpreposition
>>   \fi \fi
>>   \next}
>> \def\ExamineCSpreposition #1{\XeTeXinterchartokenstate0 \relax
>>   #1\XeTeXinterchartokenstate1 \relax\futurelet\next\ProcessCSpreposition}
>> \def\ProcessCSpreposition{\ifx\next\XeTeXspace\nobreak\fi}
>> \futurelet\XeTeXspace{ }
>>
>> Ověřil jsem, že se správně vloží kerning mezi A a V ve zkratce AVČR.
>> Pak jsem vložil písmeno f příkazem
>> \XeTeXcharclass`\f\CSnonsyllabicpreposition
>> do seznamu neslabičných předložek a ověřil jsem, že vzniknou správně
>> obě ligatury ve slově fifinka. Slova, která začínají písmenem
>> obsaženým v seznamu neslabičných předložek, jsou dělitelná, což jsem
>> ověřil sazbou testovacího textu do úzkého sloupce. Nenarazil jsem na
>> žádný problém. Zajímaly by mě Vaše zkušenosti s těmito makry.
>> --
>> Zdeněk Wagner
>> http://hroch486.icpf.cas.cz/wagner/
>> http://icebearsoft.euweb.cz
>
>




More information about the csTeX mailing list