
2016 stieß ich auf Oliver Byrnes
„Die ersten sechs Bücher der Elemente von Euklid“. Das Hauptmerkmal dieses Buches ist, dass anstelle gewöhnlicher Buchstabenbezeichnungen wie „Dreieck ABC“ Einschlüsse von Miniaturbildern direkt in den Text verwendet werden, dh beispielsweise ein Bild eines Dreiecks. So schwierig es wahrscheinlich im 19. Jahrhundert war, so einfach und mit den richtigen Werkzeugen sollte es heutzutage sein, ein solches Buch zu erstellen. Und so habe ich mich entschlossen, selbst herauszufinden, ob das der Fall ist.

Die naheliegendste Möglichkeit, alle Illustrationen in Illustrator zu zeichnen und das Ganze in InDesign zu komponieren, wurde umgehend abgelehnt. Geometrische Konstruktionen sind in Illustrator nicht gerade die einfachste Aufgabe, und mir fiel kein offensichtlicher Weg ein, das Hauptbild automatisch mit Miniaturen zu verbinden. Was InDesign betrifft, obwohl es sehr gut mit solch visuell reichhaltigen Layouts umgehen kann, versprach es, mich durch das überfüllte „Links“ -Panel zum Teufel zu machen. Ohne nachzudenken, entschied ich mich für andere Tools, mit denen ich vertraut war - MetaPost, das den Umgang mit Geometrie relativ einfach machte, und LaTeX, von dem ich wusste, dass es die Arbeit erledigen kann. Aufgrund einiger Probleme mit MetaPost-Bibliotheken für LaTeX habe ich letztere durch ConTeXt ersetzt, das eine sofort einsatzbereite, fröhliche Beziehung zu MetaPost unterhält.
Wie funktioniert es im Allgemeinen?
Die "Elemente" haben 13 Teile, sogenannte "Bücher", von denen Byrne nur die ersten sechs gemacht hat. Ein Buch besteht hauptsächlich aus „Sätzen“ - Theoremen und Problemen. Jeder Satz enthält ein Diagramm (normalerweise eines) und einen Text, in dem auf das Diagramm verwiesen wird.
Für Konstruktionen habe ich ein ConTeXt-Makro erstellt, das eine neue MetaPost-Instanz erstellt. Und in MetaPost eine Reihe von Funktionen zum Erstellen dieser Konstruktionen. Ihre Verwendung sieht ungefähr so aus:
\defineNewPicture{ % Inside this thing you put the construction pair A, B, C, D; % MetaPost has a special type of variables for coordinates numeric d; d := 2u; A := (0, 0); % B := A shifted (d, 0); % Point coordinates are set here C := A shifted (0, -d); % D := A shifted (d, -d); % byAngleDefine(B, A, C, byblack, 0); % These define angles: byAngleDefine(D, B, A, byblue, 0); % first—angle points, byAngleDefine(C, D, B, byred, 0); % then color, byAngleDefine(A, C, D, byyellow, 0); % then style. draw byNamedAngleResized(); % This thing draws all the angles. byLineDefine(A, B, byred, 0, 0); % These define line segments: byLineDefine(B, D, byyellow, 0, 0); % first—ends, byLineDefine(D, C, byblack, 0, 0); % then color and style, byLineDefine(C, A, byblue, 0, 0); % then thickness. draw byNamedLineSeq(0)(AB,BD,DC,CA); % This thing draws a sequence of lines. } \drawCurrentPicture

Für Satztexte habe ich eine Reihe von Makros erstellt, die Bilder in derselben MetaPost-Instanz zeichnen. Im Allgemeinen führen sie beliebigen MetaPost-Code aus, verwenden jedoch meistens Objektnamen als Argumente. So:

So arbeiten diese Teile zusammen:

Einige Funktionen
Die Bilder im Buch sind nicht allzu kompliziert, aber einige Teile erforderten besondere Aufmerksamkeit.
Wenn sich Liniensegmente mit ihren Enden berühren, benötigt der Berührungspunkt eine schöne Darstellung. Derzeit wird die Verbindung von nur zwei Leitungen unterstützt. Andere Linien können einfach unter eine solche Verbindung gelegt werden. Obwohl das ursprüngliche Buch mindestens zwei Arten von Gelenken verwendet, reicht meiner Meinung nach nur eines aus.

Winkel werden als kreisförmige Sektoren dargestellt. Wenn ein Winkel klein genug ist, kann der Sektor mit demselben Radius winzig aussehen, sodass es sinnvoll ist, ihn zu vergrößern. Derzeit bleibt der Radius für Winkel über 60 Grad gleich, und für kleinere Winkel wird diese Formel verwendet:
.

Um gut auszusehen, sollten gestrichelte Linien mit vollen Strichen beginnen und enden. Um dies zu erreichen, wird das Strichmuster ein wenig skaliert, um es an eine Linienlänge anzupassen (Illustrator hat eine ähnliche Funktion, aber die gestrichelten Linien beginnen und enden mit halben Strichen anstelle von vollen Strichen.)

