[cstex] Vlna pro XeTeX

Zdenek Wagner zdenek.wagner at gmail.com
Sun Jan 8 16:43:41 CET 2012


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



-- 
Zdeněk Wagner
http://hroch486.icpf.cas.cz/wagner/
http://icebearsoft.euweb.cz




More information about the csTeX mailing list