Winnt is not NT

Les epubs

Posté le 02/08/2018

En relation avec le post Installation de Calibre serveur sous Linux, il me semble naturel d’évoquer les epubs.

En effet, Calibre permet tout à la fois de gérer sa bibliothèque numérique (dans de multiples format), activer un serveur qui permet une mise à disposition de celle-ci, convertir d’un format vers un autre et aussi créer ou modifier un fichier epub.

C’est sur ce dernier point que je souhaite m’attarder.

Dernièrement, j’ai commencer à lire un livre que j’avais récupéré sur le net. Mais quelle ne fut pas ma surprise de constater que la mise en page était plus que mauvaise, des numéros de pages (xx/yyy) apparaissaient en plein milieu du texte, des mots étaient coupés (césure) en plein milieu du texte, des paragraphes étaient éclatés en plusieurs, les numéros des chapitres étaient perdus au milieu du texte… et la table des matière était inexploitable.

Si je souhaitais que ma femme puisse lire ce livre de façon agréable, il ne me restait plus qu’à « mettre les mains dans le cambouis ».

J’utilisais donc la possibilité d’édition d’un epub offerte par calibre (très complète à ce que j’ai vu).

Un epub c’est quoi en fait ?

Ce n’est rien de plus qu’un fichier compressé contenant :

Un tour dans le fichier des règles CSS

Pour commercer mon travail de remise en forme, j’ai jeter un œil au fichier des règles CSS. J’y ai trouvé plus d’une dizaine de règles telle que :

Mais par contre aucune règle ne contenant :

Bref, si je voulais avoir un epub « propre » un gros boulot m’attendais.

Premier regard dans un fichier html

L’une des premières ligne de texte que je vis avait cet aspect :

<p class="classe2"> <i class="classe3">xxxx</i> 
<i class="classe3">xxx. </i></p>
<p class="classe2"/>

Un coup d’œil au CSS donnait les règles suivantes pour ces classes :

.classe2 {
display: block;
margin-bottom: 1em;
margin-left: 0;
margin-right: 0;
margin-top: 1em
}
.classe3 {
font-style: italic
}

Première réflexion

Sans être un spécialiste en html et CSS, la règle .classe3 m’apparu comme stupide. Elle est en effet redondante avec l’utilisation de la balise <i></i> et est donc inutile. Un « rechercher et remplacer » de class="classe3" dans tous les fichiers html permis de supprimer cette redondance.

Un parcours rapide des différents fichiers html m’indiqua que tout les paragraphes utilisaient class="classe2".

Autant remplacer <p class="classe2"> par <p> et affecter une mise en forme par défaut à <p>.

Création du fichier CSS

En dehors d’un besoin très ponctuel, le nombre de style dont on peut avoir besoin pour un livre est très limité.

Voici celui que j’ai créé :

body    {
  font-family: serif;
}
h1, h2   {
 font-weight: bold;
 font-size: xx-large;
 page-break-before: always;
 text-align: center;
 margin-top: 8ex;
 margin-bottom: 3ex;
 }
h1.ligne2 {
 font-variant-caps: small-caps;
 page-break-before: avoid;
 margin-top: 3ex;
 }
h2   {
 font-size: x-large;
 margin-top: 5ex;
 }
p    {
 display: block;
 font-size: medium;
 margin: 0;
 page-break-after: avoid;
 text-align: justify;
 text-indent: 1.25em;
 }
p.oblique  {
 font-style: oblique;
 }

Explication et utilisation de la feuille de style

Lorsque l’on utilise des feuilles de style CSS, il ne faut pas oublier que les balises héritent des attributs des balises parentes.

Ainsi, attribuer le choix de police à la balise body assure que toutes les balises en héritent. Et donc que la même police est utilisée dans tout le document, sauf cas spécifique.

La balise body

En affectant le choix de la police à cette balise on s’assure que tout le fichier utilisera la même police.

Ce qui est plus agréable pour le lecteur.

Certains préféreront utiliser une police de type sans-serif, chacun ses préférences.

la balise h1

Dans le livre sur lequel je travaillais, les parties avaient ce format :

I
titre du chapitre

J’ai donc eu besoin de créer 2 styles distincts.

la balise h2

Elle est utilisée pour les titres des chapitres.

On obtient ainsi :

 Partie I
      Chapitre 1
      Chapitre 2
      …

la balise p

Elle permet de mettre les paragraphes en forme en ayant à la fois une indentation de la première ligne (text-indent: 1.25em), aucun espacement inter-paragraphes (margin:0) et une justification (text-align: justify).

Nettoyage des fichiers

Le nettoyage des fichiers html sources des class="classe2" au niveau des paragraphes qui rendent difficile la lecture, la recherche des numéros de pages cachés au sein des paragraphes et des coupures (césure) de mots en plein milieu du texte a été la partie la plus longue.

Mais le résultat est un fichier parfaitement lisible et surtout agréable à lire. Ce qui est le plus important dans un epub je pense.

la table des matières

Calibre possède une option qui permet de générer une table des matières à partir des balises de titre que sont h1 … hx.

Je n’ai donc pas hésité à supprimer l’ancienne table pour en recréer une.

Le résultat est parfaitement fonctionnel.

Conclusion

Cette mésaventure m’a permis de me pencher sur la structure interne des fichiers epub, même s’il me reste quelques petites choses à approfondir.

En quelques heures, j’ai réussi à obtenir un epub propre et lisible.

Je me garde en réserve la feuille de style CSS qui pourra toujours me servir de nouveau pour le même travail.

Au final je suis content du temps passé car cela m’a permis d’enrichir mes connaissances en CSS et de découvrir des fonctionnalités de Calibre qui sont bien utiles pour réparer ou corriger des epub corrompus ou mal finis.

Commentaires

comments powered by Disqus