ISBN per tutti

Immagino sappiate cosa siano gli ISBN, ovvero i codici utilizzati a livello internazionale per indicare le edizioni dei libri, a stampa o digitali. Si tratta di un numero di 13 cifre che contiene 12 numeri (che indicano lo stato di pubblicazione del libro, il codice editore ed il numero personale dell’edizione) e di una 13 cifra “di controllo” (come l’ultima cifra del vostro codice fiscale) calcolata sulla base delle 12 cifre precedenti secondo lo standard EAN-13. Se siete editori, pagate l’Agenzia ISBN italiana per acquistare un codice editore ed il corrispondente lotto di numeri ISBN da attribuire ai vostri libri. Con un limite: se voi ordinate più di 10 numeri, il vostro account vi offrirà solo i primi 10 precalcolati, mentre per i successivi avete due opzioni: pagare l’Agenzia o calcolare da voi, sulla base delle precedenti 12 cifre che conoscete, i numeri ISBN successivi. Per un singolo numero esistono dei generatori online, ma per 90 o 990 numeri consecutivi? (immagino che chi ne ha 990 abbia un software apposito, ma trascendiamo)

Cercando online scopro, fortunatamente, che non sono la prima: fantastico, ma io non uso excel, uso LibreOffice … e per di più, in italiano (cosa cambia? le formule sono, ahimè, tradotte!!!). E io non so un accidenti di come funzionino le funzioni (scusate il gioco di parole) dei fogli di calcolo!

Dopo vari smanettamenti ecco a voi (o meglio, a me, per memoria futura) la  formula delle meraviglie, da incollare in cella B2 dopo aver scritto in cella B1 le prime 12 cifre (qui anche in versione pronta)

=B1&(ARROTONDA.ECCESSO(((STRINGA.ESTRAI(B1;2;1)+STRINGA.ESTRAI(B1;4;1)+STRINGA.ESTRAI(B1;6;1)+STRINGA.ESTRAI(B1;8;1)+STRINGA.ESTRAI(B1;10;1)+STRINGA.ESTRAI(B1;12;1))*3)+(STRINGA.ESTRAI(B1;1;1)+STRINGA.ESTRAI(B1;3;1)+STRINGA.ESTRAI(B1;5;1)+STRINGA.ESTRAI(B1;7;1)+STRINGA.ESTRAI(B1;9;1)+STRINGA.ESTRAI(B1;11;1));10)-(((STRINGA.ESTRAI(B1;2;1)+STRINGA.ESTRAI(B1;4;1)+STRINGA.ESTRAI(B1;6;1)+STRINGA.ESTRAI(B1;8;1)+STRINGA.ESTRAI(B1;10;1)+STRINGA.ESTRAI(B1;12;1))*3)+(STRINGA.ESTRAI(B1;1;1)+STRINGA.ESTRAI(B1;3;1)+STRINGA.ESTRAI(B1;5;1)+STRINGA.ESTRAI(B1;7;1)+STRINGA.ESTRAI(B1;9;1)+STRINGA.ESTRAI(B1;11;1))))

Se volete la spiegazione vi rimando al sito di cui sopra 😀 … ma spiegatemi voi perché MID diventa STRINGA.ESTRAI 🙁

Liste ordinate strutturate in una pagina web

Non so se usiate le liste nidificate, cioè quelle liste in cui esistono uno o più sottolivelli. Che si tratti di elenchi o di titoli, è fondamentale che esista una certa coerenza fra i numeri ed i livelli. Se l’elenco è fatto di elementi consecutivi in generale basta cambiare l’indentatura e si capisce immediatamente. Ma se stiamo parlando di titoli di capitolo e paragrafo? Come evitare di numerare tutto a mano? come tenere conto del livello? Probabilmente sono la sola che si è posta il problema perché online non ho trovato alcuna soluzione, almeno quando ho affrontato il problema alcuni anni fa, ma probabilmente vale ancora la pena di postare i miei vecchi appunti.

Se voi usate una lista numerata, i numeri (o le lettere) proseguono ordinatamente in modo automatico

  1. primo elemento
  2. secondo elemento
  3. terzo elemento
    1. primo elemento del terzo
    2. secondo elemento del terzo
    3. terzo elemento del terzo
  4. quarto elemento
  5. quinto elemento

Funzionale per le cose semplici, ma se voglio una cosa più complessa, con i numeri e lettere combinati

  1. primo elemento
  2. secondo elemento
  3. terzo elemento
    1. primo elemento del terzo
    2. secondo elemento del terzo
    3. terzo elemento del terzo
  4. quarto elemento
  5. quinto elemento

