"Elementos" de Euclides de lujo en TeX



En 2016, me encontré con "Los primeros seis libros de los Elementos de Euclides" de Oliver Byrne . La característica principal de este libro es que, en lugar de las designaciones de letras comunes como "triángulo ABC", emplea inclusiones de imágenes en miniatura directamente en el texto, es decir, por ejemplo, una imagen de un triángulo. Tan difícil como probablemente fue en el siglo XIX, tan fácil, con las herramientas adecuadas, debería ser hacer un libro así hoy en día. Y entonces decidí averiguar por mí mismo si ese es el caso.



La opción más obvia, dibujar todas las ilustraciones en Illustrator y componer todo en InDesign, fue rechazada de inmediato. Las construcciones geométricas no son exactamente lo más fácil de hacer en Illustrator, y no se me ocurrió ninguna forma obvia de conectar automáticamente la imagen principal a las miniaturas. En cuanto a InDesign, aunque es muy bueno para lidiar con diseños visualmente ricos, prometió asustarme por el panel de "Enlaces" superpoblado. Entonces, sin pensarlo dos veces, decidí usar otras herramientas con las que estaba familiarizado: MetaPost, que hacía relativamente fácil manejar la geometría, y LaTeX, que sabía que podía hacer el trabajo. Debido a algunos problemas con las librerías MetaPost para LaTeX, reemplacé este último con ConTeXt, que disfruta de una relación alegre e innovadora con MetaPost.

¿Cómo funciona en general?


Los "Elementos" tienen 13 partes, llamadas "libros", de los cuales Byrne solo hizo los primeros seis. Un libro consiste principalmente en "proposiciones": teoremas y problemas. Cada proposición tiene un diagrama (generalmente uno) y algo de texto, en el que se hace referencia al diagrama.

Para las construcciones, hice una macro ConTeXt que crea una nueva instancia de MetaPost. Y en MetaPost, un montón de funciones para crear estas construcciones. Su uso se parece a esto:

\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 % And this thing draws the whole picture. 



Para los textos de propuesta, hice una serie de macros que dibujan imágenes en la misma instancia de MetaPost. En general, ejecutan código MetaPost arbitrario, pero la mayoría de las veces, toman nombres de objetos como argumentos. Así:

 % Names are automatically assigned to line segments but can be assigned manually. Draw $\drawUnitLine{CA} \perp \mbox{ and } = \drawUnitLine{DC}$.\\ Draw $\drawUnitLine{AB} \parallel \drawUnitLine{DC}$,\\ and meeting \drawUnitLine{BD} drawn $\parallel \drawUnitLine{CA}$. 



Así es como estas partes funcionan juntas:



Algunas características


Las imágenes del libro no son demasiado complicadas, pero algunas partes requieren atención especial.

Si los segmentos de línea se tocan entre sí con sus extremos, el punto de contacto necesita una buena representación. Por ahora, solo se admite la conexión de dos líneas. Otras líneas pueden simplemente colocarse debajo de dicha unión. Aunque el libro original emplea al menos dos tipos de articulaciones, en mi opinión, solo una es suficiente.



Los ángulos se representan como sectores circulares. Si un ángulo es lo suficientemente pequeño, el sector con el mismo radio puede verse pequeño, por lo que tiene sentido ampliarlo. Actualmente, el radio se mantiene igual para ángulos superiores a 60 grados, y para ángulos más pequeños, se utiliza esta fórmula: r/ sqrta/60.



Para verse bien, las líneas discontinuas deben comenzar y terminar con guiones completos. Para lograr esto, el patrón de guión se escala un poco para ajustarse bien a la longitud de una línea (Illustrator tiene una característica similar, pero sus líneas discontinuas comienzan y terminan con medias rayas en lugar de rayas completas).



