Using Notepad++ with MiKTeX on Windows
I managed to find the perfect solution! For some reason, this didn't show up on my previous Google searches. I tailored my version of this solution: http://nimal.info/blog/2010/latex-on-windows-with-miktex-and-notepad/
My version (on a 64-bit Windows 7 machine) is as follows:
- Download and install Basic MiKTeX 2.9 (32-bit)
- Download and install SumatraPDF
- Create a batch file
miktex_to_latex.bat
and place it anywhere- For easy location, place the batch file in the [Notepad++ installation Path]
Copy-paste the following into the batch file and save it
:: Called from Notepad++ Run :: [path_to_bat_file] "$(CURRENT_DIRECTORY)" "$(NAME_PART)" :: Change Drive and to File Directory %~d1 cd %1 :: Run Cleanup call:cleanup :: Run pdflatex -> bibtex -> pdflatex -> pdflatex pdflatex %2 bibtex %2 :: If you are using multibib the following will run bibtex on all aux files :: FOR /R . %%G IN (*.aux) DO bibtex %%G pdflatex %2 pdflatex %2 :: Run Cleanup call:cleanup :: Open PDF START "" "C:\Progra~2\SumatraPDF\SumatraPDF.exe" %3 -reuse-instance :: Cleanup Function :cleanup del *.dvi del *.out :: del *.log :: del *.aux :: del *.bbl :: del *.blg :: del *.brf goto:eof
Take care of the following:
- All lines beginning with double colon
::
are comments - the
START
command should have the installation path of SumatraPDF - Make sure there are NO spaces in the path (Use
Progra~2
, notProgram Files (X86)
) - The
-reuse-instance
allows us to edit and recompile without quitting the PDF
- All lines beginning with double colon
Download (if it does not already exist) the NppExec plugin and place the
.dll
file in [Notepad++ installation path]\pluginsOpen a
.tex
file in Notepad++, click on F6 to executeType the following lines in the window that pops up:
NPP_SAVE "<Path_to_bat_file>" "$(CURRENT_DIRECTORY)" "$(NAME_PART)" "$(NAME_PART).pdf"
In my case, this is:
NPP_SAVE "C:\Progra~2\Notepad++\miktex_to_latex.bat" "$(CURRENT_DIRECTORY)" "$(NAME_PART)" "$(NAME_PART).pdf"
The above lines basically tell NppExec to "save the current
.tex
file, run the batch file, store results in current directory and name it the same as the.tex
file"Click on "Save" and type in a recognizable name such as 'PDFLaTex'
Go to the menubar, Plugins -> NppExec -> Advanced Options.. Under 'Menu item', choose the script we just created above, and 'Add/Modify' it to the Menu items with a suitable name. This allows us to assign shortcut keys through Settings -> Shortcut Mapper -> Plugin commands
Navigate to the script name and choose any shortcut key like Shift+F7
Press the shortcut key Shift+F7 to save and compile the
.tex
file. The SumatraPDF window should pop up and show the compiled PDF. Changes can be made and the file recompiled without having to close the PDF.
The BEST parts about this method are:
- There is no need to keep pressing Ctrl+S to save and then compile to PDF. Everything is done in one key press!
- There is no need to keep closing the opened PDF and reopening it on recompiling (as in the case with Adobe Reader)
- It is very easy to cleanup all the junk files generated
- It is completely open-source and can be easily integrated with an existing Notepad++ installation
Thanks Nimal, Jonas, Bert and the others who contributed to this awesome solution!
I've stumbled through a bunch of different IDE's and honestly I think that notepad++ is one of the most underrated options available to anyone doing TeX stuff.
Along that line, I think that most of these other options, which I started with, are overly complicated when we have tools like arara
and latexmk
. They all work fabulously well, and I greatly appreciate the help they have given me, but I think we should use all the tools available to us. I personally love arara
and I have my way that I now use every day that leans on arara
more than notepad++.
This is my notepad++ set up in NppExec
NPP_SAVEALL
cd $(CURRENT_DIRECTORY)
arara $(NAME_PART)
No batch files necessary. In my documents, I usually use a variation on this set of rules.
% arara: pdflatex: { synctex: on, shell: off }
% arara: biber
% arara: pdflatex: { synctex: on, shell: off }
% arara: pdflatex: { synctex: on, shell: off }
% arara: clean: { files: [ foo.log, foo.aux, foo.bbl, foo.blg, foo.log, foo.run.xml, foo-blx.bib, foo.bcf, foo.out ] }
% arara: sumatrapdf
The pdflatex
,biber
and clean
are all included in arara
. sumatrapdf
is mine, but is exceedingly simple. arara
also supplies a bibtex
rule which is just as simple to call, but I prefer biber.
sumatrapdf.yaml
!config
# SumatraPDF rule for arara
# Author: Mr Komandez
identifier: sumatrapdf
name: SumatraPDF
commands:
- <arara> DIRECTORY/sumatra.bat "@{getBasename(file)}.pdf" "@{options}"
arguments:
- identifier: options
flag: <arara> @{parameters.options}
sumatra.bat
START /b "C:\Progra~2\SumatraPDF\SumatraPDF.exe" %1 -reuse-instance %2
EXIT
This way, from the source code you can change your compilation options on the fly, but your actual compilation can stay key-bound the same way.
This would be a comment, but for length. I contributed to the batch file above, but here's my latest version:
:: Called from Notepad++ Run
:: [path_to_bat_file] "$(CURRENT_DIRECTORY)" "$(NAME_PART)"
:: Change Drive and to File Directory
%~d1
cd %1
:: Run Cleanup
call:cleanup
:: Run pdflatex -> bibtex -> pdflatex -> pdflatex
pdflatex %2
bibtex %2
:: If you are using multibib the following will run bibtex on all aux files
:: FOR /R . %%G IN (*.aux) DO bibtex %%G
pdflatex %2
pdflatex %2
:: Open PDF (Script updated based on comments by 'menfeser'
:: START "" "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" %2.pdf
if (%3)==() goto cleanup
::START "" %2.pdf
set str=%date%_%time%
set str=%str:/=-%
set str=%str::=-%
set str=%str: =_%
ren %2.pdf %2_%str%.pdf
"C:\Program Files\Foxit Software\Foxit Reader\Foxit Reader.exe" %2_%str%.pdf
:: Cleanup Function
if %3==noclean goto eof
:cleanup
del *.log
del *.dvi
del *.aux
del *.bbl
del *.blg
del *.brf
del *.out
:eof
It's called with 3 parameters - directory, filename, and a third, which can be "noclean" to keep temp files, blank to clean up but not view pdf, and anything else to show the pdf. I map [shift]+F5 to view and clean, and [ctrl]+F5 to view without cleaning.
As there's currently no windows pdf viewer that doesn't lock the file on opening (my original reason for preferring foxit) the batch file renames the output pdf to put a date/time stamp in the file name before opening, allowing the next build to be opened without errors.
Another macro to call ASpell is handy as well.