使用Notepad++配置Latex编译环境

完成配置,一次成功,正反向搜索正常,我的天哪,太好用了!

最近又拾起latex在空余时间写点文档,码字还是一如既往的使用Notepad++,遂想着何不趁此机会配置一下Notepad++下latex的编译环境。在实践此事之前,我一直妄自推断,觉得配置过程肯定会很繁琐,又不知会因哪里出现的报错而卡壳。当通过Google找到John Bruer的博文LaTex Editing Using Notepad++时,我告诫自己要耐心耐心再耐心,尽可能搞懂步骤中的每一点,即使出现报错也不会慌乱。

准备工作

  1. CTEX,我使用的是200多兆的Basic版,版本号2.9.2.164,试用过2.9.3的测试版后觉得还不稳定;
  2. Notepad++,由于插件NppExec不支持64位Notepad++,请安装32位版本;
  3. NppExec,在32位Notepad++的插件管理器中,可以轻松找到NppExec并安装;
  4. SumatraPDF,支持正反向搜索的轻量级PDF阅读器;
  5. CMCDDE,用于向SumatraPDF发送DDE命令。

pdflatex_build.bat

检查一下NppExec插件是否安装成功,可以查看插件菜单中是否已经有子菜单NppExec
batch文件是本文的重点,插件NppExec就是通过调用该batch文件来实现对Notepad++中的.tex文件进行编译的,编译成功后调用SumatraPDF显示生成的PDF文件。我在这里直接贴上了John Bruer博文中的版本,下面集合了本文出现的batch命令的说明,很简单。

@echo off
if "%~x1"==".tex" goto pdflatex
   echo "%~f1" is not a recognized type, extension is "%~x1"
   pause
   exit /b
 
:pdflatex
   cd /d "%~dp1"
   IF NOT EXIST "%~dp1\build" mkdir build
 
   start "inverseSearch" /min "%PROGRAMFILES(x86)%\SumatraPDF\SumatraPDF.exe" -inverse-search "\"%PROGRAMFILES(x86)%\Notepad++\notepad++.exe\" -n%%l \"%%f\"" -reuse-instance
 
   pdflatex.exe -draftmode -interaction=batchmode -aux-directory="%~pd1\build" -output-directory="%~pd1\build" "%~pdn1"
   echo. && echo.
   bibtex.exe "%~dp1\build\%~n1.aux"
   echo. && echo.
   pdflatex.exe -draftmode -interaction=batchmode -aux-directory="%~pd1\build" -output-directory="%~pd1\build" "%~pdn1"
   echo. && echo.
   pdflatex.exe -interaction=batchmode -synctex=-1 -aux-directory="%~pd1\build" -output-directory="%~pd1\build" -quiet "%~pdn1"
   echo. && echo.
   
   type "%~dp1\build\%~n1.log" | findstr Warning:
   
   start "openPDF" "%PROGRAMFILES(x86)%\SumatraPDF\SumatraPDF.exe"  "%~dp1\build\%~n1.pdf" -reuse-instance
 
   echo SUMATRA>"%~dp1\build\cmcdde.tmp"
   echo control>>"%~dp1\build\cmcdde.tmp"
   echo [ForwardSearch("%~dp1\build\%~n1.pdf", "%~f1", %2, 0, 0, 0)]>>"%~dp1\build\cmcdde.tmp"
 
   "%PROGRAMFILES(x86)%\cmcdde.exe" @"%~dp1\build\cmcdde.tmp"
 
   del "%~dp1\build\cmcdde.tmp"
   exit /b

变量

batch文件的语法可以专门研究一下,这里为节省大家的时间,我只解释上文中出现的几个要点。
首先是"%x1"、"%f1"、"%dp1"、"%pdn1"、"%~n1"这些变量代表什么。假如新建一个test.bat文件并输入下面几行简单命令。

@echo off
echo "%~x1"
echo "%~f1"
echo "%~dp1"
echo "%~pdn1"
echo "%~n1"

在同一目录下新建一个文档text.txt,然后在命令行窗口中输入test.bat text.txt

D:\batchtest>test.bat test.txt

输出如下

".txt"
"D:\batchtest\text.txt"
"D:\batchtest\"
"D:\batchtest\text"
"text"

ECHO

@echo off
echo. && echo.

@echo off 包括本行在内,所有命令不输出。
echo. 空一行。

EXIT

exit [/b] [exitcode]

/b When used in a batch script, this option will exit only the script (or subroutine) but not CMD.EXE
exitcode Sets the %ERRORLEVEL% to a numeric number. If quitting CMD.EXE, set the process exit code no.

CD

cd [/d] [drive:][path]

/d change the current DRIVE in addition to changing folder.

START

start "title" [/d path] [options] "command" [parameters]

title Text for the CMD window title bar (required).
path Starting directory.
command The command, batch file or executable program to run.
parameters The parameters passed to the command.

