"Elemen" Fancy Euclid di TeX



Pada 2016, saya menjumpai Oliver Byrne, "Enam buku pertama dari Elemen Euclid." Fitur utama dari buku ini adalah bahwa alih-alih penunjukan huruf biasa seperti "segitiga ABC," ia menggunakan inklusi gambar miniatur langsung dalam teks, yaitu, misalnya, gambar segitiga. Sesulit mungkin pada abad XIX, semudah, dengan alat yang tepat, seharusnya membuat buku seperti saat ini. Jadi saya memutuskan untuk mencari tahu sendiri apakah itu masalahnya.



Opsi paling jelas - untuk menggambar semua ilustrasi di Illustrator dan menyusun semuanya di InDesign - segera ditolak. Konstruksi geometris bukanlah hal yang paling mudah untuk dilakukan di Illustrator, dan tidak ada cara yang jelas untuk secara otomatis menghubungkan gambar utama ke miniatur yang muncul di pikiran saya. Sedangkan untuk InDesign, meskipun sangat bagus dalam berurusan dengan tata letak yang begitu kaya secara visual, ia berjanji untuk menakut-nakuti saya dengan panel “Tautan” yang penuh sesak. Jadi, tanpa berpikir dua kali, saya memutuskan untuk menggunakan alat lain yang saya kenal - MetaPost, yang membuatnya relatif mudah untuk berurusan dengan geometri, dan LaTeX, yang saya tahu bisa melakukan pekerjaan itu. Karena beberapa masalah dengan MetaPost libs untuk LaTeX, saya mengganti yang terakhir dengan ConTeXt yang menikmati hubungan luar biasa dengan MetaPost.

Bagaimana cara kerjanya secara umum


"Elemen" memiliki 13 bagian, yang disebut "buku," yang Byrne hanya membuat enam pertama. Sebuah buku sebagian besar terdiri dari "proposisi" - teorema dan masalah. Setiap proposisi memiliki diagram (biasanya satu) dan beberapa teks, di mana diagram direferensikan.

Untuk konstruksi, saya membuat makro ConTeXt yang membuat instance MetaPost baru. Dan di MetaPost, banyak fungsi untuk membuat konstruksi ini. Penggunaannya terlihat seperti ini:

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



Untuk teks proposisi, saya membuat serangkaian makro yang menggambar di instance MetaPost yang sama. Secara umum, mereka mengeksekusi kode MetaPost yang sewenang-wenang, tetapi sebagian besar waktu, mereka menggunakan nama objek sebagai argumen. Seperti ini:

 % 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}$. 



Beginilah cara bagian-bagian ini bekerja bersama:



Beberapa fitur


Gambar dalam buku ini tidak terlalu rumit, tetapi beberapa bagian memerlukan perhatian khusus.

Jika segmen garis saling bersentuhan dengan ujungnya, titik sentuh memerlukan representasi yang bagus. Untuk saat ini, koneksi hanya dua jalur didukung. Baris lain dapat dengan mudah diletakkan di bawah sambungan seperti itu. Meskipun buku asli mempekerjakan setidaknya dua jenis sendi, menurut saya, hanya satu saja sudah cukup.



Sudut digambarkan sebagai sektor melingkar. Jika sudutnya cukup kecil, sektor dengan jari-jari yang sama mungkin terlihat kecil sehingga masuk akal untuk memperbesarnya. Saat ini, jari-jari tetap sama untuk sudut di atas 60 derajat, dan untuk sudut yang lebih kecil, rumus ini digunakan: r/ sqrta/60.



Agar terlihat bagus, garis putus-putus harus dimulai dan diakhiri dengan tanda hubung penuh. Untuk mencapai hal ini, pola tanda hubung diubah sedikit agar sesuai dengan panjang garis dengan baik (Illustrator memiliki fitur yang serupa, tetapi garis putus-putusnya dimulai dan diakhiri dengan setengah garis bukannya garis penuh.)



Ada berbagai cara untuk menggambarkan segmen garis dalam teks: Anda dapat membuat semuanya dengan panjang yang sama, hanya mempertahankan warnanya, atau entah bagaimana bisa menunjukkan panjangnya juga. Byrne melakukan keduanya. Saya punya rumus berikut untuk ini: L=Lal1adimana Ladalah panjang garis dalam teks, Ladalah panjang garis asli, ladalah panjang garis yang diinginkan dan aadalah angka antara 0 dan 1. Jika a=0lalu L=l, yaitu, setiap segmen garis akan memiliki panjang l. Jika a=1lalu L=L. Jika 0<a<1, lalu dengan L<l, L>Ldan dengan L>l, L<L, yaitu, segmen yang lebih pendek menjadi lebih panjang, dan segmen yang lebih panjang menjadi lebih pendek. Anda mungkin menginginkan ini jika Anda ingin mempertahankan panjang garis relatif sambil menghindari garis 2 mm di samping garis 2 cm. (Sejujurnya, semuanya sedikit lebih rumit, tetapi ide umumnya sama.)



