Можно делать интересные вещи с помощью того, что обычно принято называть языками набора. Например, вы можете построить множество Мандельброта, используя постскриптум .
В этом вопросе MathOverflow предполагается, что LaTeX может быть полным по Тьюрингу . Это подразумевает возможность писать произвольные программы (хотя это может быть непросто!). Кто-нибудь знает какой-либо конкретный пример такой программы в LaTeX, которая делает что-то очень необычное с языком?
latex
turing-complete
ire_and_curses
источник
источник
Ответы:
В 13-м выпуске The Monad Reader Стивен Хикс пишет о реализации решения для конкурса ICFP (включающего навигацию марсохода) в TeX с обильным использованием макросов. Забавно, но на выходе решение после набора представляет собой карту пути марсохода.
источник
В качестве альтернативы Эндрю Грин написал интерпретатор BASIC в TeX ( подробнее ). Это может считаться слегка извращенным.
источник
pgfmath
Библиотека до сих пор поражает меня. Но еще одно замечание, связанное с Тьюрингом: можно написать настоящую машину Тьюринга в TeX, согласно http://en.literateprograms.org/Turing_machine_simulator_(LaTeX) . Это просто отличный способ использования расширений в TeX.PostScript также является полным по Тьюрингу, если вы прочтете руководство, вы будете поражены его общими возможностями программирования (по крайней мере, я был).
источник
\ def \ K # 1 # 2 {# 2}
\ def \ S # 1 # 2 # 3 {# 1 # 3 {# 2 # 3}}
источник
Я не уверен, можно ли это квалифицировать как программирование как таковое, но недавно я начал делать что-то вроде объектно-ориентированного в LaTeX. (Вам не нужно знать математику, чтобы понять следующее.) В недавних статьях я писал о категориях , которые имеют объекты и морфизмы . Так как их было довольно много, я хотел согласованного стиля, чтобы, скажем, 𝒞 была категорией с типичным объектом C и типичным морфизмом c . Тогда я бы также с D и d. Итак, я определяю «класс», скажем «категорию» (вам нужно быть математиком, чтобы понять шутку), и объявляю, что C является экземпляром этого класса, а затем имею доступ к \ ccat, \ cobj, \ cmor и так далее. Причина, по которой я не выполняю \ cat {c}, \ obj {c}, \ mor {c} и т. Д., Заключается в том, что иногда у этих категорий есть специальные имена, и поэтому после объявления экземпляра я могу очень легко изменить его имя. (просто переопределите \ ccat - ну, на самом деле \ mathccat, поскольку \ ccat - это оболочка, которая выбирает \ mathccat в математическом режиме и \ textccat в текстовом режиме). (Конечно, это немного сложнее, чем предлагается выше, и объектно-ориентированный материал действительно оказывается полезным, когда я хочу определить новую категорию как вариант старой (это может даже иметь дело со случаем, когда старая категория не работает) пока не существует.).
Хотя это может не квалифицироваться как реальное программирование, я использую его в статьях и считаю его полезным - другие ответы (пока) больше похожи на демонстрацию возможностей LaTeX, чем на разумное решение практической проблемы.
источник
Я знаю человека, который написал ответ на задачу конкурса ACM в LaTeX.
источник