"Gli Jatravartid di Viltvodle VI credono invece che il cosmo sia nato dallo starnuto di un essere chiamato il Grande Ciaparche Verde."

Towel Day - Non fatevi prendere dal Panico

Guida Galattica per gli Autostoppisti

Creare eBook in formato MOBI: preparazione file sorgente

Kindle
Immagine da Amazon

Vediamo ora come preparare i file sorgente. Quelli che seguono sono creati in modo tale da essere compilabili con kindlegen e generare un file MOBI leggibile sul Kindle. Iniziamo immediatamente.

Definizione dell'eBook

Prima di addentrarci nella creazione dei vari file sorgente, è opportuno definire struttura e contenuto del libro. Il nostro eBook comprenderà le seguenti parti:

  • L'immagine di copertina, posta all'inizio (file cover.jpg)
  • Una breve sinossi (il testo in terza di copertina, per intenderci - file sinossi.html)
  • Una sezione con dati biografici dell'autore (file autore.html)
  • Una prefazione (non necessaria, giusto a titolo di esempio - file prefazione.html)
  • L'indice dei contenuti (file toc.html e toc.ncx)
  • Il contenuto dell'eBook (uno o più file, p.e. capitolo1.html, capitolo2.html, etc.)
  • Ringraziamenti (file ringraziamenti.html)

Abbiamo anche un file "accessorio", che serve a definire uno stile (css, cascading style sheet). Si tratta di un file "trasparente" per l'utente, ma molto importante per impostare tutte le caratteristiche tipografiche dell'eBook.

Cartelle

Creiamo una cartella eBook, che conterrà tutti i file sorgente. All'interno di questa creiamo le cartelle OEPBS e META-INF.

Si tratta della struttura già illustrata nell'articolo Creare eBook in formato MOBI: i file sorgente.

File mimetype

Creare nella cartella eBook un file di testo con nome mimetype, senza estensione, con questo contenuto:

application/epub+zip

Niente altro. Definisce tipo di pubblicazione e compressione. Ricordo che il formato MOBI è una variante del formato epub

È sufficiente creare un file di testo, assegnarli il nome mimetype, aprirlo con un Editor di testo, copiare il contenuto sopra evidenziato, incollarlo nel file vuoto e quindi salvare.

File container.xml

Spostarsi nella cartella META-INF e creare un file di testo con nome container.xml. Riporto nuovamente qui il contenuto, già visto nell'articolo Creare eBook in formato MOBI: i file sorgente

<?xml version="1.0"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
  <rootfiles>
    <rootfile full-path="OEPBS/content.opf" media-type="application/oebps-package+xml"/>
  </rootfiles>
</container>

Riporto al link precedente per dettagli su questo file. Aggiungo solo che il file cui si fa riferimento, content.opf, deve essere presente nella cartella OEPBS. Se si dovesse cambiare nome a tale file, si deve ricordare di aggiornare il nome indicato in container.xml

Di nuovo, è possibile copiare il testo precedente all'interno del file vuoto appena creato e salvarlo.

Copertina

Questo passo è semplice dal punto di vista tecnico, ma complesso dal punto di vista creativo. Creare una copertina accattivante è difficile. Esistono probabilmente risorse in rete dove si possono trovare immagini gratuite, ma lascio al lettore la ricerca.

Ai fini dell'eBook che stiamo costruendo, creiamo un'Internal Book Cover davvero basilare, che ha solo titolo esemplificativo.

Utilizziamo il già citato GIMP, che è gratuito e potente, anche se non di uso immediato. Abbiamo visto le specifiche della copertina nell'articolo Creare eBook in formato MOBI: i file sorgente. Ho creato un'immagine 600 x 800 (rapporto 3/4), 300 DPI, salvata in formato JPG, per un totale di 37 KB, abbondantemente entro il limite massimo di 127 KB.

Il risultato, certamente criticabile per originalità e qualità, è questo (clic per ingrandire):

Ho salvato quest'immagine nella cartella OEPBS, assegnandole il nome cover.jpg

L'immagine è a colori, ma sul Kindle base verrà rappresentata in 16 livelli di grigio.

