tex系统怎么用(我如何用TeX复活两千多年前的几何原本)
大数据文摘出品
作者:栾红叶、李可、钱天培
2300多年前,被称为“几何之父”的古希腊数学家欧几里得,结合了前人思想,加上自己在几何方面的研究,最终创造出不朽之作《几何原本》。
这本佳作前后总共包含了400多年的数学发展历史,它不仅保存了许多古希腊早期的几何学理论,而且通过欧几里得开创性的系统整理和完整阐述,使这些远古的数学思想发扬光大。
而随着现代工具的发展,一位来自俄国的数学爱好者通过TeX重新编排了《几何原本》,在这份被”复活“的作品中,你不仅能看到彩色图片,甚至可以看到有趣的动画,让这本古老的教科书瞬间灵动了起来。
一起来看看这位俄国小哥创作的心路历程。
选择合适的工具
2016年,我偶然看到了Oliver Byrne的“《几何原本》的前六卷”。这本书的主要特点是,它不是普通的字母名称,如“三角形ABC”,它直接在文本中使用了微缩图片来表述。即三角形的图像。 尽管这在十九世纪可能很困难,但现在,制作这样一本书,只要使用合适的工具也很容易实现。 所以,我决定自己来验证我的结论。
《几何原本》前六卷:
https://archive.org/details/firstsixbooksofe00byrn/page/n23
在Illustrator中绘制所有插图并在InDesign中编写整个内容 ,这种最简单的操作被我迅速抛弃。在Illustrator中,几何结构并不容易做到,并且更没有简便的方法将主图像自动连接到微缩模型。
至于InDesign,虽然它非常擅长处理这种视觉上的复杂布局,但它过度拥挤的“链接”面板就把我吓跑了。因此,我不假思索地选择了我熟悉的工具MetaPost,这个工具使几何处理变得相对容易,还有LaTeX,一个可以完成这项工作系统。由于在LaTeX中使用MetaPost libs会有一些问题,所以我用ConTeXt取代LaTeX,ConTeXt可与MetaPost享有和谐的兼容关系
它是怎样运作的
《几何原本》有13个部分,其中Byrne只有前六本。 每本书都主要是由“命题” 组成,包含定理和问题。 每个命题都会有一个图表(通常是一个)和一些引用图表的文本。
对于几何构造,我创建了一个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 % And this thing draws the whole picture.
对于命题文本,我在同一个MetaPost实体中创建了一系列绘制图片的宏。 通常,执行任意MetaPost代码即可,但在大多数情况下,他们会将对象名称作为参数。 像这样:
% 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}$.
这就是以上所提到的部分协同工作的方式:
一些有意思的特征
书中的图片并没有很复杂,但有些部分需要特别注意。
如果线段的末端连接在一起,其连接点要怎么显示比较好呢。 目前仅支持两条线段的连接,其他线段可以简单地用下面这样的连接方式表示。 虽然原书至少采用了两种连接点,但在我看来,只要有一种就足够了。
三角形中的角会用圆形扇区显示。 如果角的度数太小,具有相同半径的扇区可能看起来很小,所以就需要把它放大。 目前,对于60度以上的角度,半径保持不变,对于较小的度数,使用该公式:r / a / 60。
为了看起来更舒服,虚线的开头和结尾部分都会用完整的破折号表示。 为了达到这个目的,虚线图案需要缩放一点以适应线条长度,lllustrator具有类似的功能,但其虚线以半破折号开始结束而不是完整破折号。
描绘文本中线段有很多种方法:您可以使它们具有相同的长度,仅保留其颜色,或者你也可以用某种方式显示它们的长度。 Byrne这两种方式都用了,而我使用了以下这个公式:L'= Lal1-a,其中L'是文本中的线段的长度,L是原始的线段长度,l是所需的线段长度,a是介于0和1之间的某个数字。如果a = 0,则L'= 1,即任何线段的长度都是l;如果a = 1,则L'= L;如果0 <a <1,则L <l,L'> L且L> l,L'<L,即,较短的线段变长了,较长的线段变短了。 如果要保留线段的相对长度,同时还要避免2 cm的线段和2 mm线段挨在一起,则可能需要此项。 说实话,一切都有点复杂,但总体思路是一样的。
Byrne的书中不使用字母,但Edward Tufte在他的一本书中肯定了Byrne的作品,并提出使用小标签会有所帮助。 而且由于许多事情都是自动化的,因此添加小写字母并不算一个大工程。 默认情况下,几何顶点的名称是包含其坐标的变量名称。 标签可以放置在多边形的顶点上,在线段的末端和顶点c上。 当然,标签可以选择隐藏和显示,不幸的是,这将会影响布局。
然而,大多数代码通常会用于读者看不到的一些东西上,而作者/编辑则更多关注这些内容。 这些包括正确识别线段和角度的同义词,多边形组周围的自动字母放置以及其他类似的东西。
原版中还有缩写和小插曲。 一方面,创建它们非常容易。至少,它不需要花费很多心思去做,但我想做一个更有趣的尝试 – 自动生成首字母和带有不规则排列的文本。 不仅是因为这个工作有趣,还有就是俄语翻译需要将原始首字母的风格调整为西里尔字母,而我却喜欢这样做。 因此,简而言之,就是当你编译这本书时,首字母列表会被写入,而单独的MetaPost脚本可以非常缓慢地处理它来生成首字母和文本。
这个想法非常简单:将卷曲纹饰放在字母的一部分和框架上,尽可能大。这分为几步完成。所有曲线都包含在后续迭代中。之后,一些“叶子”以相同的方式生长。曲线的形状和特点是可调节的。
结果不能说很满意,但我正在慢慢改进算法,希望达到最好的效果。无论如何,你可以用你选择的图片替换生成的首字母。另外,该脚本还可以生成随机图块。
翻译成俄语来找茬
为了找到更多的错别字和其他错误,我决定将这本书翻译成俄语。起初,我使用著名的Murduhai-Boltovskoi的翻译作为参考,但很快我发现Byrne在翻译中为了实用,大幅修改了欧几里德的定理。老实说,翻译方面我并没有花太多功夫,尤其是简介部分,直到最近我才有时间来润色它。
撇开令人很不愉快的第五本书(碰巧在其他五本书的前几年单独设计),其他的不是非常困难。翻译过程确实有助于发现我和Byrne的错误。例如,第六本书中命题9的图表与文本不匹配,使得证明不正确,所以我只好修改它。
我在翻译过程中偶然发现了一件有趣的事情:在引言中,作者吹嘘他的方法的好处,他引用了Horace关于视觉优于其他感官的话。 几页之后,他引用了一句含义相近的“现代诗人”的诗句,我认为是为了更具说服力。这句诗原来是Horace同一首诗的另一个译本。 幸运的是,在俄语翻译中,我的妻子找到了一位英国作家的合适诗句。当然,在英文版中,这一处我并没有修改。
俄语翻译的另一个特点是,缩写指称在默认情况下是打开的。然而,有人要求制作带有缩写指称的英文版本,我正在考虑将它作为默认选项,因为毕竟“无指称”版本已经存在了(实际上不止一个)。
来自波兰的一个人开始对该书进行波兰语翻译,并在做出了许多非常有价值的贡献(例如,角度缩放是他的想法)。我希望他的翻译能顺利进行。这篇文章的英文版本他也有很大帮助。
图片更易于阅读
我已经研究这本书一段时间了,我有一些收获。内联图片确实易于阅读。现在我也在其他情况下使用这种技术。考虑到我只在下班后的晚上和周末做这个项目,其实并没有花费太多时间:第一个英文版约六个月,俄文翻译约三个月,包括所有规划和代码编写的全过程。虽然后来我发现了错误并修复了错别字。
从我发布第一个版本的那天起,kickstarter 上一个旨在“完善Byrne的工作”的运动即以Byrne的风格制作所有13本Euclid的书籍已经开始并完成了。他们似乎使用了InDesign进行排版。我不知道他们用什么画的图。希望这本书能和他们的其他作品一样好。最近,一位美国设计师制作了一个非常简洁的在线版本。他用了Illustrator绘制图表。
Byrne的书中没有任何三维几何体,只在简介中有平行六面体的图像。我也没有为它制作任何工具,但在某些地方,我想添加一些,所以我开始“Byrne化”11-13号书,用它实践一下新工具。目前,第11本书只有一半多一点粗略制作了,一些函数可以制作三维几何体并将它们投影到平面上。然而,三维机构比平面结构复杂得多,而且我还不确定Byrne的方法是否适合它们,不确定MetaPost是否是一个合适的工具。
文本中的图片需要调整一些字距。类似地,长图片出现在相邻两行会使行间距很宽,所以拉高图片只有在图片碰撞时才适用。我还不知道如何能否自动化地解决这些问题,但我绝对想试一试,因为手工修复真的很无聊。
MetaPost可以在LaTeX中使用,也可以作为独立程序使用。将来,我计划让LaTeX宏靠近ConTeXt宏,以便在更常见的环境中使用它们。 理论上,MetaPost也可以与InDesign一起使用。现在可以用MetaPost生成图片并将它们链接到InDesign文件中,但是这个过程需要一点InDesign脚本才能自动完成。这确实很奇怪,但我不止一次地想到这一点,所以我觉得值得考虑一下。
最后,我想将这些工具应用于比“原本”更现代和实用的东西。感兴趣的读者可以在Github上找到这些资料。
Github 链接:
https://github.com/jemmybutton/byrne-euclid/
相关报道:
https://habr.com/ru/post/451682/
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com