[cstex] Testovaci TeXova makra a UTF-8 v ConTeXtu

Zdenek Wagner zdenek.wagner at gmail.com
Thu Apr 22 14:37:33 CEST 2010


2010/4/22 Jaroslav Hajtmar <hajtmar at gyza.cz>:
> Díky za jednoduché řešení - funguje to jak jste napsal ...
> Určitě mne však stejně čeká zjistit jak to udělat systémově, protože má
> zkušenost je, že je jen otázka času kdy to budu potřebovat řešit na jiné
> úrovni a tam mi podobný "fígl" nepomůže. Zkusím napsat to ConTeXtové
> konfery..
>
> BTW: Kdysi jsem to makro měl s testováním písmenka "ž", ale nakonec jsem ho
> předělal, protože externí tabulky, které mi jsou dodávány někdy mají příznak
> pohlaví "z" a někdy "ž". S písmenkem "m" mi to připadlo univerzálnější ...
>
Až budete mít na výběr možnosti "š" a "č", pak tento jednoduchý recept
nebude fungovat. Souhlsím s Petrem Olšákem v tom, že vstup TeXu má být
řešen tak, aby písmeno bylo písmeno s kategorií 11, ne dva byty, kde
každý ma jíný \catcode. Možná to lze nějak chytřeji srovnávat pomocí
LUA.

> Ještě jednou díky ..
>
> J.Hajtmar
>
> Dne 22.4.2010 13:16, Zdenek Wagner napsal(a):
>>
>> 2010/4/22 Jaroslav Hajtmar<hajtmar at gyza.cz>:
>>
>>>
>>> Dobrý den.
>>> Načítám z externího UTF-8 souboru data (např. údaj o pohlaví) a ten
>>> následně
>>> načtu do TeXového makra \Pohl pro další použití.
>>>
>>> Chci se zeptat, jak lze pomocí \if (nebo jinak) testovat shodu znaku s
>>> obsahem makra \Pohl. V makru \Pohl je zřejmě znak k v kódování UTF a když
>>> jej chci porovnat, tak test pokaždé selže.
>>> Upozorňuji na to, že když jsem měl ext. soubor v kódování cp-1250, tak
>>> vše
>>> fungovalo. Bohužel jsem musel kvůli tomu, že ConTeXt MKIV mi nechce
>>> zpracovávat externí data s kódováním CP-1250 přejít na kódování UTF-8.
>>>
>>>
>>
>> To je spíš otázka na někoho, kdo zná vnitřnosti ConTeXtu. Rozdíl je
>> totiž v tom, že písmeno "m" je 1 byte, zatímco "ž" potřebuje v UTF-8 2
>> byty. XeTeX pracuje interně v Unicode, takže je to v obou případech
>> chápáno jako 1 písmeno a Váš \if bude fungovat. Pokud se použije TeX s
>> encTeXem, pak bude "ž" na vstupu překonverováno na 8bitový znak v
>> kódování fontu a \if bude fungovat. V LaTeXu s balíčkem inputenc už to
>> fungovat nebude.
>>
>> Napadá mě, že by stačilo otočit pořadí taktu:
>>
>> \if\Pohl m muž\else žena\fi
>>
>> Pokud je v \Pohl "m", pak je funkce zřejmá. Pokud je v \Pohl "ž", pak:
>>
>> a) v XeTeXu a při použití encTeXu expanduje podmínka na \if žm, je
>> tedy nepravdivá
>> b) v ostatních případech \Pohl expanduje na 2 tokeny, které vzhledem k
>> vlastnostem UTF-8 budou různé, podmínka tedy bude nepravdivá, text "m
>> muž" bude ignorován
>>
>>
>>>
>>> Příklad:
>>> (V \Pohl je znak "m" nebo "ž" načtený z ext. UTF-8 souboru.)
>>>
>>> \def\a{\if m\Pohl\ \else a~\fi}
>>>
>>> Prospěl\a
>>>
>>> Obsah makra \a je pokaždé "a" bez ohledu na to, zda je v \Pohl znak "m"
>>> nebo
>>> "ž"
>>>
>>> ConTeXtový soubor je kódován samozřejmě UTF-8 - a s nastavením:
>>>
>>> \enableregime[utf-8]
>>> \mainlanguage[cz]
>>>
>>> Díky za případné rady a náměty.
>>>
>>> J.Hajtmar
>>>
>>>
>>>
>>> _______________________________________________
>>> csTeX mailing list
>>> csTeX at cs.felk.cvut.cz
>>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>>
>>>
>>
>>
>>
>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>



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



More information about the csTeX mailing list