"Une étrange h██nya antique écrite par un kulibin irlandais en 1847, eh bien, c'est bien que cela se produise, bien sûr" Misha VerbitskyÀ la 16e année, les "débuts" d'Euclide dans l'
interprétation d' Oliver Byrne ont attiré mon attention. La particularité de ce livre est qu'au lieu de lettrer comme «triangle ABC», on place directement dans les vignettes de texte des pièces de construction, c'est-à-dire par exemple une image avec le triangle correspondant. En ce qui concerne la réalisation d'un tel livre, comme on pouvait l'imaginer, était un travail infernal au milieu du 19ème siècle, tout aussi facilement, avec les bons outils, il devrait l'être maintenant. Et, en général, j'ai décidé d'en être sûr.

L'option de simplement dessiner des illustrations dans l'illustrateur et de créer une mise en page dans la conception a été rapidement marquée comme décadente. Faire et éditer des constructions géométriques dans Illustrator ne veut pas dire que c'est terriblement pratique, mais je n'ai même jamais pensé à une belle façon de lier automatiquement les vignettes à la construction principale. Le design, bien que bien adapté à ce type de mise en page, promettait de déprimer la vue de la barre de liens avec autant de photos. Donc, n'ayant rien résumé, je me suis tourné vers le MetaPost déjà familier dans lequel les constructions géométriques sont assez faciles à faire (mais pas comme dans un géogebra, bien sûr) et un latex dans lequel il est relativement clair comment faire les choses. Latech, cependant, en raison de l'incompréhensibilité avec les bibliothèques pour le méta-poste, a été remplacé par ConTeXt, qui s'entend bien avec le méta-poste dès la sortie de la boîte.
Comment ça marche en général?
«Commencé» en général 13 parties - livres, mais Byrne n'a traité que les 6 premières. Les livres se composent principalement de «phrases» - théorèmes et problèmes. Chacun est constitué d'une construction (plus souvent qu'une) et du texte qui fait référence à cette construction.
Pour décrire les constructions, j'ai introduit une macro dans ConTeXt, qui crée une nouvelle instance de la méta-publication. Dans le méta-post, il y a toutes sortes de fonctions pour décrire les constructions. Cela ressemble à ceci:
\defineNewPicture{ % pair A, B, C, D; % numeric d; d := 2u; A := (0, 0); % B := A shifted (d, 0); % C := A shifted (0, -d); % D := A shifted (d, -d); % byAngleDefine(B, A, C, byblack, 0); % byAngleDefine(D, B, A, byblue, 0); % , byAngleDefine(C, D, B, byred, 0); % , byAngleDefine(A, C, D, byyellow, 0); % draw byNamedAngleResized(); % byLineDefine(A, B, byred, 0, 0); % byLineDefine(B, D, byyellow, 0, 0); % , byLineDefine(D, C, byblack, 0, 0); % , byLineDefine(C, A, byblue, 0, 0); % draw byNamedLineSeq(0)(AB,BD,DC,CA); % } \drawCurrentPicture

Pour les textes de phrases, j'ai écrit des macros qui dessinent et affichent des images dans le même cas que la construction principale. Ils exécutent, dans le cas général, un code métapost arbitraire, mais le plus souvent ils prennent comme arguments les noms des éléments nécessaires - angles, segments, etc. Par exemple, comme ceci:

Voici comment cela fonctionne ensemble:

Quelques fonctionnalités
Les images dans le livre sont sans prétention, mais certaines choses nécessitent une attention particulière.
Si les segments se touchent avec leurs extrémités, ils doivent être bien arrangés. Maintenant, les composés de seulement deux segments sont spécialement traités, le reste peut être placé sous une telle connexion. On trouve au moins deux façons de relier les lignes dans l'original, mais il m'a semblé inutile de les reproduire.

Les angles sont dessinés à l'aide de secteurs. Si l'angle est suffisamment petit, avec le même rayon, le secteur sera trop court et il est logique de l'augmenter. Maintenant, le rayon reste constant à des angles de 60 degrés, et pour des angles plus petits, la formule est la suivante:
r/ sqrta/60 .

Les lignes en pointillés, pour être belles, doivent commencer et se terminer par des parties remplies, de sorte que les hachures soient légèrement mises à l'échelle pour s'adapter à un nombre entier de fois dans un segment (il y a une chose similaire dans l'illustrateur, mais il y a des traits de demi-longueur au début et à la fin de la ligne).

Vous pouvez afficher les segments dans le texte de différentes manières: vous pouvez les rendre tous de la même longueur, en changeant uniquement la couleur, mais vous pouvez jouer la longueur d'une manière ou d'une autre. A Byrne, il y a tel ou tel. J'ai cette formule pour cela:
L′=Lal1−a où
L′ - la longueur du segment dans le texte,
L Est la longueur du segment initial,
l - la longueur souhaitée du segment et
a - un certain nombre de 0 à 1. Si
a=0 alors
L′=l c'est-à-dire que tout segment sera représenté avec une longueur
l . Si
a=1 ,
L′=L . Si
0<a<1 puis à
L<l ,
L′>L et avec
L>l ,
L′<L , c'est-à-dire que les segments courts sont allongés et les longs sont raccourcis. Cela est nécessaire si vous souhaitez conserver les tailles relatives des segments, mais ne souhaitez pas obtenir des segments d'un demi-millimètre à côté de segments de deux centimètres. (En fait, tout est un peu plus compliqué, mais le sens est le suivant).

Bien que Byrne ait refusé le lettrage, le célèbre ennuyeux Edward Tufte dans un de ses
livres a parlé du sujet que Byrne allait bien, mais ce serait bien de retourner les lettres. Et puisque tout de même, presque tout est automatique, alors il y avait une place pour les lettres. Par défaut, les points sont nommés de la même manière que les variables où leurs coordonnées sont stockées. Les étiquettes peuvent être placées aux sommets des polygones, ou aux extrémités des segments, ou d'une autre manière. Bien sûr, ils peuvent être activés et désactivés à volonté (la disposition en même temps, bien sûr, se glisse).

Mais la majeure partie du code est toujours dédiée à des choses qui sont plus visibles pour l'auteur / éditeur que pour le lecteur. Ceci, par exemple, la reconnaissance correcte des noms synonymes d'angles et de segments, la disposition automatique des lettres autour de plusieurs polygones, le dessin automatique de morceaux de segments à certains angles dans le texte, etc.
Dans l'original, il y a des lettres initiales et des vignettes. D'une part, ils pouvaient être dessinés sans trop de travail (mental, au moins), mais j'ai décidé de reprendre la tâche la plus intéressante (quoique sans espoir) - produire automatiquement des lettres et des vignettes initiales avec un motif aléatoire. Premièrement, c'est juste amusant, et deuxièmement, la traduction en russe (qui est décrite ci-dessous) nécessiterait l'adaptation du style initial des lettres à l'alphabet cyrillique, activité qui n'était pas incluse dans mes plans. Ainsi, lorsque vous créez le livre, une liste de toutes les lettres et vignettes est créée, et à partir de cette liste, un script metapost séparé dessine (très lentement) un ensemble complet de toutes ces choses. Les premières lettres sont toutes différentes et les motifs ne se répètent pas.

Le principe est simple: des boucles, aussi grandes que possible, sont placées sur les parties de la lettre et sur le cadre. Cela se produit plusieurs fois et les fardeaux déjà dessinés sont inclus dans les itérations suivantes. Les «feuilles» apparaissent alors de la même manière. La forme et les propriétés des différents types de processus peuvent être modifiées.

Je ne peux pas dire que je suis assez satisfait du résultat, mais progressivement j'améliorerai l'algorithme et j'espère le meilleur (cependant, vous pouvez cracher et glisser des images avec n'importe quelle lettre au lieu de celles générées). En prime, le script peut générer des tuiles aléatoires à partir de boucles.

La traduction
Pour attraper les erreurs, et en effet, j'ai commencé à traduire en russe. Mon point de référence était la traduction des «débuts» de Morducai-Boltovsky, mais assez rapidement, il est devenu clair que Byrne avait trop changé dans les preuves pour aider beaucoup. Pour être honnête, au début, j'ai tout traduit complètement après les manches, en particulier l'introduction, juste pour le faire, et ce n'est que récemment que mes mains ont atteint pour lisser un peu de rugosité.
Mis à part le cinquième livre désagréable (qui s'est avéré être encadré
séparément du reste et un peu plus tôt), il n'a pas été particulièrement difficile. La traduction (le processus lui-même) a vraiment aidé à attraper beaucoup de jambages différents, le mien et l'auteur. Par exemple, la
construction de la proposition 9 du sixième livre de Byrne ne correspond pas au texte, c'est pourquoi la preuve ne fonctionne pas, j'ai donc dû tout refaire.
Des curiosités: dans l'introduction, où l'auteur fait l'éloge de sa méthode, il a d'abord fait référence à Horace,
citant ses poèmes sur la supériorité de la vision sur les autres sentiments comme argument. Et quelques pages plus tard, il a décidé d'ajouter, par souci de conviction, également le "poète moderne", dont il a également cité les vers. En fait, les «poèmes du poète moderne» se sont avérés être
une autre traduction des mêmes lignes d'Horace. Ici, bien sûr, il fallait tout laisser tel quel et dans une note de bas de page indiquer l'erreur de l'auteur, mais heureusement, la femme a trouvé
des poèmes appropriés de l' auteur anglais Byrne vraiment beaucoup plus moderne, qui sont entrés en action (même s'ils disent qu'il est impossible de le faire). Dans la version anglaise laissée telle quelle.

La version russe est également différente en ce que les petites lettres qu'elle contient sont incluses par défaut et généralement des modifications plus mineures par rapport à l'original qu'en anglais. Certes, ici, quelqu'un m'a
demandé de faire la version anglaise également avec des lettres, et je pense à les inclure là aussi: sans eux, ce livre existe déjà.
Un autre ami a
commencé à traduire le livre en polonais et a écrit beaucoup de choses précieuses en cours de route (par exemple, sur la mise à l'échelle des angles - c'est
sa suggestion ). Génial si vous traduisez.
Sous-totaux
Après avoir bricolé ce livre, j'ai ce qui suit à dire. Les images dans le texte sont vraiment faciles à lire, maintenant j'utilise cette technique dans d'autres endroits. Étant donné que j'étais engagé dans le projet le soir après le travail principal pendant une journée complète, cela s'est avéré assez rapidement: environ six mois pour la première version anglaise, avec toute la planification et la programmation, trois mois pour la première édition de la traduction russe. Certes, je corrige toujours les hauts-fonds ici et là (et plus récemment, ma femme a commencé à lire le russe pour les fautes de frappe, et je rougis, presque comme à la
première demande de tirage ).
À partir du moment où la première version a été publiée sur le github, la
campagne kickstarter pour lever des fonds pour «achever le travail de Byrne» a commencé, c'est-à-dire, comme les auteurs le comprennent, la conception des 13 livres «Beginnings» dans la même veine. Apparemment, la disposition dans la conception, ce qu'ils dessinent, n'est pas claire. Jusqu'à présent, les livres n'ont pas été envoyés, mais ils devraient bientôt. J'espère que ça marche bien. Et plus récemment, un designer américain a sorti une belle
version web des six premiers livres. À en juger par l'article avec l'histoire de l'œuvre, il a tout peint à la main dans l'illustrateur.
Plans
Byrne n'avait aucune stéréométrie du tout, donc je ne lui ai pas fourni d'instruments depuis le tout début, mais maintenant j'ai décidé de réserver lentement les livres "Beginnings" de 11 à 13 afin de pouvoir travailler les outils sur eux. Jusqu'à présent, un peu plus de la moitié du 11e livre est prêt et, en conséquence, il existe déjà certaines fonctions pour décrire les constructions tridimensionnelles et leur projection sur un plan. Cependant, les constructions volumineuses sont, en moyenne, beaucoup plus compliquées que les constructions plates, et jusqu'à présent, je n'ai aucune idée claire de la façon dont l'approche de Byrne fonctionnera pour elles, ni s'il sera assez pratique de les créer dans un méta-post.

Les images dans le texte nécessitent souvent un crénage. C'est similaire, mais plus compliqué: les images de grande taille sur des lignes adjacentes étalent les lignes très largement, ce qui n'est justifié que si elles se chevauchent. Je n'ai pas encore compris comment automatiser ces choses, et attraper manuellement tout cela est très ennuyeux.

Le metapost peut être lancé à la fois à partir du latex et séparément. Donc, à l'avenir, je prévois de créer des macros pour le latex, les mêmes que pour ConTeXt, afin que vous puissiez faire de même dans un environnement plus courant. En théorie, personne ne prend la peine d'utiliser un métapost, par exemple, avec le design. Cela peut être fait maintenant, simplement en collectant les images séparément et en les liant manuellement, mais cela demande d'écrire quelques scripts pour l'ID afin que cela se fasse tout seul. Ce dernier ressemble assez à une sorte de perversion, mais vient trop souvent à l'esprit pour ne pas envisager une telle possibilité.
Eh bien et surtout - je veux essayer d'appliquer toutes ces machines à quelque chose de plus moderne et pratique que les "débuts".
Tous les bons mensonges
ici , les fichiers PDF prêts sont dans les versions.