Meskipun Byrne memutuskan untuk tidak menggunakan penunjukan huruf sama sekali, Edward Tufte dalam salah satu bukunya , sambil memuji karya Byrne, menyarankan bahwa label kecil sebenarnya akan membantu. Dan karena banyak hal yang otomatis, menambahkan huruf-huruf kecil bukanlah masalah besar. Secara default, nama titik adalah variabel yang memegang koordinat mereka. Label dapat ditempatkan pada simpul poligon, di ujung segmen garis & c. Tentu saja, label dapat dihidupkan dan dimatikan (sayangnya, mempengaruhi tata letak).



Sebagian besar kode, bagaimanapun, dikhususkan untuk hal-hal yang kurang terlihat oleh pembaca dan lebih kepada penulis / editor. Ini termasuk pengenalan yang benar tentang sinonim segmen dan sudut, penempatan huruf otomatis di sekitar grup poligon, dan hal-hal lain seperti itu.

Ada juga inisial dan sketsa di edisi asli. Di satu sisi, mereka cukup mudah untuk diciptakan kembali (setidaknya, tidak perlu banyak pemikiran untuk melakukan ini), tetapi saya memutuskan untuk memilih opsi yang lebih menarik (walaupun tidak ada harapan) - secara otomatis menghasilkan inisial dan sketsa dengan ornamen acak. Tidak hanya menyenangkan, tetapi juga, terjemahan Rusia akan membutuhkan mengadaptasi gaya inisial aslinya ke skrip Cyrillic, yang bukan sesuatu yang saya lebih suka lakukan. Jadi, singkatnya, ketika Anda menyusun buku, daftar huruf awal ditulis ke disk, dan skrip MetaPost terpisah dapat memprosesnya (sangat lambat) untuk menghasilkan inisial dan sketsa. Tidak ada dua dari mereka yang memiliki ornamen yang sama persis.



Idenya cukup mudah: letakkan ikal di bagian-bagian huruf dan bingkai, sebesar yang bisa tumbuh. Ini dilakukan beberapa kali. Semua kurva termasuk dalam iterasi selanjutnya. Setelah itu, beberapa "daun" ditanam dengan cara yang sama. Bentuk dan properti dari kecambah yang berbeda dapat disesuaikan.



Saya tidak bisa mengatakan saya senang dengan hasilnya, tetapi perlahan-lahan saya meningkatkan algoritme dan berharap yang terbaik (dalam hal apa pun, Anda dapat mengganti inisial yang dihasilkan dengan gambar pilihan Anda). Sebagai bonus, skrip juga dapat menghasilkan ubin acak.



Terjemahan


Untuk menemukan lebih banyak kesalahan ketik dan kesalahan, dan hanya demi itu, saya memutuskan untuk menerjemahkan buku ke dalam bahasa Rusia. Pada awalnya, saya menggunakan terjemahan Murduhai-Boltovskoi yang terkenal sebagai referensi tetapi segera menemukan bahwa Byrne terlalu banyak berubah dalam teorema Euclid sehingga terjemahan referensi menjadi sangat berguna. Sejujurnya, saya tidak bekerja terlalu keras pada terjemahan, terutama dari Pendahuluan, dan hanya baru-baru ini telah menemukan waktu untuk memperbaikinya.

Mengesampingkan buku kelima yang benar-benar tidak menyenangkan (yang kebetulan dirancang secara terpisah beberapa tahun sebelum lima lainnya), itu tidak terlalu sulit. Proses penerjemahan membantu menangkap bug, baik bug saya maupun Byrne. Sebagai contoh, diagram untuk proposisi 9 di buku keenam tidak cocok dengan teks, membuat buktinya salah, jadi saya harus mengubahnya.

Satu hal lucu yang saya temui selama terjemahan: di Pendahuluan, di mana penulis membual tentang manfaat dari metodenya, ia mengutip kata-kata Horace mengenai keunggulan penglihatan daripada indera lainnya. Beberapa halaman kemudian dia memutuskan (saya berasumsi, untuk menjadi lebih meyakinkan) untuk mengutip ayat "penyair modern" dengan makna yang sama. Ayat ini ternyata merupakan terjemahan lain dari ayat Horace yang sama. Untungnya, untuk terjemahan bahasa Rusia, istri saya menemukan ayat yang pas oleh seorang penulis Inggris. Secara alami, dalam versi bahasa Inggris, saya tidak mengubah apa pun.



