Bastante fantasiosos "Começos" de Euclides em TeX



“Algum estranho h██nya antigo escrito pelo irlandês kulibin em 1847, bom, é bom que isso aconteça, é claro” Misha Verbitsky

No 16º ano, os "Começos" de Euclides na interpretação de Oliver Byrne chamaram minha atenção. A característica deste livro é que, em vez de letras como “triângulo ABC”, são colocadas diretamente nas miniaturas de texto das peças de construção, ou seja, por exemplo, uma imagem com o triângulo correspondente. Tanto quanto fazer um livro, como se poderia imaginar, era um trabalho infernal em meados do século 19, com a mesma facilidade, com as ferramentas certas, deveria ser agora. E, em geral, decidi ter certeza disso.



A opção de simplesmente desenhar ilustrações no ilustrador e criar o layout do design foi rapidamente marcada como decadente. Fazer e editar construções geométricas no Illustrator não significa que seja terrivelmente conveniente, mas nunca pensei em uma maneira bonita de vincular automaticamente as miniaturas à construção principal. O design, embora adequado para esse tipo de layout, prometeu diminuir a exibição da barra de links com tantas fotos. Portanto, não resumindo nada, virei-me para o já conhecido MetaPost, no qual construções geométricas são bastante fáceis de fazer (mas não como em uma geogebra, é claro) e um látex no qual é relativamente claro como fazer as coisas. O Latech, no entanto, devido à incompreensibilidade das bibliotecas para o meta-post, foi substituído pelo ConTeXt, que se dá bem com o meta-post logo de cara.

Como isso funciona em geral?


“Iniciou” em geral 13 partes - livros, mas Byrne processou apenas os primeiros 6. Os livros consistem principalmente de “sentenças” - teoremas e problemas. Cada um é feito de uma construção (mais de uma vez) e o texto que se refere a essa construção.

Para descrever as construções, introduzi uma macro no ConTeXt, que cria uma nova instância do meta-post. No metapost, existem todos os tipos de funções para descrever as construções. É assim:

\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 %      



Para textos de frases, escrevi macros que desenham e exibem figuras na mesma instância da construção principal. Eles executam, no caso geral, um código de metapost arbitrário, mas na maioria das vezes tomam como argumentos os nomes dos elementos necessários - ângulos, segmentos, etc. Por exemplo, assim:

 %    ,      Draw $\drawUnitLine{CA} \perp \mbox{ and } = \drawUnitLine{DC}$.\\ Draw $\drawUnitLine{AB} \parallel \drawUnitLine{DC}$,\\ and meeting \drawUnitLine{BD} drawn $\parallel \drawUnitLine{CA}$. 



Eis como funciona em conjunto:



Alguns recursos


As imagens do livro são despretensiosas, mas algumas coisas exigem atenção especial.

Se os segmentos se tocam com suas extremidades, deve ser de algum modo bem organizado. Agora, compostos de apenas dois segmentos são processados ​​especialmente, o restante pode ser colocado nessa conexão. Pelo menos duas maneiras de conectar linhas são encontradas no original, mas me pareceu desnecessário reproduzi-las.



Os ângulos são desenhados usando setores. Se o ângulo for pequeno o suficiente, com o mesmo raio, o setor parecerá muito curto e faz sentido aumentá-lo. Agora, o raio permanece constante em ângulos de 60 graus e, para ângulos menores, a fórmula é a seguinte: .



As linhas tracejadas, para ficarem bonitas, devem começar e terminar com peças preenchidas, para que a hachura seja levemente dimensionada para caber um número inteiro de vezes em um segmento (existe uma coisa semelhante no ilustrador, mas há traços de meio comprimento no início e no final da linha).



