Я чув, що LaTeX - це Тьюрінг. Чи існують програми, написані на LaTeX?


79

Можна робити цікаві речі, використовуючи те, що зазвичай вважається набірними мовами. Наприклад, ви можете побудувати набір Мандельброта, використовуючи постскриптум .

У цьому питанні про MathOverflow передбачається, що LaTeX може бути закінченим Тьюрінгом . Це передбачає можливість писати довільні програми (хоча це може бути непросто!). Хтось знає якийсь конкретний приклад такої програми в LaTeX, яка робить щось дуже незвичне з мовою?


88
Знаєш, у мене були вихідні, граючи на вулиці. Знаєте, один із тих, хто від’їжджає від комп’ютерних вихідних? Тоді ви йдете і розміщуєте це запитання. Ось чому я не можу мати приємних речей.
Wheaties

1
/ d {def} def / u {dup} d [0 -185 u 0 300 u] concat / q 5e-3 d / m {mul} d / z {A um B um} d / r {rlineto} d / X -2 q 1 {d / Y -2 q 2 {d / A 0 d / B 0 d 64 -1 1 {/ f exch d / BA / A z sub X add d B 2 mm Y add dz add 4 gt {вихід} if / f 64 d} для f 64 div setgray XY перемістити до 0 q neg u 0 0 qu 0 rrrr fill / Y} for / X} для демонстрації
ДНК

Відповіді:


84

У випуску 13 The Monad Reader Стівен Хікс пише про те, як впровадити рішення для змагання ICFP (за участю навігації на марсоході) в TeX, з великим використанням макросів. Забавно, що вихід рішення при наборі - це поскриптова карта шляху маршрутизатора.



10

pgfmathБібліотека до сих пір вражає мене. Але на замітку, більш пов’язану з Тьюрінгом: можна написати справжню машину Тьюрінга в TeX відповідно до http://en.literateprograms.org/Turing_machine_simulator_(LaTeX) . Це просто чудовий спосіб використовувати розширення в TeX.

PostScript також є повним Тьюрінгом, якщо ви прочитаєте посібник, ви будете вражені загальними можливостями його програмування (принаймні, я був).


1
Люди написали LISP у PostScript. (Прочитайте попереднє речення, поки не зрозумієте повністю дивної краси такої конструкції).
new123456

Керівництво PLRM згадується тепер мертва посилання, спробуйте це замість adobe.com/products/postscript/pdfs/PLRM.pdf
Аарон Robson


6

Я не впевнений, що це кваліфікується як програмування як таке, але нещодавно я почав робити щось на зразок об’єктно-орієнтованих речей у LaTeX. (Вам не потрібно знати математики, щоб слідувати наступному.) В останніх роботах я писав про категорії , які мають об’єкти та морфізми . Оскільки таких було досить багато, я хотів мати послідовний стиль, щоб, скажімо, 𝒞 була категорією з типовим об’єктом С і типовим морфізмом с . Тоді я б також мав 𝒟 з D і d. Тож я визначаю "клас", кажу "категорію" (вам потрібно бути математиком, щоб зрозуміти там жарт), і заявляю, що C є екземпляром цього класу, а потім маю доступ до \ ccat, \ cobj, \ cmor і так далі. Причиною відмови \ cat {c}, \ obj {c} та \ mor {c} тощо є те, що іноді ці категорії мають спеціальні імена, і тому, оголосивши екземпляр, я можу дуже легко змінити його ім'я (просто перевизначте \ ccat - ну, насправді \ mathccat, оскільки \ ccat - це обгортка, яка вибирає \ mathccat у математичному режимі та \ textccat у текстовому режимі). (Звичайно, це трохи складніше, ніж пропонується вище, і речі з ОО дійсно приносять користь, коли я хочу визначити нову категорію як варіант старої (це може навіть мати справу з випадком, коли стара не робить) ще не існує.).)

Хоча це може не кваліфікуватися як власне програмування, я використовую його в роботах і вважаю його корисним - інші відповіді (поки що) мають більше відчуття демонстрації можливостей LaTeX, ніж розумного вирішення практичної проблеми.


Хотілося б побачити, як у вас це виходить!
Nate Stemen

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.