docs: def run(self):
          '''Run the LaTeX compilation.'''
          # store files
          self.old_dir = []
          if self.opt.clean:
              self.old_dir = os.listdir('.')
  
          cite_counter, toc_file, gloss_files = self._read_latex_files()
  
          self.latex_run()
          self.read_glossaries()
  
          gloss_changed = self.makeindex_runs(gloss_files)
          if gloss_changed or self._is_toc_changed(toc_file):
              self.latex_run()
  
          if self._need_bib_run(cite_counter):
              self.bibtex_run()
              self.latex_run()
  
          while (self.latex_run_counter < MAX_RUNS):
              if not self.need_latex_rerun():
                  break
              self.latex_run()
  
          if self.opt.check_cite:
              cites = set()
              with open('%s.aux' % self.project_name) as fobj:
                  aux_content = fobj.read()
  
              for match in BIBCITE_PATTERN.finditer(aux_content):
                  name = match.groups()[0]
                  cites.add(name)
  
              with open('%s.bib' % self.bib_file) as fobj:
                  bib_content = fobj.read()
              for match in BIBENTRY_PATTERN.finditer(bib_content):
                  name = match.groups()[0]
                  if name not in cites:
                      self.log.info('Bib entry not cited: "%s"' % name)
  
          if self.opt.clean:
              ending = '.dvi'
              if self.opt.pdf:
                  ending = '.pdf'
  
              for fname in os.listdir('.'):
                  if not (fname in self.old_dir or fname.endswith(ending)):
                      try:
                          os.remove(fname)
                      except IOError:
                          pass
  
          if self.opt.preview:
              self.open_preview()