前一段时间承包了西电爱数社数学竞赛试题模版的编写,但是用LaTex编写很多复杂的操作都很不方便,尤其是是要用变量的话,虽然LaTex是原生支持的,但是使用起来跟一般编程语言还是差太多了,于是我寻找了一下用编程编写LaTex的方法,就发现了Pylatex。大概总结了下它相对于一般LaTex编写的优势。结构比latex清晰。
可以使用编程的逻辑写论文。
可以使用Python里面很多优雅的操作。
表格、图等东西更方便。
在编写竞赛试题的过程中,渐渐熟悉了Pylatex,也渐渐发现了一些它的弊端,在使用LaTex编写论文的过程中,虽然整体结构的编写更容易了,但是在还是有几个方面不太舒服。很多时候要在Python中使用大段的文字
如果你从网上找一些现成的latex代码段复制过来会造成同一个命令有些使用Python对象,有些使用纯LaTex代码,最后代码会非常混乱。
依然不能很高效的多人合作编写。
于是我在使用过程中对Pylatex代码进行了一些优化,并自己写了一个库(PyTex)来解决这些问题,正巧近期西电要举办线上的数模校赛,于是专门针对数模进行了一波优化,基本解决了上面的几个问题。将所有大段文字编写全部移植到MarkDown端,解决了Python端需要大段文字的问题。
基本实现MarkDown转换成LaTex代码的功能,不必寻找LaTex的代码块,可以直接找md代码块了。
可以通过将论文分成不同的md,分给不同的人编写,甚至可以用git同步实时预览。
当然PyTex还有一个更重要的优势就是是Pylatex已经停止更新了,而PyTex才刚刚开始更新,以后还会加很多功能(当然也有可能直接鸽了)。下面来介绍一下PyTex。
安装
这个项目使用 Python 开发,请确保你本地安装了它。
建议使用pip安装本库。
$ pip install bone-pytex
使用说明
使用时,你必须创建一个文档实例。
from pytex import MathDocument
doc = MathDocument('数学建模', packages=["amsmath", "graphicx", "amssymb", "cite"],
standard="GJS", preface=False)
如果你使用了默认的标准页,可以通过命令添加队伍信息
doc.set_information(problem_num="A", team_num="0001", school_name="最强大学",
member_names=("a", "b", "c"), supervisor="teacher", date=(2020, 4, 20))
你可以将md文档转换为latex
from pytex.utils import md2tex, MarkDown
latex_code1 = md2tex(path="md/abstract.md")
latex_code2 = md2tex(file=open("md/abstract.md", 'r', encoding='UTF-8'))
latex_code3 = MarkDown("md/abstract.md")
你可以在文档中添加标题、摘要、目录。
doc.add_title()
keys = ["出租车资源配置", "供求匹配模型", "缓解程度判断模型", "分区域动态实时补贴方案"]
doc.add_abstract(latex_code, keys)
doc.add_toc()
你可以在文档中添加 使用固定格式编写的md文档 作为一个section。
doc.add_section(path="md/wtcs.md")
你可以在文档中添加指定标题和内容的 section。
doc.add_section(title="符号说明", content="大家好啊")
你可以在文档中添加变量,将会自动添加到变量表中,同时还可以使用符号转化器将其转换为latex代码
from pytex.utils import SymbolTransformer
from pylatex import NoEscape
x = doc.add_var("x", NoEscape("这是一个优秀的$x$"))
st = SymbolTransformer()
formula, name = st.sym2tex((x**2+7)*5)
最后,你可以生成tex文档,或者pdf文档
doc.generate_pdf('resources/math', compiler='XeLatex', clean_tex=False, clean=False)
特色功能提供了试卷编写模块,详情见pytex/exam/README.md。
支持Markdown到LaTex的转换。
针对数模进行了大幅度优化,提供了模板。
支持定义局部操作(废弃)。
计划实现功能神经网络结构可视化,输入处理形状变换可视化。
Python端编辑公式。
Python端添加文献。
图制作。
代码仓库
GitHub: PyTex