尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

【软件相关】TeXstudio使用技巧

【软件相关】TeXstudio使用技巧 文章目录0 前言1 汇总中间生成文件到一个文件夹2 解决预览pdf预览缺失3 bibtex无法找到中间文件4 设置指令执行的快捷键5 latexmk的使用0 前言最近因为频繁使用LaTeX写文章想着学习的过程中做好记录一方面是记录一些LaTeX的语法和遇到的问题及解决办法另一方面也是更新一下工具的使用技巧。我本地使用的环境是TeXlive TeXstudio前者是当前最受欢迎的编译运行套件后者是功能强大的编辑器。本文主要记录一下TeXstudio的使用技巧。以下内容基于当前的最新版软件 4.9.31 汇总中间生成文件到一个文件夹在使用TeXstudio编译文档时比较烦的一点是编译得到的中间件和原tex文件掺杂在一起导致我在打包源码时需要一点点选中删除不太方便因为我实际需要的文档只是最后的pdf而已。如果可以将中间文件都放到一个文件夹下那我打包时直接删除整个文件夹即可。好在xelatex和pdflatex都支持指定输出的路径使用-output-directorybuild即可指定输出的目录为build当前目录下的build目录。注意上面有一行字说明符号%表示文件名不带拓展名所以%.tex即表示待编译的文件不用去考虑输出的内容中显示的引号实测不影响指令执行。但只加入这个的话点击编译预览按钮会报错这是因为build文件夹没有建立而且这个指令无法自动创建build文件夹。所以很自然地想到在这个指令执行之前增加一个自动创建文件夹的指令ifnot exist buildmkdirbuildpdflatex.exe-synctex1-interactionnonstopmode -output-directorybuild %.tex点击编译预览直接提示“无法执行”然后猜测可能无法识别前一条指令在前面加上cmd /ccmd /cif not exist build mkdir buildpdflatex.exe-synctex1-interactionnonstopmode -output-directorybuild %.tex会发现只有第一次编译时创建build文件夹时才会执行后面再次点击就不会执行了猜测应该是前一条指令执行输出为空导致误判断程序执行完毕所以后一条指令就不执行了。实测把换成也不好使。所以这个也不行。后面突然想到可以尝试把这些指令都放到bat脚本里面然后直接执行脚本。测试发现确实可行。所以最后的指令是这样D:\texstudio\user_scripts\pdflatex_build.bat %.tex这个脚本的位置没有要求这里建议使用绝对地址。2 解决预览pdf预览缺失本来到这也就差不多了但是又发现因为设置-output-directorybuild最后输出的pdf文件也在build文件夹内但是软件里面右侧预览窗口只会在当前目录下搜索会导致软件没有预览。解决这个办法有两个思路方法一在附加搜索路径中添加build路径如果不显示附件搜索路径把左下角“显示高级选项”勾选即可。方法二编译完成之后手动将build下的pdf复制到根目录下。前面不是创建了一个脚本吗完全可以在前面的脚本后面加上复制pdf文件的指令copy /Y build\%.pdf .\%.pdf其中/Y选项是指直接覆盖原文件且不提示。%.pdf即指编译输出得到的pdf文件因为我都设置脚本了方法二就非常合适加上我觉得到build下找pdf终究不方便复制到根目录下更加直观。所以最终选择了方法二最后脚本的内容如下所示。setTEX_FILE%~n1ifnot exist buildmkdirbuild pdflatex.exe-synctex1-interactionnonstopmode -output-directorybuild%TEX_FILE%if%errorlevel% neq0exit/b %errorlevel% pdflatex.exe-synctex1-interactionnonstopmode -output-directorybuild%TEX_FILE%if%errorlevel% neq0exit/b %errorlevel% copy /Y build\%TEX_FILE%.pdf .\%TEX_FILE%.pdf这里简单解释一下第一行是读取输入的参数并存储在变量TEX_FILE中if %errorlevel% neq 0 exit /b %errorlevel%这行语句是读取上一条指令的执行结果如果出错提前退出为什么要执行两次编译因为涉及引用或者参考文献等内容时就是需要执行两遍。其实软件的设置这里也可以选择是否执行两遍因为脚本里面就执行了两次所以这里就不需要勾选重复执行了。上面提到的都是pdflatexxelatex是一样的指令只需要修改一下编译的工具即可。3 bibtex无法找到中间文件按照上述配置完成之后如果有使用bibtex或者biblatex会出现报错“xxxxxx.aux”文件找不到。这里aux结尾的文件就是前面提到的中间文件现在被统一放到build文件夹下了导致找不到所以最简单的办法就是在命令里面修改bibtex的执行指令。4 设置指令执行的快捷键相信都遇到过这样的困扰文档A需要使用pdflatex而文档B需要使用xelatex但texstudio无法根据文档自动选择工具所以就需要一个快捷键可以直接执行对应的指令不再受软件当前的构建设置的影响。快捷键的设置方法如下所示可以根据自己的使用习惯进行配置。5 latexmk的使用其实相比上面这些将编译指令汇总到脚本中用latexmk要更加优雅。latexmk相比xelatex和pdflatex类似于make和gcc的关系即latexmk本身不提供文章编译的功能而是解析编译的配置文件解析完成之后最后还是调用xelatex或者pdflatex来编译。在使用时需要在项目目录下放置一个.latexmkrc文件如果没有配置文件则按照默认的配置进行编译。如果不想每个文件夹下都复制一份.latexmkrc文件可以在用户目录下放置一个全局的文件C:\Users\你的用户名\.latexmkrc但不推荐这样做还是尽量每个项目单独配置而且本地的配置优先级要高于全局配置。然后再来看看该怎么使用latexmk。首先回顾一下我们前面的目的中间文件全部放build文件夹便于直接删除pdf放在最外层方便找要展示编译过程不能像脚本一样只显示一个脚本执行失败于是先来看看texstudio如何配置。把默认编译器改为latexmk修改latexmk的默认编译指令中的-pdf参数这个表示使用pdflatex编译而且因为指令参数优先级比配置文件高所以即使配置文件中配置使用xelatex也将失效。【可选】如果想实现删除中间文件然后重新编译可以增加一条删除中间文件的用户指令如下图所示。但需要注意这条指令需要指定删除文件的路径所以下面日志文件pdf文件和命令都加上build路径。【更新】今天尝试在命令行直接执行latexmk .\main.tex发现始终无法编译成功但是使用xelatex编译是正常的。在仔细查看输出日志之后发现在指令刚开始执行的时候会提示使用了哪个编译器于是想到可能是里面的$pdf_mode设置错了于是挨个测试找到了规律:1:pdflatex; 2:latex; 3:latex; 4:lualatex; 5:xelatex当然我猜测可能不同的texlive版本对应的配置不同所以建议在自己的环境上挨个测试一下。最后是配置文件.latexmkrc的内容如下所示。$aux_dir build; # 其他中间文件输出目录 $out_dir build; # pdf输出目录 $pdf_mode 5; # 使用 xelatex其中 1:pdflatex, 2:latex, 3:latex, 4:lualatex $biber biber --output-directorybuild %R; # 如果有使用bibtex这里也需要切换一下路径才行 $success_cmd move build\%R.pdf .; # 编译完成后把pdf文件挪到外层 # 下面是设置哪些后缀的中间文件可以删除 generated_exts (generated_exts, aux, bbl, bcf, blg, log, out, run.xml, synctex.gz); push generated_exts, toc, lot, lof, nav, snm, vrb, fls; $clean_ext join , generated_exts;配置好latexmk之后只要有终端就可以对文件进行编译这样就完全不挑编辑器了完全可以使用自己顺手的软件编辑好之后打开终端直接编译即可而且不会出现中间文件和源码文件混杂的情况非常优雅。
返回列表