latex数学公式转换器
這學期上課要用latex寫數(shù)理邏輯作業(yè),十分煩人,因為texstudio的非鍵盤數(shù)學公式寫起來實在是太煩人了,又臭又長,所以自己用py寫了一個小的latex數(shù)學公式轉(zhuǎn)換器。
不定期更新。目前是V2.0
簡單介紹一下功能:
輸入:一行要轉(zhuǎn)換成latex公式的自然語言字符串,所有非公式部分必須為純中文
輸出:可能多行(如果有\(zhòng)newline的話)變成了latex公式的字符串
輸入過程可以重復(fù)進行,不必每輸入一次就重啟一次程序
樣例輸入:12對任意命題A,A|=t,則t->h \n
樣例輸出:\newline \n \indent \n 對任意命題$A$,$A \models t$,則$t \leftarrow h$ \n
功能實現(xiàn)順序:
1.在字符串最開頭寫1會轉(zhuǎn)換為\newline \n
2.在字符串開頭的1后面寫2(可以沒有1)會轉(zhuǎn)換為\indent \n
3.程序會自動將除了1、2以外的字符串按照中文/非中文的區(qū)別分段(注意,中文句號和逗號算入中文),然后對所有非中文的部分兩端加上"$"
4.通過修改程序內(nèi)部的表ls1可以自定義某些翻譯方式,如將輸入中的英文laplace翻譯為$\bigtriangle$,將>=翻譯為$\leq$,但注意目前只能實現(xiàn)英文/字符串的翻譯(否則會和中文區(qū)分自動添加$法混淆)
5.把字符串中出現(xiàn)過的所有flow(大/小寫字母)自動轉(zhuǎn)化為\mathscr{大寫字母}(花體)(這個功能是為了數(shù)理邏輯作業(yè)特別設(shè)計的)
從某種意義上說,latex對空格的不敏感性讓這個程序變得非常好寫【滑稽】
def isChinese(chara):if('\u4e00'<=chara<='\u9fff' or chara==','or chara=='。'):return Trueelse:return Falsedef checkChinese(stra):start=0if(stra[start]=='1'):start+=1if(stra[start]=='2'):start+=1 ##避開這些玩意if(not isChinese(stra[start])):stra=stra[0:start]+'$'+stra[start:]lenth=len(stra)while(start<=lenth-1):if isChinese(stra[start]):if(start+1==lenth):breakelif(isChinese(stra[start+1])):start+=1else:stra=stra[0:start+1]+'$'+stra[start+1:]start+=2else:if(start+1==lenth):##是最后一個stra=stra+'$'breakelif(isChinese(stra[start+1])):stra=stra[0:start+1]+'$'+stra[start+1:]start+=2else:start+=1lenth=len(stra)return stradef checkflower(stra):templs=stra.split("flow")for i in range(1,len(templs)):templs[i]="\mathscr{"+templs[i][1].upper()+"}"+templs[i][3:]stra="".join(templs)return stradef indent(stra):newline=0indent=0if(stra[0]=='1'):newline+=1stra=stra[1:]if(stra[0]=='2'):indent+=1stra=stra[1:]if(indent):stra="\indent\n"+straif(newline):stra="\\newline\n"+strareturn strawhile True:##rules:[簡寫,意義,latex全稱],可以自行修改,但是注意簡寫不要重復(fù)ls1=[##無需加括號劃定范圍["exists", "存在", "\exists"],\["~","非","\sim"], \["not", "非", "\sim"], \["or","或","\\vee"],\["and","與","\wedge"],\["<->","重言","\leftrightarrow"],\["<=>","等價","\Leftrightarrow"],\["->","則","\\rightarrow"],\[">=","大于等于","\geq"],\["<=","小于等于","\leq"], \["=\=","不等于","\\neq"],\["laplace", "拉普拉斯算子", "\\bigtriangleup"], \["grad", "梯度", "\\bigtriangledown"], \["*", "乘", "\\times"], \["`", "瞥", "^{'}"], \["pet", "偏導(dǎo)", "\partial"],\["|-","推出","\\vdash"],\["|=","蘊含","\models"],\##["T'","Gamma","\Gamma^{'}"],\##["T","Gamma","\Gamma"], \["any", "任意", "\\forall"],\["\=/=","不滿足","\\nvDash"]##需要加括號劃定范圍,還沒想好怎么寫,可能要加函數(shù)##["div", "{x}div{y}:{x}除以{y}", "\\frac{x}/{y}"], \##["len", "len{x}:x的模長||x||", "\\left \| \\right \|"]]for i in ls1:print("在輸入中請用{}以表示{}".format(i[0],i[1]))print("在字符串前段增加1可以換行")print("在字符串第二位增加2可以縮進")print("在字符串中空格代表$")while 1:a=input("")a=checkChinese(a)for i in ls1:a=a.replace(i[0],i[2]+" ")a=checkflower(a)a=indent(a)print(a)?
總結(jié)
以上是生活随笔為你收集整理的latex数学公式转换器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VDownloader(网页视频下载软件
- 下一篇: 手机怎么用外嵌字幕_教你用手机给视频添加