Я слышал, что LaTeX завершен по Тьюрингу. Есть ли программы, написанные на LaTeX?


79

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

В этом вопросе MathOverflow предполагается, что LaTeX может быть полным по Тьюрингу . Это подразумевает возможность писать произвольные программы (хотя это может быть непросто!). Кто-нибудь знает какой-либо конкретный пример такой программы в LaTeX, которая делает что-то очень необычное с языком?


88
Знаешь, я собирался провести выходные на улице. Вы знаете, один из тех, кто не занимается компьютерными выходными? Затем вы отправляете этот вопрос. Вот почему у меня не может быть хороших вещей.
Wheaties 03

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 {exit} if / f 64 d} для f 64 div setgray XY moveto 0 q neg u 0 0 qu 0 rrrr fill / Y} for / X} для showpage
DNA

Ответы:


84

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



10

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

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


1
Люди написали LISP на PostScript. (Прочтите предыдущее предложение, пока полностью не уловите странную красоту такой конструкции).
new123456 03

Руководство PLRM упоминается теперь мертвая ссылка, попробуйте это вместо adobe.com/products/postscript/pdfs/PLRM.pdf
Аарон Robson


6

Я не уверен, можно ли это квалифицировать как программирование как таковое, но недавно я начал делать что-то вроде объектно-ориентированного в LaTeX. (Вам не нужно знать математику, чтобы понять следующее.) В недавних статьях я писал о категориях , которые имеют объекты и морфизмы . Так как их было довольно много, я хотел согласованного стиля, чтобы, скажем, 𝒞 была категорией с типичным объектом C и типичным морфизмом c . Тогда я бы также с 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.