La Marketing Cover può essere uguale all'Internal Book Cover; tuttavia possiamo limitarci a 72 DPI, visto che si tratta di un'immagine destinata ad essere fruita solo online. Ai fini del nostro esempio, mi limito a convertire l'immagine appena creata passando da 300 a 72 DPI e mantenendo le altre caratteristiche. Salvo anche questa immagine nella cartella OEPBS, dandole il nome extra.jpg.

Posso anche salvarla altrove, visto che non andrà a far parte dell'eBook, ma per comodità uso questa cartella.

Elenco dei contenuti

Prepariamo il già citato Elenco dei contenuti. Si tratta di un file XML, salvato nella cartella OEPBS con nome content.opf; ad esso si fa riferimento, come abbiamo visto, nel file container.xml; se gli assegniamo un nome diverso, dovremo riflettere la modifica anche in tale file.

Presento subito il contenuto del file, che poi descrivo in modo più particolareggiato.

Suggerisco di copiarne subito il contenuto nel file vuoto creato e salvarlo.

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="id-libro">
  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
    <dc:title>Il mio primo eBook</dc:title>
    <dc:identifier id="id-libro" opf:scheme="uuid">urn:uuid:819ce410-6553-11e2-bcfd-0800200c9a66</dc:identifier>
    <dc:language>it</dc:language>
    <dc:creator opf:role="aut" opf:file-as="Author's Name">Il Grande Ciaparche Verde</dc:creator>
    <dc:publisher>Casa Editrice</dc:publisher>
    <dc:date>2013-01-01</dc:date>
    <dc:description>Un vero capolavoro, una pietra miliare della letteratura che non deve mancare nella biblioteca di ogni amante delle buone, e meno buone, letture</dc:description>
    <dc:rights>© 2013 Copyright Il Grande Ciaparche Verde. Tutti i diritti riservati.</dc:rights>
    <dc:subject>I Grandi, anzi Grandissimi, classici della letteratura</dc:subject>
    <meta name="cover" content="id-cover" />
  </metadata>
  <manifest>
    <item id="id-cover" href="/cover.jpg" media-type="image/jpeg" />
    <item id="ncx" href="/toc.ncx" media-type="application/x-dtbncx+xml" />
    <item id="sinossihtml" href="/sinossi.html" media-type="application/xhtml+xml" />
    <item id="autorehtml" href="/autore.html" media-type="application/xhtml+xml" />
    <item id="prefazionehtml" href="/prefazione.html" media-type="application/xhtml+xml" />
    <item id="cap1" href="/capitolo1.html" media-type="application/xhtml+xml" />
    <item id="cap2" href="/capitolo2.html" media-type="application/xhtml+xml" />
    <item id="cap3" href="/capitolo3.html" media-type="application/xhtml+xml" />
    <item id="ringraziamentihtml" href="/ringraziamenti.html" media-type="application/xhtml+xml" />
    <item id="extraimg" href="/extra.jpg" media-type="image/jpeg" />
    <item id="mycss" href="/style.css" media-type="text/css" />
    <item id="htmltoc" href="/toc.html" media-type="application/xhtml+xml" />
  </manifest>
  <spine toc="ncx">
    <itemref idref="id-cover" />
    <itemref idref="sinossihtml" />  
    <itemref idref="autorehtml" />
    <itemref idref="prefazionehtml" />
    <itemref idref="htmltoc" />
    <itemref idref="cap1" />
    <itemref idref="cap2" />
    <itemref idref="cap3" />
    <itemref idref="ringraziamentihtml" />
  </spine>
  <guide>
    <reference type="toc" title="Indice dei contenuti" href="/toc.html"  />
    <reference type="title-page" title="Sinossi" href="/sinossi.html"  />
    <reference type="acknowledgements " title="Ringraziamenti" href="/ringraziamenti.html"  />
  </guide>
</package>

Vediamo di capirci qualcosa. Premetto che mi soffermo solo sui dati che richiedono modifica e non mi addentro nella sintassi del file; per chi vuole approfondire, si può iniziare dalle specifiche OPF definite sul sito dell'International Digital Publishing Forum.

Le righe

<?xml version="1.0" encoding="utf-8"?>
  <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="id-libro">

dichiarano il tipo XML e aprono il tag package, che viene chiuso al termine del file.

Vediamo ora la sezione metadata, individuata dai relativi tag <metadata> e </metadata>:

