Simple Latex Makefile
With this simple Makefile you can compile your latex projects from within vim and use the quickfix window in case of errors to traverse and fix them one by one.
#
# This makefile generates a PDF of the MAINTEX file.
# The output can be found inside the build subdirectory.
#
# Makefile based on http://www.wlug.org.nz/LatexMakefiles
#
#
# This makefile has been tested in Kubuntu 9.04
#
# Prerequisites:
#
# sudo aptitude install ptex-bin ptex-base okumura-clsfiles ptex-jisfonts \
# xdvik-ja dvipsk-ja dvi2ps gv jbibtex-bin jmpost mendexk okumura-clsfiles \
# vfdata-morisawa5 dvi2ps-fontdesc-morisawa5 texlive-latex-extra latexmk \
# dvipng xpdf gs-cjk-resource vfdata-morisawa5 dvi2ps-fontdesc-morisawa5 \
# cmap-adobe-japan1 cmap-adobe-japan2 cmap-adobe-cns1 cmap-adobe-gb1
# sudo jisftconfig add
#
# When writing Japanese make sure your editor is saving the tex files
# in euc-jp encoding. In VIM this can be accomplished by setting the fenc
# variable:
#
# - Open file as normal using vim <filename>
# - Type :edit ++enc=euc-jp
# - Type :set fenc=euc-jp
# - Type :set enc=utf-8
## TODO Add rule to convert images
## TODO Add makeindex to create .toc files
###########################################################################
## Put here the file name of the main tex file.
MAINTEX = main
############################################################################
## Change the followin only if you know what you are doing
LATEXCMD = platex # [latex | platex]
BIBCMD = jbibtex # [bibtex | jbibtex]
DVIPDFCMD = dvipdf # [dvipdf | dvipdfm | dvipdfmx]
PDFVIEWER = xpdf # [okular | xpdf | evince ]
DVIVIEWER = xdvi-ja # [xdvi | xdvi-ja | kdvi ]
## No need to change anything below this line
TEXFILES = $(wildcard *.tex)
TEXINPUTS=:$(PWD)//: # Path to search for .tex, .cls and .sty files
BSTINPUTS=:$(PWD)//: # Path to search for .bst files
BIBINPUTS=:$(PWD)//: # Path to search for .bib files
TEXMFOUTPUT=$(PWD)/build # Output dir for bibtex and jbibtex
LATEXOPTS= -output-directory=build -file-line-error -interaction=nonstopmode
export TEXFILES TEXINPUTS BSTINPUTS BIBINPUTS TEXMFOUPUT
.PHONY: all wordcount charcount pdf dvi
all: build/$(MAINTEX).pdf
build :
@echo "Creating build directory"
@mkdir build
build/$(MAINTEX).aux: $(MAINTEX).tex $(TEXFILES) build
$(LATEXCMD) $(LATEXOPTS) $(MAINTEX)
build/$(MAINTEX).bbl: build/$(MAINTEX).aux
$(BIBCMD) build/$(MAINTEX)
build/$(MAINTEX).dvi: build/$(MAINTEX).bbl
$(LATEXCMD) $(LATEXOPTS) $(MAINTEX)
$(LATEXCMD) $(LATEXOPTS) $(MAINTEX)
build/$(MAINTEX).pdf: build/$(MAINTEX).dvi
$(DVIPDFCMD) build/$(MAINTEX).dvi build/$(MAINTEX).pdf
dvi: build/$(MAINTEX).dvi
$(DVIVIEWER) build/$(MAINTEX).dvi
pdf: build/$(MAINTEX).pdf
$(PDFVIEWER) build/$(MAINTEX).pdf
# Word counting can be done in VIM usng Ctrl-g g but this command also includes
# latex commands. This make rule strips the latex and counts what is left
wordcount:
@echo Approximate word count: `grep -v '^\\\\' $(TEXFILES)|grep -v '^%'|wc -w`
charcount:
@echo Approximate char count: `grep -v '^\\\\' $(TEXFILES)|grep -v '^%'|wc -c`
Put all your tex files, images, sty, cls, bib, bst files inside a directory with any subfolder tree structure you like. This Makefile sets some environment variables that allow it to find all these files as long as they are below the current directory tree.
Make sure your main tex file is called main.tex or if you prefer another one replace the MAINTEX variable in the Makefile. Take note that it has no extension!.
Also note that this Makefile is to compile Japanese EUC-JP tex files (IEICE Trans). If you do not need Japanese replace platex with simple latex and jbibtex with bibtex.
All output files generated by latex/platex, bibtex/jbibtex are stored inside a build subdirectory.
Now in your .vimrc you can add the following parameter to compile your latex project:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Working with Makefiles
"
" Press F5 to compile and open the error window if there
" are errors. If there are errors you can use :cn and :cN to
" jump foward and backward thru the error list. Press :ccl to
" close the error list or F5 again to recompile
map <F5> <ESC>:make<CR><ESC>:botright cwindow<CR> " Compile and open quick fix list
map <F6> <ESC>:cN<CR> " Jump to prev error/warn
map <F7> <ESC>:cn<CR> " Jump to next error/warn
Now when editing you latex files press <F5> to compile them and if errors occur you will be presented with a quickfix window where you can use <F6> and <F7> to quickly jump to the previous and next error message.
Additionally this Makefile also has a few useful commands you can invoke from within vim:
:!make pdf to display the pdf file using xpdf or if you prefer a different viewer replace the PDFVIEWER variable in the Makefile.
:!make dvi to display the dvi file using xdvi or if you prefer a different viewer replace the DVIVIEWER variable in the Makefile.
:!make wordcount to display the number of words in all the tex documents. In vim you can also use g<ctrl-g> in normal mode but this also counts latex commands.
:!make charcount same as wordcount but for characters instead of words.
Latex with Vim TagList plugin
We can enable TagList to display important keywords like section, labels and references for easy navigation (link).
First create a ~/.ctags file that contains the following:
--langdef=tex
--langmap=tex:.tex
--regex-tex=/\\subsubsection[ \t]*\*?\{[ \t]*([^}]*)\}/- \1/s,subsubsection/
--regex-tex=/\\subsection[ \t]*\*?\{[ \t]*([^}]*)\}/+\1/s,subsection/
--regex-tex=/\\section[ \t]*\*?\{[ \t]*([^}]*)\}/\1/s,section/
--regex-tex=/\\chapter[ \t]*\*?\{[ \t]*([^}]*)\}/\1/c,chapter/
--regex-tex=/\\label[ \t]*\*?\{[ \t]*([^}]*)\}/\1/l,label/
--regex-tex=/\\ref[ \t]*\*?\{[ \t]*([^}]*)\}/\1/r,ref/
Then modify the taflist.vim file and add a new language. To do this search for "yacc language" and add these line before it:
" tex language
let s:tlist_def_tex_settings = 'tex;s:section;c:chapter;l:label;r:ref'
" yacc language
Now when you open the taglist window you will get a nice list of section, subsections, chapters, references, labels, etc... that you can navigate and use to jump quickly to each of them.
If you do not have the taglist plugin installed you can follow my instructions here.
Reference autocompletion
If you write your labels as \label{fig:something}, then put this in your ~/.vimrc file:
set iskeyword+=: " type /ref{fig: and prec <C-n> to autocomplete references
With this now you can type \ref{fig: and press
Spell checking
This is not only for latex files. Simply put the following in your ~/.vimrc file to enable automatic spell checking. Learn how to use the spell checker to correct, add and/or ignore words.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Enable spell checking in latex, bib and txt files
" Commands:
" [s -> jump to next bad word
" ]s -> jump to prev bad word
" z= -> suggest word
" zg -> mark word as good (add to dictionary)
" zw -> mark word as bad (remove from dictionary)
" :h spell -> get more details about spelling
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
au BufRead,BufNewFile *.txt,*.tex,*.bib setlocal spell spelllang=en_us
No comments:
Post a Comment