这是受到 MO 问题的启发这里。
假设我正在写一篇数学论文,其中包含定理和证明等。在写作结束时,我想设计一个依赖关系图,即包含每个定理、引理等的图,以及当一个定理在其证明中依赖于其他引理、定理等时的有向箭头。有什么巧妙的方法可以做到这一点?
我知道实际绘制图表会很困难,所以我更感兴趣的是如何以一种有趣的方式将这些数据写入文件。proof
例如,仅重新定义环境似乎有效,但如何在图表数据中获取实际定理编号/名称?似乎必须以更微妙的方式重新定义 ref 命令,但我不知道该怎么做。
如果您可以控制一些参数,那就更酷了,比如,也许您不是“局部”地研究定理,而是可以更“全局”地研究,只查看章节依赖关系(从而生成 Leitfaden),甚至可能在两者之间添加更多层次。还可以有“阈值”参数,这样一章必须引用另一章,比如说,10 次或更多次,它才会变得足够重要,可以包含在图形数据中。您甚至可以疯狂地包括参考书目!
我不知道这个标签适合什么,所以请随意更改它们。
答案1
这个答案概述了一个解决方案,但我没有时间为您实施建议的解决方案。
在我开始之前,我想指出,我认为你不能使用目录(TOC)来做到这一点,因为 TOC 不知道哪个定理引用了哪个其他定理。
我能想到的唯一解决方案是调整\ref
命令并让它记录哪个定理在其他定理中被引用。当然,新命令必须知道它位于哪个定理中。一旦收集了依赖关系,就可以使用 TikZ 和 的组合自动绘制图形dot
,这是一个自动进行图形布局的程序。请参阅http://www.graphviz.org/了解更多dot
信息http://www.fauskes.net/code/dot2tex/如何转换dot
为 LaTeX。
答案2
您可以相当容易地\ref
写出一个 graphviz 文件行,该行从当前计数器值到引用标签的值,但如果出现以下情况,这显然会失败:
- 你对引理和定理的编号方式不同 - 你必须以某种方式解释这种变化,也许通过修改标签本身。或者也许通过将调用
\ref
写入文件aux
并将文件后处理aux
到 graphviz 文件中。 - 您将引理放在定理和其证明之间 - 您应该抽象对标签值的访问,可能通过添加一些
\reallabel
暂时改变所需值的命令。
正如我在 MO 上建议,您可能只应该考虑您的具体用例并制定出立即的解决方案。