- Questo topic ha 3 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 15 anni, 4 mesi fa da
Sam Qasbah.
-
CreatoreTopic
-
8 Maggio 2011 alle 14:01 #58709::
Salve a tutti.Qualcuno di voi sa se esiste uno script (o magari ne ha scritto uno) in python o in lua che raccoglie le stringhe prodotte da fc-list e ci costruisce un file .tex che, una volta compilato, produca un “libro dei fonts” presenti sul proprio sistema? Qualcosa di simile al sampler.tex che una volta compilato produce il sampler.pdf, ma riferito a tutti i fonts presenti sul proprio sistema.
A me sembra che con XeTeX o LuaTeX dovrebbe essere piuttosto facile, ma in rete finora non ho trovato niente.
Ho provato a usare Font Manager, Fontmatrix e Specimen, ma non danno risultati soddisfacenti.
Grazie, ciao.
Sam Qasbah
-
CreatoreTopic
-
AutoreRisposte
-
-
8 Maggio 2011 alle 22:27 #58710::
Ci sto lavorando sopra. Al momento ho messo su qualcosa di macchinoso, ma che sembra funzionare; mi serve comunque qualche aiuto.-
dò nel terminale il comando `find / -name \*.otf -print`
Mi copio il risultato in un file di testo, diciamo “fonts.txt”
Ho scritto uno script python, diciamo “fontbook.py” `#!/usr/bin/env python
# -*- coding: utf-8 -*-def maketexfile():
flist = open('fonts.txt','r')
slist=[]
for line in flist:
if line[0]=='/': slist.append(line)
flist.close()slist.sort()
texfile = open('fontlist.tex','w')
for line in slist:
line = line.rstrip('\n')
texfile.write('\\font\currfont=”[%s]” at 12pt \n'% line)
texfile.write('\line{\\namefont %s\hfil}\par\hfil\hbox to 15cm{\currfont\sample}\medskip \n'% (line.rpartition('/'))[2])
texfile.close()if __name__ == '__main__':
maketexfile()
` Il nucleo dello script è il blocco “for line in slist”: per ogni linea di testo (contenente il path completo dei files *.otf presenti sul sistema) scrive nel file fontlist.tex due linee di testo secondo il seguente schema `\font\currfont=”[]” at 12pt
\line{\namefont\hfil}\par\hfil\hbox to 15cm{\currfont\sample}\medskip
`Mi sono altresì preparato un piccolo file TeX (fontbook.tex) che definisce \sample e richiama il file fontlist.tex prodotto dallo script di cui sopra `\font\titlefont=”[/home/sam/.local/share/font-manager/Library/A/afont.otf]” at 18pt
\font\namefont=”[/home/sam/.local/share/font-manager/Library/A/anotherfont.otf]” at 12pt\def\sample{Science is knowledge which we understand so well that we can teach it to a computer; and if we dont fully understand something, it is an art to deal with it.}
\line{\hfil\titlefont\bf The Font Book\hfil}\bigskip
\input fontlist.tex
\bye `
Compilando questo file con XeTeX si ottiene, finalmente, il FontBook dei fonts presenti sul mio sistema.
Tutto funziona bene, tranne il fatto che il TeX è più rognoso di quel che sembra: la frase “\sample” non viene spezzata in più righe dentro il box in cui viene composta, ma resta una unica riga che finisce fuori il foglio.
Come posso correggere? In altre parole: come posso modificare lo schema di due righe da inserire nel file fontlist.tex?
Mi si scusi la lunghezza del post. Grazie per ogni aiuto. Ciao.
Sam Qasbah
-
8 Maggio 2011 alle 23:04 #58711::
Ci sto lavorando sopra. Al momento ho messo su qualcosa di macchinoso, ma che sembra funzionare; mi serve comunque qualche aiuto.
-
dò nel terminale il comando `find / -name \*.otf -print`
Mi copio il risultato in un file di testo, diciamo “fonts.txt”
Ho scritto uno script python, diciamo “fontbook.py” `#!/usr/bin/env python
# -*- coding: utf-8 -*-def maketexfile():
flist = open('fonts.txt','r')
slist=[]
for line in flist:
if line[0]=='/': slist.append(line)
flist.close()slist.sort()
texfile = open('fontlist.tex','w')
for line in slist:
line = line.rstrip('\n')
texfile.write('\\font\currfont=”[%s]” at 12pt \n'% line)
fontnametuple = line.rpartition('/')
fontname = fontnametuple[2]
texfile.write('\line{\\namefont %s\hfil}\par\hfil\hbox to 15cm{\currfont\sample}\medskip \n'% fontname)
texfile.close()if __name__ == '__main__':
maketexfile()
` Il nucleo dello script è il blocco “for line in slist”: per ogni linea di testo (contenente il path completo dei files *.otf presenti sul sistema) scrive nel file fontlist.tex due linee di testo secondo il seguente schema `\font\currfont=”[]” at 12pt
\line{\namefont\hfil}\par\hfil\hbox to 15cm{\currfont\sample}\medskip
`Mi sono altresì preparato un piccolo file TeX (fontbook.tex) che definisce \sample e richiama il file fontlist.tex prodotto dallo script di cui sopra `\font\titlefont=”[/home/sam/.local/share/font-manager/Library/A/afont.otf]” at 18pt
\font\namefont=”[/home/sam/.local/share/font-manager/Library/A/anotherfont.otf]” at 12pt\def\sample{Science is knowledge which we understand so well that we can teach it to a computer; and if we dont fully understand something, it is an art to deal with it.}
\line{\hfil\titlefont\bf The Font Book\hfil}\bigskip
\input fontlist.tex
\bye `
Compilando questo file con XeTeX si ottiene, finalmente, il FontBook dei fonts presenti sul mio sistema.
Tutto funziona bene, tranne il fatto che il TeX è più rognoso di quel che sembra: la frase “\sample” non viene spezzata in più righe dentro il box in cui viene composta, ma resta una unica riga che finisce fuori il foglio.
Come posso correggere? In altre parole: come posso modificare lo schema di due righe da inserire nel file fontlist.tex?
Mi si scusi la lunghezza del post. Grazie per ogni aiuto. Ciao.
Sam Qasbah
Componi \sample in una \hbox, per forza non va a capo: \hbox è del tutto analogo a \mbox (con una lieve differenza).
Cambierei la riga
` texfile.write('\line{\\namefont %s\hfil}\par\hfil\hbox to 15cm{\currfont\sample}\medskip \n'% fontname)`
in
` texfile.write('\hbox{\\namefont %s}\vbox{\hsize15cm\currfont\sample}\medskip \n'% fontname)`
(aggiusta tu se ci sono problemi con Python). L’idea è di comporre
`\font\currfont=”[]” at 12pt
\hbox{\namefont}
\vbox{\hsize15cm\currfont\sample}\medskip`
Non c’è bisogno di \par, perché \hbox e \vbox non fanno uscire TeX dal modo verticale.Nota però che XeTeX accetta anche .ttf
Ciao
Enrico
-
9 Maggio 2011 alle 11:01 #58712::
…
Cambierei la riga
` texfile.write('\line{\\namefont %s\hfil}\par\hfil\hbox to 15cm{\currfont\sample}\medskip \n'% fontname)`
in
` texfile.write('\hbox{\\namefont %s}\vbox{\hsize15cm\currfont\sample}\medskip \n'% fontname)`…Nota però che XeTeX accetta anche .ttf
Ciao
EnricoGrazie. Adesso funziona bene.
Ho fatto un pò di ottimizzazione: adesso fontbook.tex è così`\font\titlefont=”[/home/sam/.local/share/font-manager/Library/A/Afontname.otf]” scaled 2000
\font\namefont=”[/home/sam/.local/share/font-manager/Library/A/Afontname.otf]” at 12pt\def\sample{Science is knowledge which we understand so well that we can teach
it to a computer; and if we dont fully understand something, it is an art to
deal with it.}\def\currline#1#2{\font\currfont=”[#1]” at 12pt\hbox{\namefont #2}\vbox{\hsize15cm\currfont\sample}\medskip}
\line{\hfil\titlefont\bf The Font Book\hfil}\bigskip
\input fontlist.tex
\bye`
Quindi la composizione di tutte le linee avviene in questo file con il comando \currline, in modo da poterlo modificare a piacere e semplicemente, mentre il file fontlist.tex contiene solo una lista di path di fonts racchiusi, appunto, nel comando \currline.
fontlist.tex viene composto automaticamente dallo script fontbook.py`
#!/usr/bin/env python
# -*- coding: utf-8 -*-import commands
def maketexfile():
print('Working. Please wait … \n')
output = commands.getoutput('find / -name \*.otf -print')
fontlist = output.split('\n')
print('.otf fonts now collected … \n')
output = ''
output = commands.getoutput('find / -name \*.ttf -print')
fontlist.extend(output.split('\n'))
print('.ttf fonts now collected … \n')
fontlist.sort()
print('fonts now sorted … \n')texfile = open('fontlist.tex','w')
try:
print('Writing .tex file … \n')
for fontpathline in fontlist:
if (fontpathline[0] == '/') and (fontpathline.count('_') == 0):
texfile.write('\currline{%s}{%s} \n' % (fontpathline, (fontpathline.rpartition('/'))[2]))
print('Job well done! \n')
finally:
texfile.close()if __name__ == '__main__':
maketexfile() ` che si occupa anche di interrogare il sistema (debian; per altri sistemi non garantisco) circa la presenza e il numero di fonts .otf e .ttf e ordinarli alfabeticamente.Fornisco il codice completo sia perchè ho notato che l’argomento affrontato in questo thread è piuttosto ricorrente, sia per incoraggiare chiunque abbia delle idee (soprattutto per la composizione del file fontbook.tex) a condividerle qui.
Grazie, ciao.
Sam Qasbah
p.s.: Enrico, madonna quanto ti invidio il livello e la profondità delle tue competenze. Ciao.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.