Dans un ancien article (ici), j’avais expliqué ma frustration envers le logiciel Anki, qu’il fallait étudier comme il voulait et non comme je le voulais. Et depuis, je me suis remis aux flashcards papiers. Bien que dans un futur proche, Anki pourrait revenir avec parcimonie (vraiment dommage qu’il n’y ait pas de mode examen), en attendant, je me suis confronté à un problème : comment faire des flashcards papiers ? Parce que oui, faire des flashcards papier, c’est compliqué.
Au début, je les faisais à la main. Mais soyons francs, faire 1000 cartes de vocabulaire, ça peut être long. Surtout que, ce que moi j’aime, c’est d’avoir une base normale (imprimée) et d’y rajouter des moyens mnémotechnique, des notes, des couleurs, etc.
Mes premières cartes, je les ai faites à la main. C’était long. Puis j’ai trouvé un moyen d’imprimer des cartes, mais seulement d’un côté. Alors, je faisais l’autre côté à la main. Mais en cherchant un peu, il se trouve que j’ai trouvé un moyen de faire des flashcards papiers qui peuvent être imprimés des deux côtés.
Je mets ici le tuto pour ceux qui veulent.
La problématique
La problématique est la suivante. Ayant un fichier Excel avec une colonne de données pour le côté face, et une autre colonne pour le côté pile, comment imprimer le document recto verso afin que les flashcards ne soient pas mélangées. Car oui, quand on imprime un document, cela se fait de façon livre, c-à-d comme cela.
Autant dire que ce n’est pas facile et qu’aucun logiciel ne le fait facilement. Donc, le but de ce tuto est de faire un document où une page sur deux est le front et une page sur deux est le back, et tout cela à partir d’un document Excel contenant une double colonne de vocabulaire (front, back).
Dans ce tuto, je vais utiliser principalement 2 logiciels : LibreOffice et Python (pour un petit script), si vous n’êtes pas habitué, cela ne devrait pas être trop compliqué à suivre, mais vous voilà prévenu.
Je vais faire la démonstration sur un fichier de grammaire japonais, un document Excel avec toutes les règles de Minna no Nihongo que j’ai fait et qui ressemble à cela.
D’abord un peu de calcul.
Avant de se lancer, corps et âme, dans les méandres d’un des pires logiciels libres qui existe (libreoffice), il faut faire un peu de calcul manuel. En un mot, prévoir.
Premièrement, il faut choisir la taille des cartes. Moi, j’ai choisi 4,9 cm par 3,4 cm. C’est une taille qui tient bien dans la main et que je manipule facilement.
Une fois la taille choisie, il faut savoir combien de cartes par ligne et combien de cartes par colonne.
- Sachant qu’une feuille fait 21 cm, on peut mettre 4 cartes par ligne (4*4.9 = 19,6 cm) et il reste 1,4 cm de marge, soit 0,7 de chaque côté (à retenir).
- Sachant qu’une feuille fait 29.7 de hauteur, on peut mettre 8 cartes par colonne (83.4 = 27,2 cm) et il reste 2,5 cm de marges.
Donc, à la fin, notre document devrait être une suite de feuilles qui a cette gueule. Évidemment, c’est à adapter.
Attention, il faut juste avoir ces chiffres en tête, rien de plus. On les utilisera plus tard.
Maintenant qu’on a nos mesures, il faut préparer le fichier Excel. Le but est de créer deux fichiers, l’un pour le front et l’autre pour le back (puis on les mergera).
Normalement, le fichier excel se présente ainsi.
Moi, ce que je veux, c’est que sur chaque front il y ait Fr + le numéro de leçon (colonne L), idem pour le back (mais pour le japonais).
Première chose à faire est de rajouter une colonne au début avec comme intitulé un id QUI COMMENCE à ZERO (on l’utilisera plus tard).
Le front
Commençons par le plus simple : le front. Le principe est le suivant :
- Créer une database odb à partir des données
- Créer un fichier label à partir de la db.
- Créer un fichier front.pdf à partir du fichier label.
Créer une database odb à partir des données.
D’abord, il faut ouvrir le fichier de données dans Libreoffice Calc (que j’appelerai tuto.ods par la suite). Ensuite il faut créer un fichier database (tuto.odb).Pour cela, File->new Database. Puis là, faire « connect to an existing database » et choisir « Spreadsheet ».
Ensuite, il faut choisir le fichier tuto.ods (donc le fichier déjà ouvert…), et enfin choisir « yes, register the database for me ».
PS : Oui, c’est normal de rouvrir son propre fichier alors qu’il est déjà ouvert. En fait, on crée une base de données à partir du fichier Excel. Juste que les menus de LibreOffice sont immondes.
il faut cliquer sur « Finish » et donner un nom à la database (genre Tuto.odb). La DB va s’ouvrir (dans LibreOffice DB), à refermer directement. le plus important est d’avoir créé un fichier odb. À ce stade, dans votre dossier, vous devriez avoir 2 fichiers, le fichier Tuto.ods (ou xlsx) et Tuto.odb.
Créer un fichier label à partir de la db.
Maintenant, à partir de cette DB, on peut générer un fichier de cartes front. Dans les menus, Il faut faire « File => new labels ». Cela ouvre un menu avec 3 tabs.
LABELS : il faut choisir quels sont les labels qu’on veut dans le label text. Pour cela, il faut prendre les champs de droite et les mettre à gauche. Dans le champ de droite, sous Database, il faut choisir tuto.odb (votre base de données). Puis la table (qui correspond à la TAB dans le fichier excel) field (ou champ, correspond à la colonne). Une fois sélectionnée, il faut cliquer sur la petite <- au milieu et le champ apparaitra alors dans le libellé.
FORMAT . Dans le tab Format, Eh bien, c’est ici qu’ils apparaissent (height, width, margin, etc…). À noter que Width et pitch sont les mêmes (vu que les cartes sont découpées). Par contre, il faut bien vérifier la taille du papier qui reste de la taille d’un A4, etc…
OPTION : Enfin, dans option, très important : il faut cocher la case « synchronise contents » (sinon c’est la merde).
Une fois que c’est fait, un nouveau document est construit. Un document qui a une gueule bizarre, mais ne jugeons pas trop vite. (c’est le document label). C’est a partir de ce document que le document final va être généré.
Premièrement, le bouton synchronise labels est important. on peut encore toucher la mise en page des cartes. Mais pour ne pas le faire partout, le bouton va propager le changement. Ainsi, par exemple, si on sélectionne un champ (data) et qu’on l’aligne à droite. Puis qu’on synchronise, tous les champs de toutes les cartes iront à droite.
Aussi, je conseille de sélectionner le premier cadre (la première flashcard) et de rendre les bords noirs (comme pour les tableaux), cela simplifiera le découpage.
Une fois fait, il n’y a plus qu’à générer les cartes à l’aide du bouton édit individual… (le premier après exclure récipient, celui qui a un petit stylo). Et surtout pas celui avec la lettre. Cela donne le document suivant :
Voilà, un beau document de Flash card. Il y a toujours moyen de changer 2 à 3 trucs à à la main (attention,toutes les cartes sont writes protected), mais voilà pour le front. Ilfaut sauver avec le nom front.pdf (dansLibreOffice, LibreOffice, fichier -> export as PDF). Cela servira plus tard.
Maintenant le back.
Back
Pour le back, c’est un peu plus compliqué. Pour produire un fichier back.pdf (avec le back de toutes les cartes), c’est le même procédé que pour le front, mais avant, il faut réarranger les données afin qu’elles apparaissent de manière mirroir, et pour cela, il faut faire quelques manipulations. Voici comment faire…
Supposons que les données back soit dans la colonne D. Premièrement, il faut ajouter plusieurs colonnes.
- Avant tout, si ce n’est pas déjà fait, il faut une colonne ID qui commence à 0 (colonne A).
- P1, P2, P3 (des colonnes de travails)
- cell = la colonne qui donne la bonne cell
- data = La colonne ou les données seront.
Ensuite, il faut, dans un endroit, mettre les trois valeurs suivantes:
- le nombre de données = nombre de cartes = (chez moi) 85, mais sinon utiliser la formule max(D:D)
- Nb colonne = nombre de cartes par lignes = 4.
- Column name = D, la colonne ou les informations back se situent.
In fine, the document should ressemble to that (sans les données en EFGH et I, elles seront remplies dans la suite).
Deuxièmement, pour les colonnes P1, P2, P3, cell et datas, il faut mettre les formules suivantes pour chaque ligne.
- P1 : =ROUNDDOWN(A2/$K$3) => le numéro de ligne
- P2 : =$K$3*(E2+1)-A2 => Le numéro de cartes dans la ligne (4.3.2.1, 4.3.2.1, etc…)
- P3 : =E2*$K$3+F2 => Le numéro de cartes dans tout le fichiers. (4.3.2.1, 8.7.6.5, etc…)
- cell : =$K$4&G2+1 => le numéro de cellules.
- data =INDIRECT(H2) => la donnée.
Une fois ceci fait, la colonne Data contient les données des flashcards, mais dans le bon sens. De là, il suffit de refaire tout ce qu’on a fait pour la partie front, à savoir
- Créer une db (ça peut être la même)
- Créer un fichier labels,
- Créer un fichier back.pdf.
In fine, il devrait avoir un fichier front.pdf et un fichier back.pdf dans le dossier.
2 fichiers en un.
Maintenant qu’on a un fichier front.pdf et un fichier back.pdf, il y a 2 solutions.
- Soit vous allez chez votre imprimeur et vous lui dites qu’il faut imprimer d’abord un côté, puis remettre les feuilles à l’envers dans l’imprimante et imprimer le back.
- Soit faire un unique fichier en intercallant les pages (front, back, front, back, etc…). Pour cela, la seule solution que j’ai trouvée, c’est d’utiliser le script Python suivant:
from pypdf import PdfReader, PdfWriter
front = « front.pdf »
back = « back.pdf »frontreader = PdfReader(front)
backreader = PdfReader(back)result = PdfWriter()
for page in range (0,frontreader.get_num_pages()) :
result.add_page(frontreader.get_page(page))
result.add_page(backreader.get_page(page))with open(« result.pdf », ‘wb’) as rst:
result.write(rst)
Ce script lit un document front.pdf et back.pdf pour en faire un document Result.pdf comme il faut. À partir de là, il suffit simplement d’imprimer le fichier recto verso… et puis d’étudier, mais ça, c’est une autre histoire.
Aussi je met ici le fichier de grammaire, pour ceux qui veulent.
Conclusion
Libreoffice, c’est vraiment de la merde comme logiciel :-D.