Aiuto:Formattazione complessa
Questa pagina affronta alcuni casi risolti di formattazione complessa.
Ha lo scopo di illustrare — con link a pagine di esempio —
- alcune soluzioni non semplici a problemi ricorrenti,
- alcune alternative a soluzioni tradizionali.
Tali soluzioni non sono necessariamente definitive: probabilmente un utente in futuro escogiterà una soluzione più pratica di quelle elencate qui sotto (nel qual caso è pregato di aggiungerla), oppure verrà inventato un template in grado di rendere facile ciò che al momento richiede codici complessi.
- Se hai risolto un problema di formattazione scrivine qui
- Se cerchi soluzioni a un problema ricorrente di formattazione complessa prova a cercarne la soluzione qui.
- Se hai semplificato con template o altro un compito prima complesso e descritto qui sotto aggiornane la spiegazione qui.
Schema
modificaPer descrivere un caso risolto attieniti il più possibile a questo schema:
- Problema
- Descrizione del caso
- Cosa si vuole ottenere
- Soluzione
- a partire da un esempio illustra
- Che strumenti (tipicamente template) usi,
- come li usi (se serve mostrando il codice utilizzato), possibilmente con
- Istruzioni passo passo e
- spiegazione del significato delle operazioni più complesse.
Per suggerimenti, osservazioni, ecc. utilizzate la pagina di discussione; come ovunque su Wikisource, sentitevi comunque liberi di correggere direttamente o integrare il testo di questa pagina.
Note a piè di pagina spezzate in più pagine
modifica- Problema
- In alcuni testi si trovano note a piè di pagina talmente lunghe da finire spezzate su due o più pagine consecutive (sempre a piè di pagina).
- Occorre fare in modo che i tronconi di nota siano correggibili dalle pagine in cui appaiono, e nello stesso tempo che nella transclusione nel ns0 essi vengano riuniti.
- Soluzione
- La soluzione è ancora poco documentata.
- Nel nsPagina:
- applica alla prima porzione della nota spezzata il codice <ref name="nome">......</ref>
- applica alla seconda porzione della nota spezzata (nella pagina successiva) il codice <ref follow="nome">......</ref>
- Al posto di "nome" si può mettere qualunque sigla (tipicamente "pag23" dove 23 è il numero di pagina della prima porzione) fintantoché "name" e "follow" coincidano.
- Esempio: Nel testo In adempimento del gravissimo dovere una stessa nota è spezzata fra pagina 6 e pagina 7: a pagina 6 la nota è aperta con il tag <ref name="page5"> mentre nella seguente la seconda parte della nota è aperta da <ref follow="page5">. Il risultato è questo.
- Il procedimento con ref follow può essere ripetuto più volte con il medesimo name della prima ref quando una medesima nota si spalma su più di due pagine.
- Esempio: in Alessandro Manzoni - Studio biografico si trova il caso in cui una stessa lunghissima nota parte a pagina 114 e grazie al nome di apertura<ref name="p_7"> viene richiamata con <ref follow="p_7"> lungo le pagine 115, 116, 117, 118, 119 fina a terminare a 120. Il risultato in namespace principale è questo.
- Al posto di "nome" si può mettere qualunque sigla (tipicamente "pag23" dove 23 è il numero di pagina della prima porzione) fintantoché "name" e "follow" coincidano.
Avvertenza
modificaMentre la sintassi funziona perfettamente nel caso di pagine consecutive che appartengono allo stesso capitolo, ci sono ancora problemi nel caso che le parti "follow" delle note spezzate cadano su pagine che comprendono più di un capitolo, o contengono un capitolo diverso da quello a cui appartiene la prima parte della note.
Note a fine testo o poste in pagine dedicate
modifica- Problema
- Talora avviene che le note non siano sistemate a piè di pagina (in quel caso, il tag ref va benissimo, tranne alcune piccole limitazioni), ma che siano raccolte in pagine dedicate a fine capitolo o a fine libro.
- Occorre dunque collegare il richiamo della nota con il testo della nota riportato in un'altra pagina in modo che il collegamento sia "reciproco", permettendo cioè di muoversi tra rimando nota e testo della nota e viceversa; infine tale collegamento a doppio senso di marcia va mantenuto funzionante anche nella transclusione del testo in ns0 dove testo e nota sono sempre posti in pagine dal titolo diverso da quello delle pagine in nsPagina.
- Soluzione
- Il template {{Nota}} risolve questo problema, come esemplificato in Pagina:Poemi (Byron).djvu/47, in cui due note creano un link incrociato con Pagina:Poemi (Byron).djvu/119; e la loro transclusione (Il corsaro/Canto II/II e Il corsaro/Note) mostrano il medesimo link incrociato funzionante.
- Il template richiede 6 parametri:
- il testo che si vuole visualizzare come link;
- il nome di un'ancora;
- il numero di pagina del richiamo;
- il numero di pagina della nota;
- il nome completo del capitolo contenente il richiamo in Ns0;
- il nome completo del capitolo contenente il testo della nota in Ns0;
La prima caratteristica particolare è che il testo che si vuole visualizzare come link è libero e quindi può riprodurre fedelmente le scelte tipografiche originali (contrariamente a quanto avviene con il tag ref).
La seconda caratteristica è che il template è indifferente all'ordine in cui vengono passate le due coppie di indirizzi, rispettivamente nel nsPagina e nel ns0. Questo significa che il template può essere copiaincollato identico nella pagina in cui è contenuto il richiamo, e in quella che contiene il testo della nota.
Approfondimento sul template Centrato
modificaLinee orizzontali (HR) complesse
modifica- Problema
- Per produrre una linea orizzontale si può semplicemente scrivere quattro trattini su una nuova riga.
Si noti che il codice produce una linea orizzontale che attraversa l'intero spazio della div che lo contiene, non dell'intero spazio della pagina.
- Come fare per riprodurre quelle righe orizzontali che sono più o meno brevi e centrate nella pagina come divisorio tra titolo e testo, fine poesia o altro?
- Occorre un metodo per gestire flessibilmente quel tag.
- Soluzione
- esiste per questo il Template:Rule di cui si può definire la larghezza in em o in percentuale
- cioè una linea 'centrata e larga 4em. La larghezza si può esprimere anche in percentuale (width=20%).
In pratica, il codice {{Rule|4em}} produce un tag hr centrato largo 4em, come appare dall'esempio seguente:
In pratica, il codice {{Rule|50%}} produce un tag hr centrato largo la metà del div in cui contenuto:
Annotazioni a lato
modificaNote di trascrizione
modificaSommari e indici nelle opere proofread
modificaLa soluzione tradizionale, adottata nella maggior parte delle opere proofread, è stata quella di costruire tre volte, con tecniche diverse, gli indici delle opere. Infatti, gli indici comparivano:
- una prima volta, nel campo Sommario della pagina Indice (in questa collocazione, veniva utilizzato il template {{Indice sommario}};
- una seconda volta, nella trascrizione della pagina che conteneva l'indice originale dell'opera;
- una terza volta, nella pagina principale dell'opera transclusa e - nel caso di opere con vari livelli di suddivisione delle sezioni/capitoli - in ciascuna delle pagine riassuntive; veniva utilizzato, in queste pagine, il template {{Testo}}.
E' in corso di sperimentazione una tecnica alternativa, che elimina la necessità di costruire da zero un indice nel campo Sommario della pagina Indice, e che può essere utilizzata ogniqualvolta esista nel testo un indice originale. La tecnica consiste nel transcludere nel campo Sommario le pagine che contengono l'indice originale: vedi, ad esempio, Indice:Canti (Sole).pdf.
A fronte della notevole semplificazione consentita dalla semplice transclusione di una pagina, nasce tuttavia il problema della gestione dei link, che devono essere attivati nelle pagine indice. Per essere pienamente funzionanti, tali link:
- devono puntare sulle pagine Pagina: quando vengono utilizzati nel ns Indice e nel ns Pagina;
- devono invece puntare sulle sezioni/capitoli in Ns0 quando vengono utilizzati in Ns0.
La struttura di una riga di un indice originale ha, in sostanza, due parti: titolo del capitolo e numero pagina originale. Intuitivamente, ci si aspetta che in Ns0 funga da link il titolo del capitolo, e che in NsPagina funga da link il numero pagina originale. A questo punto ci sono varie possibilità, che sono oggetto di test in corso, e che necessitano di una standardizzazione.
- lasciare sempre attivati entrambi i link (ossia: sia in Ns0, che in NsPagina, il titolo del capitolo punta a Ns0, il numero di pagina punta al NsPagina). Il vantaggio è che il codice è più semplice; lo svantaggio è che il lettore potrebbe essere disorientato dal fatto di passare bruscamente, e inaspettatamente, dal NsPagina al Ns0 e viceversa, seguendo il link "sbagliato"; nonostante questo svantaggio, questa è la soluzione adottata su en.source;
- disattivare i link sui titoli dei capitoli in NsPagina, e i link sulle pagine in Ns0. Il codice diventa più complesso, ma si ha il vantaggio che il lettore "non si perde": se sta consultando l'opera in NsPagina, resta sempre su NsPagina; se consulta la versione in Ns0, resta su Ns0.
Blocchi di testo: a sinistra, centrato, a destra
modificaSe un paragrafo è spostato verso il margine destro ma è formato da poche righe con allineamento centrato, come avviene spesso alla fine di testi di legge, di prefazioni o di lettere, una soluzione per renderlo potrebbe essere la seguente:
<div style="width:30em; margin-left:40em;" align="center"> ''prima riga corsiva lunga lunga''<br /> 2ª riga breve.<br /> <small>terza riga scritta piccola.</small> </div>
che dà come effetto un "div" largo 30 em, il cui margine sinistro è spostato di 40 em dal margine destro della pagina e al cui interno il testo ha allineamento centrato. in pratica:
2ª riga breve.
terza riga scritta piccola.
Variando i valori di width (dimensioni del paragrafo) e di margin-left (spostamento rispetto al margine sinistro) si può posizionare finemente il blocco di testo.
Avviene, in alcuni casi, che sia opportuno combinare il codice "blocco a destra" e "centrato" (vedi, ad es., il blocco della firma dell'articolo qui: Pagina:Rivista di Scienza - Vol. I.djvu/347). In questo caso, basta annidare il template Centrato all'interno del template Blocco a destra.
codice | risultato | |
---|---|---|
{{Blocco a destra|{{Centrato|{{Sc|G. Castelnuovo}} ''Prof. all’Università di Roma''}}}} |
|
Analogamente, si potrebbe ottenere una perfetta centratura dei titoli delle poesie sui versi includendo sia il titolo, che i versi in un blocco a sinistra:
codice | risultato | |
{{Blocco a sinistra/inizio}} {{Centrato}} XXVIII. A DIANA TRIVIA</div> <poem><span style="font-size:2em">T</span>u cui reina il cieco Erebo tiene E Arcadia in terra cacciatrice t’ama, Ma in ciel de l’Ore il biondo stuol ti chiama Bella Selene; Ora che i bianchi corridor del lento Freno tu tempri e regni su la diva Notte, m’ascolta; se da noi t’arriva Prego o lamento.</poem> {{Fine blocco}} |
|
Posizioni complesse di testo intorno a un'immagine
modifica- Problema
- a volte — in pagine di copertina o illustrazioni in mezzo al testo — l'immagine non ha un contorno esattamente rettangolare o convesso, e il testo vi scorre intorno.
- Occorre disporre il testo in modo che segua il contorno non regolare di un'immagine.
- Soluzione
Un caso risolto è visibile in questa pagina.
- L'immagine anche se ha forma irregolare resta in realtà una normale immagine a contorno rettagolare, la cui posizione è però definita precisamente mediante il Template:FI
- Il vero trucco riguarda il testo, che viene posizionato in modo da sovrapporsi allo sfondo bianco nell'immagine dando l'impressione di scorrere attorno al contorno apparentemente irregolare di essa.
È necessario inserire il testo riga per riga entro uno span con posizione assoluta e non relativa: il codice è <span style="position:absolute; top:##px; left:##px"> al posto dei ## vanno inseriti dei numeri per posizionare con precisione lo span rispetto alla pagina e all'immagine.
Il ruolo dei bot
modificaI bot possono avere un ruolo nelle formattazioni complesse.
- verifica sintattica di template complessi;
- verifica dell'assenza di campi critici in template essenziali e visualizzazione di messaggi di avviso;
- completamento o riempimento automatico di parametri di template a molti parametri, come il template {{Nota}}, quando i dati sono ricavabili dalla pagina o da pagine collegate;
- verifica della coerenza di template o di tag html di formattazione ripetitivi all'interno di un'opera (es. larghezza uniforme di tag <hr /> utilizzati come marcatore di fine capitolo nell'insieme dell'opera; grandezza uniforme di eventuali capilettera);
Ai bot potrebbero essere assegnati anche altri compiti ripetitivi:
- esecuzione di "direttive" (es. la "direttiva bot" attualmente in sperimentazione per aggiungere automaticamente il tl RigaIntestazione alle pagine; altre direttive potrebbero riguardare la verifica della sistematica applicazione di particolari varianti ortografiche utilizzate nell'opera, come, ad esempio, l'uso dei caratteri í e ú nelle opere di Carducci, o l'uso del poiche e perche non accentati nelle opere più antiche)
Il campo è solo parzialmente esplorato; ogni suggerimento, in questa fase, è prezioso.
Classi di testo in Ns0 e in NsPagina
modificaIl termine "classe" si riferisce, in questo caso, alle specificazioni dei file CSS (i "fogli di stile"). Attraverso i file css è possibile assegnare numerose caratteristiche di formattazione alle parti elementari di cui è costruita una pagina web; in particolare
- alle "div" (blocchi di testo, che racchiudono qualsiasi contenuto)
- ai "p" (i paragrafi, che contengono un singolo blocco di testo, terminato da un acapo)
- agli "span" (frammenti di paragrafo).
E' anche possibile assegnare particolari formattazioni a "classi" specifiche di tali parti; possiamo ad esempio immaginare una classe "testi" e assegnare una particolare div a tale classe; automaticamente, tutte le caratteristiche di formattazione previste per gli oggetti di classe "testi" verrà applicata automaticamente alla div.
Due classi di particolare importanza sono le classi testi e pagetext.
Classe testi
modificaLa classe "testi" viene attribuita a gran parte delle opere in Ns0, ed in particolare a gran parte delle opere che appartengono ai progetti più comuni (letteratura, teatro ecc). Viene aperta automaticamente dal template Intestazione.
Determina:
- la larghezza del testo (colonna centrale con ampi margini da ambedue i lati)
- il tipo di carattere
- le caratteristiche dei paragrafi: in particolare, l'indentatura della prima riga e il margine fra il paragrafo e il precedente.
Classe pagetext
modificaViene assegnata automaticamente dal software a tutte le pagine Pagina. Anche la classe pagetext prevede l'indentatura del testo all'inizio dei paragrafi.
L'indentatura all'inizio dei paragrafi ha creato a lungo problemi di formattazione, sia nelle poesie (tag poem), sia nel testi centrati (template Centrato). La cosa particolarmente frustrante era che lo stesso codice, che produceva un effetto nelle pagine di aiuto, ne produceva un altro nelle pagine testo. Attualmente, il problema è stato risolto, sia per quanto riguarda il tag poem che per quanto riguarda il template centrato: in entrambi i casi, i paragrafi interni a questo formati hanno disattivata l'ipzione dell'indentatura, e gran parte (o tutti) i problemi sono risolti.