É possível exibir segmentos no texto de diferentes maneiras: você pode torná-los todos do mesmo comprimento, alterando apenas a cor, mas é possível reproduzir o comprimento de uma maneira ou de outra. Em Byrne, existe tal e tal. Eu tenho esta fórmula para isso: onde - o comprimento do segmento no texto, É o comprimento do segmento inicial, - o comprimento desejado do segmento e - um certo número de 0 a 1. Se então , ou seja, qualquer segmento será representado com um comprimento . Se , . Se então às , e com , , ou seja, segmentos curtos são alongados e longos são encurtados. Isso é necessário se você deseja manter os tamanhos relativos dos segmentos, mas não deseja obter segmentos de meio milímetro ao lado de segmentos de dois centímetros. (De fato, tudo é um pouco mais complicado, mas o ponto é).



Embora Byrne tenha recusado as letras, o famoso entediado Edward Tufte, em um de seus livros, falou sobre o assunto de que Byrne estava bem, mas seria bom retornar as cartas. E já que, apesar de tudo, quase tudo é automático, havia um lugar para as cartas. Por padrão, os pontos são nomeados da mesma maneira que as variáveis ​​em que suas coordenadas são armazenadas. As etiquetas podem ser colocadas nos vértices dos polígonos, ou nas extremidades dos segmentos, ou de alguma outra maneira. Eles, é claro, podem ser ativados e desativados à vontade (o layout ao mesmo tempo, é claro, se arrasta).



Mas a maior parte do código ainda é dedicada a coisas que são mais perceptíveis ao autor / editor do que ao leitor. Por exemplo, o reconhecimento correto de nomes sinônimos de ângulos e segmentos, o arranjo automático de letras em torno de vários polígonos, o desenho automático de partes de segmentos em determinados ângulos do texto e assim por diante.

No original, existem letras iniciais e vinhetas. Por um lado, eles poderiam ser desenhados sem muito trabalho (mental, pelo menos), mas eu decidi assumir a tarefa mais interessante (ainda que sem esperança) - produzir letras iniciais e vinhetas com um padrão aleatório automaticamente. Em primeiro lugar, é divertido e, em segundo lugar, a tradução para o russo (descrita abaixo) exigiria a adaptação do estilo inicial das letras ao alfabeto cirílico, atividade que não foi incluída nos meus planos. Portanto, quando você cria o livro, é criada uma lista de todas as letras e vinhetas e, a partir dessa lista, um script de metapost separado desenha (muito lentamente) um conjunto completo de todas essas coisas. As letras iniciais são todas diferentes e os padrões não se repetem.



O princípio é simples: cachos, o maior possível, são colocados nas partes da letra e na moldura. Isso acontece várias vezes e os arabescos já desenhados são incluídos nas iterações a seguir. Então as "folhas" aparecem da mesma maneira. A forma e as propriedades dos diferentes tipos de processos podem ser alteradas.



Não posso dizer que estou muito feliz com o resultado, mas gradualmente aprimorarei o algoritmo e espero o melhor (no entanto, você pode cuspir e inserir imagens com qualquer letra em vez das geradas). Como um bônus, o script pode gerar blocos aleatórios a partir de cachos.



Tradução


Para pegar erros, comecei a traduzir para o russo. Meu ponto de referência foi a tradução dos "Começos" de Morducai-Boltovsky, mas logo ficou claro que Byrne havia mudado muito nas evidências para ajudar muito. Para ser sincero, no começo eu traduzi tudo completamente depois das mangas, especialmente a introdução, apenas para fazê-lo, e só recentemente minhas mãos alcançaram para suavizar um pouco de aspereza.

Além do desagradável quinto livro (que, como se viu, foi enquadrado separadamente do resto e um pouco mais cedo), não foi particularmente difícil. A tradução (o próprio processo) realmente ajudou a capturar muitos batentes diferentes, tanto o meu quanto o autor. Por exemplo, a construção da Proposição 9 do sexto livro de Byrne não corresponde ao texto, razão pela qual a prova não funciona, então tive que refazer tudo lá.