Siamo abituati a fare facilmente una lista come questa con il nostro programma di videoscrittura, ma quando ho cercato di fare una cosa simile su una pagina web la risposta unanime è stata “impossibile”… per cui mi sono rimboccata le maniche, ho messo insieme informazioni diverse e composto il codice che mi permetteva di aggiungere il numero del livello precedente alla possibilità di cambiare il tipo di numeratore (lettere minuscole, maiuscole latine o greche, numeri romani ecc.).

ol.lista, ol.lista li{padding: 0 10px}
body {counter-reset: h1}
ol.lista { 
 list-style-type: none;
 counter-reset: level1;}
ol.lista li:before {
 content: counter(level1, upper-roman) ". ";
 counter-increment: level1;}
ol.lista li ol {
 list-style-type: none;
 counter-reset: level2;}
ol.lista li ol li:before {
content: counter(level1, upper-roman ) "." counter(level2, lower-greek) ". ";
counter-increment: level2;}
ol.lista li ol li ol {
 list-style-type: none;
 counter-reset: level3;}
 ol.lista li ol li ol li:before {
content: counter(level1, upper-roman ) "." counter(level2, lower-greek) "."counter(level3, lower-alpha) "_";
counter-increment: level3;}
ol.lista li ol li ol li ol {
 list-style-type: none;
 counter-reset: level4;}
 ol.lista li ol li ol li ol li:before {
content: counter(level4) ") ";
counter-increment: level4;}

Il codice che vedete prevede per 4 livelli di nidificazione all’interno di una lista ordinata, e parte togliendo il numeratore predefinito list-style-type: none; a ciascun livello e poi premettendo :beforeil content che come forse potete vedere usa il contatore ed il suo livello per comporre il nuovo numero. Al quarto livello i riferimenti ai numeri dei livelli precedenti scompaiono, lasciando posto ai soli numeri. Non si tratta di un codice di uso pratico, ma solo di un codice “di studio”, con più varianti possibili. All’interno di ogni elemento di lista nidificata si specifica anche quale contatore va incrementato counter-increment: level1;. L’aspetto completo generato da questo stile è il seguente:

  1. primo elemento
  2. secondo elemento
  3. terzo elemento
    1. primo elemento del terzo
    2. secondo elemento del terzo
    3. terzo elemento del terzo
      1. primo elemento del terzo del terzo
      2. secondo elemento del terzo del terzo
        1. primo elemento del secondo del terzo del terzo
        2. secondo elemento del secondo del terzo del terzo
        3. terzo elemento del secondo del terzo del terzo
      3. terzo elemento del terzo del terzo
  4. quarto elemento
  5. quinto elemento

La stessa tecnica si può utilizzare per numerare i livelli di intestazioni del testo h1, h2, h3 ecc. che, a differenza degli elenchi ordinati non hanno normalmente una numerazione. Il primo passo è proprio quello di settare un contatore per ogni livello:

body {counter-reset: h1}

Titolo del primo capitolo

Titolo del primo paragrafo

Titolo del secondo paragrafo

Titolo del primo sottoparagrafo

Titolo del secondo sottoparagrafo

Titolo del terzo paragrafo

Titolo del secondo capitolo

Se vi interessa il codice CSS della struttura che vedete sopra è questo:

body {counter-reset: h1}
h1.capitoli:before {content: "Cap. " counter(h1, upper-roman) ". ";
 counter-increment: h1;}
h1.capitoli {counter-reset: h2}
h2.capitoli:before {content: "Par. " counter(h1, upper-roman ) "." counter(h2) ". ";
counter-increment: h2;}
h2.capitoli{counter-reset: h3}
h3.capitoli:before {content: "Sub. " counter(h1, upper-roman ) "." counter(h2) "." counter(h3, lower-alpha) ". ";
counter-increment: h3;}
h3.capitoli {counter-reset: h4}

mentre l’HTML è questo:

<h1 class="capitoli">Titolo del primo capitolo</h1>
<h2 class="capitoli">Titolo del primo paragrafo</h2>
<h2 class="capitoli">Titolo del secondo paragrafo</h2>
<h3 class="capitoli">Titolo del primo sottoparagrafo</h3>
<h3 class="capitoli">Titolo del secondo sottoparagrafo</h3>
<h2 class="capitoli">Titolo del terzo paragrafo</h2>
<h1 class="capitoli">Titolo del secondo capitolo</h1>

