Re: Sovrascrivere \newfont, \ChapterNumber

#18727
Up
0
Down
::

Non mi pare una buona idea, meglio usare i comandi di NFSS per scegliere i font.

Scusa l’ignoranza… a che comandi ti riferisci? Esiste un comando che permette di scalare i caratteri senza passare per \newfont? (A parte i vari \large, \Large, etc?)[/code]

Cerca fntguide.pdf sul tuo sistema, scoprirai i comandi \fontsize e \selectfont.

Per darti una mano: il comando primitivo \fontname accetta come argomento (senza graffe, mi raccomando) un qualsiasi comando di selezione di font, però solo quelli di basso livello (non roba come \large o \bfseries, per intenderci).

I comandi di selezione di font di LaTeX sono a vari livelli: al più alto ci sono \bfseries, \large e così via. I comandi di LaTeX che cominciano con \font… sono di medio livello e vanno seguiti sempre da \selectfont.

I comandi di alto livello vengono tradotti in quelli di medio, per esempio \bfseries corrisponde, normalmente, a \fontseries{bx}\selectfont. Questi comandi di medio livello vengono a loro volta tradotti in comandi di basso livello. Per esempio, \fontseries{bx}\selectfont dato in un contesto in cui è in vigore il font normale a corpo 10 viene tradotto nella chiamata del comando \OT1/cmr/bx/n/10 (che non è scrivibile direttamente per via delle barre).

Sono questi i comandi che vengono accettati da \fontname. Per esempio
`\expandafter\fontname\csname OT1/cmr/bx/n/10\endcsname`
(occorre \csname per scrivere quel comando) produce la lista di token “cmbx10”, cioè il nome del file .tfm corrispondente al font che viene scelto con quel comando.

Tuttavia c’è un comando che si può usare sempre, nel contesto di \fontname, ed è \font; quando è argomento di \fontname si riferisce infatti al font corrente. Dunque se si scrive
`\fontname\font`
in un contesto dove è valido \bfseries, verrà prodotta la lista di token cmbx10 (ammettendo che siamo nelle impostazioni di default di LaTeX). Ecco spiegato l’arcano:
`\newfont\miofont{\fontname\font\space scaled 7000}`
definisce \miofont come un comando di scelta di font di basso livello che richiederà il font che ha lo stesso nome del tfm del font corrente, ma ingrandito sette volte. Occorre \space perché lo spazio dopo \font sarebbe mangiato in fase di lettura. Di fatto quella chiamata di \newfont si espande in
`\font\miofont=\fontname\font\space scaled 7000\relax`
e \fontname espande tutto ciò che segue finché trova qualcosa che non possa essere interpretato come richiesta di un font, nel caso specifico espande \font, poi \space e si ferma a \relax. Se il font corrente è cmbx10 (nome esterno), avremo che \miofont richiede
`cmbx10 scaled 7000`
Il primo comando \font in quella riga definisce il token simbolico che segue come comando di scelta di font.

Ammetterai che non è roba per principianti, eh? 😀

Ciao
Enrico

Go to top