在编译tex文档时,经常要运行xelatex(or latex etc.)两遍才能得到正确的输出。另外,xelatex命令还会输出一些对用户来说没有用处的临时文件比如*.aux、*.out、*.snm、*.nav、*.toc。因此写了个工具xelatexgo,该工具自动运行xelatex命令两遍,结束后删除临时文件以保持目录的整洁。需要可执行文件的请到下列地址下载:
http://www.live-share.com/files/282550/xltgo.rar.html
下载后解压到Tex系统的bin目录或windows的system32目录中。
用法:xltgo myfile.tex
或者: xltgo myfile.tex -showpdf -encrypt
(-showpdf:编译完后调用系统默认的PDF阅读器自动显示PDF;
 -encrypt:加密生成的PDF)

源码如下:
  1自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具#-*- coding: gbk -*-
  2自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具#执行两遍 xelatex -halt-on-error  sys.argv[1], 然后显示pdf
  3自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具import os,sys,WConio
  4自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具
  5自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具helpmsg="""usage: xltgo texfile [options]
  6自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具options:
  7自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    -showpdf:  show pdf after compiled
  8自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    -encrypt:  encrtypt pdf    
  9自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具e.g: xltgo youfile
 10自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具     xltgo youfile.tex -showpdf -encrypt"""
 11自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具
 12自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具def printgoodnews(message):
 13自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    global attr
 14自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    WConio.textcolor(WConio.GREEN)
 15自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    total_chars=80
 16自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    ll=len(message)
 17自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    start=(total_chars-ll)/2
 18自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    print "-"*start+message+"-"*(80-start-ll)
 19自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    WConio.textcolor(attr)
 20自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    
 21自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具def printbadnews(message):
 22自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    global attr
 23自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    WConio.textcolor(WConio.GREEN)
 24自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    total_chars=80
 25自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    ll=len(message)
 26自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    start=(total_chars-ll)/2
 27自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    print "-"*start+message+"-"*(80-start-ll)
 28自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    WConio.textcolor(attr)
 29自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    
 30自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具def cleartmpfiles(file):
 31自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    dir=os.path.dirname(file)
 32自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    filename=os.path.basename(file)
 33自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    if (filename[-4:]).upper()=='.TEX':
 34自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        filename=filename[:-4]
 35自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    tmpexts=['.aux','.log','.nav','.out','.snm','.toc','vrb','.xdv']
 36自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    
 37自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    for ext in tmpexts:
 38自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        tmpfile=os.path.join(dir,filename)+ext
 39自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        #print tmpfile
 40自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        if os.path.exists(tmpfile):
 41自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            print "Deleting %s自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具" % tmpfile
 42自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            os.unlink(tmpfile)
 43自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具
 44自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具if __name__=='__main__':
 45自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    attr=WConio.gettextinfo()[4]
 46自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    if len(sys.argv)==1:
 47自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具       print helpmsg 
 48自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具    if len(sys.argv)>1 :
 49自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        options=[option.upper() for option in sys.argv[1:]]
 50自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具
 51自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        exist=False
 52自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        out_dir=os.path.dirname(os.path.abspath(sys.argv[1]))
 53自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        filename=os.path.abspath(sys.argv[1])
 54自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        filename_noext=filename
 55自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        if os.path.abspath(sys.argv[1])[-4:].upper()=='.TEX':
 56自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            filename_noext=sys.argv[1][:-4]
 57自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        if os.path.abspath(sys.argv[1])[-4:].upper()=='.TEX' :
 58自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            exist= os.path.exists(filename)
 59自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        else:
 60自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            exist= os.path.exists(filename_noext+".tex")
 61自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具
 62自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        if exist:                    
 63自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            printgoodnews('xelatex -halt-on-error -no-pdf -output-directory="%s" "%s"' %(out_dir,filename))
 64自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            i=-1
 65自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            j=-1
 66自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            k=-1
 67自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            i=os.system('xelatex -halt-on-error -no-pdf -output-directory="%s" "%s"' %(out_dir, filename))
 68自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            if i==0:
 69自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                printgoodnews("The xelatex 1st run finished!")
 70自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                j=os.system('xelatex -halt-on-error -no-pdf -output-directory="%s" "%s"' %(out_dir, filename))
 71自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                if  j==0:
 72自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                    printgoodnews("The xelatex 2nd run finished!")
 73自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具
 74自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                    if '-ENCRYPT' in options:
 75自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                        k=os.system('xdvipdfmx -r 600 -E -V 5 -S -K 128 -P 0x0804 -o "%s.pdf" "%s.xdv"' % (filename_noext,filename_noext))
 76自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                    else:
 77自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                        k=os.system('xdvipdfmx -r 600 -E -V 5 -o "%s.pdf" "%s.xdv"' % (filename_noext,filename_noext))
 78自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                    
 79自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                    if k==0:
 80自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                        printgoodnews("xdvipdfmx finished!")
 81自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                        if '-SHOWPDF' in options:
 82自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                            k=os.startfile(filename_noext+".pdf")
 83自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                            printgoodnews("Command 'showpdf' was executed!")
 84自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                        cleartmpfiles(sys.argv[1])
 85自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                        printgoodnews("All finished!")
 86自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                        sys.exit(0)                            
 87自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                    else:
 88自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                        printbadnews("Error on xdvipdfmx!")
 89自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                        sys.exit(-1)
 90自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                else:
 91自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                    printbadnews("Error on the 2rd run !")
 92自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                    cleartmpfiles(sys.argv[1])
 93自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                    sys.exit(-1)
 94自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            else:
 95自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                printbadnews("Error on the 1st run !")
 96自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                cleartmpfiles(sys.argv[1])
 97自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具                sys.exit(-1)
 98自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具        else:
 99自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            printbadnews( "Error: where is your tex file %s?'"%sys.argv[1])
100自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具            sys.exit(-1)
101自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具
102自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具

相关文章: