Sublime Forum

I'd like to make a LaTeX output, script

#1

No idea where to start - it is quite simple, just needs to run texify or something (from miktex). I know a little bit of python, but I wouldn’t know where to begin.

0 Likes

#2

Indeed, the LaTeX package is quite functional right now: take a look at the Sublimetextwiki page:

sublimetextwiki.com/pages/LaTeX.html

You can read the docs and download the package file from there. Or, as the previous poster suggested, take a look at the code on Google Code.

The current version provides:

  • texification, with convenient error navigation
  • inverse and forward search with SumatraPDF
  • insertion of references and citations from BibTeX
  • insertion of tex macros
  • environment closers, and other niceties to work with TeX/LaTeX commands and environments

Take a look at the documentation; I have tried to be as comprehensive as possible. Your feedback would be much appreciated!

I have drawn inspiration from the TextMate LaTeX bundle (although the code is original). However, a few features are missing. In particular, one day I’d like to add:

  • support for multi-file tex documents (a biggie, as it impacts various commands)
  • insertion of citations from \bibitem commands (right now I handle bibtex bibliographies only). This should be easy to implement
  • more font commands (easy). E.g. TextMate has a nice “italics” command that gives you \emph{} in normal text and \mathit{} in math mode. That would be nice to have.
  • More tex macros (easy, as it’s just a matter of adding to a dictionary).

M

0 Likes

#3

Hi – not much time for a full reply, but this may help. Jon has a walkthrough for creating a basic TextCommand plugin (http://www.sublimetext.com/docs/plugin-examples), and this is code for running latex from miktex 2.7. Between the two, you should have all the pieces, but you’ll need to do some blending. Call the compileLatex() method below.

Here’s some code I use for running a LaTeX compiler;


# you may need to import any of these;
import sublime, sublimeplugin, re, os, datetime, shutil, popen2, string, subprocess, time


# the driving code itself;
def compileLatex(latexFile):
  miktexExe = miktexCommandPath("latex")
  commandLine = " --interaction=nonstopmode --aux-directory c:\\temp\\ \"" + latexFile + "\""
  # two compiles, to make sure contents etc are up-to-date
  for i in range(2):      
    result = runSysCommand(miktexExe, commandLine) 
    if (result != 0):
      return result
  return 0

# call this on a command line to run it.
def runSysCommand(commandText, arguments=None):
  """executes the commands"""
  print "running \"%s\" %s" % (commandText, arguments)
  if arguments == None:
    result = os.spawnl(os.P_WAIT, commandText)
  else:
    result = os.spawnl(os.P_WAIT, commandText, arguments)
  if result != 0:
    print "failed to execute \"%s\" %s" % (commandText, arguments)
  return result

# get the program files directory
def programFiles():
  prog32 = "c:\\program files"
  prog64 = "c:\\program files (x86)"
  if os.path.exists(prog64):
    return prog64
  elif os.path.exists(prog32):
    return prog32
  else:
    raise Exception("can't find a program files")
    
# get the miktex command; eg miktexCommandPath("texify") 
def miktexCommandPath(commandName):
  return os.path.join(programFiles(), "MiKTeX 2.7\\miktex\\bin", commandName + ".exe")

0 Likes