免责声明:这个问题与 TeXShop 有关,因为我必须帮助使用这个编辑器的人,但我不认识他们,因为我没有 Mac。不过,它可能对其他人有帮助。
目的如下:一个main.tex
主文件\include
和一些子文件,例如ChapOne.tex
和ChapTwo.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}
通过运行:
pdflatex main
,所有子文件均已包含;- 例如
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
语法来控制一切。