我听说LaTeX是图灵完整的。 有没有用LaTeX写的程序?

用通常被认为是排版语言的东西来做有趣的事情是可能的。 例如,您可以使用postscript构buildMandelbrot集。

在这个MathOverflow问题中build议LaTeX可能是图灵完备的 。 这意味着编写任意程序的能力(尽pipe这可能不容易!)。 有没有人知道在LaTeX中有这样一个程序的具体例子,它在语言上做了一些非常不寻常的事情?

Monad读者 13期中,Stephen Hicks写了关于如何在TeX中实施ICFP竞赛(涉及火星漫游器导航)的解决scheme,并大量使用macros。 有趣的是,排版时的解决scheme的输出是漫游者path的后记地图。

另外,Andrew Greene 在TeX中写了一个BASIC解释器 ( 更多细节 )。 这可以算作稍微不正当。

pgfmath图书馆仍令我惊叹。 但在更多的图灵相关的说明:有可能写一个实际的图灵机在TeX,根据http://en.literateprograms.org/Turing_machine_simulator_%28LaTeX%29 。 这只是在TeX中使用扩展的一个很好的方法。

PostScript也是图灵完整的,如果你会阅读手册,你会惊讶于它的一般编程能力(至less,我是)。

\ DEF \ K#1#2#{2}

\ DEF \ S#1#2#3 {#1#3 {#2#3}}

我不确定这是否符合编程本身,但最近我开始在LaTeX中做一些像Object Oriented的东西。 (你不需要知道任何math就可以遵循以下内容。)在最近的论文中,我一直在写关于具有对象态射的 类别 。 既然已经有相当多的这样,我想要一个一致的风格,所以说,𝒞是典型的对象C和典型的态射c的类别。 那么我也有DD。 所以我定义了一个“类”,比如说“类别”(你需要成为一个math家来理解那个笑话),并声明C是这个类的一个实例,然后访问\ ccat,\ cobj,\ cmor等等。 不做\ cat {c},\ obj {c}和\ mor {c}等等的原因是,有时候这些类别有特殊的名称,所以在声明实例之后,我可以很容易地修改它的名字(简单地重新定义\ ccat – 呃,实际上\ mathccat因为\ ccat是一个包装,它selectmath模式下的\ mathccat和文本模式下的\ textccat)。 (当然,这比上面提到的要复杂一些,当我想把一个新类别定义为旧类别的变体时,OO的东西真的很有用(它甚至可以处理旧types的情况)还没有存在)。)

虽然它可能不符合实际的编程,但我在文件中使用它,确实发现它有用 – 其他答案(到目前为止)更多地展示了LaTeX的function,而不是对实际问题的明智解决scheme。

我知道有人在LaTeX中写了一个ACM竞赛问题的答案。