<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
  <dc:title>Il mio primo eBook</dc:title>
  <dc:identifier id="id-libro" opf:scheme="uuid">urn:uuid:819ce410-6553-11e2-bcfd-0800200c9a66</dc:identifier>
  <dc:language>it</dc:language>
  <dc:creator opf:role="aut" opf:file-as="Author's Name">Il Grande Ciaparche Verde</dc:creator>
  <dc:publisher>Casa Editrice</dc:publisher>
  <dc:date>2013-01-01</dc:date>
  <dc:description>Un vero capolavoro, una pietra miliare della letteratura che non deve mancare nella biblioteca di ogni amante delle buone, e meno buone, letture</dc:description>
  <dc:rights>© 2013 Copyright Il Grande Ciaparche Verde. Tutti i diritti riservati.</dc:rights>
  <dc:subject>I Grandi, anzi Grandissimi, Classici della Letteratura</dc:subject>
  <meta name="cover" content="id-cover" />
</metadata>

Questa sezione fornisce informazioni generali sull'eBook.

Dobbiamo anzitutto modificare il valore di UUID, individuato dai tag <identifier> e </identifier>. Si tratta di un identificatore univoco (UUID), che corrisponde a questo eBook e nessun altro. Come possiamo impostarlo? Si può ottenerne uno da questo sito: basta aprire il link e immediatamente viene visualizzato un UUID univoco. Nel mio caso, ho ottenuto il valore 819ce410-6553-11e2-bcfd-0800200c9a66. La definizione dell'UUID è un passo necessario.

Il resto è molto intuitivo: si definisco il titolo dell'eBook (tag <title> e </title>), l'UUID (<identifier> e </identifier>), che abbiamo appena descritto e calcolato, la lingua dell'eBook (<language> e </language>), it nel nostro caso, l'autore (<creator> e </creator>), il publisher (<publisher> e </publisher>), la casa editrice nell'esempio, la data di pubblicazione (<date> e </date>), una descrizione di massima dell'eBook (<description> e </description>), la citazione dei diritti di autore (<rights> e </rights>), una catalogazione di massima dell'eBook (<subject> e </subject>), p.e. la collana o categoria cui appartiene.

Gli unici elementi obbligatori sono titolo, lingua e UUID. Gli altri sono facoltativi; nell'esempio ho inserito solo alcuni di quelli possibili. Un elenco completo è disponibile al solito nella sezione dedicata sul sito International Digital Publishing Forum.

Passiamo alla sezione manifest, tag <manifest> e </manifest>:

<manifest>
  <item id="id-cover" href="/cover.jpg" media-type="image/jpeg" />
  <item id="ncx" href="/toc.ncx" media-type="application/x-dtbncx+xml" />
  <item id="sinossihtml" href="/sinossi.html" media-type="application/xhtml+xml" />
  <item id="autorehtml" href="/autore.html" media-type="application/xhtml+xml" />
  <item id="prefazionehtml" href="/prefazione.html" media-type="application/xhtml+xml" />
  <item id="cap1" href="/capitolo1.html" media-type="application/xhtml+xml" />
  <item id="cap2" href="/capitolo2.html" media-type="application/xhtml+xml" />
  <item id="cap3" href="/capitolo3.html" media-type="application/xhtml+xml" />
  <item id="ringraziamentihtml" href="/ringraziamenti.html" media-type="application/xhtml+xml" />
  <item id="extraimg" href="/extra.jpg" media-type="image/jpeg" />
  <item id="mycss" href="/style.css" media-type="text/css" />
  <item id="htmltoc" href="/toc.html" media-type="application/xhtml+xml" />
</manifest>

Questa sezione deve elencare tutti i file che fanno parte dell'eBook: contenuti, fogli di stile, immagini, etc. Ogni elemento è individuato da una coppia di tag item; ogni item deve avere gli attributi id, href e media-type, che individuano rispettivamente un identificatore dell'elemento, il file corrispondente, completo di percorso, ed il tipo di elemento. Ogni attributo href deve comparire una sola volta.

Gli elementi inseriti nel file dell'esempio sono esattamente quelli che costituiscono l'eBook del nostro esempio, strutturato come visto in precedenza.

Passiamo alla sezione spine, individuata dai relativi tag <spine> e </spine>:

