Discussione:
Cambiare dimensione solo ai font typewriter
(troppo vecchio per rispondere)
Carlo Zanziba
2011-02-16 08:57:52 UTC
Permalink
Salve a tutti,

come posso istruire il compilatore latex a modificare il default della
dimensione dei font tt (typewriter) da 10 a 9 e mantenere intatti tutti
gli altri per l'intero file tex?

Siccome il testo è pieno di parti di codice, vorrei evitare di fare
precedere tutte le parti in typewriter da \small e seguite da
\normalsize, o qualcosa del genere.

Non sono un grosso esperto di latex (anzi, per niente) e mi servirebbe
questo aiuto.

Grazie a tutti in anticipo.

Carlo
Enrico Gregorio
2011-02-16 09:19:12 UTC
Permalink
Post by Carlo Zanziba
Salve a tutti,
come posso istruire il compilatore latex a modificare il default della
dimensione dei font tt (typewriter) da 10 a 9 e mantenere intatti tutti
gli altri per l'intero file tex?
Siccome il testo è pieno di parti di codice, vorrei evitare di fare
precedere tutte le parti in typewriter da \small e seguite da
\normalsize, o qualcosa del genere.
Non sono un grosso esperto di latex (anzi, per niente) e mi servirebbe
questo aiuto.
Il comando da modificare è \ttfamily, ma non è un giochetto.

\usepackage{etoolbox}
\expandafter\patchcmd\csname ttfamily \endcsname
{\selectfont}{\small}{}{}

Occhio agli spazi.

Spiegazione. Il comando \ttfamily essenzialmente esegue

\fontfamily{\ttdefault}\selectfont

e il nostro scopo è di sostituire \selectfont con \small. Il
comando \selectfont è quello che sceglie il font richiesto
con gli attributi validi al momento, in questo caso cambia
solo la famiglia. Con \small c'è un \selectfont implicito,
così non c'è null'altro da fare.

Purtroppo non è \ttfamily il vero comando da modificare.
Infatti è definito usando il meccanismo di autoprotezione
in modo che se deve essere scritto su un file ausiliario non
viene espanso completamente. Il comando da modificare è

\ttfamily<spazio>

(proprio così, il nome termina con uno spazio) che non è
direttamente producibile. Perciò lo produciamo con il
trucco

\csname ttfamily \endcsname

e questo comando sottoponiamo al magico \patchcmd che
sostituisce \selectfont nella sua definizione con \small.
L'altrettanto magico \expandafter serve perché così
\patchcmd ha come primo argomento proprio il token che
a noi serve modificare.

Et voilà. :)

Ciao
Enrico
Carlo Zanziba
2011-02-16 09:46:10 UTC
Permalink
Post by Enrico Gregorio
Post by Carlo Zanziba
Salve a tutti,
come posso istruire il compilatore latex a modificare il default della
dimensione dei font tt (typewriter) da 10 a 9 e mantenere intatti tutti
gli altri per l'intero file tex?
Siccome il testo è pieno di parti di codice, vorrei evitare di fare
precedere tutte le parti in typewriter da \small e seguite da
\normalsize, o qualcosa del genere.
Non sono un grosso esperto di latex (anzi, per niente) e mi servirebbe
questo aiuto.
Il comando da modificare è \ttfamily, ma non è un giochetto.
\usepackage{etoolbox}
\expandafter\patchcmd\csname ttfamily \endcsname
{\selectfont}{\small}{}{}
Occhio agli spazi.
Spiegazione. Il comando \ttfamily essenzialmente esegue
\fontfamily{\ttdefault}\selectfont
e il nostro scopo è di sostituire \selectfont con \small. Il
comando \selectfont è quello che sceglie il font richiesto
con gli attributi validi al momento, in questo caso cambia
solo la famiglia. Con \small c'è un \selectfont implicito,
così non c'è null'altro da fare.
Purtroppo non è \ttfamily il vero comando da modificare.
Infatti è definito usando il meccanismo di autoprotezione
in modo che se deve essere scritto su un file ausiliario non
viene espanso completamente. Il comando da modificare è
\ttfamily<spazio>
(proprio così, il nome termina con uno spazio) che non è
direttamente producibile. Perciò lo produciamo con il
trucco
\csname ttfamily \endcsname
e questo comando sottoponiamo al magico \patchcmd che
sostituisce \selectfont nella sua definizione con \small.
L'altrettanto magico \expandafter serve perché così
\patchcmd ha come primo argomento proprio il token che
a noi serve modificare.
Et voilà. :)
Ciao
Enrico
Veramente grande. Sei stato gentilissimo.
Stasera proverò, ma mi sembra già di vedere che funziona...

Carlo
Enrico Gregorio
2011-02-16 10:06:21 UTC
Permalink
Post by Carlo Zanziba
[...]
Stasera proverò, ma mi sembra già di vedere che funziona...
In realtà non mi pare che il risultato sia valido. Più
probabilmente a te interessa non tanto per le parti in
carattere dattilografico "in linea", quanto per lunghe
parti "verbatim"; in tal caso non va modificato \ttfamily,
il trucco migliore è

\makeatletter
\***@addto@macro\@verbatim\small
\makeatother

Ciao
Enrico
Quasimodo
2011-02-16 10:45:43 UTC
Permalink
Post by Carlo Zanziba
Salve a tutti,
come posso istruire il compilatore latex a modificare il default della
dimensione dei font tt (typewriter) da 10 a 9 e mantenere intatti tutti
gli altri per l'intero file tex?
Siccome il testo è pieno di parti di codice, vorrei evitare di fare
precedere tutte le parti in typewriter da \small e seguite da
\normalsize, o qualcosa del genere.
Non sono un grosso esperto di latex (anzi, per niente) e mi servirebbe
questo aiuto.
Grazie a tutti in anticipo.
Carlo
Forse ti conviene usare il pacchetto 'listings', che permette di
scegliere la dimensione del carattere e molto altro...

Loading...