Das curiosidades: na introdução, onde o autor elogia seu método, ele primeiro se referiu a Horace, citando seus poemas sobre a superioridade da visão sobre outros sentimentos como argumento. E algumas páginas depois, ele decidiu adicionar, por uma questão de convencimento, também o "poeta moderno", cujos versos ele também citou. De fato, os "poemas do poeta moderno" acabaram sendo outra tradução das mesmas linhas de Horácio. Aqui, é claro, era necessário deixar tudo como está e em uma nota de rodapé indicar o erro do autor, mas, felizmente, a esposa encontrou poemas adequados do inglês e realmente muito mais moderno autor de Byrne, que entraram em ação (apesar de dizerem que é impossível fazer isso). Na versão em inglês deixou como estava.



A versão russa também é diferente, pois as letras minúsculas são incluídas por padrão e geralmente são mais pequenas que o original em inglês. É verdade que aqui alguém me pediu para fazer a versão em inglês também com letras, e estou pensando em incluí-las também: sem elas, este livro já existe.

Outro amigo começou a traduzir o livro para o polonês e escreveu muitas coisas valiosas no caminho em questões (por exemplo, sobre ângulos de escala - essa é a sugestão dele ). Ótimo se você traduzir.

Subtotais


Tendo mexido com este livro, tenho o seguinte a dizer. As imagens no texto são realmente fáceis de ler, agora eu uso essa técnica em outros lugares. Considerando que eu estava envolvido no projeto à noite após o trabalho principal por um dia inteiro, o resultado foi rápido: cerca de seis meses para a primeira versão em inglês, com todo o planejamento e programação, três meses para a primeira edição da tradução para o russo. É verdade que ainda corrijo cardumes aqui e ali (e, mais recentemente, minha esposa começou a ler russo em busca de erros de digitação, e eu coro, quase como na primeira solicitação de recebimento ).

Desde o momento em que a primeira versão foi publicada no github, começou a campanha kickstarter para arrecadar fundos para "concluir o trabalho de Byrne", ou seja, como os autores entendem, o design de todos os 13 livros "Beginnings" na mesma linha. Aparentemente, o layout do design, o que eles desenham, não é claro. Até o momento, os livros não foram enviados, mas devem ser entregues em breve. Espero que funcione bem. E, mais recentemente, um designer americano lançou uma boa versão web dos seis primeiros livros. A julgar pelo artigo com a história do trabalho, ele pintou tudo à mão no ilustrador.

Planos


Byrne não possuía nenhuma estereometria, então não forneci nenhuma ferramenta para isso desde o início, mas agora decidi reservar lentamente os livros de "Começos" das 11 às 13 para descobrir as ferramentas nelas. Até agora, pouco mais da metade do 11º livro está pronto e, portanto, já existem algumas funções para descrever construções tridimensionais e sua projeção em um plano. No entanto, construções volumosas são, em média, muito mais complicadas do que as planas, e até agora não tenho uma ideia clara de quanto a abordagem de Byrne funcionará para elas ou se será conveniente o suficiente para criá-las em um meta post.



As figuras no texto geralmente requerem kerning. É semelhante, mas mais complicado: imagens de tamanho grande em linhas adjacentes espalham as linhas muito amplas, o que é justificado apenas se elas se sobrepuserem. Ainda não descobri como automatizar essas coisas, e capturar tudo isso manualmente é muito chato.



O metapost pode ser lançado tanto a partir do látex quanto separadamente. Portanto, no futuro, pretendo criar macros para o látex, o mesmo que para o ConTeXt, para que você possa fazer o mesmo em um ambiente mais comum. Em teoria, ninguém se preocupa em usar um metapost, por exemplo, no design. Isso pode ser feito agora, apenas coletando as imagens separadamente e vinculando-as manualmente, mas é necessário escrever alguns scripts para o ID, para que isso aconteça por conta própria. Este último parece bastante com algum tipo de perversão, mas muitas vezes vem à mente para não considerar essa possibilidade.

Bem e o mais importante - eu quero tentar aplicar toda essa maquinaria a algo mais moderno e prático do que o "Beginnings".

Tudo de bom aqui , pdfs prontos estão disponíveis.

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


All Articles