Я не уверен, можно ли это квалифицировать как программирование как таковое, но недавно я начал делать что-то вроде объектно-ориентированного в LaTeX. (Вам не нужно знать математику, чтобы понять следующее.) В недавних статьях я писал о категориях , которые имеют объекты и морфизмы . Так как их было довольно много, я хотел согласованного стиля, чтобы, скажем, 𝒞 была категорией с типичным объектом C и типичным морфизмом c . Тогда я бы также с D и d. Итак, я определяю «класс», скажем «категорию» (вам нужно быть математиком, чтобы понять шутку), и объявляю, что C является экземпляром этого класса, а затем имею доступ к \ ccat, \ cobj, \ cmor и так далее. Причина, по которой я не выполняю \ cat {c}, \ obj {c}, \ mor {c} и т. Д., Заключается в том, что иногда у этих категорий есть специальные имена, и поэтому после объявления экземпляра я могу очень легко изменить его имя. (просто переопределите \ ccat - ну, на самом деле \ mathccat, поскольку \ ccat - это оболочка, которая выбирает \ mathccat в математическом режиме и \ textccat в текстовом режиме). (Конечно, это немного сложнее, чем предлагается выше, и объектно-ориентированный материал действительно оказывается полезным, когда я хочу определить новую категорию как вариант старой (это может даже иметь дело со случаем, когда старая категория не работает) пока не существует.).
Хотя это может не квалифицироваться как реальное программирование, я использую его в статьях и считаю его полезным - другие ответы (пока) больше похожи на демонстрацию возможностей LaTeX, чем на разумное решение практической проблемы.