<spine toc="ncx">
  <itemref idref="id-cover" />
  <itemref idref="sinossihtml" />  
  <itemref idref="autorehtml" />
  <itemref idref="prefazionehtml" />
  <itemref idref="htmltoc" />
  <itemref idref="cap1" />
  <itemref idref="cap2" />
  <itemref idref="cap3" />
  <itemref idref="ringraziamentihtml" />
</spine>

Deve venire dopo la sezione manifest. Contiene uno o più elementi itemref, ciascuno dei quali corrisponde ad un elemento della sezione manifest. Ovviamente, sono elencati i soli elementi che ha senso siano presenti in questo contesto: non ha senso, ad esempio, includere la visualizzazione del foglio di stile.

L'ordine, nella sezione spine, è fondamentale, poichè individua l'ordine con cui i vari elementi si succedono nell'eBook. Il selettore idref deve corrispondere a quello del corrispondente elemento presente in manifest.

Infine, abbiamo la sezione guide, individuata dai tag <guide> e </guide>:

<guide>
  <reference type="toc" title="Indice dei contenuti" href="/toc.html"  />
  <reference type="title-page" title="Sinossi" href="/sinossi.html"  />
  <reference type="acknowledgements " title="Ringraziamenti" href="/ringraziamenti.html"  />
</guide>

Questa sezione contiene uno o più elementi di tipo reference. Tutti gli elementi elencati in tale sezione sono disponibili quando si richiama la funzione del dispositivo di lettura che permette di spostarsi a punti ben specifici del documento. Nel Kindle, sono presenti sempre l'inizio e la copertina; altri elementi di navigazione, come l'indice ad esempio, devono essere inseriti qui. L'indice in particolare dovrebbe essere sempre presente: se lo si richiama dalle opzione del Kindle, e non è presente, il lettore non può individuarlo.

Ogni elemento reference ha l'attributo href, che individua il file corrispondente, e un attributo type, che definisce il tipo di oggetto dell'eBook. L'elenco completo dei tipi è disponibile nelle specifiche Open Packaging Format.

In questo esempio mi sono limitato ad aggiungere un riferimento all'indice, alla sinossi ed ai ringraziamenti.

Indice dei contenuti (TOC)

Come visto in Creare eBook in formato MOBI: i file sorgente, dobbiamo creare due file: toc.ncx e toc.html, che hanno lo scopo di definire l'indice dei contenuti. Partiamo dal primo, vedendone subito il contenuto, relativamente al nostro esempio. Al solito, creiamo un file vuoto di nonme toc.ncx, copiamo al suo interno quanto segue e salviamolo nella cartella OEPBS:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1" xml:lang="it">
  <head>
    <meta content="urn:uuid:819ce410-6553-11e2-bcfd-0800200c9a66" name="dtb:uid" />
    <meta content="1" name="dtb:depth" />
    <meta content="0" name="dtb:totalPageCount" />
    <meta content="0" name="dtb:maxPageNumber" />
  </head>
  <docTitle>
    <text>Il mio primo eBook</text>
  </docTitle>
  <docAuthor>
    <text>Il Grande Ciaparche Verde</text>
  </docAuthor>
  <navMap>
    <navPoint id="sinossihtml" playOrder="1">
      <navLabel>
        <text>Sinossi</text>
      </navLabel>
      <content src="/sinossi.html" />
    </navPoint>
    <navPoint id="autorehtml" playOrder="2">
      <navLabel>
        <text>L'autore</text>
      </navLabel>
      <content src="/autore.html" />
    </navPoint>
    <navPoint id="prefazionehtml" playOrder="3">
      <navLabel>
        <text>Prefazione</text>
      </navLabel>
      <content src="/prefazione.html" />
    </navPoint>

    <navPoint id="cap1" playOrder="4">
      <navLabel>
        <text>Capitolo 1</text>
      </navLabel>
      <content src="/capitolo1.html" />
    </navPoint>
    <navPoint id="cap2" playOrder="5">
      <navLabel>
        <text>Capitolo 2</text>
      </navLabel>
      <content src="/capitolo2.html" />
    </navPoint>
    <navPoint id="cap3" playOrder="6">
      <navLabel>
        <text>Capitolo 3</text>
      </navLabel>
      <content src="/capitolo3.html" />
    </navPoint>
    <navPoint id="ringraziamentihtml" playOrder="7">
      <navLabel>
        <text>Ringraziamenti</text>
      </navLabel>
      <content src="/ringraziamenti.html" />
    </navPoint>    
    <navPoint id="htmltoc" playOrder="8">
      <navLabel>
        <text>Indice</text>
      </navLabel>
      <content src="/toc.html" />
    </navPoint>
  </navMap>
