Hai ragione. Chiedo scusa. Ma il file non è mio. Per questo avevo paura di postarlo. Io lavoro per una casa editrice e l’autore non sa che io sto lavorando al suo file. E’ stato lui a mettere tutti quei pacchetti. Io ho aggiunto solo fancyhdr. Ed è stato lui a scegliere amsart. Fosse stato per me, io vi avrei postato tutto il file.
Dov’è il problema? Non è compito dell’autore scegliere la forma finale del suo contributo, spetta alla casa editrice: il font principale, l’avanzamento di riga,la forma delle testatine, e varie altre cose sono di competenza dell’editore.
In ogni casa editrice che si rispetti c’è un “copy editor” che ha il difficile compito di adattare il contributo dell’autore alle linee guida della casa editrice. Potrebbe non essere un dipendente della casa editrice stessa, che può delegare la mansione a un curatore globale dell’edizione. In questo caso mi pare di capire che la grana è toccata a te. 🙂
Ho lavorato ad alcuni volumi di atti di convegni, con contributi da autori diversi e so come funziona: ognuno ha le sue idee, spesso bizzarre, su come risolvere certi problemi tipografici. Il fatto che l’autore abbia usato amsart non ti deve affatto forzare a impiegarlo ugualmente, scegli tu la classe che meglio si adatta all’esigenza di ottenere un prodotto finito che rispetti le scelte editoriali che ti sono imposte dalla casa.
Vuoi un modo per impostare l’avanzamento di riga in modo automatico che cioè non ti imponga di scoprire quale valore sia impostato dalla classe?
`\def\calclinespreadfor#1{
\begingroup\normalsize
\dimen0=#1\relax
\count0=\dimen0
\multiply\count0 1000
\dimen0=\baselineskip
\divide\count0 by \dimen0
\ifnum\count0<1000
\count2=\count0 \count0=0
\else
\count2=\count0 \advance\count2 by -1000
\count0=1
\fi
\xdef\myratio{\number\count0.%
\ifnum\count2<100 0\fi
\ifnum\count2<10 0\fi
\number\count2 }
\endgroup
\linespread{\myratio}\normalsize}`
Sostituisci la chiamata \linespread{…} con \calclinespreadfor{12.8pt}.
Non è difficilissimo: dentro un gruppo, in modo da non turbare i valori dei contatori che uso, calcolo il rapporto fra l’avanzamento di riga desiderato e quello normale della classe. Ma, per avere un’accuratezza alla seconda cifra decimale, moltiplico il numeratore per 1000.
Si può assegnare a un contatore un valore dato da un parametro dimensionale, verrà preso il valore in sp (l’unità di misura interna di TeX: 1pt=65536pt, 1sp è circa 54nm).
Il rapporto quindi sarà, nel caso in cui si vogliano 12.8pt contro 13pt dati dalla classe, 984 (TeX tronca quando esegue le divisioni a risultato non intero). A questo punto guardo se il numero ottenuto è minore di 1000. A un contatore (che mi serve per la parte decimale) assegno il rapporto se minore di 1000, il rapporto – 1000 altrimenti; a un altro contatore assegno 0 oppure 1 (per la parte intera). Adesso definisco globalmente espandendo il corpo della definizione (\xdef) una macro la cui espansione sarà precisamente il rapporto. Per avere il risultato corretto aggiungo uno zero se la parte decimale è <100 e un altro zero se è <10. Facile, no? 🙂
Ah, direi che sarebbe meglio sostituire
`\setlength{\textheight}{487.2pt}
\setlength{\textwidth}{316,4pt}`
con un più semplice
`\setlength{\textheight}{17cm}
\setlength{\textwidth}{11cm}`
Ma preparati ad avere molte “Underfull \vbox” se insisti a usare amsart. Puoi però rimediare con un trucco ancora più bieco:
`\calclinespreadfor{12.8pt}
\setlength{\textwidth}{11cm}
\setlength{\textheight}{17cm}
\setlength{\headheight}{12pt}
\dimen0=\textheight
\advance\dimen0 by -\headheight
\advance\dimen0 by -\headsep
\advance\dimen0 by -\topskip
\divide\dimen0 by \baselineskip \count255=\dimen0
\textheight=\count255\dimen2
\advance\textheight by \topskip
\advance\textheight by \headsep
\advance\textheight by \headheight
\calclayout`
Questo funziona solo con le classi AMS, in cui \textheight comprende anche le testatine. L’idea è di impostare \textheight all’altezza voluta e poi rimisurarla in modo che la gabbia contenga un numero intero di righe. Bisogna quindi togliere la combinazione “altezza della testatina”-“separazione della testatina” e poi lo spazio riservato alla prima riga (\topskip). A questo punto dividiamo ciò che rimane per \baselineskip (che le classi AMS impostano al valore usuale, nel tuo caso 13pt, per il valore dato a \linespread; le classi standard non lo fanno). Troviamo quindi un numero intero (perché TeX tronca) che è quello delle righe meno uno. Aggiungiamo quello che abbiamo tolto prima e abbiamo il valore desiderato.
Ma se il tuo scopo è di ottenere, che so, 36 righe di stampa, puoi fare in modo meno doloroso:
`\calclinespreadfor{12.8pt}
\setlength{\textwidth}{11cm}
\setlength{\headheight}{12pt}
\setlength{\textheight}{\dimexpr 35\baselineskip+\topskip+\headsep+\headheight\relax}
\calclayout`
Ciao
Enrico