在 TeXstudio 中,如何仅编译子文件?

在 TeXstudio 中,如何仅编译子文件?

这里存在几个与我类似的问题,但没有一个得到解答: 如何在 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键的数量取决于您定义的宏的数量。

现在你可以通过以下方式运行子文件

  1. 选择选项subfile-document.tex
  2. 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);

相关内容