Fitur lain yang dimiliki terjemahan Rusia adalah bahwa penunjukan huruf diaktifkan secara default. Namun, seseorang diminta untuk membuat versi bahasa Inggris dengan huruf-huruf dihidupkan, dan saya sedang mempertimbangkan untuk menjadikannya opsi default karena versi “tanpa huruf” (dan lebih dari satu, sebenarnya) tetap ada.

Seorang lelaki dari Polandia mulai membuat terjemahan buku tersebut dalam bahasa Polandia dan memberikan banyak kontribusi yang sangat berharga di jalan (sudut pandang, misalnya, adalah idenya ). Saya harap terjemahannya akan lancar. Dia juga banyak membantu saya dengan versi bahasa Inggris dari artikel ini.

Hasil sementara


Setelah bermain dengan buku ini selama beberapa waktu, saya dapat mengatakan yang berikut. Gambar sebaris memang mudah dibaca. Sekarang saya menggunakan teknik ini dalam situasi lain juga. Mempertimbangkan bahwa saya hanya mengerjakan proyek ini di malam hari setelah pekerjaan penuh waktu dan pada akhir pekan, itu tidak memakan waktu terlalu lama: sekitar enam bulan untuk versi bahasa Inggris pertama dan sekitar tiga untuk terjemahan Rusia, dengan semua perencanaan dan pengkodean. Meskipun saya menangkap bug dan memperbaiki kesalahan ketik sampai hari ini.

Sejak hari saya menerbitkan versi pertama, sebuah kampanye tentang kickstarter yang dimaksudkan untuk "menyelesaikan karya Byrne" (yaitu, seperti yang penulis pahami, untuk membuat semua tiga belas buku Euclid dengan gaya Byrne) telah dimulai dan selesai. Mereka tampaknya menggunakan InDesign untuk tata letak. Apa yang mereka gunakan untuk menggambar diagram, saya tidak bisa mengetahuinya. Semoga mereka berhasil membuat buku ini sebaik karya mereka yang lain. Dan lebih baru-baru ini seorang desainer AS membuat versi online yang sangat rapi. Dia menggunakan Illustrator untuk menggambar diagram.

Paket


Buku Byrne tidak mengandung geometri padat (simpan gambar paralelepiped dalam Pendahuluan). Saya juga tidak membuat alat apa pun untuk itu, tetapi pada titik tertentu, saya memutuskan untuk menambahkan beberapa, jadi saya mulai "menghapus" buku 11-13 untuk memiliki sesuatu untuk menggunakan alat baru. Untuk saat ini, hanya sedikit lebih dari setengah dari buku ke-11 yang dibuat secara kasar, bersama dengan beberapa fungsi untuk membuat konstruksi yang solid dan memproyeksikannya ke bidang layar. Konstruksi solid, rata-rata, secara substansial lebih kompleks daripada yang pesawat, dan saya belum yakin apakah pendekatan Byrne cocok dengan mereka dan jika MetaPost adalah alat yang cukup nyaman untuk pekerjaan itu.



Gambar dalam teks seringkali membutuhkan kerning. Demikian pula, namun gambar yang lebih rumit dan lebih tinggi pada garis yang berdekatan menyebarkan garis sangat lebar, yang hanya sesuai jika gambar ini bertabrakan. Saya belum tahu bagaimana dan apakah saya dapat membuat solusi otomatis untuk masalah ini, tetapi saya pasti ingin melakukannya karena memperbaikinya dengan tangan benar-benar membosankan.



MetaPost juga dapat digunakan dari dalam LaTeX dan sebagai program mandiri. Di masa depan, saya berencana untuk membuat makro LaTeX mirip dengan yang ada di ConTeXt, untuk memungkinkan menggunakannya di lingkungan yang lebih umum. Secara teori, MetaPost dapat digunakan dengan InDesign juga. Dimungkinkan untuk menghasilkan gambar dengan MetaPost dan menautkannya dalam file InDesign sekarang, tetapi proses ini meminta untuk diotomatisasi dengan beberapa skrip InDesign. Itu memang terlihat sangat menyimpang, tetapi saya mendapati diri saya memikirkan hal ini lebih dari sekali, jadi saya merasa pantas untuk mempertimbangkannya.

Last but not least, saya ingin menerapkan alat untuk sesuatu yang lebih modern dan praktis daripada "Elemen."

Semua hal dapat ditemukan di sini , pdf-s ada di bagian “rilis”.

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


All Articles