</ncx>

Al solito, analizziamo il contenuto del file. Le righe <DOCTYPE... > e <ncx...> descrivono la tipologia del documento ed altre caratteristiche. Prestare attenzione alla definizione della lingua del libro, definita in xml:lang="it".

Passiamo alla sezione head. La voce urn:uuid:... contiene l'uuid del libro, che abbiamo già visto; deve essere uguale a quello definito nel file content.opf. Lasciamo le altre righe della sezione inalterate.

Ulteriori dettagli sul loro significato sono al solito presenti nelle specifiche dell'International Digital Publishing Forum.

Le sezioni docTitle e docAuthor contengono rispettivamente titolo e autore dell'eBook.

Abbiamo poi la sezione navMap, che indica quali sono i punti di navigazione, cioè le voci che il Kindle mostra quando si seleziona l'opzione di menu Vai a.

La struttura di ogni punto di navigazione è identica. Ciascuna è identificata da una sezione navPoint e, all'interno di questa, navLabel, che definisce nel campo <text> il nome del punto di navigazione così come verrà visualizzato nel Kindle.

Ogni navPoint indica anche il punto dove il lettore deve "spostarsi" quando l'utente lo seleziona, indicato in <content src=.... />. Si tratta o di uno dei file che fanno parte dell'eBook o di un riferimento che punta all'interno del file stesso (un anchor html).

Notare il selettore playOrder: definisce l'ordine con cui si susseguono i vari componenti dell'eBook, ed ovviamente procede dal primo enumerando in modo consecutivo tutti i successivi. Se si modifica l'ordine dei componenti, o se ne inserisce o elimina uno, ricordare di modificare il valore di playOrder.

Il file toc.html definisce come viene visualizzato l'indice nell'eBook, quando il lettore si sposta sull'indice stesso tramite le funzioni del Kindle. Il file toc.html per l'esempio attuale è il seguente, come già visto copiamo e incolliamo quanto segue in un file vuoto di nome toc.html e salviamolo nella cartella OEPBS:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
  <title>Indice</title>
  <link type="text/css" rel="stylesheet" href="/style.css" />
</head>
<body>
<p class="chapter">Indice</p>
<p><a href="/sinossi.html">Sinossi</a></p>
<p><a href="/autore.html">Autore</a></p>
<p><a href="/prefazione.html">Prefazione</a></p>
<p><a href="/capitolo1.html">Capitolo1</a></p>
<p><a href="/capitolo2.html">Capitolo2</a></p>
<p><a href="/capitolo3.html">Capitolo3</a></p>
<p><a href="/ringraziamenti.html">Ringraziamenti</a></p>
</body>
</html>

È di comprensione immediata: dopo la definizione delle specifiche del documento (xml e DOCTYPE) e dell'intestazione (sezione <head>...</head>), si specifica un hyperlink che punta, di nuovo, a un file dell'eBook o all'interno di uno di essi.

L'ordine con cui i vari elementi si succedono dovrebbe prevedere indice e prefazione all'inizio, quindi i capitoli del libro in ordine logico ed al termine i ringraziamenti. Sinossi e note sull'autore potete inserirle dove preferite.

