![在 TeXstudio 中,如何仅编译子文件?](https://linux22.com/image/382593/%E5%9C%A8%20TeXstudio%20%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BB%85%E7%BC%96%E8%AF%91%E5%AD%90%E6%96%87%E4%BB%B6%EF%BC%9F.png)
这里存在几个与我类似的问题,但没有一个得到解答: 如何在 TeXStudio 中编译独立文件? Texstudio 和子文件包 编译子文件时出现问题(使用子文件包)
一旦检测到根文件是什么,我该如何让 TeXstudio 只编译我的子文件。目前,它总是编译根文件,而不仅仅是子文件,这会剥夺子文件包的实际功能!真烦人!
答案1
%!TeX root
您可以在开头使用一个神奇的注释subfile.tex
来覆盖 TXS 默认的 root 检测。这样,当您进入subfile.tex
并按下编译时,TXS将按要求将subfile.tex
其视为 root 并编译它,而不是。main.tex
举个例子,它可能看起来像这样:
子文件
%!TeX root = subfile
\documentclass[main.tex]{subfiles}
\begin{document}
Hello world.
\end{document}
这也涵盖在TXS 用户手册。
答案2
有某种解决方法可以使用。您可以编写一个小宏来使用 TeXstudio 中的类来运行单个文件subfiles
。实际上,宏并不关心 documentclass。
假设你有以下两个文件main-document.tex
\documentclass{article}
\usepackage{subfiles}
\begin{document}
My main file text.
\subfile{subfile-document}
\end{document}
和subfile-document.tex
\documentclass[main-document.tex]{subfiles}
\begin{document}
Some subfile text
\end{document}
现在你可以使用 TeXstudio 定义宏脚本。
%SCRIPT
var filename = app.getCurrentFileName();
var dir = filename.substring(0, filename.lastIndexOf("/"));
var proc = system("pdflatex " + filename, dir);
该宏执行以下操作:
- 获取当前选择的文件名
- 解压目录路径
- 调用
pdflatex <filename>
内部cmd
并将正确的目录传递给命令行
TeXstudio 默认使用宏的键绑定Shift+F1但您可以重新映射它们。Fx键的数量取决于您定义的宏的数量。
现在你可以通过以下方式运行子文件
- 选择选项
subfile-document.tex
卡 - 按Shift+F1运行宏。(TeXstudio 可能会要求您提供进一步的权限)
编辑:我创建了一个问题,询问如何使用宏脚本加载 pdf 文件https://github.com/texstudio-org/
编辑2您可以使用此更新的脚本通过内置的 pdf 查看器显示构建的 pdf。
%SCRIPT
function quote(filename){
return '"' + filename + '"';
}
var filename = app.getCurrentFileName();
var dir = filename.substring(0, filename.lastIndexOf("/"));
var pdflatexcmd = '../MikTex/texmfs/install/miktex/bin/x64/pdflatex.exe -src -interaction=nonstopmode '
var proc = system(pdflatexcmd + quote(filename), dir);
proc.waitForFinished();
var pdfFilename = quote(filename.replace(/\.[^/.]+$/, ".pdf"));
app.runInternalCommand("txs:///view-pdf-internal" , "--embedded", pdfFilename);