[cstex] Problém s makrem XeVlna

Petr Olsak petr at olsak.net
Tue Jun 4 07:02:23 CEST 2013


Vážení kolegové,

především: ano, zařadím definici \newXeTeXintercharclass do csplain.ini, 
ale než se to objeví v distribucích, bude to chvíli trvat. Takže okamžité 
řešení je vytvořit si kód s definicí přímo do dokumentu nebo do xevlna.sty 
nebo do csplain.ini a znovu generovat. Rovněž se při této příležitosti 
ptám, zda tam XeTeXisté nepotřebují ještě něco, aby se to udělalo při 
jednom. V manuálu xetex-reference.pdf se vesměs hovoří o XeTeX primitivech 
a toto je jediný případ, kdy se hovoří o makru (aniž to je explicitně 
zmíněno). Nebo se mýlím?

Navrhovaný kód do csplain.ini od pana Wagnera nebude fungovat při 
generování ostatních formátů, protože pomocí \ifx se nedá přeskakovat 
\newcount, je totiž v plainTeXu definovaný jako \outer. Takže připravuji 
zařadit do csplain.ini asi následující kód:

\ifx\XeTeXuseglyphmetrics\undefined \else % XeTeX specific:
   \csname newcount\endcsname \XeTeXallocatorG \XeTeXallocatorG=3
   \def\newXeTeXintercharclass#1{% \newXeTeXintercharclas is documented
      \global\advance\XeTeXallocatorG by1 % in xetex-reference.pdf
      \ifnum\XeTeXallocatorG<255
        \global\chardef#1=\XeTeXallocatorG
        \wlog{\string#1=\string\XeTeXintercharclass\the\XeTeXallocatorG}%
      \else \errmessage{No room for a new \XeTeXintercharclass}\fi}
   \XeTeXuseglyphmetrics=1
\fi

Lehce mimo téma: Povšimněte si, že mé makro se drží tradice udělat věci 
jednoduše, přímočaře a bez zavináčů. Na rozdíl od stejného makra v 
xetex.ini je napsáno srozumitelně a na sedmi řádcích (místo původních 
třinácti) a dá se jednoduše přečíst, co to dělá, a dělá to totéž.

Zdravím

Petr Olšák

On Tue, 4 Jun 2013, Zdenek Wagner wrote:

> Oprava, při kopírování jsem zapomněl vložit \catcode:
>
> Dne 4. června 2013 2:23 Zdenek Wagner <zdenek.wagner at gmail.com> napsal(a):
>> Dne 3. června 2013 22:50 Řehoř J. Žáček <rehor.zacek at gmail.com> napsal(a):
>>> Prosím, mohl byste mi tedy polopaticky říct, jak má ona konstrukce vypadat? Protože jestli to dobře chápu, tak se bude v konstrukci mezi \else a \fi zalamovat řádky a já bych rád, pokud by to bylo napsané a hned fungovalo korektně. Ještě jednou ale oceňuji Vaši pomoc.
>>> _______________________________________________
>>> csTeX mailing list
>>> csTeX at cs.felk.cvut.cz
>>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>
>> Za normálních okolností je konec řádku nahrazen mezerou a mezery na
>> začátku řádky jsou ignorovány, takže je jedno, mezi kterými tokeny se
>> řádek zlomí. Pro přehlednost lze řádky odsadit. Mělo by tudíž fungovat
>> toto:
>>
> \ifx\XeTeXuseglyphmetrics\
> undefined \else % XeTeX specific
> \XeTeXuseglyphmetrics=1
> %
> % Allocator for \XeTeXintercharclass values, from Enrico Gregorio
> %
> \catcode`\@=11
> \newcount\xe at alloc@intercharclass % allocates intercharclass
> \xe at alloc@intercharclass=\thr@@ % from 4 (1,2 and 3 are used by CJK, AFAIK)
> \def\xe at alloc@#1#2#3#4#5{\global\advance#1\@ne
> \xe at ch@ck#1#4#2% make sure there's still room
> \allocationnumber#1%
> \global#3#5\allocationnumber
> \wlog{\string#5=\string#2\the\allocationnumber}}
> \def\xe at ch@ck#1#2#3{%
> \ifnum#1<#2\else
>  \errmessage{No room for a new #3}%
> \fi}
> \def\newXeTeXintercharclass{%
> \xe at alloc@\xe at alloc@intercharclass\XeTeXintercharclass\chardef\@cclv}
> %at most 254
> \catcode`\@=112
> \fi
>
>>
>>
>>
>> --
>> 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
>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>


More information about the csTeX mailing list