TeX中Euclid的许多“幻想”



“爱尔兰库里宾(Kirbin)在1847年写的一些奇怪的古董h██nya,好吧,当然会发生这种情况。” Misha Verbitsky

在16年级时,欧几里得在演绎奥利弗·伯恩 Oliver Byrne)时的“开头”引起了我的注意。 本书的特点是,代替了像“ ABC三角”这样的字母,在文本中直接放置了构造零件的缩影,例如,带有相应三角的图片。 就可以想象得到的这本书而言,这是19世纪中叶的一件令人毛骨悚然的工作,只要拥有合适的工具,它就应该是现在。 而且,总的来说,我决定要确保这一点。



简单地在插图画家中绘制插图并在设计中组成布局的选项很快就被标记为decade废。 在Illustrator中进行和编辑几何构造并不是说它非常方便,但是我什至从未想到过将缩略图自动链接到主要构造的漂亮方法。 该设计虽然非常适合此类布局,但它肯定会压低链接栏的视图并显示许多图片。 因此,在不进行任何总结的情况下,我转向了已经很熟悉的MetaPost,它的几何构造非常容易做到(当然不像在Geogebra中那样),而乳胶则相对很清楚如何进行组装。 但是,由于元帖子库的不可理解性,Latech被ConTeXt取代,后者与元帖子开箱即用。

一般如何运作?


“开始”一共有13个部分-书籍,但Byrne仅处理了前6个部分。书籍主要由“句”-定理和问题组成。 每个结构都是由一种结构(通常是一个以上)组成,并且引用该结构的文本也是如此。

为了描述这些构造,我在ConTeXt中引入了一个宏,该宏创建了meta-post的新实例。 在meta-post中,有各种各样的功能来描述结构。 看起来像这样:

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



对于句子文本,我编写了宏,这些宏在与主要结构相同的实例中绘制和显示图片。 在通常情况下,它们执行任意的元发布代码,但是大多数情况下,它们将必要元素的名称(例如角度,线段等)作为参数,例如:

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



这是如何一起工作的:



一些功能


书中的图片朴实无华,但有些事情需要特别注意。

如果各段的末端彼此接触,则必须以某种方式很好地布置它们。 现在,仅对两个部分的化合物进行了特殊处理,其余部分可以置于这种连接之下。 至少有两种连接线的方法,但是在我看来,没有必要复制它们。



使用扇区绘制角度。 如果角度足够小,则在相同半径的情况下,该扇区将显得太短,因此有必要增大它。 现在,半径在60度角处保持恒定,对于较小的角度,公式如下: r/ sqrta/60



为了美观起见,虚线应以填充的部分开始和结束,以便将阴影线略微缩放以将整数倍地放入段中(插图中有类似的内容,但是在行的开始和结尾处有半长的笔划)。



您可以用不同的方式在文本中显示段:您可以将它们全部设置为相同的长度,仅更改颜色,但是可以以一种或另一种方式播放长度。 在伯恩,有这样的事情。 我有这个公式: L=Lal1a在哪里 L-文本中段的长度, L是初始段的长度, l-所需的段长度,以及 -从0到1的某个数字。 a=0然后 L=l,即任何段的长度 l。 如果 a=1L=L。 如果 0<a<1然后在 L<lL>LL>lL<L即,短段被延长,长段被缩短。 如果要保留线段的相对大小,但又不想在两厘米的线段旁边得到半毫米的线段,则这是必需的。 (实际上,一切都有些复杂,但是含义是这样)。



尽管伯恩拒绝了刻字,但著名的孔爱德华·塔夫特(Edward Tufte)在他的一本书中谈到了伯恩很好的话题,但归还信件会很好。 而且由于所有这些几乎都是自动的,因此有了字母的位置。 默认情况下,点的命名方式与存储其坐标的变量的命名方式相同。 标签可以放置在多边形的顶点处,线段的末端或其他方式。 当然,它们可以随意打开和关闭(当然,同时布局是缓慢的)。



但是大多数代码仍然致力于作者/编辑者比读者更注意的事情。 例如,这可以正确识别角度和线段的同义词,自动在几个多边形周围排列字母,在文本中以特定角度自动绘制线段,等等。

原文中有首字母和小插图。 一方面,无需太多工作(至少是精神上的)就可以绘制它们,但是我决定承担更有趣(尽管无望)的任务-自动生成初始字母并以随机图案渐晕。 首先,这很有趣,其次,要翻译成俄文(如下所述),需要将最初的字母样式改成西里尔字母,但我的计划中未包含此活动。 因此,当您制作这本书时,会创建一个包含所有字母和小插图的列表,并且从该列表中,单独的metapost脚本(非常缓慢地)绘制出所有这些东西的完整集合。 首字母都是不同的,并且模式不会重复。



