diff --git a/latex/maketd.py b/latex/maketd.py index b733054..d94affb 100755 --- a/latex/maketd.py +++ b/latex/maketd.py @@ -4,26 +4,31 @@ import subprocess import sys import os -def compiler(nf, lsuff) : +def compiler(nf, lsuff, parallel = False) : basedir = os.path.dirname(nf) builddir = os.path.join(basedir, "_build") basejobname = os.path.splitext(os.path.basename(nf))[0] + if parallel : + call = subprocess.Popen + else : + call = subprocess.call # https://stackoverflow.com/a/9745864 processes = [] for suff in lsuff : options = suff[1] - processes.append(subprocess.Popen('''latexmk -pdflua -shell-escape -bibtex-cond -cd -interaction=batchmode -dvi- -jobname=''' +basejobname+suff[0] +''' -outdir=''' + builddir + ''' -latexoption="--output-directory='''+builddir+''' --synctex=0 ''' + options + '''" ''' + nf, shell=True, stdout=subprocess.PIPE, + processes.append(call('''latexmk -pdflua -shell-escape -bibtex-cond -cd -interaction=batchmode -dvi- -jobname=''' +basejobname+suff[0] +''' -outdir=''' + builddir + ''' -latexoption="--output-directory='''+builddir+''' --synctex=0 ''' + options + '''" ''' + nf, shell=True, stdout=subprocess.PIPE, bufsize=1, close_fds=True, universal_newlines=True)) - while len(processes) > 0 : - for p in processes: - if p.poll() is not None: # process ended - p.stdout.close() - processes.remove(p) + if parallel : + while len(processes) > 0 : + for p in processes: + if p.poll() is not None: # process ended + p.stdout.close() + processes.remove(p) for suff in lsuff : os.rename(os.path.join(builddir, basejobname+suff[0]+".pdf"), os.path.join(basedir, basejobname+suff[0]+".pdf")) - - + + def clean(nf, suff) : subprocess.call(["latexmk", "-cd", "-c", "-jobname="+os.path.splitext(os.path.basename(nf))[0]+suff, nf]) @@ -33,7 +38,6 @@ if sys.argv[1].endswith(".tex") : else : nf = sys.argv[1]+".tex" - with open(nf) as f : for l in f.readlines() : if l.strip() == "" or l.strip().startswith("%") : @@ -47,5 +51,5 @@ with open(nf) as f : break -compiler(nf, modes) +compiler(nf, modes, len(sys.argv)>2 and sys.argv[2]=="--parallel")