Es gibt verschiedene Möglichkeiten, Liniensegmente im Text darzustellen: Sie können sie alle gleich lang machen, nur ihre Farben beibehalten, oder Sie können auch irgendwie ihre Länge anzeigen. Byrne macht beides. Ich habe die folgende Formel dafür:
, wo
ist eine Zeilenlänge im Text,
ist die ursprüngliche Zeilenlänge,
ist eine gewünschte Zeilenlänge und
ist eine Zahl zwischen 0 und 1. Wenn
dann
Das heißt, jedes Liniensegment hat eine Länge
. Wenn
dann
. Wenn
, dann mit
,
und mit
,
Das heißt, kürzere Segmente werden länger und längere werden kürzer. Sie können dies wünschen, wenn Sie die relativen Linienlängen beibehalten und gleichzeitig 2-mm-Linien neben 2-cm-Linien vermeiden möchten. (Um ehrlich zu sein, ist alles etwas komplizierter, aber die allgemeine Idee ist dieselbe.)

Obwohl Byrne sich entschied, überhaupt keine Buchstabenbezeichnungen zu verwenden, schlug Edward Tufte in
einem seiner Bücher , während er Byrnes Arbeit lobte, vor, dass kleine Etiketten tatsächlich helfen würden. Und da viele Dinge sowieso automatisiert sind, war das Hinzufügen kleiner Buchstaben keine allzu große Sache. Standardmäßig sind die Punktnamen diejenigen von Variablen, die ihre Koordinaten halten. Beschriftungen können an den Eckpunkten von Polygonen, an den Enden von Liniensegmenten usw. platziert werden. Natürlich können Beschriftungen ein- und ausgeschaltet werden (was sich leider auf das Layout auswirkt).

Der größte Teil des Codes ist jedoch Dingen gewidmet, die für einen Leser weniger sichtbar sind, und viel mehr für einen Autor / Herausgeber. Dazu gehören die korrekte Erkennung von Liniensegment- und Winkelsynonymen, die automatische Platzierung von Buchstaben um Polygongruppen und ähnliches.
Es gibt auch Initialen und Vignetten in der Originalausgabe. Einerseits waren sie relativ einfach neu zu erstellen (zumindest würde dies nicht viel Nachdenken erfordern), aber ich entschied mich für eine interessantere (wenn auch hoffnungslose) Option - das automatische Generieren der Initialen und Vignetten mit eine zufällige Verzierung. Es macht nicht nur Spaß, sondern die russische Übersetzung würde auch erfordern, den Stil der ursprünglichen Initialen an die kyrillische Schrift anzupassen, was ich nicht vorziehen würde. Kurz gesagt, wenn Sie das Buch kompilieren, wird eine Liste der Anfangsbuchstaben auf die Festplatte geschrieben, und ein separates MetaPost-Skript kann sie (sehr langsam) verarbeiten, um die Initialen und Vignetten zu erstellen. Keine zwei von ihnen haben genau das gleiche Ornament.

Die Idee ist ziemlich einfach: Platzieren Sie Locken auf Teilen eines Buchstabens und auf dem Rahmen, so groß wie sie wachsen können. Dies wird mehrmals durchgeführt. Alle Kurven sind in den nachfolgenden Iterationen enthalten. Danach werden einige „Blätter“ auf die gleiche Weise gezüchtet. Die Form und die Eigenschaften verschiedener Sprossen sind einstellbar.

Ich kann nicht sagen, dass ich mit den Ergebnissen zufrieden bin, aber langsam verbessere ich den Algorithmus und hoffe auf das Beste (auf jeden Fall können Sie die generierten Initialen durch Bilder Ihrer Wahl ersetzen). Als Bonus kann das Skript auch zufällige Kacheln erstellen.

Übersetzung
Um mehr Tippfehler und Fehler zu finden, habe ich mich entschlossen, das Buch ins Russische zu übersetzen. Zuerst benutzte ich die bekannte Übersetzung von Murduhai-Boltovskoi als Referenz, stellte jedoch bald fest, dass Byrne in Euklids Theoremen zu viel geändert hatte, als dass eine Referenzübersetzung sehr nützlich wäre. Um ehrlich zu sein, habe ich nicht zu hart an der Übersetzung gearbeitet, insbesondere nicht an der der Einführung, und erst kürzlich etwas Zeit gefunden, um sie zu glätten.
Abgesehen von dem wirklich unangenehmen fünften Buch (das einige Jahre vor den anderen fünf
separat gestaltet wurde) war es nicht besonders schwierig. Der Übersetzungsprozess hat geholfen, Fehler zu finden, sowohl meine als auch Byrnes. Zum Beispiel stimmt
das Diagramm für Satz 9 im sechsten Buch nicht mit dem Text überein, was den Beweis falsch macht, also musste ich ihn ändern.
Eine amüsante Sache, auf die ich während der Übersetzung gestoßen bin: In der Einleitung, in der der Autor mit den Vorteilen seiner Methode prahlt,
zitierte er Horaces Worte bezüglich der Überlegenheit des Sehens gegenüber anderen Sinnen. Ein paar Seiten später beschloss er (ich nehme an, noch überzeugender zu sein), einen Vers eines „modernen Dichters“ mit ähnlicher Bedeutung zu zitieren. Dieser Vers stellte sich als eine
weitere Übersetzung des gleichen Verses von Horace heraus. Glücklicherweise fand meine Frau für die russische Übersetzung einen passenden
Vers eines englischen Autors. Natürlich habe ich in der englischen Version nichts geändert.

