Problem s fontami v matematickom rezime (plain)

Stepan Kasal kasal at matsrv.math.cas.cz
Tue Nov 6 10:23:51 CET 2001


Dobry den,

> pozor, spravne ma byt: \mathcode `\^^ff = "71FF

ospravedlnujem sa, pisal som, ze som to nezkusal.
(Vdaka za upozornenie, bola to pre mna prekvapiva informacia.)

> Toto samozrejme funguje (\mathchardef).

OK. Su situacie, v ktorych je \mathchardef lepsi, ale to viete Vy lepsie.

> Mna ale zaujima najma to, preco funguje subscript
> normalne a preco supercript nefunguje.

> > > Nasledujuci retazec:  $\bssb X_0^{^^ff}$

Problem nie je v tom, ci je to sub- alebo superscript.
(Schvalne skuste $\bssb X^0_{^^ff}$.)

Rozdiel je v tom, ze \mathcode`0 je "70xx, (xx je hex kod znaku `0')
ale \mathcode"ff je "00ff.

Ta prva hexadecimalna cislica (rovnako ako v \mathchardef) hovori, ci ide
o pismeno, delimiter, unarny/binarny operator, a podobne.
V nasom pripade je tam 0 alebo 7. Tieto dve cislice maju takmer rovnaky
vyznam, v obidvoch pripadoch ide o obycajny znak, pismeno, premennu.
Ale 0 a 7 se lisia v tom, ci sa bere do uvahy, aka je momentalne zvolena
\fam. Ked pouzijem napriklad "03xx, ide o znak s kodom xx z rodiny cislo 3,
nezavisle na tom, aka je momentalna hodnota \fam. Keby to bolo "73xx, ide
o znak s kodom xx, ktory je normalne z rodiny cislo 3, ale akonahle zmenim
\fam, pojde o znak z rodiny cislo \fam. (Presnejsie povedane: ked sa zacne
matematicky mod, je \fam nastavene na -1, a rodina zadana v \mathcode
sa pouziva, pokial je \fam rovne -1.)

Cize este raz, musite
> > 1) zmenit mathcode prislusneho znaku na "7xyy, tedy napr.
> > 	\mathcode `\^^ff = "71ff
pricom samozrejme nie je dolezite, aku rodinu zadate. V priklade som pouzil
cislo 1, ked pouzijete priamo cislo Vasej \bssbfam, mozte pisat napr.
$2^{^^ff}$ namiesto $\bsbb 2^{^^ff}$ alebo $2^{\bsbb ^^ff}$.

Ale \mathcode je platny iba vtedy, ak je \catcode prislusneho znaku 11
(pismeno) alebo 12 ("other").
Vynimkou je, ked si prislusny znak vyziadate pomocou \char, napr. \char255.

Ak chcete pouzivat ^^xx, musite mat nastaveny \catcode, ale pozor na pismenka
s akcentom.  Teda napr. \ifnum\catcode"XX=11 \else \catcode"XX=12 \fi
(je asi dobre si na to spravit makro).

Mohli byste pouzivat \char"FF, ale ja sa domnievan, ze to uz je lepsie
pouzit \mathchardef.  Pripadne mozte urobit \mathchardef\slon="70XX, aby
sa vyznam sekvencie \slon menil podla nastavenia \fam.

> Taktiez mi nejde o jeden znak, ale o definiciu vseobecne. Definovat si pre kazdy znak
> daneho fontu novu riadiacu sekvenciu, to sa mi zda trosku "ujete".

Musite pre kazdy znak z hornej polovice osetrit \mathcode, pripadne aj \catcode.
A pre kazdy znak z dolnej polovice, okrem a-z a A-Z, asi musite definovat
riadiacu sekvenciu.

> Napr. ak je rodina fontu
> ktory pouzivam vacsia ako 9 (preco by nemala byt), treba osetrit jej expanziu do
> \mathchardef v makre, pretoze
> \mathchardef\horneuvodzovky = "7\the\famXY FF nebude fungovat, atd...

\def \hexnumber #1{\ifcase #1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
	8\or 9\or A\or B\or C\or D\or E\else F\fi }

\mathchardef \slon = "7\hexnumber\famXY FF

(Riesenie pochadza z AMSTeXu, pred tym asi z vanilla.sty.)

S pozdravom,
	Stepan Kasal



More information about the csTeX mailing list