Options Descriptiions
/min Start window Minimized.
/max Start window Maximized.
/w or /wait Start application and wait for it to terminate.(for an internal cmd command or a batch file this runs CMD /K)
... ...

TYPE

type [filename] 

This batch command prints the content of a file or files to the output.

FINDSTR

findstr string(s) [pathname(s)] [/R] [/C:"string"] [/G:StringsFile] [/F:file] [/D:DirList] [/A:color] [/OFF[LINE]] [options]

string Text to search for.
pathname(s) The file(s) to search.

路径

batch文件中出现的“%PROGRAMFILES(x86)%”是环境变量,默认指向"C:\PROGRAMFILES(x86)"。由于我习惯把软件安装在D盘,所以上文中所有的路径都要改成我的本地对应。改完后是这样:

start "inverseSearch" /min "D:\Program Files\SumatraPDF\SumatraPDF.exe" -inverse-search "\"D:\Program Files (x86)\Notepad++\notepad++.exe\" -n%%l \"%%f\"" -reuse-instance

你也发现了,我安装的是64位的SumatraPDF,32位的Notepad++,原因上面也讲过了。
至此,我的batch文件就准备好了。

NppExec设置

在Notepad++中点击菜单"插件">NppExec>Execute ...,在弹出的窗口中输入如下命令:

  NPP_SAVE
  C:\\pdflatex_build.bat "$(FULL_CURRENT_PATH)" $(CURRENT_LINE)

第一行代码的作用是将当前的文档进行保存。第二行代码即调用之前准备好的pdflatex_build.bat文件,将当前文档的完整路径传递给它进行编译,此外将光标所在行也一并传递。
点击Save...进行保存,保存为文件名pdflatex_build。至此,已经可以试验一下,能否顺利编译.tex文件。使用Notepad++打开一份之前已经写好的.tex文件,使用快捷键F6或选择菜单“插件”>NppExec>Execute...。在弹出的窗口中,于下拉窗口中选择pdflatex_build,点击OK。
上述操作过程可以设置快捷键,方便每次编译的调用。选择菜单“插件”>NppExec>Advanced options...。在弹出的窗口中,在Item name输入框中输入一个名称,比如Run pdflatex。在Associated script下拉菜单中选择pdflatex_build。点击Add/Modify按钮,将刚刚设置的Menu item添加至上方的列表中。确定将Place to the macros submenu前的选框被选中后,点击OK退出。现在就可以在菜单“宏”下看到刚刚添加的Run pdflatex菜单了,下次编译可以直接点击该菜单,或者再给它定义一个快捷键。点击菜单“设置”>管理快捷键...,在弹出的窗口中,点击Plugin commands标签页,找到Run pdflatex并给它定义一个快捷键,延续Jhon bruer的用法,设置为“Alt + ~”。点击关闭退出设置窗口。
至此,可以愉快的使用Notepad++编辑.tex文件,可以方便的通过快捷键一键编译,编译完成会自动打开pdf文件。同时,可以快速的反向搜索,即在pdf文件中双击某一行文本,可以找到.tex文件中对应位置并高亮显示。

正向搜索

正向搜索在使用时是这样的,在.tex文件中把光标放置在需要的行,使用快捷键,跳转到pdf文件并将目标段落高亮显示。有了上面的经验,正向搜索设置起来就很容易了。
新建一个batch文件pdflatex_forward.bat,输入如下内容:

@echo off
if "%~x1"==".tex" goto doit
   echo "%~f1" is not a .tex file, extension is "%~x1"
   pause
   exit /b
 
:doit

   echo SUMATRA>"%~dp1\build\cmcdde.tmp"
   echo control>>"%~dp1\build\cmcdde.tmp"
   echo [ForwardSearch("%~dp1\build\%~n1.pdf", "%~f1", %2, 0, 0, 0)]>>"%~dp1\build\cmcdde.tmp"
 
   "%PROGRAMFILES(x86)%\cmcdde.exe" @"%~dp1\build\cmcdde.tmp"
 
   del "%~dp1\build\cmcdde.tmp"

将第13行中的路径改成本地放置cmcdde.exe的位置。
ForwardSearch命令一共有6个参数,它们的含义分别是:

  • Full path to the PDF file
  • Full path to the LaTeX source file
  • Line number of the source file
  • Column number of the source file (currently unused, so pass 0)
  • New window? Pass 1 to open the PDF file in a new window
  • Focus? Pass 1 to give SumatraPDF focus

按照上面配置NppExec插件和快捷键的方法,对pdflatex_forward.bat文件操作一遍。快捷键可以设成“Alt + A”。

结语

本文介绍的方法均建立在我个人的使用习惯基础上,不管编不编程,Notepad++都是我的装机必备,能在其中愉快地编辑编译latex,对我而言是值得花时间配置一下的。记下本文也是为了未来装机有个笔记可参考,如果能够帮到有同样需求的同学,当然就更好了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容