Ein weiteres Merkmal der russischen Übersetzung ist, dass Buchstabenbezeichnungen standardmäßig aktiviert sind. Jemand hat jedoch
darum gebeten , eine englische Version mit aktivierten Buchstaben zu erstellen, und ich erwäge, sie zur Standardoption zu machen, da ohnehin eine "buchstabenlose" Version (und tatsächlich mehr als eine) existiert.
Ein Mann aus Polen begann
eine polnische Übersetzung des Buches und leistete unterwegs viele äußerst wertvolle Beiträge (Skalierungswinkel waren zum Beispiel
seine Idee ). Ich hoffe, dass seine Übersetzung reibungslos verläuft. Er hat mir auch bei der englischen Version dieses Artikels ziemlich geholfen.
Zwischenergebnisse
Nachdem ich eine Weile mit diesem Buch gespielt habe, kann ich Folgendes sagen. Inline-Bilder sind in der Tat leicht zu lesen. Jetzt verwende ich diese Technik auch in anderen Situationen. In Anbetracht der Tatsache, dass ich erst abends nach einem Vollzeitjob und an den Wochenenden an diesem Projekt gearbeitet habe, dauerte es nicht allzu lange: ungefähr sechs Monate für die erste englische Version und ungefähr drei für die russische Übersetzung mit all dem Planung und Kodierung. Obwohl ich bis heute Fehler fange und Tippfehler behebe.
Seit dem Tag, an dem ich die erste Version veröffentlicht habe, hat
eine Kampagne auf Kickstarter begonnen und beendet, die
darauf abzielt , „Byrnes Arbeit zu vervollständigen“ (dh, wie die Autoren verstehen, alle dreizehn Euklid-Bücher in Byrnes Stil zu erstellen). Sie scheinen InDesign für das Layout zu verwenden. Was sie zum Zeichnen von Diagrammen verwenden, konnte ich nicht herausfinden. Hoffentlich gelingt es ihnen, dieses Buch so gut wie ihre anderen Werke zu machen. Und in jüngerer Zeit hat ein US-Designer eine sehr nette
Online-Version erstellt . Er benutzte Illustrator, um Diagramme zu zeichnen.
Pläne
Byrnes Buch enthält keine feste Geometrie (speichern Sie ein Bild eines Parallelepipeds in der Einleitung). Ich habe auch keine Werkzeuge dafür erstellt, aber irgendwann habe ich beschlossen, einige hinzuzufügen, und so habe ich begonnen, die Bücher 11–13 zu
„byrnifizieren“ , um etwas zu haben, auf dem ich die neuen Werkzeuge verwenden kann. Im Moment ist nur etwas mehr als die Hälfte des 11. Buches grob gemacht, zusammen mit einigen Funktionen, um solide Konstruktionen zu erstellen und sie auf die Bildschirmebene zu projizieren. Solide Konstruktionen sind jedoch im Durchschnitt wesentlich komplexer als ebene, und ich bin mir noch nicht sicher, ob Byrnes Ansatz gut zu ihnen passt und ob MetaPost ein einigermaßen praktisches Werkzeug für diesen Job ist.

Bilder im Text benötigen oft etwas Kerning. In ähnlicher Weise, jedoch schwieriger, erhöhen größere Bilder auf benachbarten Linien die Linien sehr weit, was nur dann angemessen ist, wenn diese Bilder kollidieren. Ich weiß noch nicht, wie und ob ich eine automatisierte Lösung für diese Probleme finden kann, aber ich möchte es auf jeden Fall, weil es wirklich mühsam ist, sie von Hand zu beheben.

MetaPost kann auch in LaTeX und als eigenständiges Programm verwendet werden. In Zukunft plane ich, LaTeX-Makros ähnlich wie ConTeXt-Makros zu erstellen, um sie in einer allgemeineren Umgebung verwenden zu können. Theoretisch kann MetaPost auch mit InDesign verwendet werden. Es ist jetzt möglich, Bilder mit MetaPost zu erstellen und in einer InDesign-Datei zu verknüpfen. Dieser Prozess muss jedoch mit einigen InDesign-Skripten automatisiert werden. Es sieht ziemlich pervers aus, aber ich habe mich mehr als einmal dabei erwischt, darüber nachzudenken.
Zu guter Letzt möchte ich die Werkzeuge auf etwas Moderneres und Praktischeres als „die Elemente“ anwenden.
Alle Sachen finden Sie
hier , pdf-s befinden sich im Abschnitt "Releases".