Hay varias formas de representar segmentos de línea en el texto: puede hacer que todos tengan la misma longitud, manteniendo solo sus colores, o también puede mostrar su longitud de alguna manera. Byrne hace las dos cosas. Tengo la siguiente fórmula para esto: L=Lal1adonde Les una longitud de línea en el texto, Les la longitud original de la línea, les una longitud de línea deseada y aes un número entre 0 y 1. Si a=0entonces L=l, es decir, cualquier segmento de línea tendrá longitud l. Si a=1entonces L=L. Si 0<a<1, luego con L<l, L>Ly con L>l, L<L, es decir, los segmentos más cortos se alargan y los más largos se acortan. Es posible que desee esto si desea conservar las longitudes de línea relativas mientras evita las líneas de 2 mm junto a las de 2 cm. (Para ser sincero, todo es un poco más complicado, pero la idea general es la misma).



Aunque Byrne decidió no usar designaciones de letras en absoluto, Edward Tufte en uno de sus libros , aunque elogió el trabajo de Byrne, sugirió que las etiquetas pequeñas realmente ayudarían. Y dado que muchas cosas están automatizadas de todos modos, agregar letras pequeñas no era un gran problema. Por defecto, los nombres de los puntos son los de las variables que tienen sus coordenadas. Las etiquetas se pueden colocar en los vértices de los polígonos, en los extremos de los segmentos de línea & c. Por supuesto, las etiquetas se pueden activar y desactivar (desafortunadamente, lo que afecta el diseño).



Sin embargo, la mayor parte del código está dedicado a cosas menos visibles para un lector y mucho más para un autor / editor. Estos incluyen el reconocimiento correcto del segmento de línea y los sinónimos de ángulo, la colocación automática de letras alrededor de grupos de polígonos y otras cosas por el estilo.

También hay iniciales y viñetas en la edición original. Por un lado, eran razonablemente fáciles de recrear (al menos, no tomaría mucho pensar en hacer esto), pero decidí optar por una opción más interesante (aunque sin esperanza): generar automáticamente las iniciales y viñetas con Un adorno al azar. No solo es divertido, sino que también la traducción al ruso requeriría adaptar el estilo de las iniciales originales a la escritura cirílica, que no era algo que preferiría hacer. Entonces, para resumir, cuando compila el libro, se escribe una lista de letras iniciales en el disco, y un script MetaPost separado puede procesarlo (muy lentamente) para producir las iniciales y viñetas. No hay dos que tengan exactamente el mismo adorno.



La idea es bastante sencilla: coloca rizos en partes de una letra y en el marco, tan grandes como puedan crecer. Esto se hace varias veces. Todas las curvas se incluyen en las iteraciones posteriores. Después de eso, algunas "hojas" se cultivan de la misma manera. La forma y las propiedades de los diferentes brotes son ajustables.



No puedo decir que estoy contento con los resultados, pero poco a poco estoy mejorando el algoritmo y esperando lo mejor (en cualquier caso, puede reemplazar las iniciales generadas con imágenes de su elección). Como beneficio adicional, el script también puede producir mosaicos aleatorios.



Traducción


Para encontrar más errores tipográficos y errores, y solo por ello, decidí traducir el libro al ruso. Al principio, utilicé la conocida traducción de Murduhai-Boltovskoi como referencia, pero pronto descubrí que Byrne cambió demasiado los teoremas de Euclides para que una traducción de referencia fuera muy útil. Para ser honesto, no trabajé demasiado duro en la traducción, especialmente la de la Introducción, y solo recientemente he encontrado tiempo para suavizarla.

Dejando a un lado el quinto libro realmente desagradable (que está diseñado por separado varios años antes que los otros cinco), no fue terriblemente difícil. El proceso de traducción ayudó a detectar errores, tanto los míos como los de Byrne. Por ejemplo, el diagrama para la proposición 9 en el sexto libro no coincide con el texto, lo que hace que la prueba sea incorrecta, por lo que tuve que cambiarla.

