parameters: (target, source, env, graphics_extensions)
return_statement: return (target, source)
docstring: An emitter for TeX and LaTeX sources.
      For LaTeX sources we try and find the common created files that
      are needed on subsequent runs of latex to finish tables of contents,
      bibliographies, indices, lists of figures, and hyperlink references.
docstring_summary: An emitter for TeX and LaTeX sources.
      For LaTeX sources we try and find the common created files that
      are needed on subsequent runs of latex to finish tables of contents,
      bibliographies, indices, lists of figures, and hyperlink references.
docstring_tokens: An emitter for TeX and LaTeX sources . For LaTeX sources we try and find the common created files that are needed on subsequent runs of latex to finish tables of contents bibliographies indices lists of figures and hyperlink references .
function: def tex_emitter_core(target, source, env, graphics_extensions):
      """An emitter for TeX and LaTeX sources.
      For LaTeX sources we try and find the common created files that
      are needed on subsequent runs of latex to finish tables of contents,
      bibliographies, indices, lists of figures, and hyperlink references.
      """
      basename = SCons.Util.splitext(str(source[0]))[0]
      basefile = os.path.split(str(basename))[1]
      targetdir = os.path.split(str(target[0]))[0]
      targetbase = os.path.join(targetdir, basefile)
  
      basedir = os.path.split(str(source[0]))[0]
      abspath = os.path.abspath(basedir)
      target[0].attributes.path = abspath
  
      #
      # file names we will make use of in searching the sources and log file
      #
      emit_suffixes = ['.aux', '.log', '.ilg', '.blg', '.nls', '.nlg', '.gls', '.glg', '.alg'] + all_suffixes
      auxfilename = targetbase + '.aux'
      logfilename = targetbase + '.log'
      flsfilename = targetbase + '.fls'
      syncfilename = targetbase + '.synctex.gz'
  
      env.SideEffect(auxfilename,target[0])
      env.SideEffect(logfilename,target[0])
      env.SideEffect(flsfilename,target[0])
      env.SideEffect(syncfilename,target[0])
      if Verbose:
          print("side effect :",auxfilename,logfilename,flsfilename,syncfilename)
      env.Clean(target[0],auxfilename)
      env.Clean(target[0],logfilename)
      env.Clean(target[0],flsfilename)
      env.Clean(target[0],syncfilename)
  
      content = source[0].get_text_contents()
  
      # set up list with the regular expressions
      # we use to find features used
      file_tests_search = [auxfile_re,
                           makeindex_re,
                           bibliography_re,
                           bibunit_re,
                           multibib_re,
                           addbibresource_re,
                           tableofcontents_re,
                           listoffigures_re,
                           listoftables_re,
                           hyperref_re,
                           makenomenclature_re,
                           makeglossary_re,
                           makeglossaries_re,
                           makeacronyms_re,
                           beamer_re,
                           newglossary_re,
                           biblatex_re ]
      # set up list with the file suffixes that need emitting
      # when a feature is found
      file_tests_suff = [['.aux','aux_file'],
                    ['.idx', '.ind', '.ilg','makeindex'],
                    ['.bbl', '.blg','bibliography'],
                    ['.bbl', '.blg','bibunit'],
                    ['.bbl', '.blg','multibib'],
                    ['.bbl', '.blg','.bcf','addbibresource'],
                    ['.toc','contents'],
                    ['.lof','figures'],
                    ['.lot','tables'],
                    ['.out','hyperref'],
                    ['.nlo', '.nls', '.nlg','nomenclature'],
                    ['.glo', '.gls', '.glg','glossary'],
                    ['.glo', '.gls', '.glg','glossaries'],
                    ['.acn', '.acr', '.alg','acronyms'],
                    ['.nav', '.snm', '.out', '.toc','beamer'],
                    ['newglossary',],
                    ['.bcf', '.blg','biblatex'] ]
      # for newglossary the suffixes are added as we find the command
      # build the list of lists
      file_tests = []
      for i in range(len(file_tests_search)):
          file_tests.append( [None, file_tests_suff[i]] )
  
      # TO-DO: need to add a way for the user to extend this list for whatever
      # auxiliary files they create in other (or their own) packages
  
      # get path list from both env['TEXINPUTS'] and env['ENV']['TEXINPUTS']
      savedpath = modify_env_var(env, 'TEXINPUTS', abspath)
      paths = env['ENV']['TEXINPUTS']
      if SCons.Util.is_List(paths):
          pass
      else:
          # Split at os.pathsep to convert into absolute path
          paths = paths.split(os.pathsep)
  
      # now that we have the path list restore the env
      if savedpath is _null:
          try:
              del env['ENV']['TEXINPUTS']
          except KeyError:
              pass # was never set
      else:
          env['ENV']['TEXINPUTS'] = savedpath
      if Verbose:
          print("search path ",paths)
  
      # scan all sources for side effect files
      aux_files = []
      file_tests = ScanFiles(source[0], target, paths, file_tests, file_tests_search, env, graphics_extensions, targetdir, aux_files)
  
      for (theSearch,suffix_list) in file_tests:
          # add side effects if feature is present.If file is to be generated,add all side effects
          if Verbose and theSearch:
              print("check side effects for ",suffix_list[-1])
          if theSearch is not None or not source[0].exists():
              file_list = [targetbase,]
              # for bibunit we need a list of files
              if suffix_list[-1] == 'bibunit':
                  file_basename = os.path.join(targetdir, 'bu*.aux')
                  file_list = glob.glob(file_basename)
                  # remove the suffix '.aux'
                  for fl in file_list.copy():
                      file_list.append(SCons.Util.splitext(fl)[0])
              # for multibib we need a list of files
              if suffix_list[-1] == 'multibib':
                  for multibibmatch in multibib_re.finditer(content):
                      if Verbose:
                          print("multibib match ",multibibmatch.group(1))
                      if multibibmatch is not None:
                          baselist = multibibmatch.group(1).split(',')
                          if Verbose:
                              print("multibib list ", baselist)
                          for bl in baselist:
                              file_list.append(os.path.join(targetdir, bl))
              # now define the side effects
              for file_name in file_list:
                  for suffix in suffix_list[:-1]:
                      env.SideEffect(file_name + suffix,target[0])
                      if Verbose:
                          print("side effect tst :",file_name + suffix, " target is ",str(target[0]))
                      env.Clean(target[0],file_name + suffix)
  
      for aFile in aux_files:
          aFile_base = SCons.Util.splitext(aFile)[0]
          env.SideEffect(aFile_base + '.aux',target[0])
          if Verbose:
              print("side effect aux :",aFile_base + '.aux')
          env.Clean(target[0],aFile_base + '.aux')
      # read fls file to get all other files that latex creates and will read on the next pass
      # remove files from list that we explicitly dealt with above
      if os.path.isfile(flsfilename):
          with open(flsfilename, "r") as f:
              content = f.read()
          out_files = openout_re.findall(content)
          myfiles = [auxfilename, logfilename, flsfilename, targetbase+'.dvi',targetbase+'.pdf']
          for filename in out_files[:]:
              if filename in myfiles:
                  out_files.remove(filename)
          env.SideEffect(out_files,target[0])
          if Verbose:
              print("side effect fls :",out_files)
          env.Clean(target[0],out_files)
  
      return (target, source)
