
2016年,我遇到了奥利弗·伯恩(Oliver Byrne)的
“欧几里得元素的前六本书”。 本书的主要特征是它代替了普通的字母名称(如“三角形ABC”),而是直接在文本中使用了缩微图片,例如三角形的图像。 借助合适的工具,与十九世纪可能一样困难,也很容易,如今应该制作这样一本书。 因此,我决定自己找出是否是这种情况。

最明显的选项-在Illustrator中绘制所有插图并在InDesign中将整个内容组成-很快被拒绝。 几何构造并不是在Illustrator中最简单的事情,而且我还没有想到一种将主图像自动连接到缩影的明显方法。 至于InDesign,尽管它非常擅长处理如此丰富的视觉布局,但它承诺会因“链接”面板过于拥挤而吓到我。 因此,无需三思而后行,我决定使用我熟悉的其他工具-MetaPost(使几何处理相对容易)和LaTeX(我知道可以胜任)。 由于LaTeX的MetaPost库存在一些问题,我将后者替换为ConTeXt,后者与MetaPost有着开箱即用的快乐关系。
一般如何运作
“元素”有13个部分,称为“书”,其中Byrne仅制作了前6个部分。 一本书主要由“命题”(定理和问题)组成。 每个命题都有一个图(通常是一个图)和一些文本,其中引用了该图。
对于构造,我创建了一个ConTeXt宏,该宏创建了一个新的MetaPost实例。 在MetaPost中,有一堆创建这些构造的函数。 它们的用法如下所示:
\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

对于命题文本,我制作了一系列宏,这些宏在同一MetaPost实例中绘制图片。 通常,它们执行任意的MetaPost代码,但大多数情况下,它们将对象名称作为参数。 像这样:

这些部分是如何协同工作的:

一些功能
书中的图片并不太复杂,但是某些部分需要特别注意。
如果线段的末端彼此接触,则接触点需要很好的表示。 目前,仅支持两条线路的连接。 其他线条可以简单地放在这种连接之下。 尽管原始书至少使用两种类型的关节,但在我看来,仅一种就足够了。

角度描绘为圆形扇区。 如果角度足够小,则半径相同的扇形可能看起来很小,因此将其放大是有意义的。 当前,对于60度以上的角度,半径保持不变,对于较小的角度,使用以下公式:
。

为了看起来不错,虚线应以全破折号开头和结尾。 为了实现这一点,对虚线图案进行了一些缩放,以使其很好地适合行的长度(Illustrator具有类似的功能,但其虚线以半虚线而不是全破折号开头和结尾。)

有多种方法可以在文本中描绘线段:可以使它们的长度相同,仅保留其颜色,也可以以某种方式显示其长度。 伯恩两者都做。 我有以下公式:
,在哪里
是文本中的行长,
是原始行长,
是所需的行长,
是介于0和1之间的某个数字。
,然后
,即任何线段的长度
。 如果
,然后
。 如果
,然后
,
与
,
即,较短的段会变长,而较长的段会变短。 如果要保留相对的线长,同时避免2厘米的线紧挨2厘米的线,则可能需要这样做。 (说实话,一切都比较复杂,但是总体思路是相同的。)

尽管伯恩决定完全不使用字母标记,但爱德华·塔夫特在
其中一本书中称赞伯恩的工作,但他建议使用小标签会有所帮助。 而且由于许多事情都是自动化的,因此添加小写字母并不是一件大事。 默认情况下,点名称是持有其坐标的变量的名称。 标签可以放置在多边形的顶点上,线段和c的末端。 当然,可以打开和关闭标签(不幸的是,这会影响布局)。

但是,大多数代码专用于读者看不见的东西,而作者/编辑则更多。 其中包括正确识别线段和角度同义词,在多边形组周围自动放置字母以及类似的东西。
原始版本中还有缩写和小插图。 一方面,它们相当容易重新创建(至少,这样做不需要很多思想),但我决定采用一个更有趣(尽管无望)的选项-使用以下命令自动生成首字母和渐晕随机的装饰品。 这不仅很有趣,而且俄文翻译将需要将原始缩写的样式调整为西里尔字母,这不是我想要做的。 因此,长话短说,当您编写本书时,会将首字母列表写入磁盘,并且单独的MetaPost脚本可以(非常缓慢)对其进行处理以产生首字母和小插图。 他们中没有两个人有完全相同的装饰。