Una cosa divertida con la que me topé durante la traducción: en la Introducción, donde el autor se jacta de los beneficios de su método, citó las palabras de Horace con respecto a la superioridad de la visión sobre otros sentidos. Unas páginas después decidió (supongo que sería aún más convincente) citar un verso del "poeta moderno" con un significado similar. Este verso resultó ser otra traducción del mismo verso de Horacio. Afortunadamente, para la traducción al ruso, mi esposa encontró un verso apropiado de un autor inglés. Naturalmente, en la versión en inglés, no cambié la cosa.



Otra característica que tiene la traducción al ruso es que las designaciones de letras están activadas por defecto. Sin embargo, alguien pidió hacer una versión en inglés con las letras activadas, y estoy considerando hacerla la opción predeterminada ya que existe una versión "sin letras" (y más de una, en realidad) de todos modos.

Un tipo de Polonia comenzó a hacer una traducción polaca del libro e hizo muchas contribuciones extremadamente valiosas en el camino (por ejemplo, la idea de los ángulos de escala). Espero que su traducción sea fluida. También me ayudó bastante con la versión en inglés de este artículo.

Resultados provisionales


Después de haber jugado con este libro por un tiempo, puedo decir lo siguiente. Las imágenes en línea son realmente fáciles de leer. Ahora uso esta técnica también en otras situaciones. Teniendo en cuenta que solo trabajé en este proyecto por las tardes después de un trabajo a tiempo completo y los fines de semana, no me llevó demasiado tiempo: unos seis meses para la primera versión en inglés y unos tres para la traducción al ruso, con todos los planificación y codificación. Aunque atrapo errores y corrijo errores tipográficos hasta el día de hoy.

Desde el día en que publiqué la primera versión, una campaña en kickstarter tenía la intención de "completar el trabajo de Byrne" (es decir, como lo entienden los autores, hacer que los trece libros de Euclides al estilo de Byrne) hayan comenzado y terminado. Parecen usar InDesign para el diseño. Lo que usan para dibujar diagramas, no pude averiguarlo. Con suerte, lograrán que este libro sea tan bueno como sus otros trabajos. Y mucho más recientemente, un diseñador estadounidense hizo una versión en línea muy ordenada. Usó Illustrator para dibujar diagramas.

Planes


El libro de Byrne no contiene ninguna geometría sólida (guarde una imagen de un paralelepípedo en la Introducción). Tampoco hice ninguna herramienta para ello, pero en algún momento decidí agregar algunas, así que comencé a "byrnificar" los libros 11-13 para tener algo en qué usar las nuevas herramientas. Por ahora, solo un poco más de la mitad del undécimo libro está hecho aproximadamente, junto con algunas funciones para hacer construcciones sólidas y proyectarlas en el plano de la pantalla. Sin embargo, las construcciones sólidas, en promedio, son sustancialmente más complejas que las planas, y todavía no estoy seguro de si el enfoque de Byrne les quedaría bien y si MetaPost es una herramienta razonablemente conveniente para el trabajo.



Las imágenes en texto muchas veces necesitan algo de interletraje. De manera similar, aunque las imágenes más altas y más complicadas en líneas adyacentes extienden las líneas muy anchas, lo cual es apropiado solo si estas imágenes colisionan. Todavía no sé cómo y si puedo hacer una solución automatizada para estos problemas, pero definitivamente quiero saberlo porque arreglarlos a mano es realmente tedioso.



MetaPost también se puede usar desde LaTeX y como un programa independiente. En el futuro, planeo hacer que las macros de LaTeX sean similares a las de ConTeXt, para permitir su uso en un entorno más común. En teoría, MetaPost también se puede usar con InDesign. Es posible producir imágenes con MetaPost y vincularlas en un archivo de InDesign ahora, pero este proceso requiere ser automatizado con algunos scripts de InDesign. Parece bastante perverso, pero me sorprendí pensando en esto más de una vez, así que creo que vale la pena considerarlo.

Por último, pero no menos importante, quiero aplicar las herramientas a algo más moderno y práctico que "los Elementos".

Todas las cosas se pueden encontrar aquí , los pdf-s se encuentran en la sección "lanzamientos".

Source: https://habr.com/ru/post/452520/


All Articles