Introduco un concetto molto importante, che è da tenere presente per ogni file html. Ovunque appaiono dei caratteri speciali HTML (p.e., le accentate: è, à, il simbolo dell'euro € ed altri, è fondamentale non inserirli direttamente, ma usare invece la codifica HTML. Ad esempio, non si deve scrivere direttamente è ma si deve usare invece la codifica &egrave;. Una bella scocciatura, capisco, ma la codifica UTF-8 dei documenti lo richiede. La presenza di caratteri non supportati comporta errori di compilazione quando si avvia la generazione dei file MOBI.

Ripeto: questo si applica ai file HTML, sia quello che stiamo analizzando ora che i successivi. Ora, nei file che trovate in questa pagina ho usato la codifica corretta per le accentate, che sono gli unici caratteri speciali che appaiono, per cui non dovreste avere alcun problema nella compilazione se usate i miei esempi.

In rete si trovano dozzine di siti che elencano i caratteri e il relativo codice da usare, ad esempio Webdesign.

Foglio di stile (css)

Un foglio di stile è un file di testo con estensione css e definisce le caratteristiche tipografiche dell'eBook: ad esempio, dimensione e tipo del carattere del titolo dei paragrafi, indentazione dei paragrafi stessi, allineamento, eccetera.

Non voglio certo addentrarmi in una trattazione esaustiva di sintassi e semantica dei fogli stile; per chi vuole approfondire, consiglio anzitutto di studiare con la massima attenzione il paragrafo Linee guida per la formattazione nel documento Linee guida per pubblicare su Amazon Kindle, disponibile sul sito di Amazon - si tratta di un documento fondamentale per evitare errori gravi - ed eventualmente consultare il sito W3C Consortium dedicato a CSS.

Ai fini dell'esempio, questo è il foglio di stile che utilizzo nell'eBook che stiamo preparando. Si può creare un documento di testo vuoto con nome style.css, copiarvi il contenuto che segue e salvare nella solita cartella OEPBS.

/* reset tutto */
html, body, div, h1, h2, h3, h4, h5, h6, ol, dl, ul, li, dt, dd, p, blockquote, pre, form, fieldset, table, th, td, tr {
  margin: 0;
  padding: 0.01em;
}

body {
  text-align: justify;
}

/* paragrafo indentato alla prima riga */
p  {
  text-indent: 1.25em;
  margin-top: 0em;
  margin-bottom: 1em;
}

/* paragrafo non indentato */
p.not_indented {
  text-indent: 0em;
  margin-top: 0em;
  margin-bottom: 1em;
}

/* paragrafo centrato con salto riga al termine */
p.front {
  text-indent: 0em;
  margin-top: 0em;
  margin-bottom: 1.0em;
  text-align: center;
}

/* paragrafo con font dimensione doppia, grassetto, 1,5 righe sopra e 1 sotto, centrato e con interruzione di pagina prima usare per titolo capitolo p.e. */
p.title {
  text-indent: 0em;
  font-size: 2.0em;
  font-weight: bold;
  margin-top: 1.5em;
  margin-bottom: 1.0em;
  text-align: center;
  page-break-before: always;
}

/* stesso precedente ma con font dimensione 1,5x, 1 riga sopra e 1,5 sotto - titolo capitolo alternativo */
p.chapter {
  text-indent: 0em;
  font-size: 1.5em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 1.5em;
  text-align: center;
  page-break-before: always;
}

/* paragrafo con testo normale, 1 riga e sotto, centrato - da usare per evidenziazioni particolari o immagini */
p.centered  {
  text-indent: 0em;
  margin-top: 1.0em;
  margin-bottom: 1.0em;
  text-align: center;
}

p.right {
  text-align: right;
  font-style: italic;
}

/* sezione in linea in corsivo */
span.i {
  font-style: italic;
}

/* sezione in linea in grassetto */
span.b {
  font-weight: bold;
}

/* sezione in linea in sottolineato */
span.u {
  text-decoration: underline;
}

/* elenco puntato con bullet */
ul {
  text-align: left;
  margin-left: 3.0em;
  margin-top: 0em;
  margin-bottom: 0em;
}

/* elenco puntato e numerato */
ol  {
  text-align: left;
  margin-left: 3.0em;
  margin-top: 0em;
  margin-bottom: 0em;
}

/* blocco che forza interruzione pagina prima */
.newpage {
  page-break-before: always;
}

Non mi addentro nei dettagli; i commenti ai vari selettori css spiegano lo scopo di ciascuno di essi.

Un paio di esempi tanto per rendere l'idea.

Se voglio iniziare un nuovo capitolo, assegnandogli un titolo con caratteri a dimensione doppia del carattere standard, spaziato di 1,5 righe sopra e una sotto, centrato nella pagina, definisco il relativo paragrafo in questo modo:

<p class="titolo">Il titolo del capitolo</p>.

Volendo invece evidenziare un breve testo corsivo, allineato a destra, che precede l'inizio di un capitolo, o di un paragrafo, tipo una citazione, userò questa sintassi:

<p class="right">Citazione a precedere il paragrafo vero e proprio<br />La posso anche mettere su più righe spezzando il paragrafo con un ritorno a capo html <br /></p>

Il libro

Resta solo da definire il contenuto dell'eBook, il libro vero e proprio insomma. Ho già scritto più volte che si tratta di uno o più file html, che possono corrispondere ai vari capitoli, o ai vari volumi di una saga suddivisa in vari libri.

Suggerisco di non creare file html eccessivamente grandi: il Kindle gestisce meglio file di dimensioni ridotte.

L'eBook del nostro esempio comprende i file HTML sorgente di seguito. Li elenco senza dilungarmi in spiegazioni. Suggerisco di salvare i contenuti che seguono in file di testo, assegnando loro il nome indicato, nella cartella OEPBS.

  • autore.html. Contiene alcune brevi note biografiche sull'autore, non è strettamente necessario. Il contenuto del file nel nostro eBook è il seguente:

    		<?xml version="1.0" encoding="UTF-8" ?>
    		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    		<head>
    		  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    		  <title>L'Autore</title>
    		  <link type="text/css" rel="stylesheet" href="/style.css" />
    		</head>
    		<body>
    		  <p class="title">A proposito dell'autore</p>
    			<p class="not_indented">&Egrave; difficile aggiungere qualcosa di nuovo al fiume di opinioni che media, critici, pubblico e l'umanit&agrave; in genere hanno espresso sull'autore.<br />Potremmo parlare della sua genialit&agrave;, elevare peana all'originalit&agrave; delle opere, sottolineare l'influenza che le stesse hanno avuto sullo sviluppo ed il benessere della razza umana e non solo, e via di questo passo.<br /><br />
    			Ma non lo faremo: tanto nessuno legge le note biografiche e sono pagato lo stesso.</p>
    		</body>
    		</html>
  • sinossi.html. Breve descrizione della trama dell'eBook. Come "riempitivo" di questo contenuto uso il classico esempio Lorem ipsum..., che si trova spessissimo quando ci si imbatte in documenti dove il testo ha solo scopo riempitivo. Anche questo non è indispensabile.

    		<?xml version="1.0" encoding="UTF-8" ?>
    		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    		<head>
    		  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    		  <title>Sinossi</title>
    		  <link type="text/css" rel="stylesheet" href="/style.css" />
    		</head>
    		<body>
    		  <p class="title">Sinossi</p>
    		  <p class="not_indented">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p>
    
    			<p>"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"</p>
    			<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p>
    		</body>
    		</html>
  • prefazione.html. Un'introduzione, normalmente redatta da terzi, che descrive le qualità del romanzo. Anche qui mi servo del riempitivo, che non pubblico per intero, ormai il meccanismo dovrebbe essere chiaro. È ovvio che la prefazione non è necessaria.

    		<?xml version="1.0" encoding="UTF-8" ?>
    		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    		<head>
    		  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    		  <title>Prefazione</title>
    		  <link type="text/css" rel="stylesheet" href="/style.css" />
    		</head>
    		<body>
    		  <p class="title">Prefazione</p>
    		  <p class="centered"><span class="i">A cura di chi la scrive</span></p>
    		  <p class="not_indented">Lorem ipsum eccetera eccetera</p>
    		</body>
    		</html>
  • ringraziamenti.html. I ringraziamenti dell'autore, ennesimo documento non indispensabile.

    		<?xml version="1.0" encoding="UTF-8" ?>
    		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    		<head>
    		  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    		  <title>Ringraziamenti</title>
    		  <link type="text/css" rel="stylesheet" href="/style.css" />
    		</head>
    		<body>
    		  <p class="title">Ringraziamenti</p>
    		  <p class="not_indented">Non vedo proprio chi dovrei ringraziare: ho fatto tutto da solo, dedicando parecchio tempo libero a fare test e ricerche in rete. &Egrave; anche vero che ho scritto gli articoli sugli eBook a mio esclusivo beneficio, per disporre di un vademecum quando non ricordo qualcosa o mi imbatto in errori che avevo gi&agrave; risolto in passato.</p>
    		</body>
    		</html>
  • capitolo1.html, capitolo2.html, capitolo3.html. Si tratta dell'eBook vero e proprio, per semplicità limitato a 3 capitoli, ma lo schema dovrebbe essere chiaro. Sottolineo che niente vieta di creare un unico file html, con tutti i capitoli (sempre ricordando che è bene non creare file HTML eccessivamente grandi).

    In questo caso, i riferimenti nell'indice devono puntare al nome del file (p.e. "libro.html") completo di anchor html, come detto in precedenza (p.e. "libro.html#capitolo1"). Non mi dilungo su questo.

    Per aggiungere un po' di materiale, faccio precedere ad ogni capitolo una citazione allineata a destra, in corsivo, tanto per evidenziare come usare il foglio di stile (il precedente css). Di seguito l'esempio per il capitolo 1, con il riempitivo; capitolo 2 e capitolo 3 sono esattamente identici, tranne che per il titolo. Nel mio esempio il contenuto del libro è molto scarno, per semplificare la lettura e ridurre al minimo i dati da scaricare. Suggerisco di ampliarlo, copiando e incollando il riempitivo, giusto per creare un eBook con un numero di pagine minimo.

    		<?xml version="1.0" encoding="UTF-8" ?>
    		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    		<head>
    		  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    		  <title>Capitolo 1</title>
    		  <link type="text/css" rel="stylesheet" href="/style.css" />
    		</head>
    		<body>
    		  <p class="title">Capitolo 1</p>
    		  <p class="right">Citazione indentata a destra per il capitolo 1<br />separata in pi&ugrave; righe.<br />Segue citazione Segue citazione Segue citazione<br />Segue citazione Segue citazione Segue citazione</p>
    		  <p class="not_indented" >Lorem ipsum eccetera eccetera."</p>
    		  
    		  <p>"Lorem ipsum eccetera eccetera."</p>
    
    		  <p>Lorem ipsum eccetera eccetera</p>
    
    		  <p>Lorem ipsum eccetera eccetera</p>
    
    		  <p>Lorem ipsum eccetera eccetera</p>
    		</body>
    		</html>

    Ho creato alcuni paragrafi per completezza. Il primo paragrafo non è indentato, come evidente dalla classe attribuitagli (not_indented).

Bene, al termine di questo lungo e un po' complesso articolo, disponiamo di tutti i file sorgente necessari a compilare e creare il nostro eBook. Volendo replicare il procedimento che ho indicato per costruirsi una struttura generale su cui costruire il proprio eBook, si possono copiare i contenuti precedenti e salvarli in file con il nome corrispondente indicato nell'articolo, come ho già detto, rispettando la struttura delle cartelle già vista in precedenza.

Se fate tutto correttamente, sarà possibile creare in pochi secondi un eBook MOBI per Kindle, con copertina, indice, segnalibri e contenuti. Inutile da leggere ma sintatticamente corretto.

Nel prossimo ed ultimo articolo, Creare eBook in formato MOBI: generazione e test del file, spiego come generare il file MOBI servendoci degli strumenti elencati nell'articolo Creare eBook in formato MOBI: i file sorgente e come testare il risultato.

Tags: Amazon, eBook, MOBI, Kindle

Contattami, ma pensaci bene

  • Scrivimi, affinchè possa ignorarti con calma
  • Pubblico questa roba dalla Bassa Modenese. Sì, la zona del terremoto di maggio 2012...

    ... tromba d'aria nel 2013...

    ... alluvione nel 2014...

    ... nuova tromba d'aria nel 2014

Cominciamo ad essere un po' scocciati

E questo Ciaparche, cos'è?

Se ti punge vaghezza di conoscere la risposta e dimostrare così la tua ignoranza, non temere: nessuno dal monitor ti osserva (sicuro? Meglio essere attenti... controlla le impostazioni di privacy della fotocamera), per cui corri ad informarti facendo clic sul link sotto.

Se sei tra quegli eletti che hanno colto la citazione, hai tutta la mia approvazione.

Soddisfa la tua curiosità

Riassunto per pigri

Se i titoli dei menu non ti sono chiari, al tuo posto mi preoccuperei. Vabbè oggi mi sento magnanimo e ammetto che alcuni sono criptici o ambigui, per cui ho deciso di metterti a disposizione un riassunto che ti spiega in breve cosa troverai in questo sito.

Dissipa i tuoi dubbi