Non so se esistano modi più semplici per ottenere questo stesso risultato, e posso garantirvi che fuori dalla gabbia di WordPress è più facile ottenere buoni risultati. Francamente dubito che esistano altri pazzi online interessati all’argomento, ma dato che “a volte ritornano” ho preferito lasciare un appunto a me stessa dove potevo trovarlo facilmente 😀

Impaginare in multiculturale

Da quando il  mio tempo “libero” è drasticamente calato, per non dire inesistente, molto raramente mi dedico ai miei hobby. Molto del mio tempo al momento è occupato da questioni di tipo editoriale, dato che il Centro Studi ClassicA ed Engramma stanno lavorando a pieno regime in quella direzione. Così, per tenere conto di tutte le ore che comunque dedico giornalmente a risolvere rogne, preferisco riprendere il blog con un altro tema invece che spostarmi altrove, tanto sono sempre io 😉

Il tema di oggi è l’impaginazione, il mio programma per impaginare è Adobe inDesign (non mi pagano, io pago loro ogni mese, in compenso) dato che è uno standard industriale, ovvero se volete lavorare professionalmente con case editrici e tipografie, non ci sono alternative. L’ho iniziato ad usare mentre ero nel pieno della stesura del mio primo libro, e da allora ho dovuto imparare molti dei suoi segreti per riuscire a domarlo e fargli fare quello che serviva a me (grazie indesignsecrets.com!).

L’ultima avventura in ordine di tempo è stata quella di inserire delle parole in arabo all’interno di un articolo, che era stato pubblicato nella Rivista di Engramma. Scrivere nella pagina web, per gli editor, non era stato un problema, come non era un problema visualizzare lo stesso testo in un programma di videoscrittura, se si lavora con font e codifica Unicode (utf-8). Ma, una volta importato, il testo era inutilizzabile. Poche settimane prima, correggendo le bozze di due schede di catalogo, avevo notato che il titolo dell’opera, in ebraico, era a specchio rispetto al documento di testo da me inviato. Dato che si trattava di una casa editrice qualificata, mi ero stupita dell’errore e avevo semplicemente segnalato il problema (in caratteri cubitali 😛 ).

Poco dopo il problema però era ritornato mentre si verificavano le bozze del libro in pubblicazione della direttrice del Centro Studi, con l’arabo, questa volta, inspiegabilmente mutato. Il primo colpevole, quando un testo che usa vari alfabeti non funziona, è solitamente il font usato per la stampa: dato che Engramma è una rivista di tradizione classica, i testi con citazioni in greco politonico sono comuni, mentre i font Unicode che includono il blocco specifico non sono così diffusi. Nel nostro caso, abbiamo adottato la politica del font open source con la maggior parte dei blocchi disponibili, il Linux Libertine. Non entro nel dettaglio della normativa sulle licenze font nel caso di pubblicazioni e stampe perché vi tedierei. Il mio primo pensiero è stato quello di accertarmi che il font contenesse i blocchi relativi all’arabo. Ho scoperto allora che per una “bella scrittura” in arabo i blocchi standard di base presenti nel font non bastano (ed ecco comparire i terribili quadratini con sfondo rosa in inDesign), in quanto per ogni carattere esistono “forme contestuali” dipendenti dalle lettere limitrofe (la faccio semplice) e di fatto è necessario un font specifico. InDesign offre un paio di font allo scopo, come Adobe Arabic, ma volendo restare nel campo open vorrei segnalarvi Amiri, che personalmente ho trovato molto più elegante e leggibile (per quanto io non possa, purtroppo, leggere in arabo) all’interno del testo latino.

word_readyCambiato il font delle parole incriminate, in inDesign però nasceva un nuovo problema: le parole erano diverse! Questo perché le parole erano scritte seguendo la direzione di scrittura occidentale da sinistra a destra (LTR) e non, come normalmente nell’arabo (o nell’ebraico), da destra a sinistra (RTL). Inoltre, a causa delle “forme contestuali”, cambiando la successione delle lettere, cambiava anche la forma delle stesse, con risultati per lo meno bizzarri. Questo problema, che non si presenta in altri contesti (la pagina web in primis), è legato al fatto che la formattazione dei paragrafi normalmente impostata in inDesign è ottimizzata per le lingue occidentali e forza, anche in presenza di parole RTL, la scrittura LTR. Per ovviare a ciò il suggerimento di tutti gli esperti è: attivate nella formattazione del paragrafo l’opzione “Paragrafo Adobe World Ready” che trovate nella categoria “Giustificazione” evitando, comunque, l’allineamento a sinistra che entra in conflitto.

A questoGREP punto la necessità è stata quella di attribuire il font corretto alle sole parole in arabo in modo automatico, creando uno stile di carattere che usasse il font necessario. In un primo momento ho cercato con una stringa GREP tutte le parole contenenti lettere arabe [ء-ي]+, grazie ad un suggerimento trovato online, attribuendo a tutte lo stile di carattere da me creato. Purtroppo la stringa non individuava tutte le parole dell’articolo, per cui dopo svariate ricerche ed in particolare il suggerimento di questo articolo, ho creato una nuova stringa GREP in grado di individuare tutti i blocchi Unicode contenenti l’arabo:

([\x{0600}-\x{06FF}]|[\x{0750}-\x{077F}]|[\x{08A0}-\x{08FF}]|[\x{FB50}-\x{FDFF}]|[\x{FE70}-\x{FEFF}]|[\x{10E60}-\x{10E7F}]|[\x{1EE00}-\x{1EEFF}])+

Chiaramente non una formula da ricordare, fortunatamente esiste l’opzione per salvare le ricerche. Ma come spiegare a tutti gli editor come fare? La nostra redazione ad alta rotazione, con un continuo viavai di tesisti e stagisti, una soluzione da applicare a mano ogni volta non era certo  consigliabile, per cui ho pensato di semplificare a tutti la vita: se bastava una stringa GREP per individuare tutte le parole, cosa c’era di meglio di uno stile GREP? Mi è bastato aggiungere allo stile nel modello e, senza ulteriori interventi da parte della persona che importa il testo nel modello, il testo viene correttamente formattato!

nidificato
Questa tecnica permette di cambiare la formattazione di parole con alfabeti diversi identificabili tramite la somma dei blocchi Unicode della lingua, usando stili di carattere appropriati, sia per l’assenza di glifi corrispondenti nel font scelto per il corpo del testo, sia perché preferiamo per certi alfabeti le forme contenuti in altri font. Vi semplifico la vita e vi mostro le stringhe per cercare alcuni alfabeti che potrebbero interessarvi:

Cirillico
([\x{0400}-\x{04FF}]|[\x{0500}-\x{052F}]|[\x{2DE0}-\x{2DFF}]|[\x{A640}-\x{A69F}]|[\x{1C80}-\x{1C8F}]|[\x{1D2B}-\x{1D78}]|[\x{FE2E}-\x{FE2F}])+
Ebraico
([\x{FB1D}-\x{FB4F}]|[\x{0590}-\x{05FF}])+
Greco e Copto
([\x{0370}-\x{03FF}]|[\x{03E2}-\x{03EF}]|[\x{1F00}-\x{1FFF}])+

Se vi interessa, ho caricato un semplicissimo modello con lo stile per l’arabo, che necessita dei due font suggeriti nel testo per funzionare!

Fatemi sapere se ci sono errori e se trovate le informazioni o le fonti utili!

Editoria digitale

L’editoria nel tardo ‘500

Per una volta, invece che alle mie solite macchine da cucire, vorrei dedicare un po’ di spazio alle macchine con cui passo buona parte delle mie giornate, ovvero gli elaboratori elettronici. In particolare vorrei puntare l’attenzione al mondo dell’editoria digitale, intesa come sistemi e servizi per la creazione e l’impaginazione di libri. Ovviamente i contenuti e la loro qualità sono fondamentali, ma in un mondo in cui gli “editori” producono tonnellate di carta da macero alla disperata ricerca del best seller che li ripaghi di tutti gli investimenti passati e futuri, esiste un circuito parallelo, direi “indie” (nel senso di indipendente dalle grandi case) che spesso corrisponde all’autoproduzione casalinga non solo per gli aspiranti romanzieri, ma anche per buona parte delle pubblicazioni scientifiche, sia divulgative che di alto livello.

Se da una parte ormai raramente una “casa editrice” (uso le virgolette perchè riten Leggi tutto “Editoria digitale”

Debugging

Per chi non lo sapesse, il termine debugging indica, in ambito di programazione, l’individuazione e la rimozione degli errori.  Ho finalmente risolto l’errore che mi impediva di ricevere le email di notifica dei vostri messaggi, il che dovrebbe significare anche che non dovrete più attendere giorni o settimane per l’approvazione o la risposta se ho il tempo.  Si trattave di uno spazio in più all’interno dei parametri della funzione di invio posta.  I piaceri della vita, se siete appasionati di enigmistica, probabilmente. Leggi tutto “Debugging”