Aiuto:Formattazione complessa
Questa pagina affronta alcuni casi 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.
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.
Dentro il tag poem [modifica]
Il tag <poem>... </poem>, la cui "doma" ha richiesto qualche anno (il merito è di fr.source, poi abbiamo imparato anche noi, e l'abbiamo spifferato a en.source...), esegue, attraverso una specifica estensione, delle modifiche del codice html che avvengono a livello di server e che non sono assolutamente riproducibili via template. Volendo, possono essere fedelmente riprodotte con codice html apposto a mano, riga per riga, ma la cosa sarebbe estremamente laboriosa.
Le tre cose che poem fa sono:
- apertura e chiusura di un tag html <div class="poem">;
- apertura e chiusura di un tag <p> (un paragrafo) in testa e in coda;
- aggiunta, riga per riga, di un <br />.
Da notare con particolare attenzione il fatto che tutto il testo compreso fra due tag poem viene trasformato in un unico paragrafo. Questo determina, ad esempio, un comportamento inatteso quando si utilizza il template § "senza chiusura"; nel caso sia apposto all'interno di un tag poem, saranno evidenziati, se raggiungi con un link, tutti i versi seguenti fino alla chiusura di poem.
Il rompicapo delle bizzarrie di poem, che erano in sostanza:
- indentatura del primo verso, ma solo nei ns0 e nsPagina (non nelle pagine di aiuto... non n pagina delle prove...);
- anomala spaziatura fra blocchi di versi delimitati da poem (con risultante difettosa resa in trasclusione delle poesie spezzate in più pagine.
Tutto dipendeva dal fatto che il tag <p> ereditava le caratteristiche della div in cui era contenuto, ossia: la div class="testi" in ns0, e la div class="pagetext" in nsPagina. In entrambi i casi, il paragrafo ereditava l'attributo text-indent (e qundi il primo verso risultava indentato) e l'attributo margin-top, che metteva un po' di margine sopra l'inizio di un nuovo paragrafo. Una semplice modifica di Common.css, scopiazzata da fr.source, e la lotta è finita.
Al momento, l'effetto del tag poem è equivalente con questi due "standard" di collocazione rispetto ai versi:
<poem>
Talor, quando la notte alta più vola,{{R|215}}
Per queste onde deserte ascolti il grido
Del barcaiuol che trafficando in mare
Da Taranto a Cotrone apre le vele.
Ed or che passo e canto una indistinta
Da l’acque esala melodia soave,{{R|220}}
</poem>
oppure
<poem>Talor, quando la notte alta più vola,{{R|215}}
Per queste onde deserte ascolti il grido
Del barcaiuol che trafficando in mare
Da Taranto a Cotrone apre le vele.
Ed or che passo e canto una indistinta
Da l’acque esala melodia soave,{{R|220}}</poem>
che producono entrambi:
Apertura di una div class="testi" per simulare una pagina Ns0
Talor, quando la notte alta più vola,215
Per queste onde deserte ascolti il grido
Del barcaiuol che trafficando in mare
Da Taranto a Cotrone apre le vele.
Ed or che passo e canto una indistinta
Da l’acque esala melodia soave,220
oppure
Talor, quando la notte alta più vola,215
Per queste onde deserte ascolti il grido
Del barcaiuol che trafficando in mare
Da Taranto a Cotrone apre le vele.
Ed or che passo e canto una indistinta
Da l’acque esala melodia soave,220
Accodando i codici senza linee bianche interposte, la serie dei versi risulta continua e regolarmente spaziata con entrambi gli stili:
Talor, quando la notte alta più vola,215
Per queste onde deserte ascolti il grido
Del barcaiuol che trafficando in mare
Da Taranto a Cotrone apre le vele.
Ed or che passo e canto una indistinta
Da l’acque esala melodia soave,220
Talor, quando la notte alta più vola,215
Per queste onde deserte ascolti il grido
Del barcaiuol che trafficando in mare
Da Taranto a Cotrone apre le vele.
Ed or che passo e canto una indistinta
Da l’acque esala melodia soave,220
Per creare una riga bianca, equispaziata, fra un blocco di versi e il successivo occorre inserire:
- una riga bianca dopo il poem di apertura del blocco successivo:
Talor, quando la notte alta più vola,215
Per queste onde deserte ascolti il grido
Del barcaiuol che trafficando in mare
Da Taranto a Cotrone apre le vele.
Ed or che passo e canto una indistinta
Da l’acque esala melodia soave,220
- due righe bianche prima della chiususa del tag poem precedente
Talor, quando la notte alta più vola,215
Per queste onde deserte ascolti il grido
Del barcaiuol che trafficando in mare
Da Taranto a Cotrone apre le vele.
Ed or che passo e canto una indistinta
Da l’acque esala melodia soave,220
Contrariamente a quanto avveniva a suo tempo, l'eventuale rientro di singoli versi può essere ottenuta indifferentemente con spazi bianchi o con il tag due punti senza alcuna anomalia dell'interlinea:
Talor, quando la notte alta più vola,215
Per queste onde deserte ascolti il grido
Del barcaiuol che trafficando in mare
Da Taranto a Cotrone apre le vele.
Ed or che passo e canto una indistinta
Da l’acque esala melodia soave,220
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 (marzo 2011) è stata ideata da ThomasV; è ancora poco documentata.
- Nel nsPagina:
- applicare alla prima porzione della nota spezzata il codice <ref name="nome">......</ref>
- applicare alla seconda porzione della nota spezzata (nella pagina successiva) il codice <ref follow="nome">......</ref>
- In ns0: transcludere le pagine intere; non è necessario identificare la nota spezzata con una section.
Esempio: In adempimento del gravissimo dovere, vari casi, il primo fra pag. 6 e 7
Avvertenza [modifica]
Mentre 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 [modifica]
Linee 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
- Con i quattro trattini non possiamo modificare nessuna caratteristica della linea; occorre usare direttamente il tag HTML <hr />, a cui si può assegnare degli attributi di stile. Ad esempio, il codice
<hr style="width:4em; margin:auto" />
- che produce
- cioè una linea 'centrata e larga 4em. La larghezza si può esprimere anche in percentuale (width=20%).
- Non illudetevi di poter centrare un tag hr con il {{Centrato}} assegnando solo la larghezza. Es.
| il codice | produce sostanzialmente frustrazione e cefalea, ma non un hr centrato: |
|---|---|
{{Centrato}}
<hr style="width:4em" />
</div>
|
|
Annotazioni a lato [modifica]
Note di trascrizione [modifica]
Sommari e indici nelle opere proofread [modifica]
La 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 [modifica]
Se 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}}
|
|
Il ruolo dei bot [modifica]
I 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 [modifica]
Il 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 [modifica]
La 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 [modifica]
Viene 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.