我听说LaTeX已经完成。是否有用LaTeX编写的程序?


79

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

此MathOverflow问题中建议LaTeX可能是Turing-complete的。这意味着可以编写任意程序(尽管可能并不容易!)。有人知道LaTeX中这种程序的任何具体示例吗,这在语言上有什么异常之处?


87
你知道,我要在外面玩一个周末。您知道吗,周末不在电脑旁的人之一?然后,您可以发布此问题。这就是为什么我不能拥有美好的事物。
小麦色

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移至0 q neg u 0 0 qu 0 rrrr fill / Y} for / X}用于展示
DNA

Answers:


84

在《The Monad Reader》13期中,Stephen Hicks写了关于在TeX中实现ICFP竞赛(涉及火星漫游导航)的解决方案以及大量使用宏的方法。有趣的是,排版时解决方案的输出是流动站路径的后记映射。



10

pgfmath库仍然让我感到吃惊。但需要注意的是与图灵相关的更多信息:可以按照http://en.literateprograms.org/Turing_machine_simulator_(LaTeX)在TeX中编写实际的图灵机。这只是在TeX中使用扩展的好方法。

PostScript的Turing也很完善,如果您阅读了该手册,则会对它的常规编程功能感到惊讶(至少我是这样)。


1
人们用PostScript编写LISP。(阅读前一句话,直到您完全掌握了这种结构的奇异之处)。
new123456'9

提到的PLRM手册现在是一个死链接,试试这个,而不是adobe.com/products/postscript/pdfs/PLRM.pdf
阿伦罗布森


6

我不确定这本身是否适合编程,但是我最近开始在LaTeX中做一些类似于面向对象的工作。(您不需要知道任何数学就可以遵循以下内容。)在最近的论文中,我一直在写有关具有对象态射的类别。既然有很多这样的东西,所以我想要一个一致的样式,例如𝒞是具有典型对象C和典型射晶c的类别。那我也有Dd。因此,我定义了一个“类”,说“类别”(您需要成为一个数学家才能理解那里的笑话),并声明C是此类的实例,然后可以访问\ ccat,\ cobj,\ cmor等等。不使用\ cat {c},\ obj {c}和\ mor {c}等的原因是,有时这些类别具有特殊名称,因此在声明实例之后,我可以非常轻松地修改其名称(只需重新定义\ ccat-好吧,实际上是\ mathccat,因为\ ccat是在数学模式下选择\ mathccat和在文本模式下选择\ textccat的包装器)。(当然,它比上面的建议要复杂一些,并且当我想将新类别定义为旧类别的变体时,面向对象的东西真的很有用(它甚至可以处理旧类别没有的情况)还不存在。)。

尽管它可能不符合实际的编程要求,但我在论文中使用了它,并且确实发现它很有用-到目前为止,其他答案更像是炫耀LaTeX的功能,而不是对实际问题的明智解决方案。


很想知道您的做法!
Nate Stemen '17

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.