原理很简单:在信件的各个部分和框架上放置尽可能大的卷发。 这会发生多次,并且在以下迭代中已包含已绘制的curcurue。 然后,“叶”以相同的方式出现。 可以更改不同类型过程的形状和属性。



我不能说我对结果很满意,但是我会逐步改进算法并希望达到最佳效果(但是,您可以用任何字母吐出和滑动图片,而不用生成字母。) 另外,脚本可以从卷发中生成随机图块。



笔译


为了发现错误,事实上,我开始翻译成俄语。 我的参考点是Morducai-Boltovsky的“ Beginnings”的翻译,但是很快,很明显Byrne的证据变化太大了,对我们有很大帮助。 老实说,起初我只是在袖子上翻译了所有内容,特别是在介绍之后,直到最近,我的手才抚平一点粗糙感。

除了令人不快的第五本书(事实证明,这本书是与其他书籍分开编撰的,并且是较早出版的),这并不是特别困难。 翻译(过程本身)确实帮助抓住了许多不同的障碍,包括我和作者。 例如,伯恩(Byrne)第六本书对命题9的解释与文本不符,这就是为什么证明不起作用的原因,因此我不得不在此处重做所有内容。

出于好奇:在引言中,作者称赞他的方法,他首先提到贺拉斯(Horace), 并引用了他的诗作,即视力优于其他感受。 几页后,为了使人信服,他决定添加“现代诗人”,他也引用了他的诗句。 实际上,“现代诗人的诗”原来是霍勒斯相同诗句的另一种翻译 。 当然,在这里,有必要保留一切,并在脚注中指出作者的错误,但幸运的是,妻子找到了合适的英文和真正现代的Byrne作家的诗,并付诸实践(即使他们说这样做是不可能的)。 英文本保留原样。



俄语版本也有所不同,因为默认情况下包含了其中的小写字母,并且与原始版本相比,英文版本的更改通常较小。 没错,这里有人我也用字母写英文版本,我也在考虑将它们包括在其中:没有它们,这本书已经存在。

另一个朋友开始将这本书翻译成波兰语,并在解决问题的方式(例如关于缩放角度-这是他的建议 )上写了很多有价值的东西。 如果您翻译很棒。

小计


修完本书后,我要说的是以下几点。 文字中的图片非常易于阅读,现在我在其他地方使用了此技术。 考虑到我是在一天的主要工作结束后参加这个项目的,所以结果很快就发现了:第一份英文版本(包括所有的计划和编程)大约六个月,第一份俄语翻译是三个月。 没错,我仍然在这里和那里纠正暗沙现象(最近,我的妻子开始阅读俄语的错别字,我脸红了,就像从第一个请求请求开始一样 )。

从第一个版本在github上发布的那一刻起,kickstarter 运动就开始筹集资金以“完成Byrne的工作”,也就是说,正如作者所理解的那样,所有13本“ Beginnings”书籍的设计都遵循同样的思路。 显然,设计中的布局及其绘制内容尚不清楚。 到目前为止,这些书还没有寄出,但应该尽快寄出。 我希望效果很好。 最近,一位美国设计师发布了前六本书的不错的网络版本 。 从文章和有关作品的故事来看,他是用插图画家手工画的。

计划


伯恩(Byrne)根本没有任何定型性,所以从一开始我就没有提供任何定型工具,但是现在我决定慢慢地从11到13预定“ Beginnings”书籍,以在其上确定工具。 到目前为止,第11本书的一半以上已经准备好了,因此,已经有了一些函数来描述三维结构及其在平面上的投影。 但是,平均而言,庞大的构造要比扁平构造复杂得多,到目前为止,我还不清楚Byrne的方法对它们适用多少,或者是否足够方便地在meta-post中创建它们。



文字中的图片通常需要字距调整。 相似但更复杂:相邻行上的大尺寸图片将行分散得很宽,只有在它们相互重叠时才是合理的。 我还没有弄清楚如何使这些事情自动化,因此手动捕获所有这些非常无聊。



元发布既可以从乳胶启动,也可以分别启动。 因此,将来我计划与ConTeXt一样为乳胶制作宏,以便您可以在更常见的环境中进行相同操作。 从理论上讲,没有人会在设计中使用metapost。 现在可以做到这一点,只需单独收集图片并手动链接它们,但是它会为ID编写几个脚本,这样就可以独立完成。 后者看起来很像某种变态,但是经常想到不考虑这种可能性。

好吧,最重要的是,我想尝试将所有这些机制应用于比“开始”更现代,更实用的工具。

所有好的谎言在这里 ,现成的pdf版本已经发布。

Source: https://habr.com/ru/post/zh-CN451682/


All Articles