(TeXShop)运行主文件的子文件中的魔术注释,但仅包含此子文件

(TeXShop)运行主文件的子文件中的魔术注释,但仅包含此子文件

免责声明:这个问题与 TeXShop 有关,因为我必须帮助使用这个编辑器的人,但我不认识他们,因为我没有 Mac。不过,它可能对其他人有帮助。

目的如下:一个main.tex主文件\include和一些子文件,例如ChapOne.texChapTwo.tex

\begin{filecontents*}{ChapOne.tex}
\chapter{One}
\lipsum[1]
\end{filecontents*}
%
\begin{filecontents*}{ChapTwo.tex}
\chapter{Two}
\lipsum[8-21]
\end{filecontents*}
%
% main.tex file
\documentclass{report}
\usepackage{lipsum}
\begin{document}
\include{ChapOne}
\include{ChapTwo}
\end{document}

通过运行:

  1. pdflatex main,所有子文件均已包含;
  2. 例如pdflatex "\includeonly{ChapTwo}\input{main}",仅ChapTwo.tex包含子文件。

我正在寻找一种方法来从相应的子文件启动第二次运行。 (TeXShop) 魔术注释% !TEX root = main.tex很好,但不让我添加\includeonly命令。

因此我的问题是:是否还有其他神奇的评论,例如:

% !TEX program = pdflatex "\includeonly{ChapTwo}\input{main}"

或者更好的是,例如:

% !TEX program = pdflatex "\includeonly{\currentsubfile}\input{main}"

我可以用它来实现我的目标吗?

(我知道我可以通过课程实现更接近的目标standalone,但这需要document在子文件中添加完整的前言和环境,我想避免这种情况,特别是因为在实际用例中主文件和子文件不在同一个目录中,并且一些辅助文件(其中包括图形文件)的相对路径不会相同。)

答案1

除了我的评论之外,您还可以

例如我有IncludeOnly.engine一个~/Library/TeXShop/Engines

#!/bin/sh
basename="${1%.tex}"
line=$(head -n 1 $1)
re="\% root \= (.+)$"
if [[ $line =~ $re ]];
then pdflatex "\includeonly{$basename}\input{${BASH_REMATCH[1]}}";
else echo "bad subfile";
fi

225362.tex

\documentclass{article}
\begin{document}
    This is the root file.
    \include{225362-1}
    \include{225362-2}
    \include{225362-3}
\end{document}

225362-3.tex

% root = 225362
This is the third whatever.

够神奇了吗?你还可以创建一些% includealso = 225362-4语法来控制一切。

相关内容