function_tokens: def tex_emitter_core ( target , source , env , graphics_extensions ) : basename = SCons . Util . splitext ( str ( source [ 0 ] ) ) [ 0 ] basefile = os . path . split ( str ( basename ) ) [ 1 ] targetdir = os . path . split ( str ( target [ 0 ] ) ) [ 0 ] targetbase = os . path . join ( targetdir , basefile ) basedir = os . path . split ( str ( source [ 0 ] ) ) [ 0 ] abspath = os . path . abspath ( basedir ) target [ 0 ] . attributes . path = abspath # # file names we will make use of in searching the sources and log file # emit_suffixes = [ '.aux' , '.log' , '.ilg' , '.blg' , '.nls' , '.nlg' , '.gls' , '.glg' , '.alg' ] + all_suffixes auxfilename = targetbase + '.aux' logfilename = targetbase + '.log' flsfilename = targetbase + '.fls' syncfilename = targetbase + '.synctex.gz' env . SideEffect ( auxfilename , target [ 0 ] ) env . SideEffect ( logfilename , target [ 0 ] ) env . SideEffect ( flsfilename , target [ 0 ] ) env . SideEffect ( syncfilename , target [ 0 ] ) if Verbose : print ( "side effect :" , auxfilename , logfilename , flsfilename , syncfilename ) env . Clean ( target [ 0 ] , auxfilename ) env . Clean ( target [ 0 ] , logfilename ) env . Clean ( target [ 0 ] , flsfilename ) env . Clean ( target [ 0 ] , syncfilename ) content = source [ 0 ] . get_text_contents ( ) # set up list with the regular expressions # we use to find features used file_tests_search = [ auxfile_re , makeindex_re , bibliography_re , bibunit_re , multibib_re , addbibresource_re , tableofcontents_re , listoffigures_re , listoftables_re , hyperref_re , makenomenclature_re , makeglossary_re , makeglossaries_re , makeacronyms_re , beamer_re , newglossary_re , biblatex_re ] # set up list with the file suffixes that need emitting # when a feature is found file_tests_suff = [ [ '.aux' , 'aux_file' ] , [ '.idx' , '.ind' , '.ilg' , 'makeindex' ] , [ '.bbl' , '.blg' , 'bibliography' ] , [ '.bbl' , '.blg' , 'bibunit' ] , [ '.bbl' , '.blg' , 'multibib' ] , [ '.bbl' , '.blg' , '.bcf' , 'addbibresource' ] , [ '.toc' , 'contents' ] , [ '.lof' , 'figures' ] , [ '.lot' , 'tables' ] , [ '.out' , 'hyperref' ] , [ '.nlo' , '.nls' , '.nlg' , 'nomenclature' ] , [ '.glo' , '.gls' , '.glg' , 'glossary' ] , [ '.glo' , '.gls' , '.glg' , 'glossaries' ] , [ '.acn' , '.acr' , '.alg' , 'acronyms' ] , [ '.nav' , '.snm' , '.out' , '.toc' , 'beamer' ] , [ 'newglossary' , ] , [ '.bcf' , '.blg' , 'biblatex' ] ] # for newglossary the suffixes are added as we find the command # build the list of lists file_tests = [ ] for i in range ( len ( file_tests_search ) ) : file_tests . append ( [ None , file_tests_suff [ i ] ] ) # TO-DO: need to add a way for the user to extend this list for whatever # auxiliary files they create in other (or their own) packages # get path list from both env['TEXINPUTS'] and env['ENV']['TEXINPUTS'] savedpath = modify_env_var ( env , 'TEXINPUTS' , abspath ) paths = env [ 'ENV' ] [ 'TEXINPUTS' ] if SCons . Util . is_List ( paths ) : pass else : # Split at os.pathsep to convert into absolute path paths = paths . split ( os . pathsep ) # now that we have the path list restore the env if savedpath is _null : try : del env [ 'ENV' ] [ 'TEXINPUTS' ] except KeyError : pass # was never set else : env [ 'ENV' ] [ 'TEXINPUTS' ] = savedpath if Verbose : print ( "search path " , paths ) # scan all sources for side effect files aux_files = [ ] file_tests = ScanFiles ( source [ 0 ] , target , paths , file_tests , file_tests_search , env , graphics_extensions , targetdir , aux_files ) for ( theSearch , suffix_list ) in file_tests : # add side effects if feature is present.If file is to be generated,add all side effects if Verbose and theSearch : print ( "check side effects for " , suffix_list [ - 1 ] ) if theSearch is not None or not source [ 0 ] . exists ( ) : file_list = [ targetbase , ] # for bibunit we need a list of files if suffix_list [ - 1 ] == 'bibunit' : file_basename = os . path . join ( targetdir , 'bu*.aux' ) file_list = glob . glob ( file_basename ) # remove the suffix '.aux' for fl in file_list . copy ( ) : file_list . append ( SCons . Util . splitext ( fl ) [ 0 ] ) # for multibib we need a list of files if suffix_list [ - 1 ] == 'multibib' : for multibibmatch in multibib_re . finditer ( content ) : if Verbose : print ( "multibib match " , multibibmatch . group ( 1 ) ) if multibibmatch is not None : baselist = multibibmatch . group ( 1 ) . split ( ',' ) if Verbose : print ( "multibib list " , baselist ) for bl in baselist : file_list . append ( os . path . join ( targetdir , bl ) ) # now define the side effects for file_name in file_list : for suffix in suffix_list [ : - 1 ] : env . SideEffect ( file_name + suffix , target [ 0 ] ) if Verbose : print ( "side effect tst :" , file_name + suffix , " target is " , str ( target [ 0 ] ) ) env . Clean ( target [ 0 ] , file_name + suffix ) for aFile in aux_files : aFile_base = SCons . Util . splitext ( aFile ) [ 0 ] env . SideEffect ( aFile_base + '.aux' , target [ 0 ] ) if Verbose : print ( "side effect aux :" , aFile_base + '.aux' ) env . Clean ( target [ 0 ] , aFile_base + '.aux' ) # read fls file to get all other files that latex creates and will read on the next pass # remove files from list that we explicitly dealt with above if os . path . isfile ( flsfilename ) : with open ( flsfilename , "r" ) as f : content = f . read ( ) out_files = openout_re . findall ( content ) myfiles = [ auxfilename , logfilename , flsfilename , targetbase + '.dvi' , targetbase + '.pdf' ] for filename in out_files [ : ] : if filename in myfiles : out_files . remove ( filename ) env . SideEffect ( out_files , target [ 0 ] ) if Verbose : print ( "side effect fls :" , out_files ) env . Clean ( target [ 0 ] , out_files ) return ( target , source )