推荐使用 Python 和 TeX、pythontex 还是 hybrid-latex?

推荐使用 Python 和 TeX、pythontex 还是 hybrid-latex?

我正在研究开始同时使用 Python 和 (La)TeX。

现在我看到 ctanpythontex和上有两个包hybrid-latex。它们的优点和缺点是什么?哪个解决方案更完善(有理由吗)?对未来有什么期待吗,即两者都仍在积极维护/改进吗?请随意添加其他解决方案以结合 Python 和 LaTeX。

答案1

好吧,尽管这个问题是基于观点的,我还是会向你介绍我的知识和经验。

首先,也就是说,我有使用的经验,PythonTeX但从未使用过hybrid-latex。我用它来学习 Python,尤其是numpy, matplotlib, pandas, lxml数据处理方面的知识。接下来的几点将告诉你为什么。

  1. 我发现这个包是这个主题中唯一仍在维护和积极开发的包。在搜索时,我甚至没有点击hybrid-latex,但我遇到了pyLaTeX当时似乎被遗弃的包。

  2. PythonTeXminted与和软件包有相同的作者fancyvrb,这在某种程度上保证了作者在 TeX 编程方面的技能。

  3. PythonTeX支持许多其他编程语言 - R、Julia、Perl、bash 等

  4. 我简单看了一下pyLaTeX手册——上面提到的所有缺点PythonTeX都是无效的。PythonTeX如果是解释型语言,添加新语言相当容易。具有特定要求的编译型语言可能会有问题。 PythonTeX有足够的选项、环境和宏来指定要执行的代码块、仅排版(仅打印)或两者兼而有之。它还允许您无缝轻松地引用 LaTeX 文本中的变量值。看看快速入门指南,太棒了。

  5. 错误消息与 TeX 行号同步 - 因此,如果您的代码出现错误,您就会知道错误.tex发生在文件中的哪一行。这很有帮助。

  6. 对于设置自动编译,有一个arara规则(注意,我是它的作者,让别人测试它会很酷)并且还有一个如何设置的指南latexmkPythonTeX由于和都PythonTeX需要latex-hybrid3 步编译,这也有很大帮助。

  7. 最后,PythonTeX拥有活跃的作者和社区。作者现在主要活跃在 Github 上。

缺点:

实际上只有一个。也就是说,由于疫情和其他原因,作者目前没有资源来积极开发该软件包。目前它主要是在修复错误。作者还有其他类似的项目,codebraid它与 相结合pandoc并修复了大部分PythonTeX限制。

但,PythonTeX绝不是被抛弃。

答案2

由于我也经常使用 Python 和 LaTeX,所以我玩了pythontex一段时间的 package。一开始,一切都很有趣,很刺激。但后来,我决定完全远离它。我的建议是:如果你正在写一篇严肃的学术文章,尽量不要使用pythontex

原因如下:

  • 如果你要发表文章,许多出版商的编辑系统(甚至 arXiv)根本不支持pythontex。为了不同的投稿,可能需要彻底重构文档,这是有风险的。
  • 就我个人而言,我发现使用 Python 编码时,代码高亮和自动缩进非常有用。话虽如此,如果您在 LaTeX 编辑器中编写 Python 代码,则不会从这些功能中受益。
  • 如果您使用的话,调试 Python 代码会非常困难pythontex
  • 如果你的机器上有多个 Python 可执行文件(例如 anaconda),则需要花费大量精力来配置正确的文件。如果你与其他人合作,而他们的 Python 可执行文件不同,情况会变得更加复杂。

我认为上面的要点可以总结为一句话:将 LaTeX 与 Python 结合在一起容易导致兼容性、可用性和可迁移性问题

由于 Python 是一种更全面的语言,因此每当需要结合 Python 和 LaTeX 时,我认为大部分工作量都应该在 Python 方面完成。Python 的任务应该是生成texpdfLaTeX 可以直接使用的文件。这使得您的 LaTeX 源完全独立于发布者。

我认为在结合 Python 和 LaTeX 时,这些问题非常有意义:

  • 如何确保图表的样式与文档的样式相同?假设正在使用matplotlib,解决方案是使用pgf具有正确 LaTeX 前言的后端。
  • 鉴于 LaTeX 和 Python 现在已经解耦,如何简化工作流程?我通常会将我的每个图封装到一个 Python 函数中,并在需要更新时调用它。该函数不仅应生成图形,还应将其保存到正确的目录中。如果您只重新运行一两个图,这可以节省时间。subprocess如果在 Python 端比在 LaTeX 端进行的更改更多,您甚至可以使用该库从 Python 调用 LaTeX 构建系统。
  • 一些基本的 LaTeX 编程知识可以帮助减少工作量。例如,如果 LaTeX 中的一个大图由 20 个子图组成(在本例中,是 Python 生成的 pdf 文件),那么只需在 LaTeX 中编写一个循环即可将它们全部包含进去,而重复工作很少。

相关内容