自动运行xelatex命令两遍及xdvipdfmx生成pdf并删除临时文件的工具

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

转载于:https://www.cnblogs.com/agateriver/archive/2007/10/19/930127.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值