这个想法非常简单:将卷曲放置在字母的各个部分和框架上,并使其尽可能大。 这完成了几次。 所有曲线都包含在后续迭代中。 之后,以相同的方式种植一些“叶子”。 不同芽的形式和特性是可调节的。

我不能说我对结果感到满意,但是慢慢地我正在改进算法并希望达到最佳效果(在任何情况下,都可以用您选择的图片替换生成的首字母缩写)。 另外,脚本还可以生成随机图块。

笔译
为了找到更多的错别字和错误,并且正因为如此,我决定将这本书翻译成俄语。 最初,我使用著名的Murduhai-Boltovskoi的翻译作为参考,但很快发现Byrne在Euclid定理中的变化太大,因此参考翻译非常有用。 老实说,我在翻译方面并没有花太多功夫,尤其是在导言部分,直到最近才找到一些时间来解决它。
抛开真正令人不愉快的第五本书(恰好是在其他五本书之前的几年中分别设计),这并不困难。 翻译过程确实有助于捕获我的和Byrne的bug。 例如,第六本书中的
命题9的图与文本不匹配,从而使证明不正确,因此我不得不对其进行更改。
在翻译过程中,我偶然发现了一件有趣的事情:在引言中,作者吹嘘他的方法的好处,他
引用了霍勒斯关于视觉优于其他感官的话。 几页后,他决定(我认为,更具有说服力)引用一首具有类似含义的“现代诗人”诗。 原来,这节经文是同一贺拉斯经文的
另一种翻译。 幸运的是,为了进行俄语翻译,我的妻子找到了一位英语作家的
诗歌 。 自然,在英语版本中,我没有改变。

俄语翻译的另一个功能是默认情况下启用字母指定。 但是,有人
要求制作英文字母也要打开的版本,并且我正在考虑将其设为默认选项,因为无论如何都存在“无字母”版本(实际上有多个)。
来自波兰的一个人开始对这本书进行
波兰语翻译 ,并在此过程中做出了许多非常有价值的贡献(例如,
他的想法是缩放角度)。 我希望他的翻译会顺利进行。 他还为我提供了英文版的很多帮助。
中期业绩
玩了一段时间之后,我可以告诉以下内容。 内联图片确实易于阅读。 现在,我也在其他情况下使用了此技术。 考虑到我只是在全职工作之后的晚上和周末才从事这个项目,所以并没有花费太多时间:第一个英文版本大约六个月,俄语翻译大约三个月,所有规划和编码。 虽然我发现了错误并修复了今天的错别字。
自从我发布第一个版本的那天起,
就在kickstarter上发起了一场旨在“完成伯恩的工作”(即,如作者所知,以伯恩的风格制作全部13本欧几里德书)的运动,该运动已经开始并结束。 他们似乎使用InDesign进行布局。 他们用什么来画图,我找不到。 希望他们能够成功地使这本书与其他作品一样出色。 最近,一位美国设计师制作了一个非常简洁的
在线版本 。 他使用Illustrator绘制图表。
计划
伯恩的书不包含任何实体几何体(在“简介”中保存平行六面体的图像)。 我也没有为此提供任何工具,但是在某个时候,我决定添加一些工具,因此我开始
“精简” 11-13本书,以便使用一些新工具。 目前,仅大致完成了第11本书的一半,以及一些用于制作实体结构并将其投影到屏幕平面的功能。 但是,平均而言,实体结构要比平面结构复杂得多,而且我不确定Byrne的方法是否适合它们,以及MetaPost是否是一种相对方便的工具。

文本中的图片有时需要字距调整。 同样,相邻行上较高的图片也比较棘手,因此线条分布得很宽,仅当这些图片发生冲突时才合适。 我还不知道如何以及是否可以为这些问题提供自动化的解决方案,但是我绝对想这样做,因为手工修复它们确实很繁琐。

MetaPost也可以在LaTeX内部使用,也可以作为独立程序使用。 将来,我计划使LaTeX宏类似于ConTeXt宏,以允许在更常见的环境中使用它们。 从理论上讲,MetaPost也可以与InDesign一起使用。 现在可以使用MetaPost生成图片并将其链接到InDesign文件中,但是此过程可通过某些InDesign脚本自动进行。 它看起来确实很不正常,但是我不止一次地思考了这个问题,因此我认为值得考虑。
最后但并非最不重要的一点是,我想将这些工具应用于比“元素”更现代,更实用的工具。
可以在
此处找到所有内容,pdf-s在“发行”部分。